关于 OceanBase 的存储结构,以下关于宏块(Macro Block)和微块(Micro Block)的描述正确的是?
A. 宏块是 OceanBase 中读写的最小单位,默认大小为 16KB;每个宏块内部由多个微块组成,微块是数据压缩和校验的基本单位。
B. 宏块的大小固定为 2MB,微块的大小可以在建表时通过 BLOCK_SIZE 参数指定,默认为 16KB,微块内部按行存储数据。
C. 微块在写入内存后即被压缩,压缩后的微块作为一个整体持久化到宏块中,读取时必须解压整个宏块才能访问其中的微块。
D. 同一个 SSTable 内部的宏块之间是紧密连续存储的,相邻宏块的数据在逻辑上属于同一行范围,便于顺序扫描。
3 个赞
解析 :
OceanBase 的磁盘存储结构为:数据先以微块(默认 16KB,可配置 4KB~64KB)形式组织,微块是压缩和校验单元;多个微块组成宏块(固定 2MB,不可配置),宏块是磁盘 I/O 的最小单位,也是数据文件空间分配的基本单位。表或索引的 BLOCK_SIZE 属性指定的是微块大小。
-
A 错误 :读写的最小单位是 宏块 (2MB),而非微块。微块主要在内存和压缩层面体现。
-
B 正确 :宏块固定 2MB,微块大小可通过
BLOCK_SIZE 在建表时设置(如 4KB/8KB/16KB/32KB/64KB),默认 16KB。微块内部采用行存格式。
-
C 错误 :微块压缩发生在 转储/合并写入磁盘前 ,但读取时 不会解压整个宏块 ,而是根据索引定位到具体的微块,仅解压目标微块,避免无谓的 I/O 和解压开销。
-
D 错误 :宏块在磁盘上 不一定连续存储 ,可能被文件系统或底层存储打散;同时相邻宏块的数据范围也不一定连续(因为可能存在空洞或垃圾回收后的碎片),无法假设顺序性。
2 个赞