Лучший способ хранить просмотры / статистику в MySQL

I ' m не работает с сайтом, который хранит отдельные просмотры страниц в таблице «просмотров»:

CREATE TABLE `views` (
  `view_id` bigint(16) NOT NULL auto_increment,
  `user_id` int(10) NOT NULL,
  `user_ip` varchar(15) NOT NULL,
  `view_url` varchar(255) NOT NULL,
  `view_referrer` varchar(255) NOT NULL,
  `view_date` date NOT NULL,
  `view_created` int(10) NOT NULL,
  PRIMARY KEY  (`view_id`),
  KEY `view_url` (`view_url`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Это довольно просто, хранит user_id (идентификатор пользователя на сайте), их IP-адрес, URL-адрес (без домена, чтобы уменьшить размер таблицу), URL-адрес реферала (прямо сейчас он не используется и может от него избавиться), дата (конечно, в формате ГГГГ-ММ-ДД) и временная метка unix, когда произошло просмотр.

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

Для некоторой базовой оптимизации я создал таблицу views_archive:

CREATE TABLE `views_archive` (
  `archive_id` bigint(16) NOT NULL auto_increment,
  `view_url` varchar(255) NOT NULL,
  `view_count` smallint(5) NOT NULL,
  `view_date` date NOT NULL,
  PRIMARY KEY  (`archive_id`),
  KEY `view_url` (`view_url`),
  KEY `view_date` (`view_date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

При этом игнорируется информация о пользователе (и URL-адрес реферала), и сохраняется, сколько раз URL-адрес просматривался в день. Наверное, так мы я обычно хочу использовать данные (сколько раз страница просматривалась в день), поэтому запросы должны выполняться довольно быстро, но даже если я использую их в основном для замены таблицы `` просмотров '' (прямо сейчас я думаю, что могу показать просмотры страниц по часам за последнюю неделю / месяц или около того, а затем будут отображаться ежедневные просмотры сверх этого, поэтому в таблице «просмотров» должны содержаться данные только за последнюю неделю / месяц), но это все равно большая таблица.

В любом случае Короче говоря, мне интересно, можете ли вы дать мне какие-либо советы о том, как лучше всего обрабатывать хранилище статистики / просмотров страниц на сайте MySQL, цель которого состоит в том, чтобы сохранить размер таблицы (таблиц) в db как можно меньше и при этом иметь возможность легко (и, по крайней мере, относительно быстро) запрашивать информацию. Я немного посмотрел на секционированные таблицы, но на сайте не установлен MySQL 5.1. Будем очень признательны за любые другие советы или мысли.

8
задан Charlie 15 November 2010 в 18:05
поделиться