2011-10-31 54 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