我的Rails應用程序中有以下代碼。MongoDB批量插入性能
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
而且我有大約10K個用戶和10K項目,我需要爲每個項目存儲每個用戶的評級,這是大約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個記錄計算成蒙戈。我試着用
UserItem::Rating.collection.insert(ratings)
和
UserItem::Rating.create(ratings)
但它需要時間彙集到10^8條記錄插入到蒙戈。有沒有更好的/有效的方法將記錄插入到mongo中?
上下文:我使用它更像是存儲所有評級值的緩存存儲。當我顯示項目列表時,我只會從此緩存中讀取並顯示用戶提供的評分以及每個項目。
任何幫助非常感謝!
我有一個類似的設置,因爲我爲產品的所有用戶存儲預測評級 - 我最終爲每個用戶存儲了一個文檔,其中item_ids的哈希值爲評估值。可能不太好,如果你一次只需要1或2個評分 –
@FrederickCheung這是一個好主意!但在我的情況下,我需要的東西,1。給定一個用戶 - 我需要所有項目,他與評級和評級2.鑑於一個項目 - 我需要所有用戶與評級一起評級。 –
您可以在多個驅動程序中一次插入多個文檔。您可能想要禁用寫入問題(因此它不會等待響應)。在插入過程中關閉索引... – WiredPrairie