传统数据库支持分区表,常见的分区方式包括 Hash 分区、Range 分区、List 分区,且支持二级组合分区。OceanBase 数据库沿用了分区表的使用方式,但是分区可以均匀分布在数据库任意节点上。OceanBase 数据库以分布式分区表数据模型为基础,一方面,数据存储和处理能力能够水平扩展,享受分布式技术的红利,另一方面,使用者不感知后端的分布式架构,可以像使用单机数据库一样使用分布式数据库,具有完整的全局索引和全局约束。

分区类型

OceanBase 数据库支持多种分区策略,可以将数据按照符合应用需要的方式分成多个分区,支持的分区方式有 Hash、Range、List 三种分区方式。OceanBase 数据库还支持一级分区和二级分区两种分区模式。一级分区允许分区表以某种分区策略设置一组分区键,数据按照一个维度进行划分。二级分区是一种组合分区方式,在一级分区的基础上,每一个一级分区还可以再选择一种分区策略和另一组分区键,将数据再次进行划分。

OceanBase 数据库对分区键的选择有要求,如果表格设置了 Primary Keys,那么分区键必须是 Primary Keys 中的列,如果表格没有设置 Primary Keys,那么分区键没有要求。

Hash 分区

下面的例子创建了 t1 表,选择 c1 列作为分区键进行 Hash 分区,分区个数是 5 个。

Range 分区

Range 分区是按照分区表达式的范围来划分分区。通常用于对分区键需要按照范围的查询。例如通过按照时间字段进行范围分区,还有价格区间等一些分区方式。

下面的例子创建了 t2 表,选择 c1 列作为分区键进行 Range 分区,分成 3 个分区 p0、p1、p2,分区范围分别是 (min, 100), [100, 500), [500, max)。

List 分区

下面的例子创建了 t3 表,选择 c1 列作为分区键进行 List 分区,当某一行的 c1 = 1 or c1 = 2 or c1 = 3 的时候,那么这一行属于分区 p0,当 c1 = 5 or c1 = 6 的时候,那么这一行属于分区 p1。除此之外都所有行都属于 p2。

二级分区

按照两个维度来把数据拆分成分区。

最常用的地方就是类似用户账单领域,会按照 user_id 做 hash 分区,按照账单创建时间做 range 分区。所有二级分区的组合方式有 hash + hash, hash + range, hash + list, range + hash, range + range, range + list, list + hash, list + range, list + list。