Mysqlplc的工作原理是什么么

Java1234官方群22:
Java1234官方群22:
MySQL运维内参:MySQL、Galera、Inception核心原理与最
MySQL运维内参:MySQL、Galera、Inception核心原理与最佳实践 PDF 下载
提醒:假如百度云分享链接失效,请联系站长,我会补上的。
MySQL运维内参:MySQL、Galera、Inception核心原理与最佳实践 PDF 下载
转载自:http://download.csdn.net/download/floatdellab/9895419
本站整理下载:链接: 密码:fpy5
相关截图:
(责任编辑:小锋)
------分隔线----------------------------
《Oracle从入门到精通》PDF 下载...
《让Oracle跑得更快—Oracle 10g性能分析与优化思路》PDF 下载...
《SQL 必知必会(第3版)》PDF 下载...
《收获,不止Oracle》PDF 下载...
《Oracle Database 11g & MySQL 5.6开发手册》PDF 下载...
《深入浅出——SQL Server 2005开发、管理与应用实例》PDF 下载...
关注Java1234微信公众号
免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除,如果喜欢请购买正版资源!原作者如果认为本站侵犯了您的版权,请QQ告知,我们会立即删除!MySQL&Proxy&Spy&工作原理
一. 基本原理 & &
&MySQL Proxy处于MySQL Client和MySQL
Server之间,通过截断、改变并转发客户端的查询请求等然后代理和后端数据库之间的通信来实现其主要功能。
网络通信工作流程
&(1).连接阶段
1.客户端主动连接(connection())服务端,tcp三次握手成功建立tcp连接。
2.服务端向客户端发起认证初始化连接请求(协议为普通应用层协议,后面的文章将有介绍)
3.客户端向服务器发送登陆认证信息
4.服务端向客户端返回认证结果
&(2).Query 阶段
1.客户端向服务器发送查询请求
2.服务器向客户端返回查询结果(可能有三种 option)
三. MySQL Proxy Spy 的介入过程
上面二所述的是正常的
MySQL网络通信过程,Spy需要做的就是介入这个过程,在这里,Spy充当两个角色,从客户端来看,它是作为服务器,从真正的MySQL服务端来看,Spy又是作为一个客户端。但是对于真正的客户端和服务器来说,Spy是透明的,它干的事情客户端和服务端都不知道。
& 1.工作流程
&(1).MySQL
Proxy以服务器的身份接受客户端请求,根据对Spy的配置对这些客户端的请求进行分析处理
& &(2).以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端
&2.工作方式
& & & MySQL
Proxy通过lua脚本来控制连接转发的机制。主要的函数都是配合MySQL
Protocol各个过程的。通过底层Spy提供的接口,利用上层的Lua制定转发规则来操控Spy,来达到扩展的目的。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。第一章 2016最新老男孩MySQL数据库-大集合
第二章 老男孩教育-MySQL数据库多实例安装及优化实战
第三章 老男孩教育-MySQL数据库管理命令实践(上)
第四章 老男孩教育-MySQL数据库管理命令实践(中)
第五章 老男孩教育-MySQL数据库管理SQL语句优化
第六章 老男孩教育-MySQL数据库管理命令实践(下)
第七章 老男孩教育-MySQL数据库备份与恢复实战讲解
第八章 老男孩教育-MySQL数据库三种日志介绍及案例实践
第九章 老男孩教育-MySQL数据库两个增量恢复企业案例实践
第十章 老男孩教育-MySQL数据库主从复制原理及实践讲解
第十一章 老男孩教育-MySQL数据库主从复制企业级深度实践讲解
第十二章 老男孩教育-MySQL数据库事务和引擎知识讲解
第十三章 老男孩教育MySQL数据库中文乱码原理-修改字符集-解决乱码
第十四章 老男孩教育-MySQL数据库安全-流程-制度-企业实践精讲
第十五章 老男孩教育-MySQL数据库及中间件及高可用技术课外分享
点击获取更多
没有更多了
加入学习后,就可以记笔记了
同学的问题
点击获取更多
没有更多了
加入学习后,就可以提问题了
Loading...本文来自作者&默默&在&GitChat&上分享 「深入理解 MySQL 底层实现」,「阅读原文」查看交流实录。「文末高能」编辑 | 哈比MySQL 的常用引擎1. InnoDBInnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件。InnoDB 中存在表锁和行锁,不过行锁是在命中索引的情况下才会起作用。InnoDB 支持事务,且支持四种隔离级别(读未提交、读已提交、可重复读、串行化),默认的为可重复读;而在 Oracle 数据库中,只支持串行化级别和读已提交这两种级别,其中默认的为读已提交级别。2. MyisamMyisam 的存储文件有三个,后缀名分别是 .frm、.MYD、MYI,其中 .frm 是表的定义文件,.MYD 是数据文件,.MYI 是索引文件。Myisam 只支持表锁,且不支持事务。Myisam 由于有单独的索引文件,在读取数据方面的性能很高 。3. 存储结构InnoDB 和 Myisam 都是用 B+Tree 来存储数据的。MySQL 的数据、索引存储结构1. 数据存储的原理(硬盘)信息存储在硬盘里,硬盘是由很多的盘片组成,通过盘片表面的磁性物质来存储数据。把盘片放在显微镜下放大,可以看到盘片表面是凹凸不平的,凸起的地方被磁化,代表数字 1,凹的地方没有被磁化,代表数字 0,因此硬盘可以通过二进制的形式来存储表示文字、图片等的信息。硬盘有很多种,但是都是由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部分组成。所有的盘片都固定在一个旋转轴上,这个轴即盘片主轴。所有的盘片之间是绝对平行的,在每个盘片的盘面上都有一个磁头,磁头与盘片之间的距离比头发丝的直径还小。所有的磁头连在一个磁头控制器上,由磁头控制器负责各个磁头的运动,磁头可沿盘片的半径方向移动,实际上是斜切运动,每个磁头同一时刻必须是同轴的,即从正上方往下看,所有磁头任何时候都是重叠的。由于技术的发展,目前已经有多磁头独立技术了,在此不考虑此种情况。盘片以每分钟数千转到上万转的速度在高速运转,这样磁头就能对盘片上的指定位置进行数据的读写操作。由于硬盘是高精密设备,尘埃是其大敌,所以必须完全密封。2. 数据读写的原理硬盘在逻辑上被划分为磁道、柱面以及扇区。磁头靠近主轴接触的表面,即线速度最小的地方,是一个特殊的区域,它不存放任何数据,称为启停区或者着陆区,启停区外就是数据区。在最外圈,离主轴最远的地方是 “0” 磁道,硬盘数据的存放就是从最外圈开始的。在硬盘中还有一个叫 “0” 磁道检测器的构件,它是用来完成硬盘的初始定位。盘面硬盘的盘片一般用铝合金材料做基片,硬盘的每一个盘片都有上下两个盘面,一般每个盘面都会得到利用,都可以存储数据,成为有效盘面,也有极个别的硬盘盘面数为单数。每一个这样的有效盘面都有一个盘面号,按顺序从上至下从 0 开始编号。在硬盘系统中,盘面号又叫磁头号,因为每一个有效盘面都有一个对应的读写磁头,硬盘的盘片组在 2-14 片不等,通常有 2-3 个盘片。磁道磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道。磁道从外向内从 0 开始顺序编号,硬盘的每一个盘面有 300-1024 个磁道,新式大容量硬盘每面的磁道数更多,信息以脉冲串的形式记录在这些轨迹中,这些同心圆不是连续记录数据,而是被划分成一段段的圆弧。这些圆弧的角速度一样,由于径向长度不一样,所以线速度也不一样,外圈的线速度较内圈的线速度大,即同样的转速度下,外圈在同样时间段里,划过的圆弧长度要比内圈划过的圆弧长度大。每段圆弧叫做一个扇区,扇区从 1 开始编号,每个扇区中的数据作为一个单元同时读出或写入。磁道是看不见的,只是盘面上以特殊形式磁化了的一些磁化区,在磁盘格式化时就已规划完毕。柱面所有盘面上的同一磁道构成一个圆柱,通常称作柱面。每个圆柱上的磁头由上而下从 0 开始编号,数据的读 / 写按柱面进行,即磁头读 / 写数据时首先在同一柱面内从 0 磁头开始进行操作,依次向下在同一柱面的不同盘面即磁头上进行操作。只有在同一柱面所有的磁头全部读 / 写完毕后磁头才转移到下一柱面(同心圆再往里的柱面),因为选取磁头只需要通过电子切换即可,而选取柱面则必须机械切换,电子切换相当快,比在机械上的磁头向邻近磁道移动快得多。所以,数据的读 / 写按柱面进行,而不按盘面进行,也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据,读数据也按照这种方式进行,这样就提高了硬盘的读 / 写效率。扇区操作系统以扇区形式将信息存储在硬盘上,每个扇区包括 512 个字节的数据和一些其他信息,一个扇区有两个主要部分:存储数据地点的标识符和存储数据的数据段。标识符就是扇区头标,包括组成扇区三维地址的三个数字:盘面号,柱面号,扇区号(块号)。数据段可分为数据和保护数据的纠错码(ECC)。在初始准备期间,计算机用 512 个虚拟信息字节(实际数据的存放地)和与这些虚拟信息字节相应的 ECC 数字填入这个部分。3. 访盘请求完成过程1)确定磁盘地址(柱面号,磁头号,扇区号),内存地址(源 / 目):当需要从磁盘读取数据的时候,系统会将数据的逻辑地址传递个磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。2)为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点:A. 首先必须找到柱面,即磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间。B. 然后目标扇区旋转到磁头下,即磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间。3)即一次访盘请求(读 / 写)完成过程由三个动作组成:A. 寻道(时间):磁头移动定位到指定磁道。B. 旋转延迟(时间):等待指定扇区从磁头下旋转经过。C. 数据传输(时间):数据在磁盘与内存之间的实际传输。4. 磁盘的读写原理系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第 1 磁道的第一磁头下的所有扇区,然后是同一柱面的下一个磁头……一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。系统也以相同的顺序读出数据,读出数据时通过告诉磁盘控制器要读出扇区所在柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。5. 减少 I/O 的预读原理由于存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费的时间,磁盘的存取速度往往是主存的几百分之一。因此,为了提高效率,要尽量减少磁盘的 I/O。磁盘往往不是严格地按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:当一个数据被用到时,其附近的数据一般来说也会被马上使用。程序运行期间所需要的数据通常比较集中。由于磁盘顺序读取的效率很高(不需要寻道时间,只需要很少的旋转时间),因此对于具有局部性的程序来说,预读可以提高 I/O 效率。预读的长度一般为页(Page)的整数倍。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储分割为连续的大小相等的块。每个存储块称为一页(在许多操作系统中,页的大小通常为 4k),主存和磁盘以页为单位交换数据,当程序要读取的数据不在主存中时,会触发一个缺页异常。此时系统会向磁盘发出读盘信息,磁盘会找到数据的起始位置并向后连续读取一页或几页的数据载入内存中,然后异常返回,程序继续运行。6. MySQL 的索引索引是一种用来实现 MySQL 高效获取数据的数据结构。我们通常所说的在某个字段上建索引,意思就是让 MySQL 对该字段以索引这种数据结构来存储,然后查找的时候就有对应的查找算法。建索引的根本目的是为了查找的优化,特别是当数据很庞大的时候,一般的查找算法有顺序查找、折半查找、快速查找等。但是每种查找算法都只能应用于特定的数据结构之上,例如顺序查找依赖于顺序结构,折半查找通过二叉查找树或红黑树实现二分搜索。因此在数据之外,数据库系统还维护着满足特定查找算法的数据结构。这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。7. MySQL 的 B+Tree目前大多数数据库系统及文件系统都采用 B-Tree 或其变种 B+Tree 作为索引结构。B+ 树索引是 B+ 树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+ 树中的 B 代表平衡,而不是二叉。因为 B+ 树是从最早的平衡二叉树演化而来的。B+ 树是由二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree)逐步优化而来。二叉查找树:左子树的键值小于根的键值,右子树的键值大于根的键值。AVL 树:平衡二叉树(AVL 树)在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为 1。平衡多路查找树(B-Tree):为磁盘等外存储设备设计的一种平衡查找树。系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一磁盘块中的数据会被一次性读取出来,而不是按需读取。InnoDB 存储引擎使用页作为数据读取单位,页是其磁盘管理的最小单位,默认 page 大小是 16k。系统的一个磁盘块的存储空间往往没有这么大,因此 InnoDB 每次申请磁盘空间时都会是若干地址连续磁盘块来达到页的大小 16KB。InnDB 在把磁盘数据读入到磁盘时会以页为基本单位,在查询数据时如果一个页中的每条数据都能助于定位数据记录的位置,这将会减少磁盘 I/O 的次数,提高查询效率。B-Tree 结构的数据可以让系统高效的找到数据所在的磁盘块。为了描述 B-Tree,首先定义一条数据记录为一个二元组 [key, data],key 为记录的键值,对于不同数据记录,key 是互不相同的;data 为数据记录除 key 外的数据。那么 B-Tree 是满足下列条件的数据结构:d 为大于 1 的一个正整数,称为 B-Tree 的度。h 为一个正整数,称为 B-Tree 的高度。每个非叶子节点由 n-1 个 key 和 n 个指针组成,其中 d&=n&=2d。每个叶子节点最少包含一个 key 和两个指针,最多包含 2d-1 个 key 和 2d 个指针,叶节点的指针均为 null 。所有叶节点具有相同的深度,等于树高 h。key 和指针互相间隔,节点两端是指针。一个节点中的 key 从左到右非递减排列。所有节点组成树结构。每个指针要么为 null,要么指向另外一个节点。如果某个指针在节点 node 最左边且不为 null,则其指向节点的所有 key 小于 v(key1),其中 v(key1) 为 node 的第一个 key 的值。如果某个指针在节点 node 最右边且不为 null,则其指向节点的所有 key 大于 v(keym),其中 v(keym) 为 node 的最后一个 key 的值。如果某个指针在节点 node 的左右相邻 key 分别是 keyi 和 keyi+1 且不为 null,则其指向节点的所有 key 小于 v(keyi+1) 且大于 v(keyi)。B-Tree 中的每个节点根据实际情况可以包含大量的关键字信息和分支,例:每个节点占用一个盘块的磁盘空间,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。两个关键词划分成的三个范围域对应三个指针指向的子树的数据的范围域。以根节点为例,关键字为 17 和 35,P1 指针指向的子树的数据范围为小于 17,P2 指针指向的子树的数据范围为 17~35,P3 指针指向的子树的数据范围为大于 35。模拟查找关键字 29 的过程:根据根节点找到磁盘块 1,读入内存。【磁盘 I/O 操作第 1 次】比较关键字 29 在区间(17,35),找到磁盘块 1 的指针 P2。根据 P2 指针找到磁盘块 3,读入内存。【磁盘 I/O 操作第 2 次】比较关键字 29 在区间(26,30),找到磁盘块 3 的指针 P2。根据 P2 指针找到磁盘块 8,读入内存。【磁盘 I/O 操作第 3 次】在磁盘块 8 中的关键字列表中找到关键字 29。MySQL 的 InnoDB 存储引擎在设计时是将根节点常驻内存的,因此力求达到树的深度不超过 3,也就是说 I/O 不需要超过 3 次。分析上面过程,发现需要 3 次磁盘 I/O 操作,和 3 次内存查找操作。由于内存中的关键字是一个有序表结构,可以利用二分法查找提高效率。而 3 次磁盘 I/O 操作是影响整个 B-Tree 查找效率的决定因素。B-Tree 相对于 AVLTree 缩减了节点个数,使每次磁盘 I/O 取到内存的数据都发挥了作用,从而提高了查询效率。B+Tree 是在 B-Tree 基础上的一种优化,使其更适合实现外存储索引结构,InnoDB 存储引擎就是用 B+Tree 实现其索引结构。在 B-Tree 中,每个节点中有 key,也有 data,而每一个页的存储空间是有限的,如果 data 数据较大时将会导致每个节点(即一个页)能存储的 key 的数量很小。当存储的数据量很大时同样会导致 B-Tree 的深度较大,增大查询时的磁盘 I/O 次数,进而影响查询效率。在 B+Tree 中,所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储 key 值信息,这样可以大大加大每个节点存储的 key 值数量,降低 B+Tree 的高度。B+Tree 在 B-Tree 的基础上有两点变化:数据是存在叶子节点中的;数据节点之间是有指针指向的。由于 B+Tree 的非叶子节点只存储键值信息,假设每个磁盘块能存储 4 个键值及指针信息,则变成 B+Tree 后其结构如下图所示:通常在 B+Tree 上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。因此可以对 B+Tree 进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。8. Myisam 中的 B+TreeMyisam 引擎也是采用的 B+Tree 结构来作为索引结构。由于 Myisam 中的索引和数据分别存放在不同的文件,所以在索引树中的叶子节点中存的数据是该索引对应的数据记录的地址,由于数据与索引不在一起,所以 Myisam 是非聚簇索引。9. InnoDB 中的 B+TreeInnoDB 是以 ID 为索引的数据存储。采用 InnoDB 引擎的数据存储文件有两个,一个定义文件,一个是数据文件。InnoDB 通过 B+Tree 结构对 ID 建索引,然后在叶子节点中存储记录。若建索引的字段不是主键 ID,则对该字段建索引,然后在叶子节点中存储的是该记录的主键,然后通过主键索引找到对应的记录。MySQL 的相关优化1. MySQL 性能优化:组成、表的设计开启查询缓存。避免某些 SQL 函数直接在 SQL 语句中使用,从而导致 Mysql 缓存失效。避免画蛇添足。目的是什么就取什么,例如某个逻辑是只需要判断是否存在女性,若是查到了一条即可,勿要全部都查一遍,此时要善用 limit。建合适的索引。所以要建在合适的地方,合适的对象上。经常操作 / 比较 / 判断的字段应该建索引。字段大小合宜。字段的取值是有限而且是固定的,这种情况下可以用 enum,IP 字段可以用 unsigned int 来存储。表的设计。垂直分割表,使得固定表与变长表分割,从而降低表的复杂度和字段的数目。2. SQL 语句优化:避免全表扫描建索引:一般在 where 及 order by 中涉及到的列上建索引,尽量不要对可以重复的字段建索引。尽量避免在 where 中使用 !(&&)或 or,也不要进行 null 值判断。尽量避免在 where 中对字段进行函数操作、表达式操作。尽量避免使用 like- %,在此种情况下可以进行全文检索。近期热文《》《》《》《》《》「阅读原文」看交流实录,你想知道的都在这里
MySQL运行原理与基础架构细说
1.MySQL基础
MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL
AB公司,最早是在2001年MySQL3.23进入到管理员的视...
MySQL运行机制原理&架构
1.MySQL知识普及:
MySQL是一个开放源代码的关系数据库管理系统。
MySQL架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它...
Mysql执行查询的原理
MySQL执行路径
从图中可以看出基本步骤为:
1.客户端发送一条查询给服务器。
2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。
3。服务器端进行S...
Mysql工作原理介绍
Mysql 工作原理图Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。 mysql原理图各个组件说明:1. connectors
与其他编程语言中的sql 语句进行交互,如php、...
mysql 整理之mysql的原理和存储引擎
mysql 面试 整理之mysql的原理和存储引擎
本文来自作者 默默 在 GitChat 上分享 「深入理解 MySQL 底层实现」,「阅读原文」查看交流实录。「文末高能」编辑 | 哈比MySQL 的常用引擎1. InnoDBInnoDB 的存储文件...
一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。你可以自己谷歌/百度...
MySQL逻辑架构MySQL逻辑架构整体分为三层 :1& 客户端 : 并非MySQL所独有,诸如 : 连接处理、授权认证、安全等功能均在这一层处理2& 核心服务 : 包括查...
没有更多推荐了,关注51Testing
MySQL数据库原理
发表于: 10:06 &作者:卡夫卡不卡 & 来源:51Testing软件测试网采编
推荐标签:
  我们知道,数据是信息的载体——一种我们约定了如何解释的符号。在计算机系统中,最常见的应该是文本数据。我们用它记录配置信息,写日志,等等。而在应用程序中,按一定的数据结构来组织数据的方式叫做管理系统(DBMS)。数据库就是把数据按照一定的规则,有效的组织存放,以提供更高效、更便捷的数据访问和处理。要理解数据库原理,并使用数据库,需要理解三点内容:1&数据库的数据组织的方式;2&数据库的逻辑架构及物理实现;3&数据库客户端的操作方法。也许,对于使用数据库来说,只需要掌握最后一点,即操作方法就可以了。但是,一个只能掌握具体操作,而无法理解领会为何要这么操作,及这些操作是为何操作的人,不过是个熟练的技术工。因为具体的操作,是一项技能,是“术”的层面的东西;而原理是“道”的层面的东西。一门技术,可能兴盛,也可能被淘汰,但原理是不会过时和被淘汰的。比如,8086处理器的指令,可以多数已经过时了,但是它的设计思想,确实永远不会过时的。  先说说数据库的数据结构。我们日常所用的文本文件,是按字节顺序存储的。要找到一个文本中的某些特定的信息,必须通过文本流的方式,从头到尾一字节一字节的将文本扫描。这种效率,平时写写脚本,理解练习I/O原理是可以的。但实际应用中,显然是不现实的。比如的几亿人的QQ号的数据,要是使用纯文本来存储,每个人登录时,岂不是都要将整个文件扫描一次?  在数据库中,用到的数据结构是——B-Tree。要了解B-Tree,我们先来了解一些二叉查找树(Binary Search Tree)。二叉查找树是一种查找高效的数据结构。二叉查找树有三个特点:1&每个节点最多只有两个子树;2&左子树的值总是小于父节点,右子树的值总是大于父节点;3&在二叉查找树中找到一个数据,平均只需要logN次比较。  二叉查找树图例  图1——二叉查找树  但是二叉查找树因为每一层最多只能有两个节点,大量的数据存放会导致层次太深。而数据的实际存放是通过文件系统存储在硬盘上的。我们知道,硬盘这个I/O外设的访问速度和内存的速度比起来,差的可是N多数量级啊。所以,访问硬盘的次数越少越好。而二叉查找树的过深的层次结构导致访问硬盘的次数剧增。所以,才有了B-Tree这个数据结构,用以组织数据库中的数据。B-Tree也有三个特点:1&一个节点可以容纳多个值;2&除非本层数据已经填满,否则不会开辟新的层;3&子节点中的值,与父节点中的值,有严格的大小对应关系。如下图:  B-Tree 图例  图2——B-Tree  因此,当使用B-Tree时,只需要2层就可以实现1万的数据存储。而使用二叉查找树则需要10层。同时,B-Tree具备二叉查找树的高效查找特性。当进行查找操作时,使用B树只需2次读取硬盘进行比较就可以了。而使用二叉查找树则需要10次读取硬盘进行比较。所以,B树的效率更高。  说了数据库的数据结构,在说说后面两个内容。以用得比较广泛的LAMP开源轻架构中的为例,说说MySQL的逻辑结构。MySQL由Client和Server构成,是典型的C/S架构。1&在实际应用中,充当Client通常是第三方应用(, PHP, Perl等)中的MySQL驱动。2&与Client通信的部分叫做连接池(connection pool),主要负责“Client”与Server的连接以及验证等。以本地socket通信和TCP/IP通信实现连接与验证。3&然后是核心层,负责提供接口和查询缓存,以及查询的优化和部分内部函数的执行。4&再后是存储引擎层,真正负责数据的存储和提取。有多种存储引擎,提供不同的功能。5&最后是数据存储层,真正把数据存储在文件系统中。  
搜索风云榜
51Testing官方微信
51Testing官方微博
测试知识全知道}

我要回帖

更多关于 雷达的工作原理是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信