Design Data-Intensive Applications 读书笔记七 索引结构:LSM和B-tree对比

对比B-tree和LSM-tree

即便B-tree比LSM-tree成熟,LSM-tree也有吸引力,因为它的性能。LSM-tree写入很快,B-tree读取很快。LSM-tree读取慢,因为它不得不在压缩的各个阶段检查多个不同的数据结构和SSTable。

但是测定负载通常是不准确的,易受干扰的。你不得不使用自定的负载来测试系统,做出有效的比较。这节我们简要的讨论测量存储引擎性能时要考虑的一些事情。

 

LSM-tree的优势

B-tree会将每个数据至少写入两次:一次是写入写入前的日志,然后是写入树中的page(或许在page分裂时还要写入一次)。即便page只改动了一小部分,也不得不写入整个page,这很浪费资源。一些存储引擎甚至将相同page覆写两次,避免在电力故障后,page只是部分更新。

日志结构索引也会多次重写数据,因为它会重复压缩和合并SSTable。这个影响,在数据库运行时,数据库的一次写入会造成磁盘的多次写入,被称为写入扩展(write amplification)。在写入操作多的应用里,性能的主要瓶颈就是数据库写入磁盘的速率。在这种情况下,写入扩展会造成性能降低:存储引擎越多次写入磁盘,在磁盘有效带宽内,每秒能处理的写入就越少。

LSM-tree能比B-tree处理更高的写入量,一是因为它们有时候有更低的写入扩展,二是因为它会连续写入压缩SSTable而不是覆写多个page。这个区别对于机械硬盘很重要,因为它的连续写快于随机写入。

LSM-tree能被更好的压缩,所以能比B-tree生成更小的文件。B-tree存储会在磁盘上留下未使用的空间,因为分裂操作:当page被分开的时候&

你可能感兴趣的:(Design Data-Intensive Applications 读书笔记七 索引结构:LSM和B-tree对比)