如何使用 github 处理巨大的 CSV 文件 (3.5GB)

How to work with huge CSV file (3.5GB) with github

我有一个 RoR 项目,我必须用 3.5GB 的巨大 CSV 文件填充数据库。

我无法将 3.5GB 上传到 github,但我必须使用它,而且处理这么大的文件也很难记忆。

我该如何解决这个问题?

首先,绝对没有理由将您的数据提交给Git。你应该使用 migration

由于您的数据量很大,您可以直接使用数据库来加载数据。您可能必须确保您的 CSV 格式正确,但这很简单。

根据您的数据库,您可以使用 LOAD DATA 或 COPY,请参阅此 SO 问题 MySQL LOAD DATA INFILE with PostgreSQL COPY FROM command

我实际上经常这样做。在尝试这样的事情时,您需要考虑一些事情:

-此应用是否获得大量外部用户流量或关键内部用户流量?

-此服务器因这项长期 运行ning 工作而陷入困境是否对业务有影响?

-托管此应用程序的服务器是否具有处理此类作业所需的资源(内存和硬盘 space)?

-您是否有 SCP 访问主机服务器以将文件传输到服务器?

一旦您对上述内容有了很好的理解,您应该执行以下操作。

  1. 编写 CSV 导入脚本(可能是 rake 任务),不要使用默认的 ruby CSV 库,使用类似 faster cvs or smarter cvs 的东西(它们更快)。确保在编写导入脚本时使用库的枚举器函数,这将避免将整个电子表格加载到内存中 (foreach)。此外,由于这可能是一项很长的 运行ning 工作,所以请提供一些反馈输出(例如看跌期权或计数器),以便您对发生的事情有一些了解。

  2. 在本地使用实际电子表格测试脚本,我不知道数据完整性如何,但在那么大的电子表格中,您可能 运行 遇到字符编码问题。最好弄清楚这一点,而不要在生产中遇到一堆失败的 运行s 弄乱你的数据库。

  3. 部署您的代码

  4. 压缩 CSV

  5. 将压缩后的 CSV 文件传送到您指定的目录

  6. 解压缩 CSV

  7. 运行导入脚本

  8. 检查数据是否有成功导入的迹象,例如记录差异。

  9. 删除 CSV