Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Подскажите, оптимальна ли структура? (Po4emu4ka) 14/09/2016 - 10:44:21
      Re: Подскажите, оптимальна ли структура? (Akina) 14/09/2016 - 14:39:51
      Re: Подскажите, оптимальна ли структура? (Po4emu4ka) 14/09/2016 - 17:09:25
      Re: Подскажите, оптимальна ли структура? (Akina) 14/09/2016 - 17:27:28

> Original message text:
> From: Po4emu4ka - 14/09/2016 - 10:44:21
> Subject:Подскажите, оптимальна ли структура?
> -----------------
> Дело в том, что нужна таблица для хранения активных и архивных сессий. Т.е. приходит событие СТАРТ - создаётся запись с start_time=now(), stop_time=0. Приходит событие СТОП, устанавливается stop_time=now(). Поскольку поиск программы идёт в открытых сессиях, в основном, то хочется сделать таблицу с партициями, где бы в одной партиции держала открытые и в других - остальное. С возможностью перехода в архивы по месяцам.
> Нормальна ли такая конструкция будет? Давно не создавал новых баз/таблиц, может уже чего-то по новому можно сделать, оптимальнее? :)
>
> CREATE TABLE session (
> digituser decimal(11,0) NOT NULL DEFAULT '0',
> ipv4 int(10) unsigned default NULL,
> ipv6 char(45) DEFAULT NULL,
> session_id char(100) NOT NULL,
> start_time int unsigned,
> stop_time int unsigned default 0,
> UNIQUE KEY `session_stop_idx` (`session_id`,`stop_time`),
> KEY `digituser_idx` (`digituser`),
> KEY `ipv4_idx` (`ipv4`),
> KEY `ipv6_idx` (`ipv6`),
> KEY `start_time_idx` (`start_time`),
> KEY `stop_time_idx` (`stop_time`)) ENGINE = MYISAM
> PARTITION BY RANGE(stop_time) (
> PARTITION p0 VALUES LESS THAN (1),
> PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2016-09-01 00:00:00') ),
> PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2016-10-01 00:00:00') ),
> PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2016-11-01 00:00:00') ),
> PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2016-12-01 00:00:00') ),
> PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2017-01-01 00:00:00') ),
> PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2017-02-01 00:00:00') )
> );
>
>


From: Akina - 14/09/2016 - 14:39:51
Subject:Подскажите, оптимальна ли структура?
-----------------
Вообще партиционирование обычно предполагает, что выражение партиционирования для записи не изменяется. При таком партиционировании простое изменение stop_time должно привести к миграции записи из одной партиции в другую. Не убеждён, что это оправдано обстоятельствами. К тому же если существует индекс по этому полю, реальный эффект от партиционирования (в смысле, который можно различить на фоне ошибки измерения) появится в лучшем случае лет через несколько...

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


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
43629



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |