2012-05-04 3 views
1

У меня есть коллекция в mongoDB, на которой я настроил пользовательские настройки. У меня очень большое количество объектов в одной конкретной коллекции, и пользователь может следить за ключом в коллекции. Например:Оценка производительности MySQL mongo

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

Теперь пользователь может следовать любое количество ключей, то есть, когда key1 равно некоторое значение обновить меня. (Очень похоже на аналогичную функцию Twitter "follow").

Теперь, как я могу эффективно это сделать?

Кроме того, если я запрашиваю Монго с запросом, как это:

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

или db.collection.find({ keyId : { $in [ 290] } }) будет ли резкое повышение производительности, когда есть миллионы пользователей, и все следуют 1 шоу.

ответ

1

Я думаю, что одна из самых больших проблем с наличием большого количества данных в любой базе данных заключается в том, что при запросе вы хотите избежать попадания на диск. Mongodb выполняет довольно хорошую работу по хранению данных в памяти, но если ваш набор данных перерастет вашу память, вы начнете замену, и это повредит вашей производительности.

Не должно быть большой разницы между выполнением запроса $eq и запросом $in, если есть указатель на ключ, который вы запрашиваете. Если индекса нет, вы выполните полное сканирование коллекции.

0

Для большого количества данных рекомендуется работать с Sharding Это позволит вам разделить данные между осколками, поэтому ваш индекс может соответствовать памяти RAM. Я считаю, что findOne по индексу должен быть достаточно эффективным. Единственное, что может повредить вашей производительности в этом случае, - это только массивные записи в дополнение к вашим операциям чтения. Поскольку монго имеют глобальный замок.

Смежные вопросы