在用于自动分片的MongoDB文档中,它说:“分片是在每个集合的基础上执行的。小集合不需要被分片。”
我们的业务有许多数据库(~100),有许多小集合(~30),每个数据库的文档数为1- 3000。我们的数据库系统每月大约有100,000,000个页面浏览量。
在这种情况下,分片将被激活,因为集合永远不会足够大,即使数据库使用率和站点流量肯定足够高,需要负载平衡。从文档中我似乎找不到一个明确的答案。
发布于 2012-04-06 18:40:27
分片是否有意义在一定程度上取决于您是否主要对数据库进行写操作或读操作。分片主要用于写缩放,但如果您不进行大量写操作,那么简单地使用带有"slaveOkay“的副本集进行读操作可能同样有效。
从您提供的数字来看,您似乎获得了大约900万个文档,但它们是大文档吗?如果它们很容易放入内存中,那么除了故障转移功能之外,很可能不需要复制集。
发布于 2012-04-06 18:40:43
如果不更多地了解您的用例,很难回答这个问题,但我会尝试一下。
你确定切分是你需要的吗?你的插入率是多少?
如果您打算使用静态数据集,甚至是相对静态的数据集,那么您可能不需要分片,只需使用更多的次要数据并启用slaveOK读取即可。读操作将被分发到不同的辅助服务器,并扩展您的读取容量。
如果不是这样,并且您确实需要分片,那么有一些选择。但首先,简要地、高层次地解释自动分片是如何工作的:
一般情况下,mongos进程负责拆分和迁移块。这是两个独立的操作-拆分和平衡。
当mongos发现最大区块大小的特定部分已经写入时,就会发生
因此,您需要写入与最大块大小相关的足够数据(2.0中默认值为64MB ),以生成平衡器适当移动它们所需的块。如果您的数据不会发生这种情况,那么您可以查看:
拆分减少区块大小(也有缺点- split/move
有关手册说明,请参阅:
http://www.mongodb.org/display/DOCS/Splitting+Shard+Chunks
http://www.mongodb.org/display/DOCS/Moving+Chunks
https://stackoverflow.com/questions/10039011
复制相似问题