Счетчики кэширования MongoDB - PullRequest
       6

Счетчики кэширования MongoDB

4 голосов
/ 30 августа 2011

Я пишу счетчик посещений для продуктов на веб-сайте, который использует MongoDB в качестве своего 'DB-Engine.

Здесь говорит, что Mongo хранит часто используемые данные в памяти и имеетвстроенный механизм кэширования в памяти.

Итак, можно ли просто включить эту интегрированную систему кэширования и тупо устанавливать счетчики при каждом посещении, или все же нужен еще один уровень кэширования в среде с высоким трафиком?

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

Это две разные вещи.MongoDB использует простую систему управления постраничной памятью, которая по своей конструкции хранит в памяти наиболее доступные части дискового пространства, отображаемого в памяти.

В результате это поможет вам больше всего для счетчиков, которые часто запрашиваются, но выполняютне часто меняются.К сожалению, для счетчиков веб-сайтов эти две вещи являются взаимоисключающими.Поскольку увеличение счетчиков, как правило, не приводит к перемещению MongoDB документа, содержащего счетчик на диске, кэширование чтения по-прежнему будет достаточно эффективным.

Основная проблема заключается в ваших записях, в основном увеличение количества за посещение не будеточень экономически эффективным.Я предлагаю стратегию, при которой ваше веб-приложение счетчика кэширует входящие посещения и отправляет обновления счетчика только через каждые X посещений или каждые Y секунд, в зависимости от того, что наступит раньше.Ваша главная цель здесь - уменьшить количество операций записи в секунду, поэтому вам точно не нужна запись в БД на счетчик посещений.

2 голосов
/ 30 августа 2011

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

  • Используйте оператор $inc для атомарного выполнения приращения или используйте upserts с модификаторами , чтобы создать структуру документа, если это еще не сделанотам
  • Используйте соответствующую запись записи для ускорения обновлений, если это безопасно сделать (т. е. с записью озабоченности NONE ваш запрос на обновление немедленно вернется, и вам просто нужно будет доверять Mongo, чтобы сохранить егона диск).Конечно, безопасно это или нет, зависит от варианта использования.Если вы считаете миллионы обращений, то 1 неудачное попадание может не быть проблемой.
  • Если масштаб данных, которые вы храните, действительно огромен, изучите использование шардинга для записей раздела
...