我有一个巨大的收藏与〜10亿文件,这些文件(少于200)包含一些字段“rare_field
”很少。快速搜索非常罕见的领域在一个巨大的mongodb集合
我该如何尽快找到包含该字段的所有文档?
如果我简单地做:
collection.find({ "rare_field" : { $exists : true }})
超时。 这可能需要数天时间才能完成,所以我不确定即使通过查询标志防止超时也会有所帮助,但也许我错了。
我也可以编写一个脚本来查看所有文档,但这样会很慢,因为它需要将所有10亿个文档通过网络传递到我的服务器,我想要一些不需要任何数据传递的解决方案在电线上,并且会很快。
备注:这是一个sharded
集合。
我将发布我当前的解决方案作为答案,但我不确定它是100%正确的,并没有我想要的那么快。
将这个'rare-field'放入分片查询中!正因为如此,mongo也会对这个领域进行索引!所以它会很快! –
谢谢。这是一次性的事情,所以我并不需要索引。 这可能是一个很好的解决方案,当数据库是空的,但索引这个领域现在需要很多时间,就像手工检查所有文档(我认为) – marmor
你是正确的时间消耗!所以这完全取决于你的应用程序!另一种方法是将结果保存在缓存中!将结果存储在新的集合中,或存储在redis或smtn中! –