-
Notifications
You must be signed in to change notification settings - Fork 26
version 0.1.1 Features
- Level 0内存化
- 多Table实现:SkipTable, SSTable(已有)
通过扩大WAL的作用范围,将Level 0-1等上层易触发Compaction的SSTable存储于DRAM中,平衡现在DRAM价格的下跌以及文中块DRAM的数据安全,在优化主要持久层读取性能瓶颈的Level 0同时,避免Level 0与Level 1频繁的多(相较于下层Level)文件Major Compaction而避免写流量。 提高Level 0的读取速度并减少其产生Major Compaction时产生的大量冗余写流量,对SSD存储场景影响较大(可以提高使用寿命)
对应PR: https://github.com/KipData/KipDB/pull/25
参考论文:UniKV: Toward High-Performance and Scalable KV Storage in Mixed Workloads via Unified Indexing
Tips:仅参考Level 0的优化,忽略论文中对其他层的读放大优化
缓解L0层的读放大,提升L0层的查找性能。建立在Level 0内存化的基础上,通过实现SkipTable(使用SkipList作为类SSTable实现)用于重复利用Immutable并提供有序化以提高原HashTable导致的范围读取性能。 提供多实现,以支持SSTable拓展(例:SkipTable)
Task:
- 当前SSTable抽离逻辑,将对应API抽象为trait: Table
- Table基本API:
- query
- len
- size_of_disk
- gen
- level
- Loader支持多Table类型生成(Tips: 改名为Table,且取出IoType::Mem类型)
- 新增SkipTable: 基于内存的Table,以Immut Memtable作为Inner,进行实现(Tips: 可复用MemIter)
根据SSTable的seek/query miss触发的Major Compaction, 对查询场景进行优化
Tips: 参考LevelDB Seek Compaction,复用目前Major Compaction代码并进行Sized/Seek对应的Compaction方法进行重命名
当Minor产生的SSTable放置到Level 0时进行Level 1对应SSTable的数据范围检测,判断是否冲突,若未冲突则直接下沉到Level 1