搜索数据库时解析大型CSV

时间:2019-02-27 14:26:45

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

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

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

例如,每个CSV行都可以包含有关事件的详细信息-艺术家,地点,日期/时间等,对于每一行,我们都会检查数据库(PG)中与艺术家,地点和日期/时间最多,然后如果发现匹配项,则执行操作。

当前,整个过程需要占用大量CPU,内存和时间,因此我们分批执行匹配,但仍在寻找一种有效的方法来进行内存和时间上的比较。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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