@AlikDex

Сохранение счетчиков из кеша в базу данных, алгоритм?

Итак. Задача в принципе типичная (мне так кажется).
Допустим у нас есть 10 тысяч страничек, по которым ходит куча пользователей, но ходит не по всем, а по половине. Нам нужно посчитать визиты по страницам. Понятное дело что можно инкрементировать счетчик посещений у каждой страницы прямо в базе. Но хочется сделать что несколько по иному, а именно сначала данные по посещениям сохранять в мекеше или редисе, а потом периодически сбрасывать их в базу данных. Читал что это типа круто, решил реализовать. Но почесав немного репу пришел к выводу что не могу понять как это делается. Т.е. решение в лоб - забирать данные из кеша, затем обнулять его не кажется столь уж эффективным и есть вероятность потерять эти данные при каком-нибудь сбое. Вот вопрос. какие еще могут быть варианты решения подобного вопроса? (тоже касается и лайков всяких, рейтингов и прочего кликающегося)
  • Вопрос задан
  • 199 просмотров
Пригласить эксперта
Ответы на вопрос 1
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
1) можно просто по крону выполнять в консольную команду типа cut access.log -d' ' -f 7 | sort | uniq -c и сбрасывать результат в базу.
2) мемкеш не будет удобен, рано или поздно он начнёт сам удалять счётки, по тайм ауту или по нехватке памяти и это надо иметь ввиду, соответственно и решение должно быть рассчитано на потери. Т.е. например если в мемкеш ключ пуст, то забираем значение из базы и кладём в него, для отображения тоже используем значение из мемкеша, при запросе страницы инкрементируем ключ в мемкеш. А вот значение в базе обновляем например из методом описным в первом пункте. Соответственно играясь с временем жизни записей в мемкеше и частотой парсинга логов будем регулировать возможные лаги в значениях счётчика.
3) парсинг логов можно заменить на очереди типа rabbitmq
4) в большинстве случаев можете не париться и вынести счётчики в redis.io
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы