【问题标题】:MongoDB sharding with repeated documents具有重复文档的 MongoDB 分片
【发布时间】:2021-02-20 11:01:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mongodb docker-compose replication sharding


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在尝试让碎片表现得像不同的网站。例如,站点 1 的查询需要键值 A 和 B,站点 2 的查询只需要键值 B。因此,这些查询应该只定向到其中一个分片。除了分片之外,还有更好的方法吗?
      • 查看其他答案,它实际上似乎解决了您上面的确切评论。一个文档存在于一个分片中,而不是多个分片中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      相关资源
      最近更新 更多