人大金仓数据库KingbaseES创建列存表介绍

关键字:

KingbaseES、SQL、列存储

1.列存储与行存储

早期的RDBMS一般按行进行数据的组织,即每个关系可以近似为一个表格,一条数据在表格中占据一行(或多行),每行数据包含若干列(属性),对数据的增删查改都以行为单位进行。

随着时代的发展,数据库中需要通过大量聚合统计数据的需求(即OLAP场景的需求逐渐高涨),列存储在数据的修改场景中性能较差,但是能够快速的过滤出所需数据进行聚合统计。更具体地说,列存储的优势在于。

1.自动索引,列存储在内存中按照列方式存储,因此本身各列之间可以互相作为索引使用,无需额外数据结构对该列建立索引。 2.数据压缩,由于同一列中值的较高重复率以及同一列的数据在类型上的相似性,数据压缩可以较为高效的进行。 3.向量执行,列式存储结构有利于列式算子的实现,向量化进行计划执行。

2.列存储在KES的组织方式

列存表在KES中按列的形式存储数据,而不是在内存中组织的列存表,即on-disk结构是按照列进行组织的。CU在KES中只能以写追加的方式进行修改,即当进行列存数据删除时,对数据进行标记,而不能直接从物理或内存结构中删除;当进行修改时,对数据进行标记,随后加入一条新的数据。同时,无论对列存表存入1-60000条数据时,都将加入一个CU。

3.列存表的创建流程

1.DefineRelation创建表时transformRelOptions中识别创建的表是否是列存表

2.向pg_class加入tuple时进行记录

3.在CreateStmt执行过程中,当DefineRelation结束后,DBMS重新打开该表进行TOAST相关检查后,进行列存表过程(函数AlterCStoreCreateTables)

4.在这一过程中进行delta表与CU描述符的创建。

其余过程与行存表创建基本一致。

4.列存表主要机制介绍

列存表的物理结构就是列存表,但是KES的列存表可以伴随一个DELTA表,前面说到在修改少量数据时,KES仍以一整个CU的方式进行列存表处理。这样,随着运行时间的增长,产生的碎片将影响数据库系统性能。鉴于这一情况,KES的列存储机制引入了DELTA表——当数据进行少量修改时,数据将在DELTA表中进行操作,避免产生小CU以及碎片,DELTA表的修改与一般行存表一致,这一机制可以显著提高列存的性能表现。 更多信息,参见https://help.kingbase.com.cn/v8/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值