浅析日志结构的存储引擎(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