在设计数据密集型应用程序中,Martin引入了一种名为LSM-tree的数据结构。
主要有三个部分:内存备忘录(通常是红黑树)、内存中的稀疏索引和磁盘上的SSTables (又名段)。他们像这样一起工作:
从图2中可以看出,键是在段中排序的,但是键是而不是段之间的排序。这让我想知道:我们如何维护稀疏索引s.t。索引中的键偏移量增加了吗?
发布于 2021-09-08 13:22:05
一种典型的方法是在每个段文件中有一个单独的索引,并且这个索引是在压缩/合并段文件期间重新生成的。当读取键时,我们必须检查可能包含该键的多个当前段文件,并返回在最近的这些段中出现的值。
仅仅通过查看索引就无法判断某个特定段是否包含特定的键。为了避免对每个段进行磁盘读取,常见的优化方法是为每个段提供一个布卢姆滤波器 (或类似的数据结构,如布库滤波器),它总结了该段中包含的键。这允许读取操作只对那些实际包含所需键的段进行磁盘读取(由于Bloom筛选器误报而产生不必要的磁盘读取的可能性很小)。
https://stackoverflow.com/questions/69103575
相似问题