php / mysql доска объявлений просмотреть счетчик по дате - PullRequest
0 голосов
/ 17 ноября 2011

Я создаю сайт объявлений, где я хочу хранить количество просмотров каждого объявления, которое я хочу отображать на графике в более позднюю дату, день и месяц и т. Д. Для каждого пользователя.и каждая из их объявлений.Я просто пытаюсь решить, как лучше всего реализовать базу данных mysql для хранения потенциально большого объема данных для каждого объявления.

Я собираюсь создать таблицу для просмотров страниц следующим образом, в которой будет храниться запись для каждого объявления.просмотр для каждого объявления, например, если объявление (идентификатор 1) имеет 200 просмотров, таблица будет хранить 200 записей:

Advert_id (уникальный идентификатор объявления)

date_time (дата и время просмотра)

ip_address (уникальный ip-адрес лица, просматривающего рекламу)

page_referrer (URL-адрес страницы-реферрера)

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

Если мой сайт станет достаточно большим и, например, у него будет 40 000 объявлений, а у каждого объявления будет в среднем 3000 просмотров, это будет означать, что в таблице содержится 120 миллионов записей.Это слишком большое?и будут ли запросы mysql для создания графиков очень медленными?

Как вы думаете, приведенные выше таблица и метод - лучший способ сохранить статистику просмотров рекламы или есть лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Я работал с сайтом с 50.000 уникальных посетителей в день, и у меня был тот же стол, что и у вас.

Таблица росла ~ 200-500 МБ / день, но я мог чистить таблицу каждый день.

Лучший вариант - создать вторую таблицу, подсчитывать посетителей каждый день, добавлять результат во 2-ую таблицуи очистите первую таблицу.

пример первой таблицы:

  • advert_id
  • дата и время
  • IP-адрес
  • страницареферер

второй пример таблицы (для графика):

  • advert_id
  • дата
  • посетителей
  • уникальных посетителей

Пример SQL-запроса для подсчета неисчисленных посетителей:

SELECT 
    advert_id,
    Count(DISTINCT ip_address), 
    SUBSTRING(Date,1,10) as Date 
FROM 
    adverts 
GROUP BY 
    advert_id, 
    Date

Проблема даже не в производительности (MySQL ISAM Engine довольно умен и быстр), проблема заключается в хранении таких больших данных.


Инструменты статистики 90% (даже Google Analytics или Webalyzer) создают графики только один раз в день, а не в режиме реального времени.

И очень хорошая идея - хранить IP как INT, используя функцию ip2long ()

0 голосов
/ 17 ноября 2011

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

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

Если вам действительно необходимо сохранить все эти данные, то, возможно, еженедельное вращение таблицы журналов (после ее обработки) уменьшит накладные расходы на хранение всей этой информации на неопределенный срок.

...