【问题标题】:Bulk create records in rails?在 Rails 中批量创建记录?
【发布时间】:2013-12-16 17:22:43
【问题描述】:

好的,所以我有一个名为 HashtagMapper.com 的 Rails 应用程序,它可以查找成千上万的推文并映射它们。我遇到的问题是,地理编码 1000 多个查询之间最多可能需要 10 秒,然后 .create() 调用大约需要 10 毫秒,对于 1000 个查询来说是 10 秒。

如何一次在 Rails 中创建 1000 多个 DB 对象?我现在正在打电话

SearchResult.create([ { :2D => array }, { :of => SearchResults } ]) 

对于 1000 多个对象。普通的 SQL 会更快吗?怎么样?

【问题讨论】:

  • This question and its responses 可能会提供一些见解。
  • 这很有趣,但我宁愿不转换为 CSV 来导入记录。
  • 当然你不会想将你的对象转换成 csv 格式——CSV 只是发生枚举的对象的集合。这两个答案提供了不同的方法来解决您的问题。也许两者都不是您想要的,但都不会强迫您将任何内容转换为 csv。
  • 当然。我错过了第一次浏览。咖啡不够

标签: sql activerecord ruby-on-rails-4 rails-activerecord rails-postgresql


【解决方案1】:

使用BulkInsert gem

来自数组或哈希:

Book.bulk_insert(:title, :author) do |worker|
  # specify a row as an array of values...
  worker.add ["Eye of the World", "Robert Jordan"]

  # or as a hash
  worker.add title: "Lord of Light", author: "Roger Zelazny"
end

默认为数据库列

class Book < ActiveRecord::Base
end

book_attrs = ... # some array of hashes, for instance
Book.bulk_insert do |worker|
  book_attrs.each do |attrs|
    worker.add(attrs)
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多