传统数据库支持分区表,常见的分区方式包括 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。
二级分区
按照两个维度来把数据拆分成分区。