Доброго дня!
Достался мне проект некоторой базу данных логов, получаемых с очень старых серверов.
Реализация была на базах MS Access. То есть, был набор баз данных, каждая база данных содержала одну таблицу в которой содержались данные логов с одного из серверов. По каждому серверу своя БД. Но так же базы данных разделялись по годам и полугодиям. Названия примерно следующим образом сформировано: сервер_год_полугодие (srv1_2020_1 или srv2_2020_2). И потом была БД и формами, которое позволяли по сети просматривать эти логи из этих баз.
Суть вопроса.
Хочу всё это безобразие переписать в виде некоторых веб-страниц. И если внешний вид я более менее представляю, и как должна работать логика - тоже.
Но вот упёрся в то, как должна работать бд.
Таблицы везде одного размера. Что-то типа id, datetime, text, etc.
Была мысль воспроизводить таблицы по тому же принципу, что и раньше, то есть куча таблиц вида сервер_год_полугодие. Но мне подсказали про партицирование.
Вопрос такой, хотелось бы организовать в MySQL партицирование (если такой вариант возможен) следующего вида: год -> месяц -> сервер
Я смог добиться только варианта, либо год -> месяц, либо год -> сервер.
Пример кода (год месяц):
spoiler
CREATE TABLE aaa (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
server INT(1) UNSIGNED NOT NULL,
logDate DATETIME NOT NULL,
INDEX id (id)
)
PARTITION BY RANGE( YEAR(logDate) )
SUBPARTITION BY HASH( MONTH(logDate) )
SUBPARTITIONS 12 (
PARTITION y20 VALUES LESS THAN (2020),
PARTITION y21 VALUES LESS THAN (2021),
PARTITION y22 VALUES LESS THAN (2022),
PARTITION yNext VALUES LESS THAN MAXVALUE
);
Пример кода (год сервер):
spoiler
CREATE TABLE bbb (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
server INT(1) UNSIGNED NOT NULL,
logDate DATETIME NOT NULL,
INDEX id (id)
)
PARTITION BY RANGE (YEAR(logDate))
SUBPARTITION BY KEY(server)
SUBPARTITIONS 3 (
PARTITION y2020 VALUES LESS THAN (2021) (
SUBPARTITION srv0_2020,
SUBPARTITION srv1_2020,
SUBPARTITION srv2_2020
),
PARTITION y2021 VALUES LESS THAN (2022) (
SUBPARTITION srv0_2021,
SUBPARTITION srv1_2021,
SUBPARTITION srv2_2021
),
PARTITION y2022 VALUES LESS THAN (2023) (
SUBPARTITION srv0_2022,
SUBPARTITION srv1_2022,
SUBPARTITION srv2_2022
)
);
Благодарю за любую помощь