Ежедневный, еженедельный и ежемесячный счетчик просмотра страницы

StackOverflow https://stackoverflow.com/questions/2601640

Вопрос

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

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

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

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

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

Я просто ищу общую идею здесь, но FYI я разрабатываю это приложение в Ruby на рельсах.

Это было полезно?

Решение

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

Чтобы уменьшить количество вкладышей, вы можете получить их вместе в вашем программном обеспечении. Построить многорядную вставку здесь Для mysql спасет накладные расходы. Вам просто понадобится ваши классы, чтобы построить вставку, как описано и хранится до вставки. Одна идея состоит в том, чтобы не только это время, но и исправить ряд строк, чтобы выделить, что позволяет вам сказать вам, если сервер идет, вы теряете только x количество рядов хитов.

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

Также, если это необходимо, чтобы быть действительно высокой пропускной способностью, он может быть разбит на свой собственный осколок и добрался до вызовов AJAX, чтобы сделать удаление удара и получить значение.

Другие советы

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

ИЛИ

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

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

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

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

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 с соответствующими значениями.

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

То, что вы могли бы сделать, это создать столик под названием Viewsorters.

Там будет столбец «PageID», столбец «день» и столбца «просмотров». PRIID будет соответствовать просмотру страницы, и «день» будет соответствовать в тот день, когда его было просмотрено.

Каждый раз, когда рассматривается страница, она находит (или создает, если нет еще одной) строки в таблице View Cortsorts с его Plied и с текущим днем. Затем он увеличивает столбец «просмотров» для этой строки.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top