OceanBase 数据库支持 MySQL 和 Oracle 两种模式的租户,为了兼容不同类型用户的使用习惯,OceanBase 数据库在不同模式中提供了不同类型的配置方式来使用数据编码和数据压缩。
OceanBase 数据库支持通过 DDL 来对表级别的压缩或编码方式进行配置。
设置数据的压缩与编码方式
在创建表或修改表时,您可以通过 row_format 和 compression 来设置编码格式及压缩方式。
语句如下:
创建表时,指定表的编码格式和压缩方式
CREATE TABLE table_name table_definition_list ROW_FORMAT [=] row_format COMPRESSION [=] 'compression';更多
CREATE TABLE语句的说明请参见 CREATE TABLE。修改表时,更改表的编码格式和压缩方式
ALTER TABLE table_name [alter_table_action_list] [SET] ROW_FORMAT [=]row_format COMPRESSION [=] 'compression';更多
ALTER TABLE语句的说明请参见 ALTER TABLE。
row_format 的取值如下:
REDUNDANT和COMPAT:表示数据不会被编码,数据以 flat 格式被保存。DYNAMIC、COMPRESSED:表示数据会被编码,数据以 encoding 格式被保存,默认取值为DYNAMIC。CONDENSED:表示数据会被编码,数据以 selective encoding 格式被保存。selective encoding 格式是 encoding 格式的子集,仅使用查询更友好的编码方式。
compression 的取值如下:
none:表示数据不压缩。lz4_1.0:表示指定压缩算法为 lz4_1.0。snappy_1.0:表示指定压缩算法为 snappy_1.0。zlib_1.0:表示指定压缩算法为 zlib_1.0。zstd_1.0:表示指定压缩算法为 zstd_1.0。zstd_1.3.8:表示指定压缩算法为 zstd_1.3.8。默认取值为zstd_1.3.8。lz4_1.9.1:表示指定压缩算法为 lz4_1.9.1。
示例如下:
创建表时指定编码格式和压缩方式
执行以下语句,在创建表时指定表的编码格式为 encoding 格式和压缩方式为 zstd_1.0。
obclient> CREATE TABLE test ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) ROW_FORMAT=CONDENSED COMPRESSION='zstd_1.0';修改表时,更改表的编码格式和压缩方式
执行以下语句,将表的编码格式修改为 selective encoding 格式,压缩方式修改为 zlib_1.0。
obclient> ALTER TABLE test SET ROW_FORMAT = CONDENSED COMPRESSION = 'zlib_1.0';
对已经生成 SSTable 的表更改压缩方式
对已经生成了 SSTable 的表进行压缩选项的变更时,为了避免给一次合并带来太大的 IO 写入压力,需要通过渐进合并的方式逐渐重写全部的微块数据,来完成压缩方式的变更。渐进合并的轮次可以通过在 ALTER TABLE 语句中设置 progressive_merge_num 的值来完成。
具体方法如下:
管理员登录到对应的租户。
执行以下语句,设置渐进合并轮次。
progressive_merge_num用于设置表的渐进合并的轮次,默认为0,表示进行增量合并。如果值设置为1,则表示进行全量合并。设置渐进合并轮次为 2 次的示例如下:
obclient> ALTER TABLE t1 SET progressive_merge_num=2;设置成功后,后续系统会在每日合并中逐渐完成数据的重写。
说明
如果希望尽快完成数据的重写,可以将
progressive_merge_num的值设置为1后,手动发起一次合并,手动发起合并的操作请参见 手动触发合并。更改压缩选项。
更改压缩选项的操作请参见本节 设置数据的压缩与编码方式。




