OceanBase 数据库支持 MySQL 和 Oracle 两种模式的租户,为了兼容不同类型用户的使用习惯,OceanBase 数据库在不同模式中提供了不同类型的配置方式来使用数据编码和数据压缩。

MySQL 模式

在 MySQL 模式下,您可以通过配置项default_row_format来指定创建表时是否对数据进行编码,该配置项的取值如下:

  • REDUNDANT 和 COMPAT:表示数据不会被编码,数据以行格式被保存。

  • DYNAMIC、COMPRESSED:表示数据会被编码,默认取值为 DYNAMIC。

同时,您可以通过配置项default_compress_func指定数据的压缩算法,示例如下:

  1. obclient>ALTER SYSTEM SET default_compress_func='zlib_1.0';

或者,您也可以在创建表时即指定数据是否需要被编码,示例如下:

  1. obclient>CREATE TABLE test (
  2. id INT NOT NULL,
  3. fname VARCHAR(30),
  4. lname VARCHAR(30),
  5. hired DATE NOT NULL DEFAULT '1970-01-01',
  6. separated DATE NOT NULL DEFAULT '9999-12-31',
  7. job_code INT NOT NULL,
  8. store_id INT NOT NULL
  9. ) row_format=compressed;

Oracle 模式

在 Oracle 模式下,您可以通过配置项default_compress来控制系统默认使用的编码和压缩选项,该配置项的取值如下:

  • NOCOMPRESS:表示数据不会被编码或压缩。

  • BASIC:表示数据不会被编码,并使用 lz4_1.0 压缩。

  • OLTP:表示数据不会被编码,并使用 zstd_1.0 压缩。

  • QUERY:表示数据会被编码,并使用 lz4_1.0 压缩。

  • ARCHIVE:表示数据会被编码,并使用 zstd_1.0 压缩,默认取值为 ARCHIVE。

配置项的设置示例如下:

  1. obclient> ALTER SYSTEM SET default_compress='NOCOMPRESS';

您也可以在创建表时指定编码和压缩选项,示例如下:

  1. obclient>CREATE TABLE test (
  2. id number NOT NULL,
  3. fname VARCHAR2(30),
  4. lname VARCHAR2(30),
  5. hired DATE NOT NULL DEFAULT sysdate,
  6. separated DATE,
  7. job_code INT NOT NULL,
  8. store_id INT NOT NULL
  9. ) compress for query high;