2016-02-12 56 views
0

我收集了大約8800萬條記錄。 收集的大小約爲9440 Mb。 此集合現在放置在1個分片上(帶有複製) 現在由於磁盤空間不足,我必須在3個可用分片上分發此集合(帶有複製)。mongodb分片在後臺收集

這是我的數據庫:

Database_name = SensorData 
Collection_name = Values 
Index : 
    [ 
    {"v":1,"key":{"_id":1},"name":"_id_","ns":"SensorData.Values"}, 
    {"v":1,"key":{"i":1},"name":"i_1","ns":"SensorData.Values"}, 
    {"v":1,"key":{"i":1,"date":1},"name":"i_1_date_1","ns":"SensorData.Values"} 
    ] 
Shard collections = 
    { "_id" : "set1", "host" : "set1/***.***.***.35:27018,***.***.***.30:27018" } 
    { "_id" : "set2", "host" : "set2/***.***.***.162:27018,***.***.***.33:27018" } 
    { "_id" : "set3", "host" : "set3/***.***.***.174:27018,***.***.***.27:27018" } 

我嘗試下面的命令,但我的數據庫將凍結。

sh.status() 
    { "_id" : "SensorData", "partitioned" : true, "primary" : "set1" } 
sh.enableSharding("SensorData") 
    { "ok" : 0, "errmsg" : "already enabled" } 
sh.shardCollection("SensorData.Values", {i: 1}) 

使用最後一條命令,數據庫將在一段時間後凍結。

我的問題是:這是正確的做法,我可以分片的背景這個集合所以它被放置在此集合的數據將不受影響。 (或略微影響)

+0

a)是的。 b)不是我所知道的,是一名經過認證的(2.6)DBA。 C)這就是爲什麼建築規劃的幾件事情你不能與MongoDB的飛做的原因之一。 –

回答

1

我的建議對你是把你的應用程序維護操作的時間,只需做到以下幾點:

  • 不要改變任何東西到當前集合。
  • 用你想要的分片鍵創建一個新的分片集合,並添加你想要的所有其他索引。
  • 運行腳本將數據從初始集合複製到在集羣中正確分片的新數據。
  • 刪除舊集合。
  • 將新集合重命名爲初始名稱。

最終,您可以通過預熱新集合來提高複製步驟的速度,以強制跨羣集創建塊,以確保您不僅僅依靠平衡器完成所有工作,因爲最初,只有一個塊存儲在碎片中的一個碎片上,並且它將花費所有寫入一段時間,直到平衡器可以重新平衡羣集中的塊。

希望它有幫助。

+0

我不明白。它是一個問題嗎 ? –