LSM-Tree:原理与介绍

LSM-Tree:原理与介绍
 LSM Tree(log-structured merge-tree)是一种文件组织结构的数据结构,目前在不少数据库中都有使用到,如SQLite、LevelDB、HBase在Mongodb中也有一个LSM引擎;  在传统的关系型数据库中使用的是B-/B+ tree作为索引的数据结构,B tree的查询性能很高,为O(log n)复杂度,但其写性能并达不到O(log n),而在传统数据库中每次插入、删除数据都要更新索引,每次更新索引都会有一次磁盘IO,频繁写时其性能较低;  LSM Tree查询性能达不到理论的O(log n),但效率并不慢,且其避免了频繁写时的磁盘IO,使得非常适用于KV与日志型数据库;图片LSM快的原因  磁盘、内存的顺序读写性能远高于随机读写性能,LSM通过消除更新操作(改、删)在其结构中数据无法改、删改,只能够顺序的新增追加,从而达到避免了随机写的性能问题;  写的情况解决了,但此时还必须解决随机读的性能问题,或者说怎么能够避免随机读;在目前顺序追加的两个场景中通过其特性消除了随机读的问题:  1、在WAL(write-ahead log)中场景中其数据是被整体访问的不存在随机读问题;  2、在Kafka中其没有随机读,因为其有明确的offset,有了offset就可通过seek读取指定数据,明确的物理偏移量;  LSM Tree要解决的是不需要读取全部数据、无需物理偏移量的读场景下的高性能读的问题;写数据  外部数据是无序的,但LSM Tree所有写操作为顺序写,直接无差别的追加并不能虽然实现了顺序写但不能保证数据的有序;在LSM Tree中会在内存中使用一个有序

你可能感兴趣的:(笔记)