保证缓存与数据库的双写一致性?
这是一个3叉(只是举例,真实会有很多叉)的BTree结构图,每一个方框块我们称之为一个磁盘块或者叫做一个block块,这是操作系统一次IO往内存中读的内容,一个块对应四个扇区,紫色代表的是磁盘块中的数据key,黄色代表的是数据data,蓝色代表的是指针p,指向下一个磁盘块的位置。 来模拟下查找key为29的data的过程: 1、根据根结点指针读取文件目录的根磁盘块1。【磁盘IO操作1次】 2、磁盘块1存储17,35和三个指针数据。我们发现17<29<35,因此我们找到指针p2。 3、根据p2指针,我们定位并读取磁盘块3。【磁盘IO操作2次】 4、磁盘块3存储26,30和三个指针数据。我们发现26<29<30,因此我们找到指针p2。 5、根据p2指针,我们定位并读取磁盘块8。【磁盘IO操作3次】 6、磁盘块8中存储28,29。我们找到29,获取29所对应的数据data。 由此可见,BTree索引使每次磁盘I/O取到内存的数据都发挥了作用,从而提高了查询效率。 但是有没有什么可优化的地方呢? 我们从图上可以看到,每个节点中不仅包含数据的key值,还有data值。而每一个页的存储空间是有限的,如果data数据较大时将会导致每个节点(即一个页)能存储的key的数量很小,当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率。 B+Tree索引
B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构。在B+Tree中,所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储key值信息,这样可以大大加大每个节点存储的key值数量,降低B+Tree的高度。 (编辑:衡水站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |