最近一段时间原平铝厂的系统发生id重复事件,起因是负载均衡造成的。查找id server 的时候,无意间发现了twitter的id生成器。决定将系统改造一版。
一路走来感觉很艰辛,但是值得了。主表t_pm一万条,级联表t_pm_item十万条。
优化前:
select * from t_pm_1 t left OUTER join t_pm_item_1 tpi on t.kid=tpi.pm_id where t.pm_name like '%a%' limit 501,200;
200 rows in set (1.17 sec)
优化后:
200 rows in set (0.56 sec)
多次执行,时间偏差不大。查询速度提升给力,效果可观,值了!
下面说具体的ID迁移过程:
1.备份库.同时将数据导出 sql.txt
java写个函数:提取sql.txt所有的uuid,替换为newid。
记录替换过程,old_id <--> new_id 替换表。
将sql.txt导入数据库, 记录为新库 ndb .
2.修改java model类
*****特别注意****:将主键、链接键由 uuid String 改为 Long
*****特别注意****:区分model类型: 日期全部用 long , id方式全部为 Long
3.再写一个java函数,读取所有model long类型数据,逐个修改表结构
alter table @table change `@column` `@column` bigint
4.java json 方式向网页发送的 newid 太长 ,18位, js无法识别
需要在 转换json 的时候批量替换 long类型为string类型
5.最后是系统的全流程测试。
需要迁移的伙伴私聊我qq 398479251 发代码。