2009-06-03 3 views
20

На любом веб-сайте, например, на StackOverflow, каждый вопрос имеет счетчик просмотров, а пользователь, читающий вопрос, но имеющий предыдущее чтение, не будет считаться дважды.Как лучше всего использовать «View Count»?

У меня есть некоторые идеи о том, как это реализовано и с помощью каких таблиц это делается.

Как вы думаете, что это лучший способ реализовать это?

ответ

10

У вас есть несколько вариантов, как я вижу.

Печенье

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

Недостатком этого является то, что он не будет работать, если файлы cookie отключены или кто-то пытается играть в систему.

С положительной стороны вам не нужно беспокоиться о хранении потенциально миллионов/миллиардов строк данных таблицы.

Database

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

Таким образом, вы бы иметь, например, таблицу со следующими столбцами,

  • ArticleID (Foreign Key)
  • Идентификатор_пользователя (Foreign Key)
  • Дата

дата будет полезны по нескольким причинам,

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

Если ваше приложение становится популярным в этой ситуации, вам придется иметь дело с последствиями для хранения. Я запускаю популярное приложение Facebook, в результате которого каждый день добавляется более 100 000 строк. Реально, хотя, если ваше приложение становится настолько популярным, что это становится проблемой, тогда у вас будет гораздо больше проблем.

+0

у вас есть код примера? – AminM

1

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

Я не уверен, что SO подсчитывает мнения гостей. Полагаю, я мог проверить, но уже поздно.

+0

Я просто просмотрел вопрос несколько раз, и счет не изменился после первого раза. –

+1

Я думаю, что он также не учитывает представления OP - поэтому, если я задаю вопрос, а затем посмотрю на количество просмотров, я думаю, что это отличное количество пользователей, которые рассмотрели вопрос. –

2

Короткий ответ: все зависит!

  • Это действительно зависит от того, насколько точным вам нужен ваш счет, приемлемо ли, что один человек может быть зарегистрирован два или три раза?
  • Это зависит от того, для чего вы собираетесь использовать данные. Если вы хотите делать другие аккуратные вещи с данными (статистика, список последних просмотров и т. Д.), Вы можете захотеть сохранить все отдельные представления в базе данных. Это может привести к тому, что таблица огромная, так что вам нужно это сделать до ее реализации.

Я ранее использовал файлы cookie в сочетании с базой данных в памяти, чтобы сохранить вид отдельных лиц (по очевидным причинам я сохранил фактическое количество просмотров в таблице базы данных, сохраненной на диске). Я мог бы это сделать, потому что статистика ничего не знала.

0

Я попытаюсь дать ответ с функциональной точки зрения.

просмотров кол-во посетителей - для зарегистрированных пользователей. для анонимных пользователей - за сеанс.

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

вид плаката на момент создания не следует рассчитывать

вы можете себе это делать проще, но я пытался придумать идеальное решение.

1

Похоже, что stackoverflow не считается гостевым (нелогичным) пользователем, просматривающим тему. Проблема с подсчетом анонимных просмотров пользователей заключается в том, что ваш счетчик может быть пропущен. Кто-то всегда может удалить cookie и просмотреть его снова. Регистрация просмотров является самым безопасным решением для точности, но, конечно, у вас есть две основные проблемы: размер таблицы и отсутствие гостевых/анонимных пользователей. Меня удивляет, что stackoverflow не регистрирует гостевых (нелегальных) пользователей. Я бы подумал, что большинство просмотров будут получены от пользователей, которые выполняют поиск в Google.

9

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

Скажем, у меня генератор случайных чисел с хорошим распределением между 0 и 1, и я получаю 100 000 просмотров в день на определенной странице. Если я вызываю функцию «logView()» для каждого представления, но в ней генерирует новое случайное число и только реально регистрирует представление в БД, когда случайное число равно < 0,001, то для 100 000 просмотров я буду только приближаться к БД 100 000 * 0,001 = 1000 раз.

Если я хочу вернуть число просмотров, то я просто делю свой номер БД на одно и то же значение, например. 1000/0,001 = 100 000. Это приблизительно точно с точностью до 1000 просмотров.

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

Кроме того, страница с 1000 видами может даже не получить 1 из числа просмотров, но если у вас есть страница со 100 000 просмотров, то одна с 1000 довольно незначительна.

+0

Хорошая идея. Спасибо за акцию –

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