Rails 导出为 CSV,无需在内存中构建 CSV

发布于 2024-10-31 09:40:46 字数 365 浏览 1 评论 0原文

Rails 2.3.5,Ruby 1.8.7。

先前的问题中,有一个以 CSV 格式导出数据的解决方案有很多,但其中一些似乎在发送之前在内存中构建数据。导出大型数据集时这样做明智吗?上一个问题中的任何解决方案是否可以避免这种情况?

或者,如果不在本地(在内存中或临时文件中)构建整个响应,是否就无法避免构建响应?

如果后者是正确的,我不会感到惊讶,因为如果 CSV 生成中出现错误,您可能想发回一条错误消息,但我可能会生成太多数据而无法在内存中生成数据/在磁盘上。

Rails 2.3.5, Ruby 1.8.7.

In a prior question, there are a number of solutions to exporting data in CSV format, but some of them seem to construct the data in memory before sending. Is this wise when exporting large data sets? Do any of the solutions in the prior question avoid this.

Or is it impossible to avoid building a response without building the whole response locally, either in memory or in a temp file?

I would not be surprised if the latter was true, since if there is an error in the CSV generation, you might want to send an error message back instead, but I might be generating way too much data to want to generate the data in memory/on disk.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦与时光遇 2024-11-07 09:40:46

您可以直接从 CSV 库(Ruby 1.8 中的 FasterCSV)进行流式传输。

render :text => proc { |response, output|
    CSV.generate(output) do |csv|
      csv << ...
    end
}

如果您担心内存占用,您还应该使用 find_in_batches

You can stream directly from the CSV library (FasterCSV in Ruby 1.8).

render :text => proc { |response, output|
    CSV.generate(output) do |csv|
      csv << ...
    end
}

You should also use find_in_batches if you are concerned about your memory footprint.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文