最近一段时间原平铝厂的系统发生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 发代码。