那么,一个B+树的节点中到底存多少个元素合适呢?
这里有必要先来了解一下磁盘IO的原理。
磁盘I/O的本质
磁盘分类
机械硬盘
从上面的原理我们也能知道,固态硬盘比机械硬盘快得最根本最简单的原因就是:固态硬盘使用的电路进行读写,而机械硬盘使用的机械运动。
其实不管是机械硬盘还是固态硬盘都是存储介质,真正控制读写的是操作系统。
机械硬盘存储原理
磁盘立体结构图
一个磁盘由大小相同且同轴的圆形盘片组成,磁盘可以转动(各个磁盘必须同步转动)。在磁盘的一侧有磁头支架,磁头支架固定了一组磁头,每个磁头负责存取一个磁盘的内容。磁头不能转动,但是可以沿磁盘半径方向运动(实际是斜切向运动),每个磁头同一时刻也必须是同轴的,即从正上方向下看,所有磁头任何时候都是重叠的(不过目前已经有多磁头独立技术,可不受此限制)。
磁盘片结构图
盘片被划分成一系列同心环,圆心是盘片中心,每个同心环叫做一个磁道,所有半径相同的磁道组成一个柱面。磁道被沿半径线划分成一个个小的段,每个段叫做一个扇区,每个扇区是磁盘的最小存储单元,大小一般为521字节。
磁盘读取数据逻辑
当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点,磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间,然后磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间。
固态硬盘存储原理
固态硬盘(Solid State Drives),用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也完全与普通硬盘一致。
控制单元
每个SSD都有一个控制器(controller)将存储单元连接到电脑,主控器可以通过若干个通道(channel)并行操作多块存储单元
存储单元
一个Flash Page由两个或者多个Die(又称chips组成),这些Dies可以共享I/O数据总线和一些控制信号线。一个Die又可以分为多个Plane,而每个Plane又包含多个Block,每个Block又分为多个Page。以Sam
sung 4GBFlash为例,一个4GB的Flash Page由两个2GB的Die组成,共享8位1/0数据总线和一些控制信号线。每个Die由4个Plane组成,每个Plane包含2048个Block,每个Block又包含64个4KB大小的Page
访问SSD的原理
Host是通过LBA(Logical BlockAddress,逻辑地址块)访问SSD的,每个LBA代表着一个Sector(一般为512B大小),操作系统一般以4K为单位访问SSD,我们把Host访问SSD的基本单元叫用户页(Host Page)。而在SSD内部,SSD主控与Flash之间是Flash Page为基本单元访问Flash的,我们称Flash Page为物理页(PhysicalPage)。Host每写入一个Host Page,SSD主控会找一个Physical Page把Host数据写入,SSD内部同时记录了这样一条映射(Map)。有了这样一个映射关系后,下次Host需要读某个Host Page时,SSD就知道从Flash的哪个位置把数据读取上来。
局部性原理与磁盘预读
计算机科学中著名的局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。
所以操作系统为了提高效率,读取数据时往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,操作系统也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这里的一定长度叫做页,也就是操作系统操作磁盘时的基本单位。一般操作系统中一页的大小是4Kb。
总结
所以,回到我们的问题,B+树中一个节点到底存多少个元素合适?,其实也可以换个角度来思考B+树中一个节点到底多大合适?
答案是:B+树中一个节点为一页或页的倍数最为合适。因为如果一个节点的大小小于1页,那么读取这个节点的时候其实也会读出1页,造成资源的浪费;如果一个节点的大小大于1页,比如1.2页,那么读取这个节点的时候会读出2页,也会造成资源的浪费;所以为了不造成浪费,所以最后把一个节点的大小控制在1页、2页、3页、4页等倍数页大小最为合适。
本文给大家讲解的内容是千万数据量,掌握MySQL索引底层原理将会拯救世界(2)
- 下篇文章给大家讲解的是千万数据量,掌握MySQL索引底层原理将会拯救世界(3);
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!