MySQL Разделение на основе ID и недели - PullRequest
0 голосов
/ 14 марта 2020

У меня есть таблица

CREATE TABLE `acme`.`partitioned_table` (
  `id` INT NULL,
  `client_id` INT NOT NULL,
  `create_datetime` INT NOT NULL,
  `some_val` VARCHAR(45) NULL);

Я хочу разделить эту таблицу таким образом, чтобы данные каждого клиента сохранялись в своем собственном разделе на основе client_id И каждого раздел может содержать данные только за 1 неделю на основе create_datetime . Это сделано для того, чтобы мы могли отбрасывать еженедельные данные за неделю на основе собственной политики хранения каждого клиента.

Например, некоторые клиенты хотели бы иметь данные за 3 месяца, в то время как другие могут иметь более длительные политики хранения данных. правильная стратегия разделения. Как я могу разделить по неделям на основе столбца INT. Чтобы бросить изогнутый шар, его можно будет разместить на AWS RDS позже.

Большое спасибо заранее,

M

1 Ответ

0 голосов
/ 22 марта 2020

Ваши клиенты х недель уровень разделения приведет к большому количеству разделов. Это подразумевает много дискового пространства, и запросы будут выполняться медленнее.

Ваше требование для "отдельного хранилища" будет лучше обрабатываться либо отдельными таблицами, либо отдельными базами данных.

Если вам также необходимо выполнить запросы ко всем клиентам, нам нужно обсудить вещи дальше.

Одно из «правил» разделения не состоит в том, чтобы разбивать таблицу с числом строк меньше миллиона.

Если таблица клиента достаточно большой, чтобы оправдать разбиение, см. http://mysql.rjweb.org/doc.php/partitionmaint для дальнейшего обсуждения. Если он недостаточно велик, либо просто выполните DELETE, либо посмотрите это для получения дополнительных опций: http://mysql.rjweb.org/doc.php/deletebig.

Есть много функций DATETIME, которые являются беспорядочными, если вы используете INT:

`create_datetime` INT
...