V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fy
V2EX  ›  Python

求助如何快速导入数据到数据库

  •  
  •   fy ·
    fy0 · 2015-08-23 02:30:11 +08:00 · 2418 次点击
    这是一个创建于 3406 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求助一下大家,我手上有一些历史数据想要导入到数据库( 100 多 G ),数据库是 PostgreSQL

    然而问题是导入非常缓慢,慢到无法接受,请大家给我出个主意。


    数据库是这样的:

    表 1 :数据源信息 - (id, 文件名,数据时间,导入时间)

    表 2 :数据子项 A - ( id, 属性若干,数据源 id )

    表 3 :数据子项 B - ( id, 属性若干,数据源 id )

    表 4 :数据关联 - (数据子项 A_id ,数据子项 B_id )

    数据源和数据项是一对多的关系,单条数据项会根据需要分别存入 A 和 B 两个表,由额外的关联表来标出他们的联系。


    我的办法是这样的,用 peewee 连接数据库,然后就那么正常的 create 对象,然而用不用事务都很慢。

    从前倒是有过用 csv 导入数据,很快,但是这次涉及外键我也就没有太好的办法,求助!
    6 条回复    2015-08-25 02:59:47 +08:00
    Septembers
        1
    Septembers  
       2015-08-23 10:22:00 +08:00
    先不要建立关系 导入之后再建立关系
    see http://initd.org/psycopg/docs/cursor.html#cursor.copy_from
    fy
        2
    fy  
    OP
       2015-08-23 16:13:09 +08:00
    @Septembers 可我这里还有一些别的问题: 1. 数据项中无主键, 2. 对于每一条数据而言,并不一定对应表 A 与表 A 的两条数据,可能这一条数据只在表 A 里面写。

    这导致我建立联系的时候很麻烦
    cxbig
        3
    cxbig  
       2015-08-23 17:05:16 +08:00
    1. 关闭外键检查,导入后再开启
    2. 如果外键根据新数据表需要进行位移,使用 PHP 、 Ruby 、 Python 等语言读取数据,再用他们的 ORM 连接并导入数据
    tesion99
        4
    tesion99  
       2015-08-24 09:28:59 +08:00
    Mysql 有 load data in file 可以把数据从文件按照指定分隔符,指定字段导入数据库, PostgrepSql 应该也有类似的命令,不过这种方式下最好把文件分割为多个小文件,不要太大了
    hasdream
        5
    hasdream  
       2015-08-24 15:23:54 +08:00
    指定的格式 python/php/java 多线程去跑 , 多次测试。
    fy
        6
    fy  
    OP
       2015-08-25 02:59:47 +08:00
    @hasdream 试过了 多线程没用

    @tesion99 有这么回事,我也是这么想的 打算手动编制主键进行导入工作了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1429 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 23:57 · PVG 07:57 · LAX 15:57 · JFK 18:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.