暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

结合创建月份表问题点赞GBase8s的分片表设计方案

原创 苏沐 2023-05-23
651

随着业务量的增长,数据量也会随之增加,这个时候就需要关注业务大表,因为大表会影响查询性能,DDL变更时间很长,影响业务的可用性,同时导致从库延迟很大,所以我们在现实使用中,在数据库使用过程中某些系统会采用按月分表来保存数据。
即,每张表名可以用以下特征命名:
table_201801
table_201802
table_201803
table_201804
为了更好的实施这个按月份表保存数据的过程,对于多个常用数据库进行设计过程的了解。

oracle解决方案

在了解过程钟找到了oracle采用定时器每月固定时间执行存储过程创建下月的分表来实现12个月的分表。整个存储过程的代码量达到了140行。
在oracle中使用基表建立月表的存储过程
存储过程演示了如何使用基表来建立每个月的月表,处理思路是:
1:首先,为基表建立好表和对应的索引。
2:将基表保存到一个存储过程需要的表中。
3:存储过程读取配置表,根据配置表中的名字,去数据库中查询对应的表的建表语句,然后,用月表的表名去替换语句中的表名,接着就建表。再去查询基表的表是不是有索引,如果有,则从数据库中得到索引的建表语句,然后,替换建表语句中的索引名称和表名称,最后执行建立索引的语句。

GBase8s分片表方案优于oracle存储过程方案

通过后续对于GBase8s的学习,决定使用GBase8s替换oracle,找到更简单的方法实现月分表的创建,直接使用分片表来实现。其中有一种分片方式,基于interval固定间隔设计出来的,解决这个问题真是对症下药。

GBase8s提供的基于interval的分片策略,将根据Insert记录的情况自动扩展分片,可提供更为灵活的方式,减少人工维护。
以下建表方式,对于插入的不同内容会放入对应的“片”

create table sales ( amount int, id int, data_time datetime year to second )fragment by range(data_time) interval (30 units day) store in (datadbs1,datadbs2,datadbs3,datadbs4) partition p_sales0 values < '2023-01-01 00:00:00' in dbspace; create unique index idx_sales on sales(data_time,id);
复制

顺便补充一下了解到的GBase8s的分片表设计方案。

GBase8s 的分片是用来处理数据量非常大的表和索引的技术。分片可以用将大表拆分为小表的方式进行管理,大大提高了GBase8s的大数据处理性能。
“表分片”技术与并行数据查询(PDQ)特征联系在一起使用,这样GBase8s服务器可以分配多条线索。从所有数据分片上并行地选取数据。此外,还可以仅仅对包含“目标数据”的数据分片进行扫描。从而大幅度地提高了整个系统效率。

• 分片是指把一个表的数据分散到多个dbspace中存储。

• 在逻辑上对外提供一个表的访问接口。

• 在数据库内部,物理上把大表拆分为多个小表进行管理。

GBase8s的分片方式概括为两类,一类是轮转法分片,第二类是基于表达式的方式。

“轮转法分片”

“轮转法分片”这个存放方法采用轮询调度,依次在dbspaces上存储数据库。
特点:

• 简单,不需要了解数据的分布

• 把数据均匀地分配到所有分片中

• 提高查询性能

• 只能用于表,不能用于索引

• 不能利用到忽略分片的特性,没有成功减少对磁盘的扫描

• 可配合PDQ启用多线程并行扫描以提高查询性能

基于表达式分片

“基于表达式分片”则根据表中的一个或多个字段对分片的规则进行定义,一般在预知查询条件时采用这种方式,从而避免查询中对某些分片的扫描。
特点:

• 需要对数据分布有所了解

• 为分片忽略和性能提升提供可能

• 既可以用于表也可以用于索引

• 可以基于一列或者多列构建表达式

基于表达式包括5种具体的形式。

基本表达式

Mod运算表达式(加入取余运算的基本表达式)

Remainder关键字方式

利用remainder关键字将难以表达的范围数据指定到一个分片中

List方式

List方式本质上是对or和in运算的改进,使表达式计算更有灵活性,效率更高

interval 固定间隔

最初的分片是基于一个range语句来定义的

同时gbase8s的索引分为attached和detached的两种索引。

两种索引的区别在于:attached索引指每个分片的数据都有相应的索引独立存在,detached索引指的是索引与分片数据存储在不同的dbspace上。

提供的attach和detach功能可以对分片表进行快速、高效的管理。例如利用detach可以对某个分片快速分离的功能,实现对历史数据的快速删除,替代delete方式。

最后修改时间:2023-06-02 15:41:10
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论