在 Rails 中将 100000 多条记录插入 mysql 的最快方法

pan*_*ang 0 ruby mysql ruby-on-rails redis

我想将信息从 redis 传输到 mysql。

一开始,我得到了redis的user_id和score。

info = $redis.zrevrange("some_info", 0, limit - 1, withscores: withscores)
Run Code Online (Sandbox Code Playgroud)

那么我需要处理这些日期:

  total_info = info.each_slice(2).to_a.inject([]) do |sum, e|
    sum << {
            id: id,
            name: name,
            rank: rank,
            score: score,
           }
Run Code Online (Sandbox Code Playgroud)

total_info 是一个大小为 100000+ 的数组。

然后我需要插入total_info到mysql的记录。

我尝试创建一个循环来插入,但我认为这不是一个好主意。

如何制作?什么是最快的方法?

coo*_*sse 5

您可以在他的Fastest Version 中使用Active Record Import

下面是一个例子:

columns = [ :id, :name, :rank, :score ]
values = []
infos.each do |info|
  values << [info.id, info.name, info.rank, info.score]
end
Model.import columns, values, validate: false
Run Code Online (Sandbox Code Playgroud)