#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 — отличный инструмент для такого рода крупномасштабных баз данных ведения журнала.