Как лучше всего использовать "View Count"?
На любом веб-сайте, например, в StackOverflow, каждый вопрос имеет счетчик просмотров, а пользователь, читающий вопрос, но имеющий предыдущее чтение, не будет считаться дважды.
У меня есть некоторые идеи о том, как это реализовано и с помощью каких таблиц это делается.
Как вы думаете, лучший способ реализовать это?
Ответы
Ответ 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
Я попытаюсь дать ответ с функциональной точки зрения.
количество просмотров для пользователя - для зарегистрированных пользователей. для анонимных пользователей - за сеанс.
увеличивать количество просмотров в первом представлении и на любом представлении после значительного обновления кем-то другим, кто просматривает элемент.
просмотр плаката во время создания не должен считаться
вы можете себе представить, что это тоже проще, но я попытался придумать идеальное решение.