数据库: mysql
数据量:20W
打算用 sqlalchemy 来把里面的数据 下载到本地的另外一个 postgresql数据库里面
思路是,sqlalchemy 去mysql获取数据,然后直接插入本地的postgresql里面
我目前的方法是 session.query(User1).all() 然后for ,然后插入本地数据库,但是好卡 好卡的
我知道 我还 可以先获取 总数据量,然后 limit 分页 来获取数据
我想请问下,有没有实现这样功能的轮子呀
嘿嘿
1
clijiac 2015-07-03 14:24:06 +08:00 1
不能导出成sql 然后再导入么~
写代码的话 也有batch insert的吧 随便搜了下 看看这个http://stackoverflow.com/questions/758945/whats-the-fastest-way-to-do-a-bulk-insert-into-postgres |
3
clijiac 2015-07-03 14:34:01 +08:00
脑子一拍 navicat的datatransfer可不可以支持啊..哈哈哈
|
4
Septembers 2015-07-03 14:36:55 +08:00
@sivacohan 比如PgSQL VARCHAR不容忍\0字符
|
5
qq2549112 OP @clijiac
@sivacohan @Septembers 谢谢 难点不是 怎么插入到pg ,而是 怎么把数据库取出来,主要是数据量大,如果只有几百个记录,我直接 all 就可以了, 但这里面有20w 不能用all |
6
whatot 2015-07-03 14:47:13 +08:00
试试postgresql的dblink,外部表
|
8
Septembers 2015-07-03 14:52:55 +08:00 1
|
10
qq2549112 OP @whatot 哦哦 我研究下这个东西,dblink 我目前理解 好像是 快捷方式的意思, 那数据还是在远程mysql里面吗, 是不是我查询的时候,他才去转换为jsonb哦,如此的话 那每次查询会浪费好多性能,要好多时间哦, 我再研究下 dblink看看,我还是第一次接触这个东西 嘿嘿 谢谢
|
11
whatot 2015-07-03 14:58:12 +08:00 1
@qq2549112 如果数据只是一次转移,推荐先从mysql导出数据,之后使用copy导入到postgresql。
如果是长期任务,那可以试试dblink。 |
12
qq2549112 OP @whatot 就是长期的
最终,我想实现的功能 就是让 pg 里面的数据 和mysql 保持一致 1. 先把历史数据拷贝过来 ,数据量20w 2. 实时增量同步 目前,我要先实现第一步, 就遇到了分页问题 [ 也就是现在发帖求助的问题] 谢谢 |
13
qq2549112 OP @qq2549112 谢谢你,刚才我研究了下,发现dblink不行 ,因为 mysql在内网, postgresql 在外网,他们2个之间 无法互相访问, 我有个主机可以访问他们2个, 可能还是要用 python脚本来弄
|
14
clijiac 2015-07-03 16:17:29 +08:00
|
15
clino 2015-07-03 16:57:07 +08:00
我觉得楼主要先弄清楚是读慢还是写慢,我估计读不会慢,如果写慢要用事务,用单个事务批量写才能快
|
16
realityone 2015-07-03 17:32:14 +08:00
其实可以参考 flask-sqlalchemy 里面的 Pagination 的实现
|
17
ksupertu 2015-07-03 17:33:25 +08:00
20万数据用kettle可以搞定,有mysql bulk load功能,图形化配置,酸爽无比,前提你的linux有图形界面,配置好之后可以用脚本去跑,数据量更大的话我是用python的pandas库来实现的,但是当有重复数据的时候插入的很慢很慢,600万条我跑了三天了,也许是代码写的渣渣吧……mysql blob字段插入的时候慢成狗了,似乎每次都要全表扫描一次,优化了下还是慢成狗……
|
18
zhouquanbest 2015-07-03 18:14:09 +08:00
20w真心少
我觉得LZ是写法有问题 和Sqlalchemy没什么关系 |
19
qq2549112 OP 感谢楼上各位
|