评估mongo DB性能

时间:2012-05-04 13:49:41

标签: mongodb performance mongodb-query nosql

我在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时,会有任何显着的性能提升。

2 个答案:

答案 0 :(得分:1)

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

只要在您查询的密钥上有索引,执行$eq查询和$in查询之间就没有多大区别。如果没有索引,您将进行完整的收集扫描。

答案 1 :(得分:0)

对于大量数据,建议使用Sharding 它允许您在分片之间分割数据,因此您的索引可以适合RAM内存。我认为指数的findOne应该非常有效。在这种情况下,唯一可能损害您性能的因素是除了读取操作之外的大量写入。由于mongo具有全局锁定。