繁体   English   中英

MongoDB批量插入性能

[英]MongoDB Bulk Insert Performance

我的Rails应用程序中包含以下代码。

module UserItem
  class Rating
    include MongoMapper::Document
    key :user_id, Integer, :required => true
    key :item_id,  Integer, :required => true
    key :rating, Float, :required => true 
  end
end

我大约有1万个用户和1万个项目,我需要为每个项目存储每个用户的评分,这大约是10 ^ 8条记录。 我已经将10 ^ 8条记录的值计算如下:

ratings = [
  {user_id: 1, item_id: 1, rating: 1.5}, 
  {user_id: 1, item_id: 2, rating: 3.5},
  ... and so on 10^8 records
]

现在,我需要将计算出的所有这些10 ^ 8记录插入mongo。 我尝试过

UserItem::Rating.collection.insert(ratings)

UserItem::Rating.create(ratings)

但是将10 ^ 8记录插入mongo需要花费几个小时。 有没有更好/有效的方法将记录插入mongo?

上下文:我使用它的方式更像是存储所有额定值的缓存存储区。 当我显示项目列表时,我将从该缓存中读取并在每个项目旁边显示用户提供的评分。

任何帮助深表感谢!

一种方法是为每个用户存储一个文档,例如,带有“评价”字段,该字段是对用户的商品ID的哈希值

class UserRating
  include MongoMapper::Document
  key :ratings
  key :user_id
end

UserRating.create(:user_id => 1, :ratings => {"1" => 4, "2" => 3})

您必须将字符串键用于哈希。 这种方法使检索给定文档的所有等级变得不容易-如果您这样做太多,则可能更容易按项目存储文档。 如果您一次只需要用户评分的一小部分,它可能也不是很有效。

显然,您可以将其与其他方法结合使用以提高写入吞吐量,例如批处理插入的内容或分片数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM