【问题标题】:Parsing large CSVs while searching Database在搜索数据库时解析大型 CSV
【发布时间】:2019-02-27 14:26:44
【问题描述】:

目前有一个棘手的问题,需要最有效的解决方法。

我们定期遍历大型 CSV 文件(约 50000 到 2m 行),并且对于每一行,我们需要检查数据库表中的匹配列。

因此,例如,每个 CSV 行可能包含有关活动的详细信息 - 艺术家、地点、日期/时间等,并且对于每一行,我们检查我们的数据库 (PG) 中是否存在与艺术家、地点和日期匹配的任何行/时间最长,如果找到匹配则执行操作。

目前,整个过程是高 CPU、内存和时间密集型的逐行提取,因此我们分批执行匹配,但仍在寻求一种有效的方法来执行内存和时间方面的比较

谢谢。

【问题讨论】:

  • 如果您提供了需要考虑的模式和关系示例,那肯定会有所帮助。但通常批处理是一个不错的方法。

标签: ruby-on-rails ruby database postgresql csv


【解决方案1】:
  1. 将完整的 CSV 文件加载到数据库中的临时表中(使用 DB 工具,参见例如How to import CSV file data into a PostgreSQL table?
  2. 在数据库中执行匹配和操作,即在 SQL 中
  3. 如有必要,事后截断临时表

这会将大部分负载转移到数据库服务器中,避免所有 ActiveRecord 开销(网络流量、结果解析、模型实例化等)

【讨论】:

  • 感谢您的建议!我们最初有一些限制,基本上无法导入临时表,但我们现在已经解决了这个问题
猜你喜欢
  • 2012-09-19
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多