Django 与大型 MySQL 数据库

4 投票
5 回答
2162 浏览
提问于 2025-04-16 02:10

将几百万条记录的csv文件导入到django中,最好的方法是什么?

目前我在用python的csv模块,处理一百万条记录的文件需要2到4天的时间。这个过程中会检查记录是否已经存在,还有其他一些操作。

有没有办法把这个过程缩短到几个小时内完成?

能不能用memcache来帮忙?

更新:还有一些django的ManyToManyField字段也需要处理。这些字段在直接加载时该怎么用?

5 个回答

0

正如你所提到的,你想跳过ORM(对象关系映射),直接与数据库打交道。根据你使用的数据库类型,你可能会找到一些不错的方法来直接加载CSV数据。如果是Oracle数据库,你可以使用外部表,这样可以非常快速地加载数据;而如果是MySQL,你可以使用LOAD命令。我相信Postgres也有类似的功能。

加载几百万条记录不应该花费2到4天的时间;我通常在一台性能较低的机器上,使用mysqldump在几分钟内就能把几百万行的数据加载到MySQL数据库中。

1

我建议你直接使用MySQL的Python驱动。另外,你也可以考虑一下多线程的选项。

3

我不太清楚你的情况,但我们在使用Django的时候遇到过类似的问题,大约3000万条记录导入花了超过一天的时间。

因为我们的客户非常不满意(项目面临失败的风险),在尝试了几次用Python进行优化都没有成功后,我们决定采取一个彻底的策略改变,只用Java和JDBC来进行导入(还做了一些MySQL的调优),结果导入时间缩短到了大约45分钟(用Java优化起来很简单,因为它有很好的开发工具和性能分析工具支持)。

撰写回答