MongoDB中的自动分片是否适用于具有许多小型集合/小型数据库的分片

时间:2012-04-06 04:07:20

标签: mongodb replication sharding

在用于自动分片的MongoDB文档中,它说:“基于每个集合执行分片。小分集不需要分片。”

我们的业务有许多数据库(~100),有许多小型馆藏(约30个),每个馆藏的文件数量为1 - 3000.我们的数据库系统每月的页面浏览量大约为100,000,000。

在这种情况下,分片将永远激活,因为即使数据库使用和站点流量肯定足以要求负载平衡,集合也永远不够大。从文档中我似乎无法找到明确的答案。

2 个答案:

答案 0 :(得分:0)

碎片是否有意义取决于您是否主要是对数据库进行写入或读取。 Sharding主要用于写入缩放,但如果您没有进行大量写操作,那么只需使用带有“slaveOkay”的复制副本进行读取也可以正常工作。

根据您提供的数字,您似乎可以获得大约900万份文档,但它们是大型文档吗?如果它们很容易适合内存,那么除了故障转移功能之外,很可能甚至不需要复制。

答案 1 :(得分:0)

如果不了解您的用例,我很难回答,但我会试一试。

你确定你需要分片吗?你的插入率是什么样的?

如果您要拥有一组静态数据,甚至是一个相对静态的数据集,那么您可能不需要进行分片,只需使用更多辅助数据并启用slaveOK读取。读取将分发给各个辅助设备,并扩大您的读取容量。

如果不是这种情况,并且您确实需要进行分片,则可以选择。但首先,简要介绍一下自动分片的工作原理:

mongos进程负责一般分割和迁移块。这是两个独立的操作 - 分裂和平衡。

  • 当mongos看到某个部分时,会发生分裂 已写入最大块大小,如果存在,则启动拆分 实际上有足够的数据可以保证。随着时间的推移,有足够的数据 写的,块的数量增加。
  • 当块存在不平衡时(目前为8英寸),会发生平衡 2.0,虽然在2.2)中转向更动态的启发式。平衡器会在碎片周围迁移块,直到达到平衡。

因此,您需要编写相对于最大块大小(2.0中默认为64MB)的足够数据,以生成平衡器适当移动它们所需的块。如果您的数据不会发生这种情况,那么您可以查看:

  1. 减少块大小(也有缺点 - http://www.mongodb.org/display/DOCS/Sharding+Administration#ShardingAdministration-ChunkSizeConsiderations
  2. 手动拆分/移动块
  3. 有关手册说明,请参阅:

    http://www.mongodb.org/display/DOCS/Splitting+Shard+Chunks

    http://www.mongodb.org/display/DOCS/Moving+Chunks