org.opencloudb.route.function.PartitionByFileMap可以支持字符串枚举、整型枚举(之前只支持整型枚举)
分片规则:字符串枚举分片
枚举分片的适用场景:记录数可枚举(记录数基本固定或变化很小),比如省份、地区、商业区域(华东区、华中区、华北区、东南区、西南区等)。
枚举的好处:枚举分片的库扩展时数据跟范围分片一样,比较容易迁移,比如某个表之前湖南、湖北两个省的数据分布在一个分片,现在要将湖北的数据独立扩展到一个新库,
可以使用两个语句搞定且迁移数据非常快(mysqldump的导出然后在再导入比写程序或者使用其他迁移工具快很多倍,测试过使用kettle和mysqldump的导出迁移,
同样的环境下,kettle迁移1000万数据大概耗时4小时,但是使用mysqldump导出90秒,然后使用mysql -uroot -ppassword databasename 的key的真实类型。如果type为0,表示Integer类型,如果是非0,表示String类型。
建表sql:
create table shop (
id int NOT NULL PRIMARY KEY,
shop_name char(18) NOT NULL,
address VARCHAR(128),
phone_number varchar(21),
province_no varchar(16)
);
INSERT into shop (id,shop_name,address,phone_number,province_no) values (1,'深圳第一连锁店','深圳市南山区科技南五路1号','075584569789','GUANGDONG');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (2,'武汉第一连锁店','武汉市洪山区太平路1号','02784569789','HUBEI');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (3,'武汉第二连锁店','武汉市南山区科技南五路1号','02784569789','HUBEI');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (4,'南昌第一连锁店','南昌市红军路1号','053284569789','JIANGXI');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (5,'岳阳市第一连锁店','岳阳市南和平路1号','073084569789','HUNAN');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (6,'哈尔滨第一连锁店','哈尔滨市沿江路1号','045184569789','HEILONGJIANG');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (7,'成都市第一连锁店','成都市和平路1号','02884569789','SICHUAN');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (8,'深圳第2连锁店','深圳市罗湖区红岗路1号','075584569789','GUANGDONG');
INSERT into shop (id,shop_name,address,phone_number,province_no) values (9,'桂林市第2连锁店','桂林市梅雨路1号','077384569789','GUANGXI');
rule.xml内容:
province_no
stringenum
partition-by-string-enum.txt
1
partition-by-string-enum.txt内容(限于篇幅,不列出所有的省份):
HUBEI=0
HUNAN=0
GUANGXI=1
GUANGDONG=1
HEILONGJIANG=1
YUNNAN=2
SICHUAN=2
JIANGXI=2
//HUBEI HUNAN GUANGXI等表示省份编码,如HUBEI表示湖北、HUNAN表示湖南、GUANGXI表示广西、GUANGDONG表示广东.......
//HUBEI=0表示湖北省的数据分布在第一分片,GUANGXI=1表示广西省的数据分布在第二分片,YUNNAN=2表示云南省的数据分布在第3分片......
schema.xml:
select user()
select user()
select user()
整型枚举:
上述示例中,如果省份编码字段用int表示,就是整型枚举分片,将rule.xml配置中的type属性去掉,或者type设置为0即可。
partition-by-string-enum.txt
1
枚举分片的数据迁移:
将湖北省的数据迁移到新的分片上去:
以下命令直连后端的mysql库操作
#将databasename数据库上shop表中province_no ='HUBEI'的记录导出到/data/shop.sql
mysqldump -uroot -p123456 databasename shop --where=" province_no ='HUBEI' " > /data/shop.sql
#将/data/shop.sql文件拷贝到新分片所在的mysql服务器上,执行导入
mysql -uroot -p123456 databasename < /data/shop.sql