Счетчик просмотров страниц за день, неделю и месяц - PullRequest
2 голосов
/ 08 апреля 2010

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

Моей первой идеей было создать 4 столбца счетчика в DB-таблице элемента. По одному для каждого из ежедневных, еженедельных, ежемесячных и общих и создания задания cron, которое очищает ежедневный счетчик каждые 24 часа, еженедельный счетчик каждые 7 дней и т. Д.

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

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

Сейчас я думаю о решении с сервером redis , но у меня пока нет решения.

Я просто ищу общую идею, но, к вашему сведению, я разрабатываю это приложение на Ruby on Rails.

Ответы [ 3 ]

3 голосов
/ 08 апреля 2010

Что бы я предложил для отслеживания посещений на каждой странице, используя только метку времени и любой идентификатор пользователя или что-либо еще, что вы можете сохранить, тогда вы можете рассчитать счетчики, как вам нравится, и изменить их позже, потому что у вас есть данные в простомиспользовать формат.Таблица с именем пользователя (страницы) и меткой времени должна быть хорошей.Просто добавьте к этому всякий раз, когда страница запрашивается.

Чтобы уменьшить количество вставок, вы можете объединить их вместе в своем программном обеспечении.Создание многострочной вставки, такой как здесь для MySQL, сэкономит накладные расходы.Вам просто понадобятся ваши классы для создания вставки, как описано, и хранения до вставки.Одна идея состоит в том, чтобы не только рассчитать время, но и зафиксировать количество строк в пакете, что позволяет вам сказать самое большее, если сервер уйдет, вы потеряете только х рядов попаданий.

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

Кроме того, если требуется действительно высокая пропускная способность, его можно разбить на собственный осколок и получить доступ через Ajax-вызовы для отслеживания попаданий и подсчета.

1 голос
/ 08 апреля 2010

Что вы можете сделать, это сохранить то, что посещали и в какую дату (отметка времени), и вы будете делать это каждый раз, когда что-то посещается. Если вы хотите получить то, что было посещено, вы должны выбрать те, которые находятся в диапазоне дат (отметка времени), и сложить их вместе.

OR

Каждая из ваших ссылок будет иметь соответствующую строку для каждого дня их посещения. Если они посещаются более одного раза в день, это добавит +1 к уже существующему значению.

Вы можете использовать второй пример и делать еженедельное хранение вместо ежедневного, если ваши недели похожи на воскресенье-субботу, а не на 7 дней до сегодняшнего дня. Поэтому замените слова «день» словом «неделя», чтобы объем хранения данных был меньшим.

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

Вот возможность для сервера regis после просмотра некоторой документации.

SET link_id|date => "visit_count"

Здесь хранится link_id или как вы его называете вместе с date, разделенным | или любым другим символом, который вы хотите использовать. В этом значении ключа вы храните visit_count.

Скажите, что вы хотите добавить к этой ссылке попадание в эту дату. Вы должны GET link_id|date, а затем добавить +1 к visit_count, который он возвращает, и затем сохранить его обратно, как я показал выше.

Если вы хотите получить количество совпадений за определенную дату, вы можете снова набрать GET link_id|date.

Вы бы просто использовали ruby-on-rails для замены link_id, date и visit_count соответствующими значениями.

Надеюсь, это поможет вам.

0 голосов
/ 08 апреля 2010

Что вы можете сделать, это создать таблицу под названием ViewCounters.

Будет столбец pageId, столбец day и столбец views. PageId будет соответствовать просматриваемой странице, а «день» будет соответствовать дню, в который она была просмотрена.

Каждый раз, когда страница просматривается, она находит (или создает, если ее еще нет) строку в таблице ViewCounters с ее pageId и текущим днем. Затем он увеличит столбец 'views' для этой строки.

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

Еще одним большим преимуществом этого является то, что это только строка на страницу в день, что не так уж и плохо.

...