Skip to content
This repository has been archived by the owner on Aug 4, 2024. It is now read-only.

version 0.1.1 Features

Kould edited this page Jun 25, 2023 · 3 revisions
  • Level 0内存化
  • 多Table实现:SkipTable, SSTable(已有)

Level 0内存化

参考论文:WAL-assisted Tiering: Painlessly Improving Your Favorite Log-Structured KV Store Instead of Building a New One

通过扩大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

多Table实现

参考论文: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)

Seek Compaction

根据SSTable的seek/query miss触发的Major Compaction, 对查询场景进行优化

Tips: 参考LevelDB Seek Compaction,复用目前Major Compaction代码并进行Sized/Seek对应的Compaction方法进行重命名

Minor Compaction SSTable下沉优化

当Minor产生的SSTable放置到Level 0时进行Level 1对应SSTable的数据范围检测,判断是否冲突,若未冲突则直接下沉到Level 1

参考资料:Minor Compaction范围的确定

Clone this wiki locally