Django数据库;如何以csv格式下载大数据

时间:2015-10-21 05:58:11

标签: django database python-3.x django-models

我在Django中设置了我的数据库,其中包含大量数据。任务是以csv格式一次下载所有数据。我在这里面临的问题是当数据大小(表行数)达到2000时,我能够下载它,但是当行数达到5k以上时,它会抛出一个错误,“网关超时”。如何处理这样的问题。目前没有表索引。 此外,当有2K数据可用时,下载大约需要18秒。那么如何优化呢。

2 个答案:

答案 0 :(得分:0)

首先,确保生成CSV的代码尽可能优化。

接下来,网关超时来自您的前端代理;所以只需增加那里的超时。

然而,这是暂时的缓解 - 随着您的数据集的增长,此超时将耗尽并且您将继续收到这些错误。

永久解决方案是触发一个单独的进程在后台生成CSV,然后在完成后下载。您可以使用celeryrq来执行此操作,这两种方法都可以将任务排队等待执行(然后在以后收集结果)。

答案 1 :(得分:0)

如果您目前正在使用django.http中的HttpResponse,那么您可以尝试使用StreamingHttpResponse。

如果失败,您可以尝试直接查询数据库。例如,如果您使用MySql数据库后端,这些答案可能会帮助您: dump-a-mysql-database-to-a-plaintext-csv-backup-from-the-command-line

至于事务的速度,您可以尝试其他数据库后端。但是,如果你需要经常这样做以使速度成为主要问题,那么在较大的过程中可能还有其他东西应该被优化。