Подсчет посетителей за день, последнюю неделю и последний месяц - PullRequest
3 голосов
/ 06 декабря 2010

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

Как бы вы сделали схему базы данных для этого?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2010

Если вам достаточно знать, сколько раз была показана статья, вы можете использовать что-то вроде этого:

daily_article_views(
  ,article_id
  ,view_date
  ,view_count
  ,primary key(article_id, view_date)
  ,foreign key(article_id) references articles
);

Для каждого просмотра статьи вы должны найти строку в таблице, используя текущую датуи идентификатор статьи, которая просматривается в данный момент.Если строка существует, вы увеличиваете счетчик.Если строки не существует, вы вставляете ее со значением 1 для view_count (и усеченной даты).Затем вы можете свести данные из этой таблицы, используя SUM (view_count), к недельным, ежемесячным или годовым данным в качестве необходимых.

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

article_views(
  ,view_id
  ,article_id
  ,view_date
  ,additional_data_about_each_view
  ,primary key(view_id)
  ,foreign key(article_id) references articles
);

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

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

1 голос
/ 06 декабря 2010

Если вас точно никогда не заинтересует информация о времени суток, тогда вы можете использовать таблицу с 3 столбцами

article_id
date
view_count

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

...