日期:2014-05-16  浏览次数:20375 次

MySQL数据库数据分区实践总结

针对项目现有数据库进行数据分区可用的方式及其利弊:
1)RANGE方式分区:

PARTITION BY RANGE (id)
(PARTITION pt1 VALUES LESS THAN (10) COMMENT = 'host "127.0.0.1", port "6001"' ENGINE = SPIDER,
PARTITION pt2 VALUES LESS THAN (20) COMMENT = 'host "127.0.0.1", port "6002"' ENGINE = SPIDER,
PARTITION pt3 VALUES LESS THAN MAXVALUE COMMENT = 'host "127.0.0.1", port "6003"' ENGINE = SPIDER)


好处:①不需要对现有的数据做任何手动分割,只给需要分区的表格制定主键id的分区范围即可;
????? ②后期维护简单,比如以后要追加数据库服务器了,也只需更改分区规则即可;
弊端:如果用户在使用应用程序过程中删除了node1中的大部分甚至是全部数据,
????? 而以后新规数据的ID肯定又不符合node1对应的pt1分区规则,这样会导致node1变成一个空壳服务器。

2)LIST方式分区

PARTITION BY LIST(mod(id, 3))
??? PARTITION pt1 VALUES IN (0),
??? PARTITION pt2 VALUES IN (1),
??? PARTITION pt3 VALUES IN (2)
);


好处:不存在RANGE方式分区中所提到的弊端;
弊端:①需要对现有需要分区的数据表格进行手动数据分割,然后再用spider引擎进行按规则分区;
????? ②后期维护困难,如果分区后的服务器还是不堪重负,需要追加数据库服务器时,
??????? 此时不断要需要重新制定分区规则,而且以前的数据表还需要按照新的规则进行手动分割;

3)RANGE & HASH 复合分区方式:

PARTITION BY RANGE (id) SUBPARTITION BY HASH (id)(
PARTITION pt1 VALUES LESS THAN (10)
? (SUBPARTITION st1 COMMENT = 'host "127.0.0.1", port "6001"' ENGINE = SPIDER,?
?? SUBPARTITION st2 COMMENT = 'host "127.0.0.1", port "6001"' ENGINE = SPIDER),
PARTITION pt2 VALUES LESS THAN MAXVALUE
? (SUBPARTITION s20 COMMENT = 'host "127.0.0.1", port "6002"' ENGINE = SPIDER,?
?? SUBPARTITION s21 COMMENT = 'host "127.0.0.1", port "6003"' ENGINE = SPIDER)
)

#复合分区时,母分区一般是RANGE和LIST分区,子分区一般是HASH和KEY分区。且各母分区的子分区个数必须相同。


好处:不会对现有的数据做任何手动分割;
弊端:①会查出多条重复的现有数据,如果想避免这个问题,则需要修正应用层,这个是极端不可取的做法;
????? ②后期维护困难,如果分区后的服务器还是不堪重负时,就需要追加数据库服务器。
??????? 此时不断要需要重新制定分区规则,而且以前的数据表还需要按照新的规则进行手动分割;

综上所述,还是推荐采用RANGE方式分区,理由如下:
RANGE方式分区改动最小,而且后期维护简单。
至于它的弊端,只是存在理论当中,实际中应该不会出现几千万条数据都被用户删除的情况。

?

?