gpt4 book ai didi

mongodb - 为什么当我添加新集合时只有一个分片获取数据? - MongoDB

转载 作者:行者123 更新时间:2023-12-05 04:12:20 25 4
gpt4 key购买 nike

我正在研究使用 mongodb 进行分片,我有以下结构:

  • 1 个 Mongod 到我的 ConfigServer,在 ReplicaSet 中只有 1 个成员
  • 2 个分片,每个分片在 ReplicaSet 中有 2 个成员
  • 1 个蒙古人

我有一个名为 erp 的数据库和 3 个集合,pessoas、produtos 和 contatos。

所以我使用以下方法添加了我的收藏:

sh.shardCollection("erp.<collection>", { id: 1 }, true)

我从集合 pessoas 开始,这个集合有 2000 份文档并以这种方式分发:

mongos> db.pessoas.getShardDistribution()

Shard rs1 at rs1/desenv1:27019,desenv1:27020
data : 57KiB docs : 1497 chunks : 36
estimated data per chunk : 1KiB
estimated docs per chunk : 41

Shard rs3 at rs3/desenv1:27022,desenv1:27023
data : 19KiB docs : 503 chunks : 36
estimated data per chunk : 541B
estimated docs per chunk : 13

Totals
data : 77KiB docs : 2000 chunks : 72
Shard rs1 contains 75.27% data, 74.85% docs in cluster, avg obj size on shard : 39B
Shard rs3 contains 24.72% data, 25.15% docs in cluster, avg obj size on shard : 38B"

在这之后我添加了合集produtos,我给了她1001个寄存器,为什么这个合集是这样分配的:

mongos> db.produtos.getShardDistribution()

Shard rs1 at rs1/desenv1:27019,desenv1:27020
data : 67KiB docs : 1001 chunks : 1
estimated data per chunk : 67KiB
estimated docs per chunk : 1001

Totals
data : 67KiB docs : 1001 chunks : 1
Shard rs1 contains 100% data, 100% docs in cluster, avg obj size on shard : 69B"

问题:

  • 为什么只有 replicaSet“rs1”在获取数据? collection contatos 也会发生同样的事情,只有 replicaSet“rs1”获取数据,我无法将数据分发到其他分片。

  • 为什么会这样,我做错了什么?

  • 如何平均分配数据?例如,有 2000 个寄存器,一个分片中有 1000 个寄存器,另一个分片中有 1000 个寄存器。

如果你们需要更多信息,请告诉我。

谢谢

最佳答案

MongoDB 通过使用 block 的数量而不是文档来平衡分片(参见 https://docs.mongodb.com/manual/core/sharding-balancer-administration/ )。因此,根据您提供的输出,集群是平衡的。分片 rs1 包含 36 个 block ,分片 rs3 也包含 pessoas 集合的 36 个 block 。

如果文档数量不平衡,这意味着您的插入将进入少量 block (或者在最坏的情况下甚至是单个 block ),而不是分布在所有 block 中。这通常是由使用单调递增的分片键引起的。

请参阅Shard Keys有关此主题以及如何避免这种情况的更多信息。请注意,分片键的选择非常重要,因为一旦选择了分片键,就无法再更改。更改集合的分片键的唯一方法是转储集合,并在恢复过程中更改分片键。

关于mongodb - 为什么当我添加新集合时只有一个分片获取数据? - MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com