2012-05-04 85 views
1

我有一個在我設置了用戶首選項的mongoDB中的集合。我在一個特定的集合中有大量的對象,用戶可以按照集合中的一個鍵。例如:評估mongo數據庫性能

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

現在用戶可以關注任意數量的密鑰,即當key1等於某個值時更新我。 (非常類似於Twitter的「追隨」功能)。

現在我該如何有效地做到這一點?

另外,如果我查詢蒙戈用這樣的查詢:

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

db.collection.find({ keyId : { $in [ 290] } })是否會有任何急劇的性能改進時,有幾百萬用戶,並都遵循1所示。

回答

1

我認爲在任何數據庫中有大量數據的最大問題之一是,當你查詢時,你想避免碰到磁盤。 Mongodb在將數據保存在內存方面做得相當不錯,但如果數據集超出了你的記憶,那麼你將開始交換,這會損害你的性能。

只要您正在查詢的密鑰上存在索引,那麼在執行$eq查詢和$in查詢之間不應該存在很大區別。如果沒有索引,您將執行完整的收集掃描。

0

對於大量數據,建議使用Sharding 它可以讓您在分片之間分割數據,因此您的索引可以適合RAM內存。我認爲findOne按索引應該是相當有效的。在這種情況下,唯一可能損害您的性能的是除了讀取操作之外的大量寫入。由於mongo擁有全局鎖定。