Это хороший способ сбора событий щелчка?

#mysql #statistics

#mysql #Статистика

Вопрос:

Я работаю над проектом статистики, в котором мы заинтересованы в записи различных событий о разных списках на веб-сайте.

Примером события может быть «нажмите на логотип», «нажмите на дополнительную информацию» и т.д., Каждое событие будет представлено числом, которое я называю eventid.

В день в этой таблице должно храниться около 20 000 событий, так что в течение 5 лет в этой таблице будет находиться где-то около 18 000 000 строк.

Вот что я имею в виду:

 CREATE TABLE IF NOT EXISTS `stattableindexed` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `lid` int(10) unsigned NOT NULL COMMENT 'Listing ID',
  `serviceareaid` int(10) unsigned NOT NULL COMMENT 'Service Area ID',
  `domainid` int(10) unsigned NOT NULL COMMENT 'Domain ID',
  `bizgroup` int(10) unsigned NOT NULL COMMENT 'Business Group',
  `eventid` int(10) unsigned NOT NULL COMMENT 'Event ID',
  `eventtype` int(10) unsigned NOT NULL COMMENT 'Event Type',
  `count` int(10) unsigned NOT NULL COMMENT 'Count of Events',
  `timeunitid` bigint(10) unsigned NOT NULL COMMENT 'Time units',
  PRIMARY KEY  (`id`),
  KEY `timeunitid` (`timeunitid`),
  KEY `lid` (`lid`),
  KEY `serviceareaid` (`serviceareaid`),
  KEY `domainid` (`domainid`),
  KEY `bizgroup` (`bizgroup`),
  KEY `eventid` (`eventid`),
  KEY `eventtype` (`eventtype`),
  KEY `count` (`count`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  

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

Таким образом, я могу запросить таблицу за диапазон дней.

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

Комментарии:

1. Во-первых, по какой-либо причине не используется InnoDB? Какие запросы вы планируете запускать к этой таблице?

2. Я не думал об использовании InnoDB, какая в этом разница? Запросы, которые я буду запускать, будут основаны на том, какие события произошли для какого списка в каком диапазоне дат в соответствии с пользовательским вводом, например, сколько раз кнопка «Дополнительная информация» в списке была нажата за последние 4 месяца.

3. Таблица не маленькая, поэтому я бы максимально ее нормализовал. Таким образом, eventtype может быть удален в таблице с ключевым eventid. Также используйте наименьший возможный тип (smallint вместо int для eventid, например).

Ответ №1:

Рассматривали ли вы возможность использования решения NoSQL по соображениям производительности? то есть MongoDB — отличный инструмент для такого рода крупномасштабных баз данных ведения журнала.