Какую БД выбрать для хранения записей о просмотрах страницы?
Возникла интересная задача — реализовать счетчик уникальных просмотров для каждой статьи сайта, с возможностью последующей фильтрации данных по датам. Позже эти данные нужно будет показывать авторам статей. Сейчас сильно задумались — а какую БД использовать в этом случае? Насиловать MySQL вроде как не сильно правильно, но ставить для такой «простой» задачи какую-нибудь MongoDB — слишком круто. Думали насчет Redis — так из него нормально не получится получать данные, нужно будет обрабатывать большое количество данных не на стороне БД.
Может кто-то сталкивался с такой задачей? Интересно узнать реально работающие варианты, спасибо :)
Юзайте MySQL, только создайте еще агригируемые таблицы и заполняйте их триггерами. Например _hourly, _daily, _weekly и тп. Записей будет не много. А уникальность (кликов, посещений) можно добиться уникальными ключами.
Добавлю, есть система, которая сильно нагружежна. Ведется лог, сходный с логом посещения. Тригерами заполняются агрегируемые таблицы. Уже несколько лет все работает нормально.
Во-первых, Вы бы хоть уточнили сколько просмотров имеете. Сколько этих самых статей. Если Вы уже используете MySQL делайте на MySQL. Сделайте таблицу с фиксированным размером строки, они будут быстро апдейтиться.
Можете для подсчетов данных за день использовать MEMORY табличку, а вечером по крону добавлять эти данные в общую таблицу. Если нужна детализация по каждому клику можно писать в лог файл с разделителями табами, потом периодически его загружать в базу (скажем раз в 10-15 минут). В общем сильно зависит от деталей.
MongoDB один из самых недорогих вариантов, если не хотите MySQL. Couchbase и Riak просят от 4 GB RAM.
Ну и MySQL с этой задачей вполне справится. Если рабочую БД не хотите нагружать — дополнительную создайте.
В Redis счётчики вообще «на ура» реализовываются, смотрите sorted sets. Но тут надо быть готовым по размерам RAM.
А чем MongoDB не устраивает? Что в нём крутого? :) ставится просто, ипользуется легко, работает быстро. Мы там логи например храним. Даже при миллионах записей всё хорошо.
Думали насчет Redis — так из него нормально не получится получать данные, нужно будет обрабатывать большое количество данных не на стороне БД.
Почему вы так считаете? Redis поддерживает несколько весьма удобных структур данных и множество операций над ними. У меня есть опыт работы с ним и могу сказать, что решить ваше задачу при помощи Redis не составит труда и не нужно никакой особой обработки данных на стороне приложения.