想把老系统的数据库表 ID 从自增改为 UUID

2017-03-30 01:33:59 +08:00
 liuzhen
RT

老数据中有逻辑外键关系

怎么在保留老数据的基础上完成迁移呢

表还挺多的

最笨的方法我知道(改 A 表->把引用了 A 表的外键都改了,再改 B 表..依次)

这样表太多了,整理非常复杂

有没有更好的实现呢?
7038 次点击
所在节点    MySQL
10 条回复
cxbig
2017-03-30 06:16:49 +08:00
数据量?都是一些什么类型的关系?有多复杂?
我趋向于用某种语言把数据和关系完整的读出来( Eager Loading ),然后在新系统里直接读入。
ryd994
2017-03-30 09:05:35 +08:00
仔细读 UUID 的 RFC ,有一部分前缀是保留的
前缀加原来的主键就好了
不建议直接 in place 改,改主键性能可能很差
写个小脚本一边读一边写另一套服务器
ryd994
2017-03-30 09:06:05 +08:00
外键可以后加
ytmsdy
2017-03-30 09:31:11 +08:00
就当做一次数据迁移吧,查了一下资料也没有找到很简便的处理方式。
LZ 看来这体力活是躲不过去了。
如果有好的方式,请分享下。
crashX
2017-03-30 11:15:26 +08:00
自增为啥换成 UUID ,有啥优势,理论上 UUID 有可能冲突啊。
dobs
2017-03-30 11:52:37 +08:00
uuid 索引排序不是顺序的,还是自增的好吧
liuzhen
2017-03-30 12:48:56 +08:00
@ytmsdy 想好了,已存在的数据的 id 不变,只改数据类型为字符串。
ytmsdy
2017-03-30 15:12:26 +08:00
@liuzhen 这样处理我觉得主键索引的效率会下降吧。。。。
ytmsdy
2017-03-30 15:13:11 +08:00
@crashX 这属于非常非常小概率事件,基本上不会发生。就算发生了,主键是唯一的,也保存不了。
liuzhen
2017-03-30 17:58:39 +08:00
没测试过,不过同一列的话查 123 的效率和查 ABC 的效率会不同么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX