Обзор
В Object Storage для каждого объекта можно хранить версии. Для этого нужно включить версионирование в бакете. С помощью версионирования вы сможете:
- Защитить данные от случайного удаления или перезаписи
Если объект был случайно удален или перезаписан, его можно восстановить из предыдущей версии. - Обеспечить безопасность хранения
С помощью версионирования можно отслеживать изменения файлов и хранить историю изменений — например, для возможных проверок и аудитов. - Организовать совместную работу
Разные пользователи смогут работать над одним и тем же файлом, сохраняя результаты работы в виде разных версий. Вы всегда сможете сравнить версии между собой. - Управлять жизненным циклом данных
Вы можете настроить автоматическое удаление для утративших актуальность версий.
Принципы работы
Внимание
Версионирование доступно только на уровне бакета и применяется для всех объектов в бакете. Невозможно применить версионирование для групп объектов или выбранных объектов.
Когда в бакете включено версионирование:
- каждый объект после загрузки получает уникальный идентификатор версии;
- при любом изменении объект не перезаписывается, а сохраняется в виде отдельной версии;
- все версии объектов хранятся вместе, увеличивая объем используемого пространства;
- последняя загруженная версия объекта считается текущей.
Удаление объектов из бакетов с версионированием
Любую версию объекта можно удалить из бакета — все остальные версии при этом останутся доступными.
Пример: удаление конкретной версии объекта
Допустим, в бакете имеются три версии объекта file.txt:
00062BE313242D50(текущая)00062BE310864C8900062BE30EFD0E27
Если удалить версию 00062BE30EFD0E27, восстановить ее будет невозможно. В бакете останутся две версии: 00062BE313242D50 (текущая) и 00062BE310864C89.
Если удалить объект, не указав его конкретной версии (то есть, стандартным способом):
Объект становится недоступным. Если вы попытаетесь скачать объект, Object Storage вернет ошибку 404 Not Found. В списке объектов бакета он также не будет отображаться.
Объект фактически не удаляется. Вместо удаления создается новая версия в виде служебного объекта — маркера удаления. Эта версия становится текущей. Все предыдущие версии остаются доступными.
Объект можно восстановить. Чтобы восстановить объект, достаточно удалить маркер удаления. После этого удаленная версия объекта снова станет доступной. Подробнее в статье Удаление и восстановление объектов.
Пример: удаление объекта без указания конкретной версии
Допустим, в бакете имеются три версии объекта file.txt:
00062BE313242D50(текущая)00062BE310864C8900062BE30EFD0E27
Если удалить текущую версию — 00062BE313242D50, список версий будет выглядеть так:
00062BE32935C35C(маркер удаления) (текущая версия)00062BE313242D50(версия, которая была текущей до удаления)00062BE310864C8900062BE30EFD0E27
Обратите внимание:
- В списке появляется маркер удаления — пустой служебный объект, становится текущей версией объекта с отдельным идентификатором.
- Версия
00062BE313242D50не удаляется — если удалить маркер удаления, она снова станет текущей.
Приостановка версионирования
Версионирование в бакете можно в любой момент приостановить. После приостановки:
- доступ ко всем версиям сохраняется;
- сохраняется возможность восстановления версий.
При этом при выполнении новых операций:
- новым объектам при загрузке не будет присваиваться идентификатор версии;
- при совпадении имен объекты с идентификатором версии
nullбудут перезаписываться; - загруженные после приостановки объекты будут удаляться без создания маркеров и без возможности восстановления.
- все версии, созданные до приостановки версионирования, останутся доступными.
Если для бакета были настроены правила жизненного цикла, они продолжают действовать и после приостановки версионирования.