二、分区功能体验
数据库分区使表和索引能够被划分成更小、更易于管理的部分,这对于任何具有高性能和高可用性需求的大型数据库来说都是一项重要的要求。使查询得以扫描较少的数据,减少I/O量,从而提高查询性能。DM的分区功能分为垂直分区和水平分区。
DM与Oracle、Mysql、PostgreSQL 分区功能对比 表:2-1
| DM6.0 | Oracle | Mysql 5.1 | PostgreSQL 8.4 | |
| 范围(Range) | 支持 | 支持 | 支持 | 支持 |
| 哈希(Hash) | 支持 | 支持 | 支持 | 支持 |
| 混合(范围+哈希) | 不支持 | 支持 | 不支持 | 支持 |
| 列表(List) | 不支持 | 支持 | 支持 | 支持 |
| 垂直分区 | 支持 | 不支持 | 不支持 | 不支持 |
2.1 水平分区
DM6对表的水平分区有2种,范围分区(RANGE)和哈希分区(HASH)。
2.2.1 HASH分区
DM的HASH分区对分区列值进行HASH计算后,确定实际数据存放的具体位置。主要用来确保数据在预先确定数据的分区中平均分布。我们来看一下表的定义:
SQL>select tabledef('mytest','sysdba','test_part2');
1 CREATE TABLE "test_part2" AT "mytest"
(
"id" INTEGER,
"t1" VARCHAR(10),
"t2" VARCHAR(10),
"t3" VARCHAR(10),
"t4" VARCHAR(10),
"t5" VARCHAR(10),
PRIMARY KEY("id"))PARTITION BY HASH("id") PARTITIONS 5
1 rows got
1 CREATE TABLE "test_part2" AT "mytest"
(
"id" INTEGER,
"t1" VARCHAR(10),
"t2" VARCHAR(10),
"t3" VARCHAR(10),
"t4" VARCHAR(10),
"t5" VARCHAR(10),
PRIMARY KEY("id"))PARTITION BY HASH("id") PARTITIONS 5
1 rows got
2.2.2 RANGE分区
DM的范围分区按照分区列的数据范围,确定实际数据存放的位置。通过LEFT或者RIGHT关键字来指定哪个值是第一个分区的上边界,还是第二个分区的下边界。我们来看一下表的定义:
SQL>select tabledef('mytest','sysdba','test_part3');
1 CREATE TABLE "test_part3" AT "mytest"
(
"id" INTEGER,
"t1" VARCHAR(10),
"t2" VARCHAR(10),
"t3" VARCHAR(10),
"t4" VARCHAR(10),
"t5" VARCHAR(10),
PRIMARY KEY("id"))PARTITION BY RANGE("id") LEFT FOR VALUES(5, 10)
1 rows got;
1 CREATE TABLE "test_part3" AT "mytest"
(
"id" INTEGER,
"t1" VARCHAR(10),
"t2" VARCHAR(10),
"t3" VARCHAR(10),
"t4" VARCHAR(10),
"t5" VARCHAR(10),
PRIMARY KEY("id"))PARTITION BY RANGE("id") LEFT FOR VALUES(5, 10)
1 rows got;
从以上内容可以看出,DM的水平分区功能与其他传统数据库系统的功能类似,能满足对大数据表的水平分区管理。