暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Learn OceanBase record 4:怎样使用数据编码和压缩?

SQL新手 2023-02-03
328

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 格式被保存。

  • DYNAMICCOMPRESSED:表示数据会被编码,数据以 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 的值来完成。

具体方法如下:

  1. 管理员登录到对应的租户。

  2. 执行以下语句,设置渐进合并轮次。

    progressive_merge_num 用于设置表的渐进合并的轮次,默认为 0,表示进行增量合并。如果值设置为 1,则表示进行全量合并。

    设置渐进合并轮次为 2 次的示例如下:

    obclient> ALTER TABLE t1 SET progressive_merge_num=2;
    

    设置成功后,后续系统会在每日合并中逐渐完成数据的重写。

    说明

    如果希望尽快完成数据的重写,可以将 progressive_merge_num 的值设置为 1 后,手动发起一次合并,手动发起合并的操作请参见 手动触发合并

  3. 更改压缩选项。

    更改压缩选项的操作请参见本节 设置数据的压缩与编码方式


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论