使用Python快速导入千万数据
- 面临的问题
旧表(sqlserver)中有1500万条用数据,需要快速导入到新表(mysql)中
时间控制在2小时以内
用户数据有关联关系表2张,导入新表后,之前的用户id已新表的主键为新的用户Uid需要在这个时间内,将3张表(共4500万数据)导入到mysql中
- 开发语言及ORM选择
Python 3.6.5
SQLAlchemy 1.3.3 初步想法
- 单次查询1000条数据
- 通过SQLAlchemy提供的bulk_insert_mappings方法批量插入用户表
- 关联表的数据,需要查一次新表的数据,将旧uid与新表的uid关系对应,再批量插入新的关联关系表中
有没有更好的方法???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果考虑不影响线上业务的前提下:
为什么一定要用语言相关的实现?直接使用mysql的load data也行啊
换个思路,写代码从sqlserver导出到mysql格式的4500万行的sql文件,再source data.sql导入mysql,一拆你就只需要去考虑导出的性能,不用考虑导入的性能
第一步:导出数据到csv文件,保存到多个文件,比如150w一个csv,这样就是30个csv文件
第二步:按照文件个数开多线程导入mysql,怎么导入?
根据你的描述需要对数据做一些逻辑处理,那就需要用第二个方案了,建议并发处理的之前先对mysql参数进行调优,比如关闭双1,加大缓冲池等等
关闭双一:
innodb_flush_log_at_trx_commit = 0
sync_binlog = 0
加大缓冲池:
innodb_buffer_pool_size = 内存的75%