MongoDB 对重复文档进行分片

MongoDB sharding with repeated documents

我是 mongodb 的新手,希望使用 docker-compose 和 mongodb 创建分布式数据库环境。我用碎片创建了多个 docker 来模拟多个站点。但是,我无法将同一组文档复制到多个分片中。

例如,我有一个集合,其中一个键的值为“A”和“B”。我想将此集合分发到 2 个分片中

分片 1 = A 和 B
碎片 2 = 仅 B

但是,当我 运行 平衡器时,它将所有 A 分配到分片 1 中,将 B 分配到分片 2 中。有什么方法可以对重复数据进行分片,或者我是否使用了错误的方法有问题吗?

您可能错误地处理了分片(水平缩放)。 Mongo 中的分片之所以起作用,是因为分片 key 的选择使得(垂直)分片具有大致均匀的数据分布,或类似数量的数据Mongo 文档。分片使其运作良好的一个要求是查询通常只定向到单个分片。如果您有查询需要 return 某些字段具有不同的 A 和 B 值,那么这意味着该字段应该 而不是 作为分片键。查询可以跨分片,但某些 cross-shard 操作(例如连接)可能非常昂贵。在您的特定情况下,也许其他一些字段可以用作分片键。

MongoDB 中的冗余由副本集提供,而不是分片集群。

每个分片都可以由具有所需节点数的副本集支持,以提供所需的冗余级别。

不可能将同一文档(权威地)定位在多个分片中。