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 під управлінням користувача, Yandex.Cloud, 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 Cheecker збирає різні артефакти, корисні для тестування БД у 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)