【问题标题】:Does auto-sharding in MongoDB work on shards with many small collections/small databasesMongoDB 中的自动分片是否适用于具有许多小型集合/小型数据库的分片
【发布时间】:2012-04-06 04:07:20
【问题描述】:

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

我们的企业有许多数据库(约 100 个),包含许多小型集合(约 30 个),每个集合的文档数为 1 - 3000。我们的数据库系统每月查看大约 100,000,000 次页面浏览量。

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

【问题讨论】:

    标签: mongodb replication sharding


    【解决方案1】:

    分片是否有意义在某种程度上取决于您是否主要对数据库进行写入或读取。分片主要用于写入扩展,但如果您不进行大量写入,那么简单地使用带有“slaveOkay”的副本集进行读取可能也可以。

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

    【讨论】:

    • 在这种情况下,我们可能会进行 9 : 1 的读/写操作,因此分片似乎完全没有必要。我正在调查副本集以及它们是否可以为我们提供必要的负载平衡。
    【解决方案2】:

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

    您确定分片是您需要的吗?您的插入率如何?

    如果您要拥有一组静态数据,甚至是相对静态的数据集,那么您可能不需要分片,您可以简单地使用更多辅助节点并启用 slaveOK 读取。读取将被分发到各个辅助节点并扩大您的读取容量。

    如果不是这种情况,并且您确实需要分片,那么还有一些选择。但首先,简要解释一下自动分片的工作原理:

    mongos 进程通常负责拆分和迁移块。这是两个独立的操作 - 拆分和平衡。

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

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

    1. 减小块大小(也有缺点 - http://www.mongodb.org/display/DOCS/Sharding+Administration#ShardingAdministration-ChunkSizeConsiderations)
    2. 手动拆分/移动块

    手动说明见:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2021-07-26
      • 2011-04-20
      相关资源
      最近更新 更多