2013-08-05 43 views
0

我最近已經開始了,有一個大的MongoDB實例的公司工作大。所選擇的文檔密鑰存在一些問題,特別是單個文檔可能會一直持續增長。經過數百萬次更改後,單個文檔可以達到130MB +。MongoDB中如何遷移塊如果塊只中有一個文檔,並超出了最大塊大小

我們正在使用的MongoDB 2.2.1。我試圖做的是修復平衡,因爲平衡器處於試圖遷移一些大塊的循環中。它失敗,因爲塊大小大於默認的最大允許塊大小(64MB)。該塊也可以不分割,因爲它包含單個文檔。

真正的解決方法是更改​​文檔密鑰(創建一個新的數據庫實例,並遷移到它),但是這將需要相當一段時間做,我想提出在短期內修復,以幫助平衡。我唯一能想到的是將默認塊大小從64MB增加到160MB,這樣我們的一些大塊可以遷移。

我的問題是,是它更好地:

  1. 增加最大塊大小160MB,手動移動數據塊,然後減小max塊大小。 (此時大文檔ID將回到不可遷移的狀態)。
  2. 永久性地將最大塊大小增加到160MB,並將其留在那裏,直到我們可以遷移到新的密鑰。 (這是我的理解,增加塊大小可以有一些非常激烈的IO影響)
  3. 別的東西嗎?

回答

1

單個文檔不能超過16MB,但共享相同分片鍵的文檔集合當然可以超過16MB。

我不明白你爲什麼要移動,雖然那大塊,應該是在它是目前在碎片完全正常。現在,我會建議場景1,因爲它具有最小的影響,但是您當然應該修復碎片鍵,以便您沒有共享相同鍵的文檔大於64MB。

+0

我完全樂意把它留它在哪裏...... mongos平衡要移動它。 :) 有沒有辦法告訴平衡器跳過特定的分片鍵? – dtorgo

+0

不,我不這麼認爲,但令我感到驚訝的是,它不僅僅是移動其他塊。 – Derick