2012-04-18 131 views
2

我有一個mongo(版本2)在replicaset配置生產(下一步是添加分片)。mongo db插入大集合

我需要實現以下幾點:

  • 每天一次,我會收到一個文件與數百萬行,我將其加載到蒙戈。
  • 我有一個運行時應用程序,總是從這個集合讀取 - 非常大量的讀取,並且它們的性能非常重要。 集合已編入索引,所有讀取都執行readByIndex操作。

我當前實現裝載的是:

  1. 液滴收集
  2. 創建集合
  3. 插入到收集新文檔

一個我看到的是,由於mongoDB鎖定我的總性能在加載過程中變得最差。 我已經檢查了多達1000萬個條目的集合。 對於那麼大的尺寸,我認爲我應該開始使用分片

愛這種問題的最佳方法是什麼? 或者我應該使用另一種解決方案策略?

+0

是對你的使用情況,所有讀取針對此集合是「一致的」很重要(因爲他們看到的要麼是前一天的記錄任何5M記錄,或當前記錄)?或者是否可以接受一些讀數來自昨天的轉儲,還有一些來自今天的轉儲? – dcrosta 2012-04-18 15:04:45

+0

不,如果在加載期間某些數據將是「不可訪問的」(因爲我在操作開始時將所有值都刪除),那甚至可以。但是,這當然如果負載需要一些合理的時間,比如說1-2小時。否則,我應該可能有兩個集合和一個元數據(每個元數據可以從中讀取) – Julias 2012-04-19 06:22:07

+0

第N天和第N + 1天的數據文件之間是否有記錄被刪除?或者他們只是添加(或更新)?也就是說,第N天出現的記錄是否在第N + 1天沒有出現? – dcrosta 2012-04-19 20:32:35

回答

1

你可以使用兩個集合:)

  • collectionA包含這一天的數據
  • 新數據到達
  • 創建一個新的集合(collectionB)並插入數據
  • 現在使用collectionB爲您數據

然後,第二天,重複上面的只是交換A和B :)

這會讓collectionA仍然服務請求,而collectionB正在更新。

PS只注意到我很擔心晚了一年在回答這個問題:)