Professional Documents
Culture Documents
Triad
Triad
Stores
1.Motivation
先介绍⼀下概念。
commit log:提交⽇志是驻留在磁盘上的⽂件。它的⽬的是临时记录对Memtable进⾏的更新,如果应⽤程序要
求在发⽣故障时不丢失数据的话。在Memtable上执⾏的所有更新都附加到提交⽇志中。通常,提交⽇志的⼤⼩保
持较⼩,以便在需要重放操作以从故障中恢复时提供快速恢复。
⽂章指出了rocksdb触发频繁⽽密集的I/O操作的原因,主要的三个⽅⾯:
2.TRIAD
⽂章提出了三种优化⽅案
1. TRIAD-MEM:解决了内存组件级别的数据倾斜不感知问题。
当MemTable刷新到L 0时,TRIAD-MEM将经常更新的热数据与很少更新的冷数据分开。热项保存在新的memtable
中,只有冷项写⼊磁盘。这样,热项只在内存中更新,⽽不会在磁盘上触发⼤量压缩。这避免了为确保LSM磁盘结
构中的key范围不重叠⽽触发的⼤量压缩操作。
在 Memtable ⾥⾯,每个 key 会有额外的 4 字节空间来统计 key 的频率,然后在 flush 的时候统计出最 hot 的 k 个
key。现在的算法⽐较简单,只要⼤于平均频率的 key 就是 hot key,这个算法其实在多数场景下⾯都是有效的。
2. TRIAD-DISK:通过在磁盘组件级别明智地选择延迟compaction和批处理来解决过早和迭代compaction的问
题。
RocksDB采⽤HLL算法检测哪些⽂件的键重叠最多,需要压缩,来在压缩期间将丢弃最⼤数量的重复键的⽬的。其
中L i和L i+1处⽂件中键重叠的估计是基于⽂件的键的范围和⼤⼩。
3. TRIAD-LOG:处理重复写问题,在提交⽇志级别绕过刷新期间创建的新⽂件。
核⼼思想是把 commit log 当做 SST 来⽤。因为 commit log 有⼀份持久化数据,L0 SST 再写⼀份的话是⼀种浪
费。把⽇志⽂件直接 rename 成 SST 岂不美哉?