MongoDB中的受控数据分片

时间:2012-07-11 11:30:22

标签: ruby-on-rails mongodb sharding

我是MongoDB的新手,我对其分片概念有非常基本的了解。但是我想知道是否可以自己控制数据分割?例如,一部分记录将存储在一个特定的碎片上? 这将与rails应用程序一起使用。

4 个答案:

答案 0 :(得分:5)

您可以关闭平衡器以停止自动平衡:

sh.setBalancerState(false)

如果您知道要拆分的密钥的范围,还可以presplit将数据范围PreSplitting example添加到所需的服务器,请参阅MMS。碎片的管理将通过javascript shell完成,而不是通过rails应用程序完成。

你应该注意没有分片会增加负载(变热),这就是默认情况下自动平衡的原因,使用像免费{{3}}服务这样的监控可以帮助你监控它。

答案 1 :(得分:3)

对碎片的决定是一个复杂的决定,你应该多考虑一下。

有很多关于分片的知识,其中很多都是不明显的。我建议通过以下链接查看信息:

在分片群集的上下文中,块是分配给特定分片的连续范围的分片键值。默认情况下,chunks为64 MB(除非按上述方式进行修改)。当它们超出配置的块大小时,mongos将块拆分为两个块。 MongoDB块是逻辑的,其中的数据不是物理上位于一起。

正如我所提到的,平衡器会移动块,但是,你可以这样做manually。如果每个分片上的块数之间存在足够大的差异(最小值为8),balancer将决定重新平衡并请求块迁移。块的实际移动在“From”和“To”分片之间进行协调,当完成后,原始块将从“From”分片中删除,并通知配置服务器。

相当多的人也预先拆分,这有助于他们的迁移。有关详细信息,请参阅here

为了查看在两个分片之间分割的文档,您需要插入足够的文档以填充第一个分片上的几个块。如果您尚未更改默认块大小,则需要插入至少512MB的数据才能查看迁移到第二个块的数据。测试这个通常是一个好主意,你可以通过将块大小设置为1MB并插入10MB数据来实现。 Here是如何测试此内容的示例。

答案 2 :(得分:0)

可能http://www.mongodb.org/display/DOCS/Tag+Aware+Sharding在v2.2中解决了您的要求 查看Kristina Chodorow的博客文章也是一个很好的例子:http://www.kchodorow.com/blog/2012/07/25/controlling-collection-distribution/

答案 3 :(得分:-2)

如果mongo DB自动为您执行此操作,您为什么要自己拆分数据?您可以升级rails应用程序层以与mongos实例通信,以便mongos将任何CRUD操作的调用路由到数据所在的位置。这是使用配置服务器实现的。