簡體   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