以 ZIP 格式归档大量 PDF 文件

Archiving large number of PDF files in a ZIP

我在 Rails 5.1 应用程序上有一个 Ruby,我在其中生成表示数据库中记录的 PDF 文件。

我需要存档这些 PDF 文件,以便它们可以存储在应用程序之外。

这主要是一次性事件,因此我不需要持续同步。

我有工作代码,可以将每条记录转换为 PDF 文件,将该文件添加到内存中内置的 ZIP 文件,然后 returns 将该 ZIP 作为下载文件提供给用户。

这行得通,但是如果您有很多记录记录,Web 服务器会超时,所以我需要找出一种不会占用所有服务器内存的更好方法。

ZIP 文件的大小可能为 200MB,其中包含 10,000 多个 PDF 文件。

我将应用程序托管在它们自己的容器中,因此我可以在必要时访问服务器文件目录,但每次重新部署或容器关闭都会清除它。

我正在考虑实施的方法是:

  1. 运行 后台处理器中的存档在完成下载后向用户发送电子邮件 link。
  2. 每 100 条左右的记录将记录分成一个单独的 ZIP(以避免内存问题和单个文件太大)。
  3. 将 ZIP 文件存储在容器的目录中 24 小时,并让用户通过他们的电子邮件下载档案 link(每个 ZIP 文件都有一个单独的 link)。
  4. 24 小时后擦除容器上的 tmp ZIP 文件。

第一次做这么大规模的事情;这种做法合理吗?什么是实现从服务器归档 PDF 文件的更好方法?

你的做法是合理的。一些评论:

  1. 每个文件 100 条记录,预计每次查询 10000 条记录,这意味着用户将不得不手动下载和处理 100 个文件,这对用户来说不是很友好。我会考虑生成大文件而不是内存或流媒体。一旦知道所有文件大小 - 您可以使用 nginx mod_zip 即时创建非压缩的 zip 文件(如果导出中的记录可以出现在多个不同的导出中,这可能很有用)。
  2. 取决于此操作需要多长时间 - 可能需要在创建过程中提供某种进度,这样用户就不会在认为第一个导出无效时启动多个其他导出。
  3. export 应该在 app deploy/restart 中存活,也应该是幂等的