mysql - 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。
提前致谢!
解决方案
推荐阅读
- angular - 在 Ionic 应用程序中使用共享组件时生产构建失败
- macos - Mac 上的泛音和声音输入
- c++ - 成员函数中的静态变量
- c++ - For 循环 else if 语句不计算
- f# - F# 类型 'a -> ('a -> 'b) -> 'b
- math - 如何解决 T(n+1)=T(n)+logn 的复杂度
- php - 无法使用 PHP ARC2 SPARQL 从土地注册 api 数据中获取数据
- python - 在 Python 中拆分 Json 数组
- matlab - 如何在 MATLAB 中通过 UDP 发送大量数字?
- c++11 - 如何指定整数数组作为编译器命令行定义 -D