Разрабатывая какой-либо проект рано или поздно мы можем столкнуться с проблемой нагрузки на БД. Данных может быть очень много, а мы как-то должны выдерживать нагрузки и должны быть готовы к её росту.
В своём докладе я поделюсь опытом масштабирования БД, расскажу всё максимально подробно — с какими проблемами можно столкнуться, какие стратегии и подходы лучше всего заложить в проекте.
Проблемы:
— Много строк в таблицах.
— «Медленные» запросы.
Варианты масштабирования БД
— Секционирование / партицирование данных.
— Шардинг.
— Репликация.
На какие вопросы будут получены ответы:
— Как создать сегментированную таблицу?
— Использование constraint (ограничений).
— Выборка данных из сегментированных таблиц.
— Как управлять сегментами таблицы: вставка, удаление, изменение данных.
— Индексы и триггеры в сегментированных таблицах.
— Архивация данных.
— Использование представлений и материализованных представлений.
— Шардирование данных.
— Репликация как способ масштабирования БД, архивации и резервного копирования.
— В каких случаях какой из способов масштабирования выбрать?
— Какие плюсы и минусы у каждого из подходов?
— Прирост производительности БД (в 3-4 раза) на том же оборудовании при применении сегментирования.
Partition Magic — наша собственная утилита для автоматического управления партицированными таблицами в PostgreSQL (https://github.com/2gis/partition_magic):
— Автоматическое создание партиций.
— Управление триггерами, проверками, ограничениями и индексами.
— Выборка данных.
— Добавление данных.
— Удаление данных.
— Изменение данных.
Покажу на примерах PostgreSQL и расскажу про готовые к использованию утилиты и инструменты.