Эффективный способ хранения количества просмотров объектов?

Я поддерживаю приложение, в котором пользователи могут хранить изображения, а затем делиться ими. Система питается от MongoDB на серверной части. Большинство страниц с изображениями кэшируются в виде плоских HTML-файлов, но я могу запустить некоторый код непосредственно перед загрузкой файла.

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

Какое лучшее решение для этого (желательно с расширением PHP в качестве клиента)?


person Kristina Brooks    schedule 27.12.2010    source источник


Ответы (4)


Вы можете заглянуть в Redis. Что-то среднее между NoSQL и memcached. Однако вы можете сохранить Redis на диск. Является ли memcached динозавром по сравнению с Redis?

person Brent Baisley    schedule 30.12.2010

Похоже, количество просмотров для каждого кэшированного плоского HTML-файла? Почему бы не сохранить их в каком-нибудь коде в начале файла. Его можно вынуть при просмотре файла...

person Darren    schedule 27.12.2010
comment
Счетчик просмотров добавляется к файлам HTML PHP как переменная JS. Затем Javascript помещает его в нужное место. И то, что вы предлагаете, далеко не эффективно. - person Kristina Brooks; 28.12.2010

Однажды я решил эту проблему, сохраняя количество просмотров в memcached, а затем обновляя базу данных через случайные промежутки времени в зависимости от количества просмотров. Вероятность сохранения в базе данных равнялась 1/sqrt(количество просмотров). У этого были хорошие свойства. Если количество просмотров было небольшим, например 4, то вероятность записи в базу была 1/2. Если количество просмотров объекта было большим, скажем, 1 000 000, то вероятность приближается к 1/1000. Казалось, это работает хорошо.

person Zeki    schedule 30.12.2010

Делайте это просто... если вам не требуется отчет/статистика в реальном времени, вы должны просто проанализировать ежедневный журнал Apache и сохранить количество совпадений в базе данных или даже в плоском формате файла.

Преимущества?

  1. это не вредит вашему существующему приложению
  2. он не требует дополнительного memcache или около того
  3. просто нужно разбирать ежедневник апача (раз в день)
  4. возмещаемый

Конечно, это не мешает вам настроить cronjob для периодического чтения/обновления базы данных (для более свежего количества просмотров).

person ajreal    schedule 30.12.2010