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

时间:2016-10-09 22:44:08

标签: ruby-on-rails ruby csv github large-files

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

我无法上传3.5GB到github,但我必须使用它,再加上这么大的文件是硬内存老虎机。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

- 对于这个长期运行的工作,这台服务器是否会受到商业影响?

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

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

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

  1. 编写CSV导入脚本(可能是rake任务),不要使用默认的ruby CSV库,使用faster cvssmarter cvs之类的东西(它们更快)。确保在编写导入脚本时使用库的枚举器函数,以避免将整个电子表格加载到内存中(foreach)。此外,由于这可能是一个长期运行的工作,放一些反馈输出(如看跌期权或计数器),以便你有一些洞察力去做什么。

  2. 使用实际的电子表格在本地测试脚本,我不知道数据的完整性是什么,但在电子表格中,您可能会遇到字符编码问题。最好是在生产过程中没有一堆失败的运行时弄清楚你的数据库。

  3. 部署代码

  4. 压缩CSV

  5. 将压缩的CSV传输到指定的目录

  6. 解压缩CSV

  7. 运行导入脚本

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

  9. 删除CSV