RocksDB中的

更新时间:2023-05-23 04:44:09 阅读: 评论:0

三伢子
RocksDB中的
修理大师RocksDB 的 LSM-tree compaction 选取 sorted run 进⾏合并合并⽣成新的 sorted run,从⽽影响每次读取涉及的 sorted run。不同的compaction 算法,可以在空间放⼤、读放⼤和写放⼤之间进⾏取舍,以适应特定的业务场景。
易错读音大全1000例
RUM Conjecture
RUM Conjecture
中国哈萨克When designing access methods we t an upper bound for two of the RUM overheads, this implies a hard lower bound for the third overhead which cannot be further reduced.
RUM 猜想指在优化数据系统 read times (R),update cost (U) 以及 memory (or storage) overhead (M) 的开销过程中,其中两项的上限升⾼会导致第三项上限的降低。
Compaction 算法分类
Leveled
脾虚是怎么造成的
getcharleveled compaction 的特点是以读放⼤和写放⼤为代价最⼩化空间放⼤。
LSM-tree 可以看作是包含若⼲ level 的序列,每个 level 是仅包括1个 sorted run。相邻 level 的⼤⼩之⽐通常被我们称为 fanout(扇出),当不同 level 之间的 fanout 相同时,LSM-tree 的写放⼤最⼩。compaction 选择 L(n) 的数据,与原有 L(n+1) 的数据进⾏合并,得到新的
L(n+1) 数据。每次 compaction 的最⼤写放⼤系数等同于 fanout。
Tiered
tiered compaction 特点是以读放⼤和空间放⼤为代价最⼩化写放⼤。
LSM-tree 依然可以看作是包含若⼲ level 的序列,每个 level 包括 N 个 sorted run。L(n) 的 sorted run ⼤⼩是 L(n-1) 的 N 倍。compaction 通常选择 L(n) 的数据合并得到新的 sorted run 输出到 L(n+1),但并不与 L(n+1) 的已有数据进⾏合并。每次 compaction 的最⼤写放⼤系数是 1。
Tiered + Leveled
对于较⼩的 level ,包括较多的活跃数据,涉及更新的可能性较⼤,采⽤ tiered compaction 减⼩写放⼤。对于较⼤的 level,需要存储更多的数据,则采⽤ leveled compaction 减⼩空间放⼤。RocksDB 的 leveled compaction 可以看作是 tiered&leveled 混合的 compaction ⽅法。
Compaction 触发条件
RocksDB 的 compaction 触发⼊⼝是 MaybeScheduleFlushOrCompaction。主要包括3种触发⽅式:
1. switch wal:当 WAL 的⽂件⼤⼩超过阈值时
2. writer buffer full:当 memtable 写满时
3. schedule compaction:其余由更上层逻辑触发的 compaction,如 manual compaction
Leveled Compaction
image.png
Leveled Compaction 以提⾼读写放⼤为代价,最⼩化空间放⼤。Leveled Compaction LSM-tree 的 L0 通常包括多个 sorted run,L1+ 的每⼀个 level 是⼀个 sorted run。Leveled Compaction 是 RocksDB 默认的 compaction 算法,是在 LevelDB compaction 算法的基础上改进得到的。
Compaction 流程
1. 当 L0 的⽂件数量超过 level0_file_num_compaction_trigger (默认值为4),选取交叠的 L0 的⽂件合并到 L1。
2. L1 + ⽂件⼤⼩超过设定值,选取⼀个 L(n) 的⽂件合并到 L(n+1) 。
compaction 在某种程度上可以并⾏,并⾏度取决于 max_background_compactions (默认值为2),限定了 compaction 和 flush 操作后台任务数量上限。
Compaction Level 选取
蝉蜕功效听风雨在选取 level 进⾏ compaction 操作前,对每个 level 进⾏打分,⽐较所有 level 的分值,分值较⾼的 level 将会优先执⾏ compaction。
1. Level 0
分值取决于两个指标,⽂件总数量(也即 L0 的 sorted run 数量)除以 level0_file_num_compaction_trigger 得到的数值,以及当前数据量总⼤⼩除以 max_bytes_for_level_ba 得到的数值。最终的分值取他们两者中的较⼤者。但是,在⽂件数量没有超过
level0_file_num_compaction_trigger 时,L0 的 compaction 不会执⾏。
选择 Level 0 ⽂件数量作为 compaction 的触发原因在 RocksDB 的代码中有做说明,主要有两点考虑:当 writer buffer ⾜够⼤时,较少的 level 0 compaction 依然可以得到较好的读取性能;由于每次读取都需要将 level 0 的若⼲个⽂件进⾏合并,因此较少的⽂件数量可以显著提升性能。
如果选择了 L0 作为 compaction ba level,当 L0 的⽂件数量超过 level0_file_num_compaction_trigger + 2,RocksDB 引⼊了IntraL0Compaction 来减少 L0 的⽂件数量从⽽避免 Write Stall。

本文发布于:2023-05-23 04:44:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/740786.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数量   数据   得到
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图