各位大佬们 征求意见

2019-10-18 11:19:02 +08:00
 JustinJie
1. 菜鸡一枚, 接到一个数据迁移的需求
2. 新功能重构上线, 要把老库里面的表数据迁移到新库的表里, 两张表字段大体上一样也有一些区别, 表里面大概 40 个字段
3. 数据库是 mysql, 老库的数据量大概在 400 多万条的亚子
4. 现在正在考虑方案, 奈何之前没接触过类似的功能, 找 v2 大佬请教, 用什么样的方式比较好, 是用代码实现, 还是直接脚本之类的 ? 如果可以的话可以说的稍微具体点
3484 次点击
所在节点    程序员
31 条回复
JustinJie
2019-10-18 11:23:07 +08:00
求大佬临幸 ~
JustinJie
2019-10-18 11:29:49 +08:00
我订
dswyzx
2019-10-18 11:35:11 +08:00
才 400w 啊.用代码的话只要别一条一条处理也不怕
JustinJie
2019-10-18 11:36:54 +08:00
@dswyzx # 3 不一条一条处理 ? 代码不就 for 循环吗 ? 还有什么方法 ?
zgzhang
2019-10-18 11:39:52 +08:00
我能想到的步骤如下:
1. 新老表双写,读老表
2. 数据迁移,400W 条数据迁移应该很快
3. 抽样对比数据,看下是否 OK
4. 灰度读数据到新表
5. 老表下线
telami
2019-10-18 11:40:15 +08:00
一般来说三种方式:
1、sql 脚本,能用 sql 处理的,一定用 sql,成本最低。看你的数据是不是经过大的处理,如果是要用到外部一些数据,这种就不推荐了。
2、python 脚本,好处是想咋写咋写,400 万数据也不多,用完一次就扔掉,不用重复上线。
3、代码,代码的话看场景,设计多个表,甚至需要一些外部 api 数据处理,这就只能用代码了,但是同步数据得上线,上完线还得删,就比较麻烦。
CoCoMcRee
2019-10-18 11:41:31 +08:00
这么点数据量, 找个 NaviCat 之类的工具 同步下就行了吧
taotaodaddy
2019-10-18 11:42:34 +08:00
如果数据处理规则很简单就用 sql
如果比较复杂就 python 走一波,用完即扔
taogen
2019-10-18 11:47:51 +08:00
用脚本或者代码,对比两个库,生成最终的 SQL 文件。新库中,清空对应的表,执行 SQL 文件。
xxdd
2019-10-18 12:15:02 +08:00
写 sql 脚本吧 这个迁移应该不涉及数据比对
JustinJie
2019-10-18 13:45:37 +08:00
@zgzhang # 5
1. 新功能上线貌似就没有使用老表了, 新功能没有向之前表插入
2. 数据迁移 怎么弄 ? 我主要就是想问下这个怎么实现 之前没有弄过
3. 抽样对比数据 到时候肯定是要测的
4. 灰度是个啥意思 ? 我研究下
@telami # 6
1. 我暂时只想到了一个用程序读取老表然后插入新表的办法, sql 脚本暂时还不知道如何去写
2. python 脚本 不怎么会 没怎么研究过 我这边是弄 Java 的
3. 是的 我也是这么想的 代码比较麻烦 而且我只想到循环处理 肯定耗时性能也不好
@CoCoMcRee # 7
好的 我研究下同步工具 但是我两个表的字段 名称不一样 还有些字段不同 不知道能不能处理
@taotaodaddy # 8
好的 感谢
@taogen # 9
你的意思是用代码 生成 对应 sql 语句 然后去执行 ? 我也有这么考虑的
@xxdd # 10
嗯 都比较推荐 sql 脚本 我向下 数据比对 这个是什么意思 ?
JustinJie
2019-10-18 13:49:03 +08:00
我顶 !
再次召唤大佬~
JustinJie
2019-10-18 13:59:57 +08:00
再顶 !
JustinJie
2019-10-18 14:18:56 +08:00
大佬们, 周五已经下班了吗~
wuwukai007
2019-10-18 14:21:11 +08:00
pandas read_sql

pandas to_sql
注意缺失值处理一下,应该蛮快的。
JustinJie
2019-10-18 14:23:39 +08:00
@wuwukai007 # 15 Python ? 我先看下
markgor
2019-10-18 14:53:52 +08:00
表有區別就不能跑同步了,
就算是 dump 出來,你也 source 不了進去。
所以老老實實寫腳本。
具體點就是:
1、寫腳本,建測試庫
2、測試腳本用測試庫的資源。
3、和後端商議個時間做切換。
4、鎖庫腳本同步數據
5、後端切換數據
6、測試下
7、休息
JustinJie
2019-10-18 15:20:04 +08:00
@markgor # 17 大佬懂我
不过我还有点疑问就是 我一条语句写一个 insert into 这样的行吗 ?
还是有更好的什么写法和形式吗 ?
lazyfighter
2019-10-18 15:25:24 +08:00
kettle
JustinJie
2019-10-18 15:31:18 +08:00
@lazyfighter # 19 好的 我看下

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

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

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

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

© 2021 V2EX