局部性原理与磁盘预读角度解析B树的优势

局部性原理

cpu访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续空间。

计算机读取数据层次:寄存器、一级缓存、二级缓存、三级缓存、内存、磁盘

  • 时间局部性原理 一个数据项正在被访问,则它在近期很可能会被再次访问
  • 空间局部性原理 最近的将来可能用到的数据与现在正在使用的信息在空间地址上是相近的
  • 顺序局部性原理 典型程序中,大部分指令是顺序进行的

磁盘预读原理

cpu 、cache、主内存、磁盘处理速度依次下降

磁盘读取时间:寻道时间、旋转时间、传输时间,为减少IO操作,计算机系统一般采取预读的方式,预读的长度一般为页的整数倍,主存与磁盘以页为单位交换数据;每次读取和存取的最小单元为一页,当一个数据被用时,其附近的数据也通常会马上被使用;程序运行期间,磁盘顺序读取效率很高,所以只是读取一个字节,也会读取一页的数据。

为何使用B-Tree

红黑树、平衡树也可实现索引,索引本身也比较大,需要以索引文件的形式存储在磁盘上,则在索引查找的过程中会产生磁盘IO的消耗,所以索引结构组织要尽量减少查找过程中磁盘IO的存取次数;数据库系统利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点需要一次IO就可以完全载入;新建节点时,直接申请一个页的空间,保证一个节点物理上也存储在一个页里,计算机存储分配是按页对齐的,则一个node只需一次IO,b-tree一次检索最多需要h-1次IO;红黑树深度过大,逻辑上相近的节点(父子),物理上可能很远,无法利用局部性原理。

posted @ 2021-06-08 19:52  简直😓  阅读(321)  评论(0编辑  收藏  举报