【国产数据库】GBase学习⑨ - 存储引擎

存储引擎

  • USTORE,表示表支持Inplace-Update存储引擎。(原文更新技术,类似mysql的on-do)
  • ASTORE,表示表支持Append-Only存储引擎。(有表??的问题,↑解决这个问题)

存储方法

  • ROW:表示表的数据将以行式存储;行存储适合于OLTP业务,适用于点查询或者增删操作比较多的场景。
  • COLUMN:表示表的数据将以列式存储;列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且设计的列操作较少。
  • MOT:表示表的数据将以内存的形式存储;MOT内存适用于高吞吐事务处理,性能瓶颈加速,消除中间层缓存,大规模流数据提取。

存储方法的使用

存储方法的使用:当sql语句不做指定时,默认使用astore存储引擎,row存储方法

  1. 创建表时指定 orientation 参数值为row,创建行存表。
create table test_astore_row(col text) with (orientation=row); 
  1. 创建表时指定 orientation 参数值为column,创建列存表。
create table test_astore_column(col text) with (orientation=column); 
  1. 创建表时 create foreign table… server为mot_server 时,创建内存表。
create foreign table test_astore_mot(col int) server mot_server; 
  1. 创建表时,指定 storage_type 参数值为 ustore,创建 ustore 表。
create table test_ustore(col text) with (storage_type=ustore);

分区表

GBase 8c 需要将数据按照一定规律分布到各个数据节点,目前支持hash分片。
在此基础上,分区表功能,支持二级分区,9种分区组合,interval分区。即分片+分区功能。

分区类型一级分区二级分区
hashhashhash-list;hash-hash;hash-range
rangerangerange-range;range-hash;rang-list
listlistlist-list;list-range;list-hash
interval分区range

表分片

GBase 8c 的数据分片策略:在创建表时,通过关键字distribute、replication来设置表分片策略。

  1. 通过distribute by hash 创建hash分片表,将数据通过hash算法均匀存储到每个数据节点。
create table t1_dis(c1 int,c2 int) distribute by hash(c1);
  1. 通过distribute by replication 创建复制表,每个数据节点都会存储一份数据。
crete table t1_rep(c1 int,c2 int) distribute by replication;
  1. 在不指定时,默认使用hash分片,分布式键按照顺序为第一个满足hash算法的字段。

  2. interval分区:根据间隔自动创建分区,例如,1 day 、1 month(主备式)

      create table sales(
	         prod_id number(6),
	         cust_id number,
			 time_id date,
			 channel_id char(1),
			 promo_id number(6),
			 quantity_sold number(3),
			 amount_sold number(10,2))
			 partition by range(time_id) interval('1 day')
			 (partition p1 values less than ('2019-02-01 00:00:00'),
			 partition p2 values less than ('2019-02-02 00:00:00')
			 );

分区自动管理

分区自动管理:根据间隔自动创建分区,例如:1 day、1 month(分布式)

  • 语法:建表时增加 WITH ,或通过 ALTER TABLE xxxx SET (PERIOD=‘1 day’) 来实现。(其中 PERIOD范围是1 hour ~ 1 year)。通过ALTER TABLE xxxx RESET (PERIOD)来关闭。
  • 限制:仅支持RANGE分区的一级分区表(其他分区类型,以及带有二级分区的表不支持)
  • 效果:从当前命令时间(向下规约到hour)算起,连续增加能覆盖30个period时间范围的分区,每个分区大小为period。如果现有分区在待新增的分区范围内,则跳过此新增分区。且每个period事件后再次执行此流程。
create table range_auto_1hour_tb01(id int,ip text,time timestamp) with(PERIOD='1 hour') partition by range(time)
	  ( partition p1 values less than ('2022-11-23 14:00:00'));

索引类型

GBase 8c 提供了多种索引类型:hash,B-tree,gist,gin。每一种索引类型使用了一种不同的算法来适应不同类型的查询。

  • B-tree:适合所有的数据类型,支持排序,支持大于、小于、等于、大于或等于、小于或等于的搜索。
  • hash:索引存储的是被索引字段VALUE的哈希值,只支持等值查询。
  • Gist(Generalized Search Tree):即通用搜索树。可处理地理数据,图像,空间,树形图等场景。地理数据、图像:如果我们想要查询在某个地方是否存在某一点,即判断地理位置的“包含”。对于空间数据:Gist索引可以使用R树,以支持相对位置运算符(位于左侧,右侧,包含等)。对于树形图:R树可以支持相交或包含运算符。
  • gin:gin索引是“倒排索引”。应用领域是加速全文搜索。当需要搜索多值类型内的VALUE时,适合多值类型,例如数组、全文检索、TOKEN。根据不同的类型,支持相交、包含、大于、在左边、在右边等搜索。
  • 默认情况下,create index 使用B-tree索引并适合于大部分情况。
hash索引:create index ... using hash(column);
B-tree索引:create index ... using btree(column);
gist索引:create index ... using gist(column);
gin索引:create index ... using gin(column);

数据压缩

  • 行存表:创建表时通过关键字 compress_type,可实现数据压缩,减少磁盘的占用。
    create table test_row_compress(col text) with (compress_type = 2,COMPRESS_LEVEL = 3);
    compress_type: 行存表参数,设置行存表压缩算法。1代表pglz算法,2代表zstd算法,默认不压缩(仅支持ASTORE下的普通表) 取值范围:0~2,默认值为0
	COMPRESS_LEVEL:行存表参数,设置行存表压缩算法等级,仅当COMPRESS_TYPE为2时生效。压缩等级越高,表的压缩效果越好,表的访问速度越慢(仅支持ASTORE下的普通表)取值范围:-31~31,默认值为0
  • 列存表 创建表时通过关键字 compression,可实现数据压缩,减少磁盘的占用。
    create table test_compress(col text) with (orientation=column,compression=high);
	compression:指定表数据的压缩等级,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。行存表不支持压缩。取值范围:列存表的有效值为:YES/NO/LOW/MIDDLE/HIGH,默认值为 LOW。
	查表大小:
	select * from pg_size_pretty(pg_catalog.pg_table_size('test_column_compress')); 

事务

  • 子事务:子事务允许你回滚部分已经事务中完成的工作。可通过关键字 SAVEPOINT,EXCEPTION,Autonomous Transacion 启动子事务。
  • 自治事务:在主事务执行过程中新启的独立的事务。自治事务的提交和回滚不会影响已提交的数据,同时自治事务也不受主事务的影响。
    自治事务在存储过程,函数和匿名块中定义,用PARAGMA AUTONOMOUS_TRANSACION 关键字来声名。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值