Облачная платформаEvolution

Версионирование в Object Storage


Версионирование — инструмент для хранения нескольких версий объекта. Управление версионированием происходит на уровне бакета: настройки применяются ко всем его объектам.

Внимание

К версиям объектов применяются стандартные правила тарификации.

Версионирование защищает данные от случайного удаления и перезаписи. Если версионирование в бакете включено:

Подсказка

Object Storage позволяет автоматизировать удаление ненужных версий с помощью политик жизненного цикла объекта.

Состояния версионирования бакета

Версионирование бакета может быть в одном из следующих состояний:

  • выключено;

  • включено;

  • приостановлено.

По умолчанию версионирование в бакете выключено. После включения версионирование нельзя выключить, но можно приостановить, если в бакете нет объектов с включенной блокировкой.

Параметры версии

При сохранении объекта в бакет каждой версии объекта присваиваются служебные параметры versionId и isLatest. Управлять этими параметрами вручную нельзя.

Параметр isLatest позволяет маркировать текущую версию объекта и принимает значения:

  • true — для текущей версии объекта;

  • false — для всех остальных версий.

Параметр versionId служит уникальным идентификатором версии. Значение параметра зависит от состояния версионирования бакета:

  • Если версионирование выключено или приостановлено, новые объекты или новые версии существующих объектов сохраняются с параметром versionId, равным null.

  • Если версионирование включено, каждой версии присваивается уникальный versionId, не равный null.

Delete-маркеры

Delete-маркер позволяет пометить объект как удаленный и скрыть его, но не удалять данные физически. Delete-маркер автоматически создается для объекта при следующих условиях:

  • версионирование в бакете включено или приостановлено;

  • в запросе на удаление объекта не указана версия объекта.

Delete-маркер хранится в Object Storage как особый тип объекта. Аналогично версиям объекта ему присваиваются параметры isLatest и versionId.

Если текущая версия объекта — delete-маркер, объект не будет отображаться при выполнении операций ListObjectsV2, GetObject, HeadObject и пр. При этом не блокируются:

Такие запросы будут завершаться без ошибки. Результат их выполнения зависит от состояния версионирования бакета.

Объект с delete-маркером можно восстановить. Для этого нужно удалить delete-маркер. Чтобы восстановить объект, для которого сохранено несколько delete-маркеров подряд, нужно удалить все его delete-маркеры.

Работа хранилища при разных состояниях версионирования

В таблице ниже описано поведение хранилища при разных состояниях версионирования.

Действие с хранилищем

Версионирование выключено

Версионирование включено

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

Загрузка объекта с ключом, присвоенным существующему объекту

Существующий объект перезаписывается, восстановить его невозможно. Единственная копия объекта отображается как текущая. versionId объекта равен null.

Сохраняется новая версия объекта с уникальным versionId, не равным null. Новая версия становится текущей. Существующие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

  • Объект сохраняется с versionId, равным null.

  • Если у объекта уже есть версия или delete-маркер с versionId, равным null, версия или delete-маркер перезаписывается. Восстановить перезаписанные данные нельзя.

  • Версии объекта и delete-маркеры с versionId, не равными null, не изменяются и доступны в истории версий.

Удаление объекта без указания версии

Объект удаляется безвозвратно.

Для объекта создается delete-маркер с уникальным versionId, не равным null. Delete-маркер становится текущей версией. Существующие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

  • Для объекта создается delete-маркер с versionId, равным null.

  • Если у объекта уже есть версия или delete-маркер с versionId, равным null, версия или delete-маркер перезаписывается новым delete-маркером. Восстановить перезаписанные данные нельзя.

  • Версии объекта и delete-маркеры с versionId, не равными null, не изменяются и доступны в истории версий.

Удаление объекта с указанием версии

Единственная версия объекта удаляется безвозвратно.

Версия или delete-маркер удаляется безвозвратно. Другие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

Версия или delete-маркер удаляется безвозвратно. Другие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

Блокировка недоступна.

Можно использовать блокировку.

Уже существующие блокировки продолжают действовать. К новым объектам нельзя применить блокировку.