没有指定排序时,mongo 如何处理对分片集合有限制的“查找”查询

问题描述 投票:0回答:0

假设我有一个集合

events
分布在三个分片中。片键是
{ _id: 'hashed' }

这个集合通常是空的,但有时会达到数百万条记录。当集合不为空时,我想抓取10000条记录进行处理,处理,然后删除这些记录。然后重复这个过程,直到集合为空。

我们不关心我们抓住了哪些事件。我们最终会处理它们,我们处理它们的顺序并不重要。所以我们在 Java 中运行这个命令来抓取事件:

MongoCursor<Document> eventsToProcess = eventsCollection.find().limit(10000).iterator();

对于删除操作,我们构建一个包含我们获取的所有

_id
的数组,然后告诉mongo删除集合中
_id
在该数组中的所有文档。

为了利用分片,如果可以将此删除操作拆分到多个分片中,每个分片与其他分片并行删除它的

_id
部分,那就太好了。

但是为了让这个删除操作在分片之间平均分配,上面获取 10000 条记录的命令必须从分片中以大致相等的比例抓取文档。

关于这个问题我能找到的唯一文档是 here:“如果查询结果未排序,mongos 实例将打开一个结果游标,该游标是分片上所有游标的结果游标。”

我认为这句话可能回答了我的问题,但我不知道这意味着什么:“mongos 实例打开一个结果游标,该游标是分片上所有游标的结果游标。”

上面列出的

find
查询会从分片中均匀地抓取记录吗?如果没有,有没有办法让mongo从分片中均匀抓取记录?

mongodb sharding
© www.soinside.com 2019 - 2024. All rights reserved.