返回首页

gbase数据、南大通用产品文档:GBase8a行列混和存储(行存列)

更新日期:2024年09月11日

由于GBase 8a MPP Cluster 是列存储的架构,因此当列数较多,访问的数据记录
又非常离散时,会造成大量的离散I/O,引起I/O 性能及有效性低下,严重影响执
行性能。
冗余行存储总体的实现逻辑为:将需要冗余的各列数据拼成行,以单独一列的形
式存储,相当于在原始表上添加了一列,该列为VARCHAR 类型,存储着对应的
行数据。行存列的管理与普通列大体相同,但DC 被划分为多个page,可以根据
要访问的page 进行加载,不需要读取整个DC。
行列混存功能,
通过冗余行存储来有效提高I/O 性能,
可将典型SELECT * FROM
场景的性能提升一个数量级。
1.
优化特性:

支持行存列压缩存储,减少冗余。

行存列以更小粒度的Data Page 读取数据,减少无效I/O,提升查询性能。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1325

使用gbase_hybrid_store 配置参数控制是否使用行存数据,
用于对比测试、

查错误等,该参数取值为:

0:不使用;

1:server 自动判断是否使用;

2:强制使用,有则一定使用。
自动判断逻辑,如果满足以下条件则使用:

字段被定义为行存列;

RowsPerDC 的值小于等于参数_gbase_hybrid_store_limit 的定义值;
RowsPerDC:就是当前查询所返回的记录数/命中的DC 个数。

存储冗余方式灵活,用户可自定义行存列中的字段,主要是通过select 语句
中投影列出现的频率来选择行存列应该包括哪些字段。
2.
优化限制:
行存列数据暂时不用于scan、join、group 等运算,目前仅能用于单表查询带
order by 的select(即物化)部分以及order by 的相关列,如:
SELECT * FROM t [ WHERE … ] ORDER BY ...;
3.
优化参数:

查询时是否使用行存列参数:gbase_hybrid_store=0(不使用)/1(自动判断
/2(强制使用),该参数默认值为1。

行存列存储时的页大小:
gbase_hybrid_store_page_size=<1k –1G> ,
默认
值32K。

返回结果中平均DC 返回记录数的上限:
_gbase_hybrid_store_limit=<1-65536>,默认值100。
4.
其它特性及限制:

支持建表时指定行存列;

支持在已有表上新增行存列;

支持删除行存列;

支持一个表上建立多个行存列,但行存列不能重名;

行存列的数据更新由系统自动维护,对用户透明。当用户执行INSERT、
快速UPDATE、DELETE、LOAD 等时,系统会自动更新冗余的数据;

不支持修改行存列的定义,只能先手工删除再重建行存列;

行存列的原始列定义不允许删除或修改数据属性(但允许更改列名称和
列顺序);

原始列的数据不允许做批量update 操作(整列替换模式);

同一grouped 中所有列的总长度不允许超过32KB;

行存列支持分区表,允许原始列上有索引。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1326

CLUSTER_TABLES
存储的信息为表占用的磁盘空间。从这个系统表中查询时,必须指定table_schema
及table_name,不能模糊查询及汇总。各个column 的含义如下:
表 5-61 具体信息如下:
table_schema

待查询表所属的database
table_name
待查询表的表名
data_storage_size
数据占用空间
table_storage_size
表占用的总空间
table_type
表类型:0 - 复制表;1 - 随机分布表;2 - 哈希分布表;

INSERT 或 UPDATE 语句不执行智能大对象数据的实际输入。然而,它确实为应用程序
提供一种方式,来标识哪些智能大对象数据与该列相关联。
数据库表中的 BLOB 或 CLOB 列存储智能大对象的智能大对象指针结构。因此,当您存
储 BLOB 或 CLOB 列时,请为 INSERT 或 UPDATE 语句的 loptr 变量中的列提供智
能大对象指针结构。
下图展示应用程序如何将智能大对象的数据转移至数据库服务器。
图: 将智能大对象数据由客户机应用程序转移至数据库服务器


如果智能大对象指针结构存在,则智能大对象指针结构标识的智能大对象存在。当在数据
库中存储智能大对象指针结构时,数据库服务器适时地重新分配智能大对象。
如果应用程序未在数据库中存储新的智能大对象的智能大对象指针结构,则当将该指针传
给应用程序时,智能大对象指针结构仅对访问智能大对象的当前版本有效。如果后来更新
了智能大对象,则该指针无效。当对象版本更改时,在行中存储的智能大对象指针结构不
过期。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 105 -

当您检索一行,然后更新该行中包含的智能大对象时,数据库服务器在该行更新智能大对
象时排他锁定该行。此外,如果智能大对象花费很长时间来更新或创建,则智能大对象的
长时间更新
(无论是否启用日志记录,
以及是否与表行相关联)
会造成潜在的长事务条件。
在数据库中的 CLOB 或 BLOB 列中存储智能大对象指针结构,而不是 CLOB 或 BLOB
数据本身。因此,诸如 INSERT 和 SELECT 这样的 SQL 语句接受并返回智能大对象指
针结构作为智能大对象列的列值。