Эффективный способ хранить количество просмотров для объектов? - PullRequest
2 голосов
/ 27 декабря 2010

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

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

Ответы [ 4 ]

2 голосов
/ 30 декабря 2010

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

0 голосов
/ 30 декабря 2010

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

0 голосов
/ 30 декабря 2010

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

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

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

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

0 голосов
/ 27 декабря 2010

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

...