在 OceanBase 数据库中,磁盘空间以宏块为单位进行分配,大小固定为 2 M。每个宏块由若干个微块组成, 微块的尺⼨可以改变,默认为 16 K。

数据库在进行合并时,会对需要保存的数据进行分析,当需要保存的数据达到一定的行数后,则按照列为单位进行分析,同时根据数据的特点决定按照行或者列进行保存,这种方法即是在原有的行存储结构上,新增了一种行列混合存储结构。在行列混合存储结构中,同一行的所有数据仍然会存放在一个微块中,但在该微块内的所有行会按照列进行存储。

数据编码有利于提⾼查询性能,这是因为编码后的数据不需要解码即可直接⽀持部分查询。

OceanBase 数据库在对数据进行分析的过程中,会选择合适的编码算法。当前,OceanBase 数据库支持多种数据编码技术,比较常见且有效的几种编码方式如下:

  • 将重复性较高的数据进行去重,再把去重后的数据建立成字典,而将原来存放数据的地方存为指向特定字典下标的引用。此外,字典中的各数据按类型排序,这样既有利于数据压缩,也可以在计算时直接将谓词下压到字典上,通过二分逻辑完成快速迭代。

  • 数值型编码,适用于在一个小值域范围内分布的整数型数据,通过计算区间内的最小值和最大值,然后将数据减去最小值后,用更小的位宽进行编码。

除此以外,OceanBase 数据库还提供了字符串前缀编码、Hex 编码、列间等值编码、列间子串编码等多种编码方式。您可以针对不同类型的业务和不同类型的数据进行编码。OceanBase 数据库会在合并时根据数据的特点选择合适的编码类型,并计算数据的压缩比,如果发现压缩比不高,会尽快回退,选择其他的编码方式,从而确保数据编码的过程不会影响正常的数据写入性能。如果您对数据的特点非常了解,您也可以在创建表时,手动指定编码方式。

OceanBase 数据库支持 lz4_1.0、snappy_1.0、zlib_1.0 和 zstd_1.0 等多种压缩算法。