OceanBase LSM-Tree 存储引擎的写入放大(Write Amplification)问题,以下描述正确的是?

OceanBase LSM-Tree 存储引擎的写入放大(Write Amplification)问题,以下描述正确的是?

A. 写入放大是指一次写入操作触发多次磁盘 I/O,主要发生在 MemTable 将数据刷写到 SSTable 的过程中,转储和合并的次数越多,写入放大越严重。

B. 当更新同一行数据多次时,LSM-Tree 会产生多个版本。合并(Major Compaction)会清除中间版本,只保留最新版本,因此合并可以降低写入放大。

C. OceanBase 通过引入 Bloom Filter 和自适应转储策略来减少写入放大,其中自适应转储会根据 SSTable 的大小动态调整转储频率,避免大量小 SSTable 产生。

D. 写入放大与读放大是正相关的,写入放大越低,读放大也越低,两者可以同时通过增大宏块大小来优化。

2 个赞

解析
OceanBase 通过自适应转储策略(如 minor_compact_triggerminor_compact_level 等参数)动态控制转储行为。当产生大量小 SSTable 时,写入放大较明显,系统会提前触发 minor merge 将多个小 SSTable 合并,减少后续合并时需扫描的 SSTable 数量,从而降低写入放大。

  • A 错误 :写入放大确实指一次写入触发多次 I/O,但转储 本身是一次写入落盘,不直接导致多次 I/O;更主要的是合并 时需读取多个 SSTable 并重写一个新 SSTable,产生较大写入放大。选项 A 说“转储和合并的次数越多,写入放大越严重”不够准确,合并才是主要贡献者。
  • B 错误 :合并可以消除多版本,但这降低了读放大 (减少需要扫描的版本数),而不是降低写入放大。写入放大是数据写入磁盘的总量 / 用户写入的数据量,合并本身重写 SSTable 反而会增加写入放大。
  • C 正确 :自适应转储可减少小 SSTable 数量,降低合并时需重写的数据量,从而缓解写入放大。
  • D 错误 :写入放大与读放大通常是trade-off 关系。增大宏块可减少读放大(连续 I/O 更高效),但可能因重写更多数据而加剧写入放大。二者不能同时通过简单增大宏块得到优化。
1 个赞

正确答案:C

1 个赞