【发布时间】:2015-05-08 10:31:50
【问题描述】:
我有一个 MongoDB 集合,其中包含超过 2000 万个文档(并且还在快速增长)。有些文档有一个“user_id”(其他文档没有)。
我经常需要检查集合中是否存在一些 user_id。但是有很多“一些”。 10K 到 100K。
你会怎么做?
第一个念头就是来个大查询:
$or : [ { 'user_id' : ... } , { ... } , ... ]
使用我所有的 10K 到 100K id...但是它非常慢,我认为这不是更好的方法。有人告诉我 Redis 的布隆过滤器,但似乎 Mongo 没有这样做。
您有更好的方法吗?与布隆过滤器一样,在我的情况下,
【问题讨论】:
-
如果您使用聚合框架,MongoDB 支持使用 $match 进行过滤。您可能想要使用sparse 索引。
-
如果我理解得很好,问题是“如何编写查询来查找大量值与集合中的值集之间的交集”。关键是如何传递要比较的“大量”值。
-
不知何故相关:查询大小显然有 16MB 的限制 -- stackoverflow.com/questions/11688658/…
-
您可以随时部署自己的布隆过滤器。只要您不删除文档。
-
(该死的 5 分钟限制)尽管请记住,这不是灵丹妙药。您将过滤掉不在数据库中的用户,但您仍然需要查询那些通过过滤器的用户。
标签: mongodb bloom-filter large-data