南大通用GBase8s 常用SQL语句(八十二)

本文详细介绍了GBase8s数据库中使用RANGEINTERVAL分片策略进行数据分布的方法,包括范围分片和间隔分片的概念,以及如何定义和管理这些分片。示例展示了如何基于整数列创建分片,并解释了自动创建间隔分片的逻辑。RANGEINTERVAL分片适用于处理未知增长表的数据分布,允许在不预先分配分片的情况下适应数据的变化。
摘要由CSDN通过智能技术生成

南大通用GBase8s 常用SQL语句(八十二)

通过 RANGE INTERVAL 分片

可以使用此存储分布策略将分片将的量化值分片给其数值 或 DATE 或 DATETIME 范围内的非重叠间隔。

基于 RANGE INTERVAL 分片的分布存储通常将表分区为两种分片类型:

  1. 范围分片 ,它是您在 FRAGMENT BY 或 PARTITION BY 子句中显式定义的分片
  2. 间隔分片,它是数据库服务器在插入操作期间自动创建的分片。

要根据分片键(也称为分区分片)的范围内的间隔分片表或索引,您必须定义下列参数:

  1. 一个分片键表达式,它基于一个数字、DATE 或 DATETIME 列。
  2. 至少一个范围表达式。在特定范围内带有分片键值的行存储在那个分片中。
  3. 对于每一个范围表达式,至少有一个存储相应分片的 dbspace 列表。

您通过特定范围表达式的显式定义的分片称为范围分片。RANGE INTERVAL 分片的语法要求只有有一个基于范围表达式的分片。

对于系统生成的分片(称为间隔分片),它是数据库服务器自动创建地以存储分片键值超出当前分片列表上限的行,您可以指定这些额外参数:

  1. 每个间隔分片可以存储的在分片键值范围内的间隔大小。
  2. 存储间隔分片的 dbspace 列表。

如果指定了间隔大小但是 dbspace 列表为空,则间隔分片将存储在存储范围分片的同一的 dbspace 中。如果没有指定间隔大小,则禁用间隔分片的自动创建功能。在那种情况下,范围分片可以存储分片键值在指定范围内的行,但是该表无法存储有分片键值超出这些范围的行。

CREATE INDEX 语句也支持 RANGE INTERVAL 分片策略。如果一个表具有用相同的 FRAGMENT BY RANGE 语法定义的连接的索引,则当行超出现有已插入的间隔时,会类似地自动创建对应的索引分片(与新表分片具有一样的名称)。

通过范围分片分片的表或索引不支持 REMAINDER 分片,因为如果您定义所有了以上列出的参数,则数据库服务器自动创建新的间隔分片以存储那些已插入的分片键值超出现有分片范围的行。

对于不具有 NOT NULL 约束的表,您可以通过指定 VALUES IS NULL 为范围表达式来定义 NULL 分片。

当不知道增长的表中所有的可能分片键值,且 DBA 不想未还未存在的数据预分配分片时,RANGE INTERVAL 分片策略会很有用。

以下是通过范围间隔分片表的示例,它使用整数列作为分区键:

CREATE TABLE employee (id INTEGER, name CHAR(32), basepay DECIMAL (10,2),

        varpay DECIMAL (10,2), dept CHAR(2), hiredate DATE)

        FRAGMENT BY RANGE (id)

        INTERVAL (100) STORE IN (dbs1, dbs2, dbs3, dbs4)

        PARTITION p0 VALUES IS NULL IN dbs0,

        PARTITION p1 VALUES < 200 IN dbs1,

        PARTITION p2 VALUES < 400 IN dbs2;

在此表中

  1. 间隔大小的值为 100,
  2. 该分片键是 employee.id 列的值,
  3. VALUES IS NULL 关键字定义 p0 作为存储没有 id 列值的行的表分片。

当 employee ID 超过 199 ,自动创建 100 间隔(指定分间隔大小)的分片。

如果带有 employee ID 405 的行被插入,则会创建新的间隔分片来容纳此行,新的分片拥有id 列值在 >= 400 AND < 500 范围的行。

如果更改了行,且将 employee ID 更改为 821,则数据库服务器创建新的分片来容纳新的行。该分片拥有 id 列值在 >= 800 AND < 900范围的行。

间隔分片创建于 STORE IN 子句定的 dbspace 中的循环分布方案中。如果忽略了该子句,则间隔分片将会在存储范围分片的 dbspace (之前例子中的 dbspace dbs0 、dbs1 和 dbs2 )中创建。如果为间隔分片指定的 dbspace 已满或关闭,则数据库服务器略过此 dbspace ,选择列表中下一个 dbspace 。

注意此间隔分片的范围表达式不能重叠,且不能有 remainder 分片。

范围间隔分片的分片键只能引用单列。例如,以下规范无效:

FRAGMENT BY RANGE (basepay + varpay)

分片键可以是列表达式,如下例规范所示:

FRAGMENT BY RANGE ((ROUND(basepay))

创建分片不需要互斥锁。分片键表达式必须评估为数字、DATE 或 DATETIME 数据类型。例如,您可以为每一个月创建一个分片,或为每百万客户记录创建一个分片。间隔大小规范(在 INTERVAL 关键字之后 )必须是

  1. 一个数字数据类型的非零整数常量表达式(对于数字分片键),
  2. 或 INTERVAL 数据类型(对于 DATE 或 DATETIME 分片键)。

SQL 的 ALTER FRAGMENT 语句可以在非分片表或索引上应用 RANGE INTERVAL 存储分布,如 INIT 子句 中描述的那样。该语句还会修改现有 RANGE INTERVAL 策略的功能。有关更多信息和示例,请参阅 MODIFY 子句和带有区间分片的 MODIFY 子句的示例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值