- 场景:设计一个海量读写的的kv数据库,优先保证写入速度,但是读取速度也不能很慢
- 因为海量数据存储,不能使用内存,得存到文件里。
- Q:对已经落盘的文件,怎么根据key修改value
- A:读取文件找到指定的key,修改指定的值
- Q:需要随机磁盘io,磁头、磁道、扇区三者合一,然后进行io操作,慢
- A:追加写:不找之前的了,直接写新的key-value(顺序io),新的key代替老的key
- Q:查询的时候一个key对应多个value,还需要排序过滤,慢
- A:异步compaction:新建一个文件(SSTable)接受新的写入数据,写到一定数量后关闭,然后创建一个新的SSTable,对关闭的SSTable进行异步的合并,根据key+版本删除旧版本数据
- Q:文件中检索指定的key 有什么方案
- A:同一个SSTable中,key按顺序排列
- A:创建若干索引文件
- A:每个SSTable,记录其 kmax,kmin
- A:对SSTable切分,分出若干segement并记录kmax,kmin
- A:每个segement添加一个bloomfilter,用于快速过滤
- Q:为了key在SSTable中按序排列,那写SST
LSM Tree 底层设计理念
于 2024-11-29 17:06:51 首次发布