Поделиться через


Ветви

Это важно

Автомасштабирование Lakebase находится в бета-версии в следующих регионах: eastus2westeuropewestus.

Автомасштабирование Lakebase — это последняя версия Lakebase с автомасштабированием вычислений, масштабированием до нуля, ветвлением и мгновенным восстановлением. Сравнение функций с Lakebase Provisioned см. в разделе выбора между версиями.

Ветвление в 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)

Эта иерархия обеспечивает важную изоляцию: изменения, внесенные в дочернюю ветвь, не влияют на её родителя, и изменения, внесенные в родительскую ветвь, не появляются автоматически в дочерних ветвях. Если вам нужны обновленные данные из родительской ветви, можно сбросить дочернюю ветвь. Вы также можете создавать ветви из любой точки в родительской истории, что полезно для восстановления на определенный момент времени, проверки на основе исторических данных или сценариев соответствия нормативным требованиям.

При создании ветви вы выбираете, следует ли инициализировать ее из текущих данных или с определенной точки во времени. Пошаговые инструкции и подробные сведения о каждом из вариантов см. в разделе "Создание ветви ".

Копирование при записи

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 ветвь в качестве ветви по умолчанию. Он пустой и готов принять ваши данные. Вы можете создавать дочерние ветки для разработки и тестирования. Протестируйте изменения схемы в дочерней ветке, а затем выполните те же миграции на production, как только убедитесь, что они работают.

Ваша основная ветвь по умолчанию никогда не масштабируется до нуля, обеспечивая доступность даже при сокращении вычислительных ресурсов других ветвей во время простоя.

Защищенные ветви

Защищенные ветви имеют гарантии, чтобы предотвратить случайные изменения. Они не могут быть удалены или сброшены из родительского элемента, и они исключены из автоматической архивации из-за неактивности. Защищенные ветви также блокируют удаление проекта во время их существования, гарантируя, что вы не сможете случайно удалить критически важную инфраструктуру. Используйте защищенные ветви для критически важных данных, таких как продакшн. См. защищенные ветви для получения подробностей.

Влияние ветвления на потребление ресурсов

С филиалами вы платите только за то, что используете фактически.

Хранилище: Вы оплачиваете только изменяющиеся данные. Если вы создаете ветвь разработки и изменяете 1 ГБ данных в базе данных 100 ГБ, вы оплачиваете примерно 1 ГБ хранилища, а не 200 ГБ. Неизменный объем 99 ГБ распределяется между ветками.

Вычисления. Каждая ветвь имеет собственные вычислительные ресурсы, которые можно масштабировать независимо. Вы оплачиваете только активные вычислительные часы. Вычисляет масштабирование до нуля при простое. Это означает, что ветвь разработки, которую вы используете периодически, обходится значительно дешевле, чем работа выделенного сервера разработки круглосуточно.

Ветвь по умолчанию: вычислительные ресурсы ветви по умолчанию никогда не уменьшаются до нуля, гарантируя доступность производственной нагрузки.

Стратегии ветвления

Ниже приведены некоторые распространенные способы организации своих ветвей:

Простое (отдельные лица и небольшие команды)

Используйте ветку по умолчанию с одной веткой разработки.

production
└── development

Ветвь development — это место для безопасной разработки новых функций. Вы можете вносить изменения в структуру данных, добавлять тестовые данные и экспериментировать без какого-либо риска для производственной ветки. Когда вы будете готовы, выполните миграции протестированной схемы против production (с использованием вашего средства миграций), затем сбросьте development, чтобы начать работу над следующей функцией с обновленными данными.

В среде для тестирования перед развертыванием

Добавьте промежуточную ветвь для предварительного тестирования:

production
├── staging
└── development

Если требуется предварительное тестирование, сохраните staging ветвь, которая отражает данные продуктовой ветви. Разверните приложение там, запустите тесты интеграции и производительности на основе реальных данных и убедитесь в их надежности перед запуском. Периодически сбрасывайте staging, чтобы production обновить тестовые данные.

Ветви для каждого отдельного разработчика

Каждый разработчик работает в полной изоляции:

production
└── development
    ├── dev-alice
    ├── dev-bob
    └── dev-charlie

Этот шаблон запрещает разработчикам вмешиваться в работу друг друга и позволяет всем тестировать изменения схемы независимо. Каждый разработчик может экспериментировать с собственными изменениями схемы и изменениями данных, не затрагивая других пользователей, а затем применять тестированные миграции к общей development или production ветви при готовности.

Дальнейшие шаги