首页 > 解决方案 > Rails 海量数据上传和嵌套记录

问题描述

我必须将大量数据更新到 mysql(~100Mio 记录!)。有些记录已经存在,有些需要创建。我还必须为每条记录创建一些嵌套资源。我知道 activerecord-import gem,但据我所知,它无法处理嵌套记录(或者只能使用丑陋的解决方法)。问题是在创建所有嵌套记录之前我不知道它们的 ID - 并且在单个查询中创建它们需要时间。

所以假设有一个模型叫做 Post 并且可以有很多评论。我当前的代码如下所示:

Post.transaction do
import_posts.each do |import_post|
  post = Post.find_or_initialize_by(somevalue: import_post['somevalue']
  post.text = import_post['text']
  import_post['comments'].each do |import_comment|
    comment = post.comments.find_or_initialize_by(someothervalue: import_comment['someothervalue'])
    comment.text = import_comment['text']
  end
  post.save(validate: false) #Dont need validation - saves some time
end
end

这只是一个示例,它可以工作,但与“该死的快”相去甚远。有什么想法可以加快数据上传速度吗?我完全错了吗?

我正在使用 Rails5 和 ruby​​ 2.4。

提前致谢!

标签: mysqlruby-on-railsruby-on-rails-5

解决方案


推荐阅读