Какой самый эффективный способ отслеживать весь пользовательский трафик внутри базы данных - PullRequest
1 голос
/ 03 июня 2010

В настоящее время я использую mysql для регистрации всего трафика от всех пользователей, заходящих на сайт, которым я управляю. База данных выросла до почти 11 миллионов строк в месяц, и запросы становятся довольно медленными. Есть ли более эффективный способ регистрации пользовательской информации? Все, что мы храним, это их запрос, идентификатор пользователя и их ip, а также связь с определенным веб-сайтом.

Ответы [ 7 ]

4 голосов
/ 03 июня 2010

Почему бы не попробовать Google Analytics? Даже если вы не думаете, что этого будет достаточно для вас, я уверен, что он может отследить 99% того, что вы хотите отслеживать.

2 голосов
/ 03 июня 2010

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

0 голосов
/ 03 июня 2010

Для этого и используется «Хранилище данных». Подумайте о покупке хорошей книги по складированию.

Собрать необработанные данные в некоторую схему "текущей деятельности".

Периодически перемещайте его в звездообразную схему «хранилища» (или «datamart»), которая (а) отделена от текущей схемы действий и (б) оптимизирована для запросов по количеству / сумме / группам.

Переместить, кстати, означает вставить в схему хранилища и удалить из схемы текущей деятельности.

Отделите текущую обработку транзакций от обработки запросов / аналитики.

0 голосов
/ 03 июня 2010

1) Посмотрите, как использовать Piwik для отслеживания типов в Google Analytic, сохраняя контроль над данными MySQL.

2) Если вам необходимо продолжать использовать свою собственную систему, обратите внимание на использование плагина InnoDB для поддержки типов сжатых таблиц. Кроме того, преобразуйте IP в целое число без знака, преобразуйте как useragent, так и запрос в unsigned int, ссылаясь на справочные таблицы, сжатые с помощью сжатия Innodb или механизма архивирования.

3) Пропустить разбиение и разделить БД по месяцам.

0 голосов
/ 03 июня 2010

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

0 голосов
/ 03 июня 2010

самый эффективный способ, вероятно, состоит в том, чтобы использовать apache (при условии, что на этом работает сайт), просто использовать встроенное ведение журнала в текстовых журналах и настраивать что-то вроде AWStats . Это устраняет необходимость регистрировать эту информацию самостоятельно и должно предоставлять вам информацию, которую вы ищете - вероятно, все уже настроено в существующих отчетах. Преимущество этого по сравнению с чем-то вроде Google Analytics будет отслеживание на стороне сервера и т. Д.

0 голосов
/ 03 июня 2010

Какие типы запросов вы хотите выполнить для данных? Я полагаю, что большинство ваших запросов по данным в текущем или недавнем временном окне. Я бы предложил использовать временное разбиение таблицы. Это ускорит выполнение таких запросов, так как запросы будут попадать только в раздел с данными, поэтому меньше будет искать диск. Также регулярно очищайте старые данные и помещайте их в сводные таблицы. Некоторые полезные ссылки:

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