首页 > 数据库 > 国内数据库 > GBASE 8s分片表概述
【数据分片】允许在表一级对数据存储进行控制。【表分片】是GBASE8S 数据库的一个特征,允许用户对表中的记录或索引进行分组,将数据存储到多个磁盘上,从而可减少磁盘 I/O 的竞争。对表中的数据和索引进行分区主要目的是提高应用程序访问数据库的效率,提高了事务的吞吐能力。
一、 分片的策略和意义
l 分片是数据库中以表(Table) 为对象的数据分散储存方法。
l 表与索引可分散储存于不同 dbspaces 或 partitions 中
l 分片的存在或变更是不会影响使用者或应用程序本身。
l 分片的存在或变更会影响应用程序的执行方法与效率。

l 逻辑上分片是指把一个表的数据分散到多个dbspaces 中存储
l 对外提供一个单表的接口
l 数据库内部,物理上把大表拆分为多个小表管理
二、 分片方式
1、 轮询法分片— Round-Robin
l 把数据均匀地分配到所有分片中
l 只能用于表,不能用于索引
CREATE TABLE tab1
(col1 integer, col2 date)
PARTITION BY round robin in
tabdbspc1 , tabdbspc 2;
2、 表达式分片—Expression-Based
l 需要对数据分布有所了解
l 为分片忽略和性能提升提供可能
l 既可以用于表也可以用于索引
l 可以基于一列或者多列构建表达式
基于表的单列分片
CREATE TABLE tb1 (a int) PARTITION BY EXPRESSION
(a <= 10) IN tabdbspc1,
(a <= 20) IN tabdbspc2,
(a <= 30) IN tabdbspc3;
索引分片
CREATE INDEX idx1 ON tb1 (a) PARTITION BY EXPRESSION
(a <= 10) IN idxdbspc1,
(a <= 20) IN idxdbspc2,
(a <= 30) IN idxdbspc3;
基于表的多列表达式分片
CREATE TABLE orders (
order_num integer,
year integer,
month integer,
amount float )
PARTITION BY EXPRESSION
year < 21 AND month >= 1 AND month < 4 IN datadbs01,
year < 40 AND month >= 4 AND month < 7 IN datadbs02;
MOD 表达式分片
CREATE TABLE employee (
id_num integer,
name char(50),
salary integer )
PARTITION BY EXPRESSION
MOD(id_num, 3) = 0 IN datadbs01,
MOD(id_num, 3) = 1 IN datadbs02,
MOD(id_num, 3) = 2 IN datadbs03;
remainder 表达式分片
l remainder partition 必须放在分片表达式的最后部分 , 否则语法存在问题 。
l 使用 remainder partition 来存放不能满足任何一个分片表达式的数据
CREATE TABLE tab1 (col1 integer, col2 date)
PARTITION BY EXPRESSION
col1 >= 0 and col1 < 100 in datadbs01,
col1 >= 100 and col1 < 200 in datadbs02,
remainder in datadbs03;
3、 List 分片
CREATE TABLE custom (cust_id int ,name char(128),state char(2))
PARTITION BY LIST(state)
PARTITION p0 VALUES( ‘ rs ’ , ’ il ’ ) IN datadbs01,
PARTITION p1 VALUES( ‘ ca ’ , ’ or ’ ) IN datadbs02,
PARTITION p2 VALUES( ‘ ny ’ , ’ mn ’ ) IN datadbs03,
PARTITION p3 VALUES(NULL) IN datadbs04;
4、 固定 间隔分片 -interval
数据表有一个最初的分片,它是基于一个range 语句来定义的。当一条记录不能满足最初的分片时, GBase 8 s 系统将会自动创建一个分片来存储这条记录。用于数字或日期 datetime 列 。
CREATE TABLE sales(amount int, id int,data_time datetime year to second)
PARTITION BY RANGE(data_time)
INTERVAL ( 30 units day )
STORE IN (dbs1,dbs2, dbs3)
PARTITION p 0 VALUES<' 2 011 -01-01 ' in dbs0;
三、 分片管理
1、 添加新的分片到现有的分片表
ALTER PARTITION ON TABLE tab1 ADD sale_time>= ’ 2021-05-01 00:00:00 ’
IN datadbs06
BEFORE datadbs05;
2、 修改分片表
ALTER PARTITION ON TABLE tab1 MODIFY sale_time>= ’ 2021-06-01 00:00:00 ’
IN datadbs06
BEFORE datadbs05;
3、 删除分片表的一个分片
ALTER PARTITION ON TABLE tab1 DROP datadbs06;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69993860/viewspace-2783209/ ,如需转载,请注明出处,否则将追究法律责任。