3

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

4

4 回答 4

5

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

sh.setBalancerState(false)

如果您知道要拆分的键的范围,您还可以将数据范围预拆分到所需的服务器,请参阅PreSplitting示例。分片的管理将通过 javascript shell 完成,而不是通过您的 rails 应用程序。

您应该注意没有分片获得更多负载(变热),这就是默认情况下自动平衡的原因,使用免费MMS服务之类的监控将帮助您监控它。

于 2012-07-11T12:00:19.643 回答
3

分片的决定是一个复杂的决定,你应该深思熟虑。

关于分片有很多需要学习的地方,其中大部分内容并不明显。我建议查看以下链接中的信息:

在分片集群的上下文中,块是分配给特定分片的连续范围的分片键值。默认情况下,为 64 兆字节(除非按照上述修改)。当它们增长到超过配置的块大小时,mongos 将块分成两个块。MongoDB 块是逻辑的,其中的数据在物理上并不位于一起。

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

相当多的人也预先分裂,这有助于他们的迁移。请参阅此处了解更多信息。

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

于 2012-07-11T12:05:21.457 回答
0

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

于 2012-09-16T13:25:17.867 回答
-2

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

于 2012-08-31T18:26:27.790 回答