LSM tree
这里需要关注一个重点,LSM树(Log-Structured-Merge-Tree)正如它的名字一样,LSM树会将所有的数据插入、修改、删除等操作记录(注意是操作记录)保存在内存之中,当此类操作达到一定的数据量后,再批量地顺序写入到磁盘当中。LSM树的特点是:采用顺序写,提高了写的性能。
因此当MemTable达到一定大小flush到持久化存储变成SSTable后,在不同的SSTable中,可能存在相同Key的记录,当然最新的那条记录才是准确的。这样设计的虽然大大提高了写性能,但同时也会带来一些问题:
在Compact策略上,主要介绍两种基本策略:size-tiered和leveled。
一文带你了解LSM Compaction - 知乎 (zhihu.com)
随着数据写入不断增加,Minor Freeze不断触发,转储数据不断增多,一次查询可能需要越来越多的IO操作,读取延时也在不断变大。而执行Minor Compaction会使得转储文件数基本稳定,进而IO Seek次数会比较稳定,延迟就会稳定在一定范围。然而,Minor Compaction操作重写文件会带来很大的带宽压力以及短时间IO压力。因此可以认为,Minor Compaction就是使用短时间的IO消耗以及带宽消耗换取后续查询的低延迟。
OceanBase 存储引擎高级技术 - 知乎 (zhihu.com) OceanBase的LSM-tree
最容易理解的LSM树—以示例讲解合并查找过程_jinking01的专栏-CSDN博客 这里用图示讲解了LSM-tree的合并查找过程,里面LSM-tree的实现是,memtable用AVL树实现,sstable用B-tree实现。虽然不知道OceanBase的sstable的实现过程是什么样的,不管是B-tree还是排序好的元组序列,其实查询效率都挺高的,也都可以称为索引组织表,如果是B-tree,肯定是索引组织表,如果是排序序列,用二分查找也不错。