Подтвердить что ты не робот

Как лучше всего использовать "View Count"?

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

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

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

4b9b3361

Ответ 1

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

Cookies

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

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

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

База данных

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

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

  • ArticleID (внешний ключ)
  • UserID (внешний ключ)
  • Дата

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

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

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

Ответ 2

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

Скажем, у меня есть генератор случайных чисел с хорошим распределением между 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 довольно незначительна.

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

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

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