所以我有一个生产分片的MongoDB集群,它有4个由mongos管理的分片(副本集)。假设我有20台运行我的应用程序的服务器,每台服务器都运行一个管理8个分片的mongos进程。
鉴于此设置,当我检查20台服务器上每个mongos上的操作数时,我可以看到我的插入和删除数量是成比例的 - 这与我的应用程序逻辑一致。但是,当我在各个分片上运行mongostat --discover
时,我发现删除的数量几乎是违反我的应用程序逻辑以及mongos指示的1:1比率的插入数量的4倍。直截了当的直觉支持mongos只会写入一个分片,因此各个分片的插入和删除的平均比例应该与mongos(应用程序直接写入)的平均比率相同,除非mongos在内部与分片做了不同的事情。 / p>
有人能指出我为何会发生这种情况的相关信息,或者让我知道我的基础设施是否可能出现问题?
由于
答案 0 :(得分:0)
原因是我在没有指定分片键的情况下对mongos运行remove()
个查询。在这种情况下,mongos不知道将查询引导到哪个分片,因此将查询广播到所有分片,从而有效地执行比目标查询更多的删除。
查看documentation了解详情。