本节主要介绍 OceanBase 数据库的分区介绍和分区类型。
分区介绍
OceanBase 数据库可以把普通的表的数据按照一定的规则划分到不同的区块内,同一区块的数据物理上存储在一起。这种划分区块的表叫做分区表,其中的每一个区块称作分区。OceanBase 数据库的 Oracle 模式中,单个表最多支持创建的分区个数为 65536 个。
如下图所示,一张表被划分成了 5 个分区,分布在 2 台机器上:
上图分区表的每个分区还能按照一定的规则再拆分成多个分区,这种分区表叫做二级分区表。
数据表中每一行中用于计算这一行属于哪一个分区的列的集合叫做分区键,分区键必须是主键或唯一键的子集。由分区键构成的用于计算这一行属于哪一个分区的表达式叫做分区表达式。
分区分类
OceanBase 数据库 Oracle 模式目前支持的分区类型如下:
Range 分区
List 分区
Hash 分区
组合分区
Range 分区
Range 分区根据分区表定义时为每个分区建立的分区键值范围,将数据映射到相应的分区中。它是常见的分区类型,经常跟日期类型一起使用。例如:可以将业务日志表按日/周/月分区。
List 分区
List 分区使得您可以显式的控制记录行如何映射到分区,具体方法是为每个分区的分区键指定一组离散值列表,这点跟 Range 分区和 Hash 分区都不同。List 分区的优点是可以方便的对无序或无关的数据集进行分区。
Hash 分区
Hash 分区适合于对不能用 Range 分区、List 分区方法的场景,它的实现方法简单,通过对分区键上的 Hash 函数值来散列记录到不同分区中。如果您的数据符合下列特点,使用 Hash 分区是个很好的选择:
不能指定数据的分区键的列表特征。
不同范围内的数据大小相差非常大,并且很难手动调整均衡。
使用 Range 分区后数据聚集严重。
并行 DML、分区剪枝和分区连接等性能非常重要。
组合分区
组合分区通常是先使用一种分区策略,然后在子分区再使用另外一种分区策略,适合于业务表的数据量非常大时。使用组合分区能发挥多种分区策略的优点。
分区名字规则
对于 List 和 Range 分区,因为在创建表的过程中就指定了分区的名字,所以名字就是当时指定的名字。
对于 Hash 分区,创建时如果没有指定分区的名字,分区的命名由系统根据命名规则完成。具体表现为,每个分区分别命名为 p0、p1、...、pn。
对于模板化二级分区表,二级分区的命名规则为 ($part_name)s($subpart_name)。对于非模板化二级分区表,二级分区的分区名即为⾃定义的分区名。




