2011-01-15 3 views
1

Используя PHP5 и последнюю версию MySQL, я хочу иметь возможность отслеживать показы и клики для бизнес-записей. Мой вопрос, если бы я сам это сделал, что было бы лучшим методом для его хранения, чтобы я мог запускать отчеты? Раньше у меня была таблица с идентификатором листинга, IP-адресом пользователя, и если это был клик или показ, а также дата его отслеживания. Однако сама база данных приближается к 2 ГБ данных, и ее очень медленная часть - это довольно простой скрипт, который включает в себя показы и клики от кого-либо, включая поисковые системы, и в основном кого-либо или что-либо, что обращается к странице листинга.PHP и сохранение статистики

Есть ли api или файл там, где есть список обновления до даты, который может определить, является ли просмотр человеком фактически человеком, а не пауком, поэтому я не заполняю базу данных ненужными статистическими данными? Просто ищите предложения, просто я имею необработанную базу данных, которая получает только хиты, а затем задание cron в ночное время за день для каждого листинга для каждого ip и хранения совокупной статистики в другой таблице?

И какой тип базы данных должен быть? Innodb? MyISAM?

ответ

0

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

Предположим, у вас есть ссылка, и вы хотите отслеживать ее щелкнуть. Затем добавьте обработчик onclick, который отправит достойный отчет на сервер. Вот пример:

<a href="/somepage" onclick="track('click', this.href); return true;">Some page</a> 

Функция трек будет выглядеть как этот:

function track(action, data) { 
    var Img = new Image(); 
    Img.src = '/track.php?action=' + action + '&data=' + data; 
} 

Таким образом, в этом случае, когда пользователь нажимает на ссылку, то информация об этом клике будет отправлена ​​на сервер этот кусок кода javascript. Боты не могут запускать javascript, поэтому они не будут учитываться. Однако есть один недостаток: если пользователь отключил javascript в своем браузере, ваш скрипт отслеживания не будет считать такого пользователя. Очевидно, что вам нужно реализовать скрипт track.php для хранения данных.

Что касается вашего вопроса MySQL, я бы выбрал MyIsam, поскольку он кажется более терпимым к множеству intserts. Кроме того, вы можете посмотреть инструкцию INSERT DELAYED, и ваша идея о работе в ночное время cron кажется мне разумной. Вы можете разделить статистику по дням, неделям или месяцам.

+0

Очень интересный подход. Другой вопрос: как вы рекомендуете мне обращаться с людьми, которые обновляют страницу или возвращаются к списку, чтобы снова просмотреть его? Прямо сейчас ip-адрес и дата являются уникальным индексом, поэтому, если для этого показа найден уникальный индекс или нажмите «Я обновляю поле счетчика», которое показывает, что этот человек просматривал один и тот же список более одного раза. Считаете ли вы, что это хороший подход? Или я должен отказаться, когда кто-то просматривает листинг более одного раза в день? – John

+0

@John Ну, это зависит от ваших целей. Если вам нужно знать, если какой-либо пользователь дважды нажал на одну и ту же ссылку - тогда вам нужно обновить (допустим, у вас есть поле «counter» в вашей таблице) - в этом случае вы можете использовать INSERT ... ON DUPLICATE KEY UPDATE statement , Но если вам это не нужно - тогда вам не нужно обновлять запись снова. В этом случае вы можете использовать инструкцию INSERT IGNORE. – itsmeee

1

Я бы подумал, что вы никогда не создадите что-то лучшее, чем то, что уже есть. Я бы использовал аналитику Google. Если вы хотите использовать его на стороне администратора сайта (для запуска клиента может быть), вы всегда можете использовать googles api и извлекать данные по мере необходимости. вот где я смотрел .. http://code.google.com/intl/en-US/apis/analytics/

НТН Приветствия -Jeremy

+0

Моя основная забота - это настраиваемая отчетность, которая может потребоваться, например, я хочу посмотреть, сколько людей просмотрело это объявление на данный момент для этого сайта. Аналитика Google позволяет вам запускать подобные запросы против своих данных? – John

+0

Короче да, вы можете ... это не по минутам ... но вы можете получить byyear, месяц, день, час ... захватить там ip lat, lng и тонны другой информации ... вот где вы хотите готов к .. http://code.google.com/intl/en-US/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html –

0

99,999% времени, вы будете Juste записи в базу данных.

Так что для такого рода работ ежедневные секционированные таблицы MySQL будут выполнять эту работу.

Каждый день пишите на том же разделе и запустите ANALYZE PARTITION на своем вчерашнем разделе.

Смежные вопросы