2011-10-31 53 views
1

爲了平衡負載,MongoDB集羣如何在節點之間分佈加蓋集合?我打算在基於MongoDB的CMS中使用Capped Collection來評論每篇文章。讓我們假設我們有100,000個帖子,因此每個帖子有10萬個封頂集合存儲評論。爲了讀寫可擴展性,這些Capped集合將平均分佈在集羣中嗎?MongoDB集羣和100,000封裝集合

我不想分割加蓋的集合。我希望將所有加蓋的集合均勻地分佈在集羣中,以實現讀寫可伸縮性。

讓我們假設我們有5臺機器。當我們創建新的集合時,我需要在不同的機器/節點上創建它們,並在添加新機器時重新分配它們。

+0

看起來MongoDB確實支持大量的性能損失的集合,並且它們不會自動分佈在集羣中。 http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections – Praveen

+0

在開發人員列表的管道中,跨羣集自動分發集合的功能正在流水中。 https://jira.mongodb.org/browse/SERVER-939 – Praveen

回答

1

1)當創建一個集合(封閉或不封閉)時,它被設置在數據庫的主分片上。解決方案是爲每個數據庫設置一個集合,以便mongo在集羣中平衡數據庫。平衡的規則並不明確,但主要取決於每個碎片上的當前負載。 2)相信我,你應該使用一個大的收藏夾來存放你的所有帖子,並且以一種聰明的方式將它分成幾部分。它將確保您的數據在羣集中真正實現高效和自動平衡。 超過上限的收藏並不真正節省空間,因爲它會爲您的所有收藏預先分配所有空間(這意味着您將浪費大量空間) 除非您有充足的理由才能上限,你最好嘗試分片。

一個建議:在分片鍵中使用'postId'字段,它可能是性能最好的。

1

顯然,這是尚未實現MongoDB的:Issue

報價從similar question

但是你可以創建不同的碎片,以 增加寫入吞吐量多個封頂收藏;但是,您必須運行多個查詢 才能訪問所有數據。

+0

我不想分割加蓋的集合。我希望將所有加蓋的集合均勻地分佈在集羣中,以實現讀寫可伸縮性。 – Praveen