Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ветвление в Lakebase позволяет безопасно версионировать, тестировать и развивать вашу среду данных, аналогично ветвлению кода в Git. Вы можете мгновенно создавать изолированные, полностью функциональные ветви для разработки, экспериментирования или тестирования изменений схемы, не влияя на рабочие нагрузки.
По умолчанию Lakebase создает одну production ветвь при создании нового проекта. Это ваша ветвь по умолчанию, предназначенная для размещения рабочих данных приложения.
Дополнительные ветви можно создать в соответствии с вашим рабочим процессом. Например, добавьте development ветвь для сборки и тестирования, staging ветвь для предварительного тестирования или создайте ветви для разработчиков для полной изоляции. Каждая ветвь работает независимо, поэтому изменения в дочерней ветви не влияют на родителя. С помощью сброса ветви можно обновить любую дочернюю ветвь от родительской ветви, чтобы получить последнюю схему и данные, не используя скрипты с заполнением или удаления данных.
Как работают ветви
Родительско-дочерние отношения
Каждая ветвь (за исключением корневой ветви) имеет родителя. При этом создается иерархия:
production (root branch)
├── staging (child of production)
│ └── feature-test (child of staging)
└── development (child of production)
└── bugfix-branch (child of development)
Эта иерархия обеспечивает важную изоляцию: изменения, внесенные в дочернюю ветвь, не влияют на её родителя, и изменения, внесенные в родительскую ветвь, не появляются автоматически в дочерних ветвях. Эта изоляция распространяется и на состояние ролей и баз данных Postgres: созданные роли и базы данных, применённые GRANT и REVOKE, а также изменённые атрибуты ролей в одной ветке не влияют на другие ветви. Если вам нужны обновленные данные из родительской ветви, можно сбросить дочернюю ветвь. Вы также можете создавать ветви из любой точки в родительской истории, что полезно для восстановления на определенный момент времени, проверки на основе исторических данных или сценариев соответствия нормативным требованиям.
При создании ветви вы выбираете, следует ли инициализировать ее из текущих данных или с определенной точки во времени. Пошаговые инструкции и подробные сведения о каждом из вариантов см. в разделе "Создание ветви ".
Копирование при записи
Lakebase использует механизм копирования при записи для эффективного разветвления родительских и дочерних веток. При создании новой ветви она наследует схему и данные от родительского элемента, но предоставляет общий доступ к базовому хранилищу с помощью указателей на одни и те же данные. Только при изменении данных Lakebase записывает новые данные. Это означает:
- Ветви отображаются мгновенно; Размер базы данных не влияет на время создания ветви
- Создание ветвей не влияет на производительность рабочей нагрузки
Копирование при записи определяет, как хранятся ветки, но то, как тарифицируется ветка, зависит от того, истекает ли её срок действия. Посмотрите, как ветвление влияет на потребление ресурсов.
production branch child branch (at creation)
┌─────────────────┐ ┌─────────────────┐
│ [Data A] │◄──────│ → Data A │ (shared)
│ [Data B] │◄──────│ → Data B │ (shared)
│ [Data C] │◄──────│ → Data C │ (shared)
└─────────────────┘ └─────────────────┘
After modifying data in child branch:
┌─────────────────┐ ┌─────────────────┐
│ [Data A] │◄──────│ → Data A │ (shared)
│ [Data B] │ │ [Data B'] │ (changed)
│ [Data C] │◄──────│ → Data C │ (shared)
└─────────────────┘ └─────────────────┘
Only changed data is stored separately
Работа с ветвями
Сброс ветви
Сброс ветви мгновенно обновляет дочернюю ветвь в соответствии с текущим состоянием родительской ветви. Это полезно, если вы хотите обновить ветку разработки или ветку стейджинга последними данными из родительской ветки. Операция выполняется мгновенно с помощью технологии копирования и записи, а сведения о подключении остаются неизменными.
Сброс ветви работает только в одном направлении (родитель → дочерний). Чтобы переместить изменения из дочернего элемента в родительский, используйте стандартные средства миграции для применения изменений в схеме. Подробные инструкции и сценарии см. в разделе «Сброс ветви».
Восстановление на определенный момент времени
Вы можете создать ветвь из определенной точки во времени в окне восстановления, которая полезна для восстановления из ошибок данных, таких как случайное удаление, исследование прошлых проблем или доступ к историческим данным для аудита и соответствия требованиям. Например, если критическая таблица была удалена вчера в 10:23, можно создать ветку, установленную на 10:22, чтобы извлечь недостающие данные. Аналогичным образом вы можете создавать ветки, отражающие состояние вашей базы данных на определенные даты, для финансовых сверок, аудита нормативных органов или криминалистического анализа. В отличие от сброса ветви (которая обновляет существующую ветвь на месте), восстановление в определенный момент времени создает новую корневую ветвь из исторических данных, при этом исходная ветвь остается неизменной и работоспособной. Дополнительные сведения см. в статье "Восстановление на определенный момент времени ".
Специальные типы ветвей
Ветвь по умолчанию
Каждый проект Lakebase создается с веткой по умолчанию production, но вы можете назначить любую ветку в качестве основной. Ветвь по умолчанию не подпадает под ограничение одновременно активных вычислительных мощностей, обеспечивая доступность в любое время.
Защищенные ветви
Защищенные ветви имеют гарантии, чтобы предотвратить случайные изменения. Они не могут быть удалены или сброшены из родительского элемента, и они исключены из автоматической архивации из-за неактивности. Защищенные ветви также блокируют удаление проекта во время их существования, гарантируя, что вы не сможете случайно удалить критически важную инфраструктуру. Кроме того, Lakebase отдаёт приоритет данным защищённых ветвей в кэше хранилища, обеспечивая более высокий приоритет производительности защищённых ветвей по сравнению с другими ветвями. Каждый проект поддерживает одну защищенную ветвь. Используйте защищенные ветви для критически важных данных, таких как продакшн. См. защищенные ветви для получения подробностей.
Влияние ветвления на потребление ресурсов
С ветками вы оплачиваете вычислительные ресурсы и хранение отдельно.
Вычисления. Каждая ветвь имеет собственные вычислительные ресурсы, которые можно масштабировать независимо. Вы оплачиваете только активные вычислительные часы. Вычисляет масштабирование до нуля при простое. Это означает, что ветвь разработки, которую вы используете периодически, обходится значительно дешевле, чем работа выделенного сервера разработки круглосуточно.
Хранение: То, как взимается плата за хранение для ветки, зависит от того, есть ли у неё срок действия:
- Ветка с истекающим сроком действия оплачивается только за данные, которые на ней меняются. С помощью копирования при записи он использует совместно неизменённые данные родительского объекта. Например, если вы модифицируете 1 ГБ данных в ветке с истекающим сроком действия базы данных 100 ГБ, вы платите примерно за 1 ГБ места в хранилище, а не за полную копию на 100 ГБ.
- Постоянная ветка, не имеющая срока действия, оплачивается за полный объём данных, как независимая база данных, даже если её данные отличаются лишь незначительно от родительской ветки.
Предупреждение
Сделать ветку постоянной означает, что вы платите за её полный объём данных, а не только за данные, которые на нём меняются. Установка ветки так, чтобы она никогда не истекала, всегда является осознанным решением: вы выбираете «Никогда» для автоудаления при создании ветки или убираете срок действия у существующей ветки. Если нужна только кратковременная копия, оставьте срок действия, чтобы ветка тарифицировалась только за изменения в ней. См. Срок действия ветки.
Стратегии ветвления
Ниже приведены некоторые распространенные способы организации своих ветвей:
Простое (отдельные лица и небольшие команды)
Используйте ветку по умолчанию с одной веткой разработки.
production
└── development
Ветвь development — это место для безопасной разработки новых функций. Вы можете вносить изменения в структуру данных, добавлять тестовые данные и экспериментировать без какого-либо риска для производственной ветки. Когда вы будете готовы, выполните миграции протестированной схемы против production (с использованием вашего средства миграций), затем сбросьте development, чтобы начать работу над следующей функцией с обновленными данными.
В среде для тестирования перед развертыванием
Добавьте промежуточную ветвь для предварительного тестирования:
production
├── staging
└── development
Если требуется предварительное тестирование, сохраните staging ветвь, которая отражает данные продуктовой ветви. Разверните приложение там, запустите тесты интеграции и производительности на основе реальных данных и убедитесь в их надежности перед запуском. Периодически сбрасывайте staging, чтобы production обновить тестовые данные.
Ветви для каждого отдельного разработчика
Каждый разработчик работает в полной изоляции:
production
└── development
├── dev-alice
├── dev-bob
└── dev-charlie
Этот шаблон запрещает разработчикам вмешиваться в работу друг друга и позволяет всем тестировать изменения схемы независимо. Каждый разработчик может экспериментировать с собственными изменениями схемы и изменениями данных, не затрагивая других пользователей, а затем применять тестированные миграции к общей development или production ветви при готовности.
Note
staging и шаблоны для каждого разработчика используют долговечные ветви. За ветку без истечения срока действия взимается плата в размере полного объёма её данных. Посмотрите, как ветвление влияет на потребление ресурсов.
Дополнительные ресурсы
- Управляйте ветками, чтобы узнать, как создавать, сбрасывать и удалять ветки
- Защищенные ветви для защиты критически важных ветвей