多台 mysql 中用的 相同表名,自增 ID ,现在要合并到一个库中, ID 冲突如何解决呢?

2020-12-27 13:31:20 +08:00
 wuwukai007
4827 次点击
所在节点    程序员
23 条回复
yulitian888
2020-12-27 13:39:14 +08:00
上策:另立新 ID,好像并不需要什么特别的工具哦!
中策:给每个不同的源库加上不同的前缀数字,比如 A 库来的叫做 32000xxxx,B 库来的叫做 98000xxxx,补以适当的补位数即可。好像,也不需要什么特别的工具哦!
下策:发个问题,坐等别人介绍工具
roundgis
2020-12-27 13:40:39 +08:00
如果沒有 unique index
你如何判斷該記錄是不是相同的呢
encro
2020-12-27 13:42:38 +08:00
没有,如果做了表关联的话。
wuwukai007
2020-12-27 13:44:03 +08:00
@yulitian888 表太多了,几百张表,数据量也比较大,好几台服务器,自己弄估计费劲!
buhi
2020-12-27 13:49:26 +08:00
不合并不就完事了, 首先合并是图啥
wuwukai007
2020-12-27 13:54:39 +08:00
@roundgis 有一个类似产品 ID 的 字段,和创建时间可以锁定唯一,
notejava
2020-12-27 14:03:38 +08:00
重新生成分布式 ID,再将相关联表的 ID 离线重新绑定。
xiaofan2
2020-12-27 14:04:59 +08:00
大家都是数据量太大了做拆分 你这反而给他合并起来了 这就是传说中的分久必合?
wuwukai007
2020-12-27 14:09:07 +08:00
@xiaofan2 上面要求,硬着头皮干呗。
loading
2020-12-27 14:19:54 +08:00
前面加一位不就好了
例如
100000 数 012345
200000 字 012345
yulitian888
2020-12-27 15:07:49 +08:00
@wuwukai007 不管多少张表,在不借助其它工具的情况下,操作基本只考虑一种 sql 句式了
insert into 目标表 select 字段 1,字段 2... from 源表
然后,加一个变量进去很复杂?
insert into 目标表 select 前缀+字段 1,字段 2... from 源表
表再多也不过就是把前缀做成变量而已。用工具不是一样道理吗,将一个如上查询结果集作为导出范围,一模一样啊
wangsongyan
2020-12-27 15:20:09 +08:00
自己写工具,合并表时生成新的 id 同时更新关联 id 。话说之前帮别人写了个工具,工具写完人联系不上了😂
opengps
2020-12-27 15:27:47 +08:00
你们最初拆分的时候就不合理,应当用不一样的起始种子和步长,现在要合并,就直接按照库做分段吧,比如 A 库占用 1-100000,B 库占用 10001-20000,这样来融合
alonehat
2020-12-27 16:00:41 +08:00
是都从 1 开始自增的?有关联关系吗,没有的话直接数据库对拷或者写个批量插入工具不插 ID 继续自增就是了;有关联关系的话那考虑到关联也只能新加几个个字段区分,改成组合外键
mmdsun
2020-12-27 17:05:43 +08:00
批量 insert 不插入 ID 字段不就可以了么。

难道说表关联也是用的自增 ID ?
elintwenty
2020-12-27 20:22:07 +08:00
这个问题难道不是先要看有没有关联的情况吗?没有关联就随意处理了
fox0001
2020-12-27 23:23:52 +08:00
建立新库,新增两个字段:
1 )新建新的主键字段,标记数据唯一。
2 )新建机器编号字段,标记数据来自哪个机器。

这样,涉及关联的话,就用旧 ID 与机器编号去关联现有数据
mingl0280
2020-12-27 23:43:07 +08:00
并库不并表,表加前缀。
we3613040
2020-12-28 07:31:49 +08:00
连表都合并了?那当初为啥要拆。。。。。
nano91
2020-12-28 08:57:29 +08:00
@wuwukai007 你有没有考虑过这么大的数据量合并完了以后,你的服务还有可用性吗?

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

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

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

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

© 2021 V2EX