Skip to content

Обзор

В Object Storage для каждого объекта можно хранить версии. Для этого нужно включить версионирование в бакете. С помощью версионирования вы сможете:

  • Защитить данные от случайного удаления или перезаписи
    Если объект был случайно удален или перезаписан, его можно восстановить из предыдущей версии.
  • Обеспечить безопасность хранения
    С помощью версионирования можно отслеживать изменения файлов и хранить историю изменений — например, для возможных проверок и аудитов.
  • Организовать совместную работу
    Разные пользователи смогут работать над одним и тем же файлом, сохраняя результаты работы в виде разных версий. Вы всегда сможете сравнить версии между собой.
  • Управлять жизненным циклом данных
    Вы можете настроить автоматическое удаление для утративших актуальность версий.

Принципы работы

Внимание

Версионирование доступно только на уровне бакета и применяется для всех объектов в бакете. Невозможно применить версионирование для групп объектов или выбранных объектов.

Когда в бакете включено версионирование:

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

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

Любую версию объекта можно удалить из бакета — все остальные версии при этом останутся доступными.

Пример: удаление конкретной версии объекта

Допустим, в бакете имеются три версии объекта file.txt:

  • 00062BE313242D50 (текущая)
  • 00062BE310864C89
  • 00062BE30EFD0E27

Если удалить версию 00062BE30EFD0E27, восстановить ее будет невозможно. В бакете останутся две версии: 00062BE313242D50 (текущая) и 00062BE310864C89.

Если удалить объект, не указав его конкретной версии (то есть, стандартным способом):

  • Объект становится недоступным. Если вы попытаетесь скачать объект, Object Storage вернет ошибку 404 Not Found. В списке объектов бакета он также не будет отображаться.

  • Объект фактически не удаляется. Вместо удаления создается новая версия в виде служебного объекта — маркера удаления. Эта версия становится текущей. Все предыдущие версии остаются доступными.

  • Объект можно восстановить. Чтобы восстановить объект, достаточно удалить маркер удаления. После этого удаленная версия объекта снова станет доступной. Подробнее в статье Удаление и восстановление объектов.

Пример: удаление объекта без указания конкретной версии

Допустим, в бакете имеются три версии объекта file.txt:

  • 00062BE313242D50 (текущая)
  • 00062BE310864C89
  • 00062BE30EFD0E27

Если удалить текущую версию — 00062BE313242D50, список версий будет выглядеть так:

  • 00062BE32935C35C (маркер удаления) (текущая версия)
  • 00062BE313242D50 (версия, которая была текущей до удаления)
  • 00062BE310864C89
  • 00062BE30EFD0E27

Обратите внимание:

  • В списке появляется маркер удаления — пустой служебный объект, становится текущей версией объекта с отдельным идентификатором.
  • Версия 00062BE313242D50 не удаляется — если удалить маркер удаления, она снова станет текущей.

Приостановка версионирования

Версионирование в бакете можно в любой момент приостановить. После приостановки:

  • доступ ко всем версиям сохраняется;
  • сохраняется возможность восстановления версий.

При этом при выполнении новых операций:

  • новым объектам при загрузке не будет присваиваться идентификатор версии;
  • при совпадении имен объекты с идентификатором версии null будут перезаписываться;
  • загруженные после приостановки объекты будут удаляться без создания маркеров и без возможности восстановления.
  • все версии, созданные до приостановки версионирования, останутся доступными.

Если для бакета были настроены правила жизненного цикла, они продолжают действовать и после приостановки версионирования.