Database Lab Engine (DLE)
:zap: Молниеносное клонирование баз данных PostgreSQL :elephant:
Тонкие клоны для создания dev / test / QA / staging сред.
Доступно для любых PostgreSQL, включая AWS RDS, GCP CloudSQL, Heroku, Digital Ocean и серверы, администрируемых пользователем
## Зачем это нужно?
- Создавайте dev-, QA-, staging-среды, основанные на полноразмерных базах данных, идентичных или приближенных к «боевым».
- Получите доступ к временным полноразмерным клонам «боевых» БД для анализа запросов SQL и оптимизации (смотрите также: [чат-бот для оптимизации SQL Joe](https://gitlab.com/postgres-ai/joe)).
- Автоматически тестируйте изменения БД в CI/CD-пайплайнах, чтобы не допускать инцидентов в продуктиве.
Например, клонирование 1-терабайтной базы данных PostgreSQL занимает около 10 секунд. При этом десятки независимых клонов могут работать на одной машине, обеспечивая разработку и тестирование без увеличения затрат на железо.

Попробуйте сами прямо сейчас:
- зайдите на [Database Lab Platform](https://console.postgres.ai/), присоединитесь к организации "Demo" и тестируйте клонировани ~1-терабайтной демо базы данных или
- смотрите другое демо, DLE CE: https://nik-tf-test.aws.postgres.ai:446/instance, используйте демо-токен, чтобы зайти (это демо имеет самозаверенные сертификаты, так что игнорируйте жалобы браузера)
## Как это работает
Тонкое клонирование работает сверхбыстро, так как оно базируется на технологии [Copy-on-Write (CoW)](https://en.wikipedia.org/wiki/Copy-on-write#In_computer_storage). DLE поддерживает два варианта CoW: [ZFS](https://en.wikipedia.org/wiki/ZFS) (используется по умолчанию) и [LVM](https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)).
При работе с ZFS, DLE периодически создаёт новые снимки директории данных и поддерживает набор таких снимков, регулярно удаляя старые неиспользуемые. При создании новых клонов пользователи могут выбирать, на основе какого именно снимка создавать клон.
Узнать больше можно по следующим ссылкам:
- [Как это работает](https://postgres.ai/products/how-it-works)
- [Тестирование миграций БД](https://postgres.ai/products/database-migration-testing)
- [Оптимизация SQL с чатботом Joe](https://postgres.ai/products/joe)
- [Вопросы и ответы](https://postgres.ai/docs/questions-and-answers)
## С чего начать
- [Введение в Database Lab для любой БД на PostgreSQL](https://postgres.ai/docs/tutorials/database-lab-tutorial)
- [Введение в Database Lab для Amazon RDS](https://postgres.ai/docs/tutorials/database-lab-tutorial-amazon-rds)
- [Шаблон модуля Terraform (AWS)](https://postgres.ai/docs/how-to-guides/administration/install-database-lab-with-terraform)
## Изучение кейсов
- Qiwi: [Как Qiwi управляет данными для ускорения процесса разработки](https://postgres.ai/resources/case-studies/qiwi)
- GitLab: [Как GitLab построил итерационный процесс оптимизации SQL для снижения рисков инцидентов](https://postgres.ai/resources/case-studies/gitlab)
## Возможности
- Молниеносное клонирование БД Postgres - создание нового клона, готового к работе, всего за несколько секунд (вне зависимости от размера БД).
- Максимальное теоретическое количество снимков: 264. ([ZFS](https://en.wikipedia.org/wiki/ZFS), вариант по умолчанию).
- Максимальный теоретический размер директории данных PostgreSQL: 256 квадриллионов зебибайт или 2128 байт ([ZFS](https://en.wikipedia.org/wiki/ZFS), вариант по умолчанию).
- Поддерживаются все основные версии PostgreSQL: 10-18.
- Для реализации тонкого клонирования поддерживаются две технологии ([CoW](https://en.wikipedia.org/wiki/Copy-on-write)): [ZFS](https://en.wikipedia.org/wiki/ZFS) и [LVM](https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)).
- Все компоненты работают в Docker-контейнерах.
- UI для удобства ручных действий пользователя.
- API и CLI для удобства автоматизации работы со снимками и клонами DLE.
- Контейнеры с PostgreSQL по умолчанию поставляются с большим количеством популярных расширений ([docs](https://postgres.ai/docs/database-lab/supported-databases#extensions-included-by-default)).
- Поддерживается расширение контейнеров PostgreSQL ([docs](https://postgres.ai/docs/database-lab/supported-databases#how-to-add-more-extensions)).
- БД-источник может находиться где угодно (Postgres под управлением пользователя, Яндекс.Облако, AWS RDS, GCP CloudSQL, Azure, Timescale Cloud и т.д.) и не требует никаких изменений. Нет никакий требований для установки ZFS или Docker в БД-источники (продуктивная БД).
- Первоначальное получение данных может быть выполнено как на физическом (pg_basebackup или инструменты для бэкапов — такие как WAL-G, pgBackRest), так и на логическом (dump/restore напрямую из источника или восстановление из файлов, хранящихся в AWS S3) уровнях.
- Для логического режима поддерживается частичное восстановление данных (конкретные БД, таблицы).
- Для физического режима поддерживается постоянно обновляемое состояние ("sync container"), что, по сути, делает DLE репликой специального назначения.
- Для логического режима поддерживается периодическое полное обновление данных, полностью автоматизированное и контролируемое DLE. Есть возможность использовать несколько дисков, содержащих различные версии БД, так что процесс обновления не приводит к простою в работе с DLE и клонами.
- Сверхбыстрое восстановление на конкретную временную точку (Point in Time Recovery, PITR).
- Неиспользованные клоны автоматически удаляются.
- Опциональный флаг «защита от удаления» защищает клон от автоматического или ручного удаления.
- В конфигурации DLE можно настроить политику зачистки снимков.
- Неубиваемые клоны: клоны переживают рестарты DLE (включая случай с перезагрузкой машины).
- Команда "reset" может быть использована для переключения между разными версиями данных.
- Компонент DB Migration Checker собирает различные артефакты, полезные для тестирования БД в CI ([docs](https://postgres.ai/docs/db-migration-checker)).
- SSH port forwarding для API и Postgres-соединений.
- Параметры конфига Docker-контейнера могут быть специализированы в конфиге DLE.
- Квоты использования ресурсов для клонов: процессор, память (любые квоты контейнеров, поддерживаемые Docker).
- Параметры Postgres-конфига могут быть специализированы в конфиге DLE (отдельно для клонов, контейнеров "sync" и "promote").
- Monitoring: открытый `/healthz` (без авторизации), расширенный `/status` (требует авторизации), [Netdata-модуль](https://gitlab.com/postgres-ai/netdata_for_dle).
## Как поучаствовать в развитии проекта
### Поставьте проекту звёздочку
Самый простой способ поддержки - поставить проекту звезду на GitHub/GitLab:

### Укажите явно, что вы используете DLE
Пожалуйста, опубликуйте твит с упоминанием [@Database_Lab](https://twitter.com/Database_Lab) или поделитесь ссылкой на этот репозиторий в вашей любимой социальной сети.
Если вы используете DLE в работе, подумайте, где вы могли бы об этом упомянуть. Один из лучших способов упоминания - использование графики с ссылкой. Некоторые материалы можно найти в директории `./assets`. Пожалуйста, используйте их в своих документах, презентациях, интерфейсах приложений и вебсайтов, чтобы показать, что вы используете DLE.
HTML-код для светлых фонов:
```html
```
Для тёмных фонов:
```html
```
### Предложите идею или сообщите об ошибке
Подробнее: [./CONTRIBUTING.md](../CONTRIBUTING.md).
### Участвуйте в разработке
Подробнее: [./CONTRIBUTING.md](../CONTRIBUTING.md).
### Справочники
- [Компоненты DLE](https://postgres.ai/docs/reference-guides/database-lab-engine-components)
- [Справочник по конфигурации DLE](https://postgres.ai/docs/database-lab/config-reference)
- [Справочник по DLE API](https://postgres.ai/swagger-ui/dblab/)
- [Справочник по Client CLI](https://postgres.ai/docs/database-lab/cli-reference)
### HowTo-инструкции
- [Как установить Database Lab с Terraform на AWS](https://postgres.ai/docs/how-to-guides/administration/install-database-lab-with-terraform)
- [Как установить и инициализировать Database Lab CLI](https://postgres.ai/docs/guides/cli/cli-install-init)
- [Как управлять DLE](https://postgres.ai/docs/how-to-guides/administration)
- [Как работать с клонами](https://postgres.ai/docs/how-to-guides/cloning)
Вы можете найти больше в [секции "How-to guides"](https://postgres.ai/docs/how-to-guides) документации.
### Разное
- [Docker-образы DLE](https://hub.docker.com/r/postgresai/dblab-server)
- [Extended Docker images for PostgreSQL (с огромным количеством расширений)](https://hub.docker.com/r/postgresai/extended-postgres)
- [Чатбот для оптимизации SQL (чатбот Joe)](https://postgres.ai/docs/joe-bot)
- [DB Migration Checker](https://postgres.ai/docs/db-migration-checker)
## Лицензия
Код DLE распространяется под лицензией, одобренной OSI: [Apache 2.0](https://opensource.org/license/apache-2-0/).
Свяжитесь с командой Postgres.ai, если вам нужна коммерческая лицензия, которая не содержит предложений GPL, а также, если вам нужна поддержка: [Контактная страница](https://postgres.ai/contact).
## Сообщество и Поддержка
- ["Кодекс поведения сообщества Database Lab Engine"](../CODE_OF_CONDUCT.md)
- Где получить помощь: [Контактная страница](https://postgres.ai/contact)
- [Сообщество в Телеграм (русский язык)](https://t.me/databaselabru)
- [Сообщество в Slack](https://slack.postgres.ai)
- Если вам надо сообщить о проблеме безопасности, следуйте инструкциям в документе ["SECURITY.md"](../SECURITY.md).
[](../CODE_OF_CONDUCT.md)