2009-09-28 7 views
2

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

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

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

И для уникальных просмотров у меня есть отдельная таблица, содержащая строку с «QuestionID» и «UserID». Когда пользователь посещает вопрос/страницу, мой код пытается найти строку в таблице представлений с «UserID» и «QuestionID», если она не может, она добавляет строку, а затем увеличивает значение Views для Вопроса в Таблица «Вопросы».

ответ

1

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

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

1

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

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

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

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

0

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

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

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

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

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

+0

Помог ли вам этот ответ? – oazabir

Смежные вопросы