【问题标题】:Django database; how to download huge data in csv formatDjango 数据库;如何以csv格式下载大量数据
【发布时间】:2016-01-20 00:23:49
【问题描述】:

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

【问题讨论】:

  • 我们无法知道如何优化它,因为您没有向我们展示任何代码。

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    至于事务的速度,您可以尝试其他数据库后端。但是,如果您需要经常执行此操作以使速度成为主要问题,那么在更大的过程中可能还有其他需要优化的东西。

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2018-08-08
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多