首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用大型mysql数据库的Django

使用大型mysql数据库的Django
EN

Stack Overflow用户
提问于 2010-08-02 14:08:32
回答 5查看 2K关注 0票数 4

将数百万个记录csv文件导入django的最佳方式是什么?

目前使用python csv模块,处理一百万条记录文件需要2-4天。它会检查该记录是否已经存在,并且很少检查其他记录。

这个过程能在几个小时内完成吗?

memcache能以某种方式使用吗?

更新:还有一些django ManyToManyField字段也得到了处理。这些如何与直接加载一起使用。

EN

回答 5

Stack Overflow用户

发布于 2010-08-02 14:39:35

我不确定你的情况,但我们在Django中也有类似的情况,大约3000万条记录需要一天以上的时间才能导入。

由于我们的客户完全不满意(有失去项目的危险),在使用Python进行了几次失败的优化尝试后,我们采取了根本的策略改变,使用Java和JDBC (+一些mysql调优)进行了导入(仅),并将导入时间降低到了大约45分钟(使用Java,因为非常好的IDE和分析器支持,所以优化非常容易)。

票数 3
EN

Stack Overflow用户

发布于 2010-08-02 14:34:59

我建议直接使用MySQL Python driver。此外,您可能需要考虑一些多线程选项。

票数 1
EN

Stack Overflow用户

发布于 2010-08-03 00:42:51

根据数据格式(您说的是CSV)和数据库的不同,最好将数据直接装载到数据库中(或者直接装载到Django管理的表中,或者装载到临时表中)。例如,Oracle和SQL Server提供了用于加载大量数据的自定义工具。对于MySQL,您可以使用很多技巧。例如,您可以编写一个perl/python脚本来读取CSV文件,并使用insert语句创建一个SQL脚本,然后将该SQL脚本直接提供给MySQL。

正如其他人所说,总是在加载大量数据之前删除索引和触发器,然后再将它们添加回来--在每次插入之后重新构建索引是一个主要的处理问题。

如果您正在使用事务,要么关闭它们,要么批量插入,以防止事务太大(太大的定义可能会有所不同,但如果您要处理100万行数据,将其拆分为1000个事务可能是正确的)。

最重要的是,首先备份你的数据库!唯一比因为导入错误而不得不从备份恢复数据库更糟糕的事情是没有可恢复的当前备份。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3385400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档