Django和巨大的mysql数据库

2024-04-25 22:47:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

目前使用python csv模块,需要2-4天的时间来处理100万个记录文件。它会检查记录是否已经存在,而很少有其他记录。在

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

memcache能用得上吗。在

更新:还处理了django ManyToManyField字段。这些将如何与直接负载一起使用。在


Tags: 模块文件csvdjango方法过程记录时间
3条回答

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

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

由于我们的客户完全不满意(有失去项目的危险),在使用Python进行了几次失败的优化尝试之后,我们进行了彻底的策略更改,并使用Java和JDBC进行了导入(只导入了一些mysql调优),并将导入时间缩短到了大约45分钟(使用Java,很容易进行优化,因为良好的IDE和profiler支持)。在

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

正如其他人所说,总是在加载大量数据之前删除索引和触发器,然后再重新添加它们——每次插入后重建索引都是一个重要的处理过程。在

如果您正在使用事务,请关闭事务或批处理插入以防止事务过大(过大的定义各不相同,但如果您要处理100万行数据,将其分解为1000个事务可能是正确的)。在

最重要的是,首先备份数据库!唯一比由于导入错误而不得不从备份中恢复数据库更糟糕的是没有当前备份可供还原。在

相关问题 更多 >

    热门问题