关于 OceanBase 存储层微块(Micro Block)的压缩策略,以下描述正确的是?

A. 微块压缩在数据写入 MemTable 时实时进行,压缩后的微块存储在内存中,以节省内存占用。

B. 微块压缩仅在转储和合并时将数据写入 SSTable 时发生,压缩后的微块存储在磁盘中,内存中的数据不压缩。

C. 压缩算法在建表时通过 COMPRESSION 参数指定,默认为 lz4_1.0 ,一旦设定后无法更改,只能重建表。

D. 微块压缩率由 block_size 参数控制,微块越大压缩率越高,因此建议将 block_size 设置为 64KB 以获得最佳压缩效果。

3 个赞

解析
OceanBase 的微块压缩发生在数据从内存(MemTable)持久化到磁盘(SSTable)的过程中,即转储和合并 时。压缩后的微块以压缩格式存储在磁盘上,以节省存储空间;而内存中的 MemTable 数据不进行压缩(保持行格式),以换取更高的读写性能。压缩参数在建表时通过 COMPRESSION 指定(如 lz4_1.0zstd_1.0 等)。

  • A 错误 :微块在内存中不压缩 ,仅在写入磁盘时压缩,以平衡性能与空间。
  • B 正确 :压缩发生在转储/合并写入 SSTable 时,内存数据保持未压缩状态。
  • C 错误 :压缩算法支持通过 ALTER TABLE ... SET COMPRESSION 动态修改,修改后新写入的数据采用新算法,旧数据在合并时逐步转换为新压缩格式,无需重建表。
  • D 错误 :压缩率主要由压缩算法和级别 决定,微块大小的影响较小。block_size 主要影响随机读性能和 I/O 粒度,不直接决定压缩率。且默认微块大小为 16KB,并非越大越好——过大的微块可能增加读放大(读取无关数据更多)。
2 个赞

正确答案:B

2 个赞