浅析存储引擎(4)-对比B-tree和LSM-tree

浅析日志结构的存储引擎(1)-bitcask
浅析日志结构的存储引擎(2)-SSTable和LSM-Tree
浅析存储引擎(3)-B-tree

一、磁盘碎片率

由于B-tree存储引擎按固定页写入,那么通常每一页都会有些空间无法使用。而LSM-tree不是面向页的,并且定期重写SSTable以消除碎片化,所以具有较低的碎片率。

二、写入速度

LSM-tree通常能够承受比B-tree更高的写入吞吐量,部分原因是具有较低的写放大(一次数据写入导致多次磁盘写入称为写放大),部分原因是以顺序方式写入紧凑的SSTable文件。虽然SSD支持更快的随机写入,但更低的写放大和碎片减少对于SSD仍然有益,以更紧凑的方式组织数据,从而在有限磁盘I/O带宽中支持更多的读写请求。

三、查询速度

没有绝对的答案,如果LSM-tree需要查询的数据都是最新刚写入的热数据,这个时候数据通常还在内存中,查询速度就会很快。假设查询的都是很久前写入的数据,LSM-tree可能需要搜索多个段,这时B-tree则可能更快。需要根据场景做基准测试。

四、LSM-tree的缺点

高写入吞吐量时,由于磁盘I/O带宽是有限的,意味着数据写入和数据合并会竞争磁盘I/O资源,如果配比不合理,那么磁盘上未合并的数据会不断增加,直到磁盘空间不足。

五、B-tree的优点

每个键恰好唯一对应于索引中的某个位置,而日志结构的存储引擎可能在不同的段中具有相同key的多个副本。如果在这种场景下需要支持事务,无疑B-tree更具竞争力。

 

参考《数据密集型应用系统设计》

原文出自:https://blog.csdn.net/daiyudong2020/article/details/104721566

end

你可能感兴趣的:(浅析存储引擎(4)-对比B-tree和LSM-tree)