Ruby on rails 搜索数据库时解析大型CSV

Ruby on rails 搜索数据库时解析大型CSV,ruby-on-rails,ruby,database,postgresql,csv,Ruby On Rails,Ruby,Database,Postgresql,Csv,目前有一个棘手的问题,需要找到最有效的解决方法 我们定期迭代大型CSV文件(约50000到2m行),对于每一行,我们需要检查数据库表中的匹配列 因此,例如,每个CSV行可以有关于活动的详细信息-艺术家、地点、日期/时间等,对于每一行,我们检查我们的数据库(PG)中与艺术家、地点和日期/时间最匹配的行,然后在找到匹配项时执行操作 目前,整个过程是高度CPU、内存和时间密集型的逐行拉动,因此我们分批执行匹配,但仍在寻找一种有效的方法来执行内存和时间方面的比较 谢谢 将完整的CSV文件加载到数据库中的

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

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

因此,例如,每个CSV行可以有关于活动的详细信息-艺术家、地点、日期/时间等,对于每一行,我们检查我们的数据库(PG)中与艺术家、地点和日期/时间最匹配的行,然后在找到匹配项时执行操作

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

谢谢

  • 将完整的CSV文件加载到数据库中的临时表中(使用DB工具,参见示例)
  • 在数据库(即SQL)中执行匹配和操作
  • 如有必要,随后截断临时表

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

    如果您提供需要考虑的模式和关系示例,肯定会有所帮助。但一般来说,分批配料是一个很好的方法。谢谢你的建议!最初我们有一些限制,基本上不可能将导入到临时表中,但现在我们已经解决了这个问题