Если вам нужен точный счет, Redis идеально подходит для этой задачи. Это примерно сопоставимо по скорости с memcached, но предлагает постоянство. Постоянство основано на разветвлении и последовательной записи на диск, поэтому оно позволяет избежать высокой нагрузки по хранению такого рода информации в вашей базе данных.
Если вы хотите очень простой подход: просто отбросьте выборки непредвзято (например, log_request(foo) if rand(1) < 0.1
для выборки 10% трафика). Вы потеряете все сигналы на URL, к которым обращаетесь, меньше, чем коэффициент, к которому вы относитесь, но если вас больше всего интересуют URL-адреса с высоким уровнем доступа, это может быть очень просто и эффективно.
Существуют более сложные вариации в приведенной выше схеме, где вы обновляете счетчик с вероятностью того, что уроки будут расти по мере увеличения счета (а затем весовые счетчики соответствующим образом с помощью функции вероятности при их чтении), что является своего рода ублюдочной формой выборки важности , Они почти такие же простые и лучше сохраняют счет в хвосте распределения.
Ах, извините, теперь я вижу по комментариям, что вы после курсов на какое-то время. Подход, который я использовал для этого, в основном такой же, как для выборки / счетчика, просто сохраняйте отдельные счетчики для некоторой временной шкалы (то есть ежечасно). Для хранения долговременных архивов есть дополнительные сводные таблицы для больших периодов времени (ежедневно, еженедельно), которые пакетное задание заполняет из мелкозернистой (почасовой) таблицы, что позволяет удалять старые данные из мелкозернистой таблицы.
RRDTool является более общей реализацией этой идеи, и некоторые решения для мониторинга OSS используют ее.