2013-08-06 45 views
1

我有一個在亞馬遜上運行的mongo實例。一個集合中有5M個文檔。數據是20docs/1sec。沒有索引。而我的服務器只有50G的空間,已經使用了22G。Mongodb備份或複製或克隆與現有的大數據

現在我需要爲這些數據做一些數據分析,但是因爲在索引上,我執行一個查詢,db是塊,並且在我重新啓動服務器之前無法插入數據。

而數據保持進來,所以我擔心空間不夠。

我想要做的是構建另一臺服務器,設置一個新的mongo實例,然後將數據複製到它。然後在新的索引上添加索引並進行分析。

Waht是最好的方法,任何建議?

+0

你想只備份mongodb數據? –

回答

2

也許最好的方式就是在後臺創建索引。這不會阻塞任何東西,然後您可以在節點上運行索引查詢。創建後臺索引需要更長的時間,但它確實防止阻塞:

db.collection.ensureIndex({ col: 1 }, { background: true }); 

參見:http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/

如果你真的想要一個次要做分析,那麼你就可以創建一個副本來自設定您現有的成員。但爲此,您必須取消MongoDB,然後使用參數replSet重新啓動它。使用該參數啓動後,您現在可以添加一個新的副本集成員來同步數據。這種同步還會影響性能,因爲大量數據將不得不被複制。由於MongoDB需要同步輔助數據的oplog,主節點現在也需要更多的磁盤空間。

mongodumpmongorestore也可以是一個選項,但是兩個節點之間的數據不會保持同步。每次您想要對新數據運行分析時,您都必須運行dump + restore。在這種情況下,副本集可能會更好。

雖然副本集真的想要3個成員,但爲了防止在節點出現故障時出現裂腦。這可能是另一個數據節點,但在你的情況下,你可能想要建立一個仲裁器。如果你不要想自動故障切換(我認爲你不需要它在這種情況下,因爲你只是做分析),然後設置你的副本設置兩個節點,但做第二個(新)一個隱藏:http://docs.mongodb.org/manual/tutorial/configure-a-hidden-replica-set-member/

+0

Hi @Derick,非常感謝。這是解決我的問題。也讓我對mongo更加了解。 – Zhe

0
  1. 從該現有成員設置副本集,然後在輔助上添加索引 並執行分析。
  2. 乘坐mongodump和恢復到新服務器,並做了分析
相關問題