搜索数据库时解析大型CSV

问题描述 投票:0回答:1

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

我们定期迭代大型CSV文件(~50000到2m行),对于每一行,我们需要检查数据库表是否匹配列。

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

目前,整个过程是高度CPU,内存和时间密集的逐行拉动,所以我们分批执行匹配,但仍然寻求一种有效的方式来进行内存和时间比较的想法

谢谢。

ruby-on-rails ruby database postgresql csv
1个回答
1
投票
  1. 将完整的CSV文件加载到数据库中的临时表中(使用数据库工具,请参阅How to import CSV file data into a PostgreSQL table?
  2. 在数据库中执行匹配和操作,即在SQL中
  3. 如有必要,请在之后截断临时表

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

© www.soinside.com 2019 - 2024. All rights reserved.