1 前言
这是我参与「第四届青训营」笔记创作活动的第32天,在「LSMT 存储引擎浅析」课程中讲师讲解了LSMT相关的一些原理和应用,但并未过多涉及B+树与LSMT两者之间的原理和应用对比,为了对相关知识有更深入的理解,在上一篇笔记中我们讨论了B+树与LSMT的具体原理差异和应用场景的不同,并对“增删查改”中的“增删改”做了详细讨论。在这篇笔记中,我们将结合《操作系统》中的核心知识——快表机制,来讨论一下“查找”的操作,两者思路相通,互相验证。同时,笔记还补充了建立布隆过滤器的SSTable相关知识和快表的具体机制思想,可以加深我们的理解和思考。此外,笔记还讨论了著名的快表、页高速缓存以及虚拟内存技术的原理——局部性原理,来扩展相关知识。
2 LSMT查找与快表
2.1 LSMT查找
由于Memtable就在内存中,所以当需要查找一个元素时,我们首先会查找Memtable,这样不需要额外读取文件。如果在Memtable当中没有找到该元素,再顺序查找SSTable,而SSTable当中的数据是顺序存储的,使用二分查找算法,查找的效率也很高,也可参见笔者第三篇笔记《大数据存储中的查找与排序——一个更为精彩优美的查找算法》中的查找算法。
但是,由上一篇笔记可知,随着时间的推移SSTable的数量会越来越多,而我们必须要顺序查找,当SSTable数量很大的时显然会影响查找的速度。为了解决这个问题,我们引入了「布隆过滤器」进行优化——对每一个SSTable建立一个布隆过滤器,其可以快速地判断某个元素是否在某个SSTable当中。
图1 建立了布隆过滤器的SSTable
不过,我们需要明确以下两点:
- 布隆过滤器判断某个元素不存在,是一定准确的;
- 但是,判断某个元素存在,可能有一个很小的失误几率,这个失误率是可以控制的,我们可以通过设置合理的参数,使得失误率足够低。
2.2 快表
在操作系统的内存管理部分,我们知道若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存:第一次是访问页表,确定所存取的数据或指令的物理地址;第二次是根据该地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半。为此,我们在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器一「快表」(相联存储器TLB),用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,主存中的页表常称为慢表。我们可以注意到,2.1小节中的查找方式和《操作系统》中的快表思想极其相似,快表思想如下:
- 我们首先去快表中查找某个页面,若找到,则根据快表中给出的地址去内存中查找该页面,此时仅访问一次内存;
- 若未在快表中找到,则去内存中的页表查找,若找到,则根据内存中页表给出的地址再次进入内存找到该页面,此时访问两次内存。
图2 具有快表的地址变换机构
可以看到,这里Memtable的存在就类似于快表,不过Memtable是常驻于内存,而快表TLB则是一个单独的寄存器,只有页表存在于内存当中。
一般快表的命中率可达90%以上,这样分页带来的速度损失就可降低至10%以下。其中,快表的有效性基于著名的「局部性原理」,我们将在下文进行解释。
3.局部性原理
快表、页高速缓存以及虚拟内存技术从广义上讲,都属于高速缓存技术。这个技术所依赖的原理就是局部性原理。局部性原理既适用于程序结构,也适用于数据结构。
局部性原理表现在以下两个方面:
- 时间局部性。程序中的某条指令一旦执行,不久后该指令可能再次执行;某数据被访问过,不久后该数据可能再次被访问。产生时间局部性的典型原因是程序中存在着大量的循环操作。时间局部性通过将近来使用的指令和数据保存到高速缓冲存储器中,并使用高速缓存的层次结构实现。
- 空问局部性。一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问,即程序在一一段时间内所访问的地址可能集中在一定的范围之内,因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。空间局部性通常使用较大的高速缓存。并将预取机制集成到高速缓存控制逻辑中实现。
4.总结
在上一篇笔记中,我们讨论了B+树与LSMT的具体原理差异和应用场景的不同,并对“增删查改”中的“增删改”做了详细讨论。在这篇笔记中,我们结合了《操作系统》中的核心知识——快表机制,讨论了“查找”的操作,两者思路相通,互相验证。同时,笔记补充了建立布隆过滤器的SSTable相关知识和快表的具体机制思想,可以加深我们的理解和思考。此外,笔记还讨论了著名的快表、页高速缓存以及虚拟内存技术的原理——局部性原理,来扩展相关知识。
5.参考资料
- 详解Hbase底层的数据结构——LSMT[OL]www.isolves.com/it/sjk/bk/2…
- Bryant,R.E.等. 深入理解计算机系统[M]. 北京:机械工业出版社,2016.
- 王道论坛组. 2022年操作系统考研复习指导[M]. 北京:电子工业出版社,2022.