2012-03-03 35 views
2

您是否編寫過用於分片的自定義平衡器來平衡不使用MongoDB中的平衡器的塊,並且請您解釋一下爲什麼必須這樣做的用例?MongoDB中的自定義平衡器

回答

2

我曾經管理過一些自定義平衡腳本暫時有用的情況,例如,在某些分片上存在區域性數據需求或者某些集合不應平衡的情況下。在速度方面沒有真正的優勢(主要受磁盤和內存中的數據分佈限制),事實上,進行自定義平衡的一個原因是讓速度變慢。

雖然這是很挑剔的,但通常不值得我的長期經驗。您可以使用平衡器窗口進行基於時間的平衡,並且將來可以使用塊標記以及將集合標記爲「不平衡」的功能,這將使大多數其他任務無需自定義腳本。

https://jira.mongodb.org/browse/SERVER-2545 https://jira.mongodb.org/browse/SERVER-4621一個價格

0

兩個答案:

  1. 目標:慢平衡 - 自定義均衡器能寫入更慢,增加每個餘額輪迴之間的時間延遲。這可以用於在您與其他(可能更重要)的應用程序共享吞吐量的情況下降低IOPS /磁盤吞吐量。我可能會建議尋求在守護進程中使用unix'nice',或者設置平衡來使用時間表(請參閱Mongo文檔)。

注意:使用MongoDB的版本2.4,默認改變secondaryThrottle驗證之前與塊遷移前進的數據被寫入到次級。如果您只是禁用了輔助程序,這可能會大大減慢塊遷移。爲了解決這個問題,類型:

use config 
db.settings.update({"_id":"balancer"},{$set:{"_secondaryThrottle":false}}) 
  1. 目標:更快的平衡 - 我們都知道平衡器可以永遠需要平衡不同的瘋狂塊計算,天量級。我沒有寫這種平衡器,但我可以很容易地看到它是如何成爲一個平衡器。假定一次只能有一個塊移動。如果我們假定我們有大量的碎片(比如48個),並且每個碎片都有它自己的磁盤/設備,那麼這個遷移概念可以通過配對要被遷移的碎片/碎塊來加速,並且全部進入平行。

我們不知道的是,這對配置服務器有什麼影響。配置服務器的工作方式是否存在假設,如果我們有2個以上的同時移動,會使其中斷?聽起來好像是該查看配置服務器代碼的時候了。或者,如果你/我/我們寫了這樣一種動物,它是否有用或者只是導致疼痛和死亡,或者甚至更糟,被迫住在密西西比州,我們中的一個人可能會問10Gen。