diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" "b/content/docs-lite/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" index 35be3c7d1838f7e0274eae47d11c34fe6b72f6ed..dfc87745b21756214279c93782b06e9e9d3db996 100644 --- "a/content/docs-lite/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" +++ "b/content/docs-lite/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" @@ -33,5 +33,8 @@ openGauss提供向量化引擎,通常用在OLAP数据仓库类系统,因为 ## 依赖关系 -依赖于列式存储。 +依赖于[列存储](../BriefTutorial/列存储.md)。 +## 使用指导 + +详情可参考系统调优指南 [配置向量化执行引擎](../PerformanceTuningGuide/配置向量化执行引擎.md)。 diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" "b/content/docs-lite/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" index f79c41a6b5a46618551a1d77726942bbf9825df7..d5058c074f6d30e81413b97b87f29edfb26ce4f0 100644 --- "a/content/docs-lite/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" +++ "b/content/docs-lite/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" @@ -97,3 +97,95 @@ 开源压缩软件LZ4/ZLIB。 +## 使用说明 + +自适应压缩是列存表的功能,在创建表时需要指定表数据存储方式为列式存储。 +使用时可设置COMPRESSION参数,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。有效值为YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。 + +## 使用指导 + +测试用例 + +``` +-- 创建列存表。 +openGauss=# CRETAE TABLE compress_low +( + ID INT PRIMARY KEY NOT NULL, + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50) , + SALARY REAL +) with (orientation=column); + +openGauss=# INSERT INTO compress_low +openGauss-# SELECT select generate_series(1, 10000) as key,repeat( chr(int4(random()*26)+65),4), +openGauss-# (random()*(6^2))::integer,null,(random()*(10^4))::integer; + +-- 创建列存表,并设置COMPRESSION为NO。 +openGauss=# CRETAE TABLE compress_no +( + ID INT PRIMARY KEY NOT NULL, + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50) , + SALARY REAL +) with (orientation=column, compression=no); + +openGauss=# INSERT INTO compress_no +openGauss-# SELECT select generate_series(1, 10000) as key,repeat( chr(int4(random()*26)+65),4), +openGauss-# (random()*(6^2))::integer,null,(random()*(10^4))::integer; + +-- 创建列存表,并设置COMPRESSION为middle。 +openGauss=# CRETAE TABLE compress_mid +( + ID INT PRIMARY KEY NOT NULL, + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50) , + SALARY REAL +) with (orientation=column, compression=middle); + +openGauss=# INSERT INTO compress_mid +openGauss-# SELECT select generate_series(1, 10000) as key,repeat( chr(int4(random()*26)+65),4), +openGauss-# (random()*(6^2))::integer,null,(random()*(10^4))::integer; + +-- 创建列存表,并设置COMPRESSION为high。 +openGauss=# CRETAE TABLE compress_high +( + ID INT PRIMARY KEY NOT NULL, + NAME TEXT NOT NULL, + AGE INT NOT NULL, + ADDRESS CHAR(50) , + SALARY REAL +) with (orientation=column, compression=high); + +openGauss=# INSERT INTO compress_high +openGauss-# SELECT select generate_series(1, 10000) as key,repeat( chr(int4(random()*26)+65),4), +openGauss-# (random()*(6^2))::integer,null,(random()*(10^4))::integer; + +-- 查询表大小。 +openGauss=# select pg_size_pretty(pg_relation_size('compress_low')) as size; + size +-------- + 152 kB + (1 row) + +openGauss=# select pg_size_pretty(pg_relation_size('compress_no')) as size; + size +-------- + 240 kB + (1 row) + +openGauss=# select pg_size_pretty(pg_relation_size('compress_mid')) as size; + size +-------- + 128 kB + (1 row) + +openGauss=# select pg_size_pretty(pg_relation_size('compress_high')) as size; + size +-------- + 112 kB + (1 row) + +``` \ No newline at end of file diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" "b/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" index 8b1c30ebbb6dbea1489c8ba0630202a4f5091db9..d089c83cb244e74a94cac83d26719aec14344516 100644 --- "a/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" +++ "b/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" @@ -114,5 +114,8 @@ openGauss支持行存储和列存储两种存储模型,用户可以根据应 ## 依赖关系 -无。 +[列存储](../BriefTutorial/列存储.md) + +## 使用指导 +使用方法请参考[规划存储模型](../DeveloperGuide/规划存储模型.md)。 \ No newline at end of file diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" "b/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" index 49dac417bd000f844c552d8b5e0e9e7b2132e7ca..9b393f7f34bf947f8e0586b0f295bd7a385dccbb 100644 --- "a/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" +++ "b/content/docs-lite/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" @@ -31,5 +31,8 @@ ## 依赖关系 -向量化引擎。 +[向量化引擎](向量化引擎.md) +## 使用指导 + +详情可参考系统调优指南 [配置向量化](../PerformanceTuningGuide/配置向量化.md)。 \ No newline at end of file diff --git a/content/docs-lite/zh/docs/BriefTutorial/figures/zh-cn_image_0000001189073180.png b/content/docs-lite/zh/docs/BriefTutorial/figures/zh-cn_image_0000001189073180.png new file mode 100644 index 0000000000000000000000000000000000000000..3d16ba1744284afd306f276d516b89a20e6d7af7 Binary files /dev/null and b/content/docs-lite/zh/docs/BriefTutorial/figures/zh-cn_image_0000001189073180.png differ diff --git "a/content/docs-lite/zh/docs/BriefTutorial/\345\210\227\345\255\230\345\202\250.md" "b/content/docs-lite/zh/docs/BriefTutorial/\345\210\227\345\255\230\345\202\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..2255a76771eee87ccfc82e67ececea236ad5d622 --- /dev/null +++ "b/content/docs-lite/zh/docs/BriefTutorial/\345\210\227\345\255\230\345\202\250.md" @@ -0,0 +1,132 @@ +# 列存储 + +openGauss支持行列混合存储。行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。 + +行、列存储模型各有优劣,建议根据实际情况选择。通常openGauss用于OLTP(联机事务处理)场景的数据库,默认使用行存储,仅对执行复杂查询且数据量大的OLAP(联机分析处理)场景时,才使用列存储。默认情况下,创建的表为行存储。行存储和列存储的差异请参见[图1](#zh-cn_topic_0283136734_zh-cn_topic_0237120296_fig1417354233018)。 + +**图 1** 行存储和列存储的差异 + + +![](figures/zh-cn_image_0000001189073180.png) + +上图中,左上为行存表,右上为行存表在硬盘上的存储方式。左下为列存表,右下为列存表在硬盘上的存储方式。 + +行、列存储有如下优缺点: + + + + + + + + + + + + + + + + +

