开发者社区> 问答> 正文

云数据库OceanBase的分区介绍


在OceanBase中,每个表格可以按照规则划分为多个分区,这些分区可以分布到不同的OceanBase Server。
用户所选择的、实现数据分割的规则被称之为分区函数。OceanBase暂不支持用户自定义函数,分区函数只能是系统函数。
它可以是模数,或者是简单的匹配一个连续的数值区间或数值列表,或是一个内部hash函数,或一个线性hash函数。
函数根据用户指定的分区类型来选择,把用户提供的表达式的值作为参数。该表达式可以是一个整数列值,或一个作用在一个或多个列值上并返回一个整数的函数。 这个表达式的值传递给分区函数,分区函数返回一个表示那个特定记录应该保存在哪 个分区的序号。
这个函数不能是常数,也不能是任意数。
它可以使用任何可用的 SQL 表达式,只要该表达式返回一个小于 MAXVALUE(最大可能的正整数)的正数值。
分区适用于一个表的所有数据和索引;不能只对数据分区而不对索引分区,反之亦然,同时也不能只对表的一部分进行分区。

使用分区的优点


  • 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

  • 一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案还不曾这么 做时,可以重新组织数据,来提高那些常用查询的效率。

  • 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT(orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。

  • 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。


分区类型


  • RANGE分区 基于属于一个给定连续区间的列值,把多行分配给分区。

  • HASH分区 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含 OceanBase 中有效的、产生非负整数 值的任何表达式。
    无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从 0 开始记 录。当有一新行插入到一个分区表中时,就是使用这些分区编号来识别正确的分区。
    例如,如果你的表使用 4 个分区,那么这些分区就编号为 0, 1, 2, 和 3。对于RANGE 分区类型,确保每个分区编号都定义了一个分区。对HASH分区,使用的用户函数必须返回一个大于 0 的整数值。分区的名字是不区分大小写的。

  • KEY分区 按照 KEY 分区类似与按照 HASH 分区,除了HASH 分区使用的用户定义的表达式,而KEY分区的哈希函数是由OceanBase服务器提供,且按key分区的列值不仅仅可以是整数值,还可以是其他类型。

展开
收起
云栖大讲堂 2017-11-01 14:07:25 2629 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载