首页 > 解决方案 > 具有重复文档的 MongoDB 分片

问题描述

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

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

分片 1 = A & B
分片 2 = 仅 B

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

标签: mongodbdocker-composereplicationsharding

解决方案


您可能错误地接近分片(水平缩放)。在 Mongo 中进行分片的原因是分片的选择使得它产生的(垂直)分片具有大致均匀的数据分布,或类似数量的 Mongo 文档。使其工作良好的分片要求是查询通常仅定向到单个分片。如果您有查询需要返回一些具有不同 A 和 B 值的字段,那么这意味着该字段应该是分片键。查询可以跨分片,但某些跨分片操作(例如连接)可能非常昂贵。在您的特定情况下,也许其他一些字段可以用作分片键。


推荐阅读