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