B+树有什么缺点?
每次修改数据都很有可能破坏 B+ 树的约束,从而需要对整棵树进行递归的合并、分裂等调整操作,而不同节点在磁盘上的位置很可能并不是连续的,这就导致需要不断地做随机写入的操作,并且产生大量的磁盘碎片。
随机写入性能的低下在写多读少的场景下会更加明显,而且现在很多非关系型数据库就是为了适用写多读少的场景而设计的
LSM树的核心思想是什么?
通过内存维护有序的结构,延迟写入磁盘的时机,通过合并多次随机写操作,降低磁盘臂移动的开销,在多写少读的场景下能获得比 B+ 树更好的性能。
LSM树是如何实现的?
整个 LSM 树包含了三个部分,memtable、immutable memtable、SSTable,前两个在内存中,最后一个在磁盘中。先临时地把数据写在 memtable 中,然后在合适的时机刷入磁盘上的 SSTable 中。
-
Memtable 是内存中的数据结构,存储的是近期更新的记录值,可以用各种有序高效的数据结构来实现
-
在 Memtable 存储的元素到达一个数量级之后,我们就会把它固化成 immutable table。引入不可变副本的原因是,拷贝过程是需要时间,但同时我们的系统很可能仍然在对外工作,所以创建副本,可以很好的地帮助我们避免读写冲突竞争,从而避免阻塞,提高系统性能。
-
SSTable 就是在磁盘上做持久化的部分,实际上是一段段按照 key 有序排列的键值对。整个持久化的过程就像这样,我们把内存中有序的数据结构比如红黑树中的记录,dump 到一段磁盘上的空间,然后按 segment 一段一段往后叠加。
参考:
浙公网安备 33010602011771号