存储模型

+

优点

+

缺点

+

行存

+

数据被保存在一起。INSERT/UPDATE容易。

+

选择(SELECT)时即使只涉及某几列,所有数据也都会被读取。

+

列存

+
  • 查询时只有涉及到的列会被读取。
  • 投影(Projection)很高效。
  • 任何列都能作为索引。
+
  • 选择完成时,被选择的列要重新组装。
  • INSERT/UPDATE比较麻烦。
+
+ +一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。 + + + + + + + + + + + + + +

存储类型

+

适用场景

+

行存

+
  • 点查询(返回记录少,基于索引的简单查询)。
  • 增、删、改操作较多的场景。
  • 频繁的更新、少量的插入。
+

列存

+
  • 统计分析类查询 (关联、分组操作较多的场景)。
  • 即席查询(查询条件不确定,行存表扫描难以使用索引)。
  • 一次性大批量插入。
  • 表列数较多,建议使用列存表。
  • 如果每次查询时,只涉及了表的少数(<50%总列数)几个列,建议使用列存表。
+
+ +## 语法格式 + +``` +CREATE TABLE table_name + (column_name data_type [, ... ]) + [ WITH ( ORIENTATION = value) ]; +``` + +## 参数说明 + +- **table\_name** + + 要创建的表名。 + +- **column\_name** + + 新表中要创建的字段名。 + +- **data\_type** + + 字段的数据类型。 + +- **ORIENTATION** + + 指定表数据的存储方式,即行存方式、列存方式,该参数设置成功后就不再支持修改。 + + 取值范围: + + - ROW,表示表的数据将以行式存储。 + + 行存储适合于OLTP业务,适用于点查询或者增删操作较多的场景,目前使用Astore,Ustore作为行存储引擎。 + + - COLUMN,表示表的数据将以列式存储。 + + 列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少,目前使用Cstore作为列存储引擎。 + + + +## 示例 + +不指定ORIENTATION参数时,表默认为行存表。例如: + +``` +openGauss=# CREATE TABLE customer_test1 +( + state_ID CHAR(2), + state_NAME VARCHAR2(40), + area_ID NUMBER +); + +--删除表 +openGauss=# DROP TABLE customer_test1; +``` + +创建列存表时,需要指定ORIENTATION参数。例如: + +``` +openGauss=# CREATE TABLE customer_test2 +( + state_ID CHAR(2), + state_NAME VARCHAR2(40), + area_ID NUMBER +) +WITH (ORIENTATION = COLUMN); + +--删除表 +openGauss=# DROP TABLE customer_test2; +``` + diff --git "a/content/docs-lite/zh/docs/BriefTutorial/\351\253\230\347\272\247\347\211\271\346\200\247.md" "b/content/docs-lite/zh/docs/BriefTutorial/\351\253\230\347\272\247\347\211\271\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..21b0e06398e02d947ce13cd370e8fb7ea9211575 --- /dev/null +++ "b/content/docs-lite/zh/docs/BriefTutorial/\351\253\230\347\272\247\347\211\271\346\200\247.md" @@ -0,0 +1,3 @@ +# 高级特性 + +- **[列存储](列存储.md)** diff --git a/content/docs-lite/zh/menu/index.md b/content/docs-lite/zh/menu/index.md index 43d117a5eb67a6522df68275bdd63041679c5e03..44dbd29a7702f0657b028bb0b4d599d7ece8a261 100644 --- a/content/docs-lite/zh/menu/index.md +++ b/content/docs-lite/zh/menu/index.md @@ -216,6 +216,8 @@ headless: true - [子查询]({{< relref "./docs/BriefTutorial/子查询.md" >}}) - [权限]({{< relref "./docs/BriefTutorial/权限.md" >}}) - [函数]({{< relref "./docs/BriefTutorial/函数.md" >}}) + - [高级特性]({{< relref "./docs/BriefTutorial/高级特性.md" >}}) + - [列存储]({{< relref "./docs/BriefTutorial/列存储.md" >}}) - [附录:SQL语法]({{< relref "./docs/BriefTutorial/附录-SQL语法.md" >}}) - [应用开发指南]({{< relref "./docs/DeveloperGuide/应用开发指南.md" >}}) diff --git "a/content/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" "b/content/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" index 27f3ac4b94edce7e246b3d3fca4bd6bff25c212f..31f875dc9547c93f6d586f9eb9979cb2b4fe0119 100644 --- "a/content/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" +++ "b/content/zh/docs/AboutopenGauss/\345\220\221\351\207\217\345\214\226\345\274\225\346\223\216.md" @@ -33,5 +33,8 @@ openGauss提供向量化引擎,通常用在OLAP数据仓库类系统。主要 ## 依赖关系 -依赖于列存储。 +依赖于[列存储](../BriefTutorial/列存储.md)。 +## 使用指导 + +详情可参考系统调优指南 [配置向量化执行引擎](../PerformanceTuningGuide/配置向量化执行引擎.md)。 \ No newline at end of file diff --git "a/content/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" "b/content/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" index f69bb1e8c87ffd4247d9965a349052876e7a3e40..0f86dabf13577933a5f5a35e1e74ee47a588eea2 100644 --- "a/content/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" +++ "b/content/zh/docs/AboutopenGauss/\350\207\252\351\200\202\345\272\224\345\216\213\347\274\251.md" @@ -102,7 +102,7 @@ 自适应压缩是列存表的功能,在创建表时需要指定表数据存储方式为列式存储。 使用时可设置COMPRESSION参数,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。有效值为YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。 -## 示例 +## 使用指导 测试用例 diff --git "a/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" "b/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" index 2739027185a1df4302e5be9e49ba225f9e92f815..362b89d829d19d5fa13a3ef3489510e10f176b0c 100644 --- "a/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" +++ "b/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\346\267\267\345\220\210\345\255\230\345\202\250.md" @@ -22,7 +22,7 @@ openGauss支持行存储和列存储两种存储模型,用户可以根据具 ## 特性描述 -表有行存表和列存表两种存储模型。两种存储模型各有优劣,建议根据实际情况选择。使用方法请参考[规划存储模型](../DeveloperGuide/规划存储模型.md)。 +表有行存表和列存表两种存储模型。两种存储模型各有优劣,建议根据实际情况选择。 - 行存表 @@ -116,5 +116,8 @@ openGauss支持行存储和列存储两种存储模型,用户可以根据具 ## 依赖关系 -无。 +[列存储](../BriefTutorial/列存储.md) + +## 使用指导 +使用方法请参考[规划存储模型](../DeveloperGuide/规划存储模型.md)。 \ No newline at end of file diff --git "a/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\350\236\215\345\220\210.md" "b/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\350\236\215\345\220\210.md" index 4bc1c5a161b1260d28af5236e87ddd1b2057cee9..4c10bea50a01f2378d901710c2061c563451e1a4 100644 --- "a/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\350\236\215\345\220\210.md" +++ "b/content/zh/docs/AboutopenGauss/\350\241\214\345\210\227\350\236\215\345\220\210.md" @@ -32,7 +32,7 @@ openGauss主备集群场景下,支持备节点形成行列双格式内存形 - 支持列缓存的扫描查询: - 新增In-Memory-CStore-Scan (IMCStore scan)列缓存查询算子,基于openGauss执行优化器及代价估算,生成包含列缓存查询算子的列存执行计划。 + 新增In-Memory-CStore-Scan (IMCStore scan)列缓存查询算子,基于openGauss执行优化器及代价估算,生成包含列缓存查询算子的向量化执行计划。 ## 特性增强 @@ -58,4 +58,8 @@ HTAP 行列融合的规格约束如下: - 对于间隔分区表,自动新增的分区,当前不会自动行列转换。 ## 依赖关系 -无。 +[向量化引擎](向量化引擎.md) + +## 使用指导 + +详情可参考 [HTAP 行列融合使用指导](../BriefTutorial/行列融合.md)。 \ No newline at end of file diff --git "a/content/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" "b/content/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" index 07a46c22957ff93bfd5fe2c66c30744e49492a09..af3f293ee6d1767b2012ea0652ae334a4743c879 100644 --- "a/content/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" +++ "b/content/zh/docs/AboutopenGauss/\350\241\214\345\255\230\350\275\254\345\220\221\351\207\217\345\214\226.md" @@ -31,5 +31,8 @@ ## 依赖关系 -向量化引擎 +[向量化引擎](向量化引擎.md) +## 使用指导 + +详情可参考系统调优指南 [配置向量化执行引擎](../PerformanceTuningGuide/配置向量化执行引擎.md)。 \ No newline at end of file diff --git "a/content/zh/docs/AboutopenGauss/\350\265\204\346\272\220\346\261\240\345\214\226\345\244\232\346\234\272\345\271\266\350\241\214.md" "b/content/zh/docs/AboutopenGauss/\350\265\204\346\272\220\346\261\240\345\214\226\345\244\232\346\234\272\345\271\266\350\241\214.md" index d6d9f6c4f28df728cdb1ffa016174c9baa825852..5b77fcae68250543d75826daa297d474ecdb4a06 100644 --- "a/content/zh/docs/AboutopenGauss/\350\265\204\346\272\220\346\261\240\345\214\226\345\244\232\346\234\272\345\271\266\350\241\214.md" +++ "b/content/zh/docs/AboutopenGauss/\350\265\204\346\272\220\346\261\240\345\214\226\345\244\232\346\234\272\345\271\266\350\241\214.md" @@ -116,3 +116,6 @@ openGauss中DML主要分为两部分:查找数据,写入符合要求的数 ## 依赖关系 无。 + +## 使用指导 +插件安装与使能见:**[spqplugin-Extension](../ExtensionReference/spqplugin-Extension.md)**