Отслеживание уникальных Просмотров Страниц

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

  •  18-09-2019
  •  | 
  •  

Вопрос

Каков наилучший метод отслеживания просмотров страниц (особенно уникальных) для определенной страницы?

Пример:Темы на форуме, видеоролики на видеосайте, вопросы в сценарии вопросов и ответов (SO).

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

А для уникальных просмотров у меня есть отдельная таблица, которая содержит строку с "QuestionID" и "userId".Когда пользователь посещает вопрос / страницу, мой код пытается найти строку в таблице views с "userId" и "QuestionID", если это не удается, он добавляет строку, а затем увеличивает значение Views Вопроса в таблице "Вопросы".

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

Решение

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

На другой ноте:Для анонимных пользователей вам нужно будет записать их IP-адрес, и вы можете использовать SQL-функцию COUNT(), чтобы таким образом получить количество уникальных посетителей, но четный и IP-адрес не "уникален" как таковой.

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

Прежде всего, когда у вас есть таблица, в которой хранятся пары userid-quesitonid, это означает, что вы можете их посчитать, добавление столбца views, я полагаю, противоречит правилам нормализации.

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

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

Я думаю о (также реализуемом прямо сейчас) решении, которое проверяет файлы cookie, идентификаторы сеансов, таблицу БД для зарегистрированных пользователей и, если ничего не найдено, добавляет строку в таблицу.Itr также в любом случае записывает идентификатор сеанса и IP-адреса, но на самом деле не полагается на них.

Если вы используете ASP.NET Членство и анонимного провайдера для анонимных пользователей, то каждый анонимный пользователь получает строку, созданную в таблице aspnet_Users, как только вы указываете Profile.Save().В этом случае вы можете отслеживать как анонимных, так и зарегистрированных пользователей, просматривающих определенную Страницу.Все, что вам нужно сделать, это записать идентификатор пользователя aspnet_user и идентификатор вопроса.

Однако я настоятельно не рекомендую делать это на уровне базы данных, поскольку это может взорвать вашу базу данных.Если у вас есть 10 000 вопросов и 1000 зарегистрированных пользователей и 100 000 анонимных пользователей, и предполагается, что каждый пользователь посещает в среднем 10 вопросов, то в итоге у вас будет 1 МЛН строк в таблице отслеживания.Довольно большая нагрузка.

Более того, выполнение SELECT COUNT() в таблице отслеживания является довольно большой нагрузкой на базу данных, особенно если вы делаете это почти при каждом просмотре страницы на вашем форуме.Лучше всего вести общий счетчик в таблице вопросов по каждому вопросу.Всякий раз, когда вы получаете уникального пользователя, просматривающего страницу, вы просто увеличиваете счетчик.

Также не создавайте связь FK с пользовательской таблицей из таблицы отслеживания.Вам нужно будет очистить таблицу aspnet_users, поскольку со временем в ней накапливается много анонимных пользователей, которые, скорее всего, никогда не вернутся.Таким образом, на странице отслеживания должно быть только поле userId и никакого FK.Более того, вам придется со временем очищать таблицу отслеживания, так как она будет продолжать получать миллионы строк.Вот почему счетчик TotalView должен находиться в таблице вопросов и никогда не используйте SELECT COUNT() для вычисления количества просмотров при отображении страницы.

Отвечает ли это на ваш вопрос?

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