Партиционирование таблиц

Проектирование баз данных

Lis Sulmont

Curriculum Manager

Зачем партиционировать?

Таблицы растут (сотни Гб / Тб)

Проблема: запросы и обновления замедляются

Причина: например, индексы не помещаются в память

Решение: разбить таблицу на части (= партиционирование)

Архивы файлов, упорядоченные по дате

Проектирование баз данных

Краткое повторение: модели данных

 

1. Концептуальная модель данных

2. Логическая модель данных

При партиционировании логическая модель не меняется

3. Физическая модель данных

Партиционирование относится к физической модели данных

Проектирование баз данных

Вертикальное партиционирование

Вертикальное партиционирование

Таблицу можно разбить, даже если она полностью нормализована

Проектирование баз данных

Вертикальное партиционирование: пример

Пример вертикального партиционирования

Например, long_description можно хранить на медленном носителе

Проектирование баз данных

Горизонтальное партиционирование

Горизонтальное партиционирование

Проектирование баз данных

Горизонтальное партиционирование: пример

Горизонтальное партиционирование: пример таблицы

Проектирование баз данных

Горизонтальное партиционирование: пример

 

Горизонтальное партиционирование: пример

 

CREATE TABLE sales (
    ...
    timestamp DATE NOT NULL
)
PARTITION BY RANGE (timestamp);

CREATE TABLE sales_2019_q1 PARTITION OF sales FOR VALUES FROM ('2019-01-01') TO ('2019-03-31'); ... CREATE TABLE sales_2019_q4 PARTITION OF sales FOR VALUES FROM ('2019-10-01') TO ('2020-01-31');
CREATE INDEX ON sales ('timestamp');
Проектирование баз данных

Плюсы и минусы горизонтального партиционирования

Преимущества

  • Индексы активно используемых разделов помещаются в память
  • Перемещение на нужный носитель: медленный или быстрый
  • Подходит для OLAP и OLTP

Недостатки

  • Партиционирование существующей таблицы может быть трудоёмким
  • Некоторые ограничения не поддерживаются
Проектирование баз данных

Связь с шардированием

Шардирование

Проектирование баз данных

Давайте потренируемся!

Проектирование баз данных

Preparing Video For Download...