Простой в реальном времени уникальный счетчик посетителей с низкой нагрузкой на базу данных? - PullRequest
2 голосов
/ 31 октября 2011

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

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Наименьший стресс?Аутсорсинг проблемы :), например, используя Google Analytics .

(хотя Google Analytics не работает в реальном времени. Другие поставщики аналитического инструмента предлагают решения в реальном времени, например, KISSmetrics)

0 голосов
/ 02 февраля 2013

Вы можете использовать (пользовательский) обработчик сеанса, который хранит сеансы пользователя в базе данных или в системе кэширования, такой как APC или Memcached.

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

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

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

0 голосов
/ 31 октября 2011

Если вы создаете веб-сайт и вам нужны счетчики, есть много бесплатных аналитических служб (Google Analytics, Yahoo Analytics и т. Д.) И служб счетчиков, которые могут предоставить гораздо больше информации, чем простой сценарий счетчика. Это будет моя рекомендация.

Однако, если вы что-то строите сами и имеете контроль над сервером, вы можете использовать другой инструмент для фактического подсчета. Для этой цели я использовал memcache, так как он поддерживает методы «add» и «increment», которые при вызове за другим (из-за ограничений на использование команды) могут создавать такие высокоскоростные счетчики реального времени.

Memcache - это чрезвычайно быстрое (200 000+ запросов в секунду на медленной машине) решение для кэширования памяти, но оно не является постоянным хранилищем. Вам понадобится другое решение для хранения подсчитанных чисел.

Это мое решение для такой задачи, добавленное в начало запроса в его собственной функции:

$m = new Memcache;
$m->addServer('localhost', 11211);

$cacheKey = "performance_".gmmktime();

// Add in case it doesn't exist, no compression, 1 hour timeout
$m->add($cacheKey, (int) 0, false, (60*60));
// Increment cache
$m->increment($cacheKey, (int) 1);

Изменение $ cacheKey также позволяет считать несколько разных вещей.

Затем у меня есть другой фрагмент кода, который каждую минуту собирает эту информацию в скрипте cron и добавляет ее в базу данных. Это решение также работает на нескольких компьютерах, в зависимости от потребностей вашей реализации, что позволяет реализовать масштабируемую реализацию счетчика.

Очевидно, что это всего лишь простой пример, но, надеюсь, вы сможете увидеть его использование. Этот код используется в крупномасштабном многосерверном игровом сервисе с PHP.

0 голосов
/ 31 октября 2011

Таблица базы данных visitor_counter со строками ip и when.Затем при каждой загрузке страницы проверяйте, находится ли ip пользователя в базе данных в течение заданного промежутка времени от when (поле datetime или int, содержащее метку времени).Если ip находится в базе данных, ничего не делайте.Если это не так, добавьте его.Затем периодически сокращайте значения, основанные на времени, прошедшем с when.Вы можете использовать COUNT (ip) для общего количества посетителей.

И это может быть адаптировано для отображения посетителей за последний X промежуток времени, и вы можете добавить поле visits, чтобы увидеть, сколько страницпользователь загрузил и т. д.

Я не совсем уверен, как это будет работать, но теоретически он делает то, что вы хотите, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...