随着业务量的增长,数据量也会随之增加,这个时候就需要关注业务大表,因为大表会影响查询性能,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方式。