我在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时,会有任何显着的性能提升。
答案 0 :(得分:1)
我认为在任何数据库中拥有大量数据的最大问题之一是,在查询时,您希望避免命中磁盘。 Mongodb在将数据保存在内存方面做得相当不错,但是如果你的数据集超出你的记忆,你将开始交换,这将损害你的性能。
只要在您查询的密钥上有索引,执行$eq
查询和$in
查询之间就没有多大区别。如果没有索引,您将进行完整的收集扫描。
答案 1 :(得分:0)
对于大量数据,建议使用Sharding 它允许您在分片之间分割数据,因此您的索引可以适合RAM内存。我认为指数的findOne应该非常有效。在这种情况下,唯一可能损害您性能的因素是除了读取操作之外的大量写入。由于mongo具有全局锁定。