1

我在 mongoDB 中有一个集合,我在该集合上设置了用户首选项。我在一个特定的集合中有大量的对象,用户可以关注集合中的一个键。例如:

colletionx { key1: value1, key2: value2 : key3: value3 .. keyn:valuen}

现在用户可以关注任意数量的键,即当 key1 等于某个值时更新我。(非常类似于 Twitter 的“关注”功能)。

现在我怎样才能有效地做到这一点?

另外,如果我使用这样的查询查询 mongo:

 db.collection.find({ keyId : 290})

或者 db.collection.find({ keyId : { $in [ 290] } })当有数百万用户并且都关注 1 个节目时,是否会有任何显着的性能提升。

4

2 回答 2

1

我认为在任何数据库中拥有大量数据的最大问题之一是,当您查询时,您希望避免撞到磁盘。Mongodb 在将数据保存在内存方面做得相当好,但如果您的数据集超出内存,您将开始交换,这将损害您的性能。

只要您要查询的键上有索引,执行$eq查询和查询之间应该没有太大区别。$in如果没有索引,您将执行完整的集合扫描。

于 2012-05-04T13:53:52.447 回答
0

对于大量数据,非常推荐使用Sharding 它将允许您在分片之间拆分数据,因此您的索引可以适合 ram 内存。我认为 findOne by index 应该非常有效。在这种情况下,唯一会损害您的性能的是除了您的读取操作之外的大量写入。由于 mongo 有一个全局锁。

于 2012-05-04T21:28:23.423 回答