具有重复文档的MongoDB分片

问题描述

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

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

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

但是,当我运行平衡器时,它会将所有A分配给分片1,将B分配给分片2。我可以用任何方法对重复数据进行分片吗?还是我对问题使用了错误方法

解决方法

您可能无法正确处理分片(水平缩放)。在Mongo中进行分片工作的原因是,选择分片 key 的方式是使分片 key 产生(垂直)分片,这些分片具有大致均匀的数据分布或类似数量的Mongo文档。分片的一项要求使其工作良好,即通常仅将查询定向到单个分片。如果您有需要返回某个具有不同A和B值的字段的查询,则意味着该字段应该 not 作为分片键。查询可以遍历各个分片,但是某些跨分片的操作(例如联接)可能会非常昂贵。在您的特定情况下,也许其他一些字段可以用作分片密钥。

,

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

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

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