Розбиття таблиць на секції

Проєктування баз даних

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...