Управление сроком хранения данных с помощью индексов TTL

На этой странице описано, как использовать API MongoDB, консоль Google Cloud и Google Cloud CLI для настройки времени жизни (TTL) индексов.

Обзор времени начала жизни

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

Цены

Операции удаления, соответствующие времени жизни документа (TTL), учитываются в стоимости удаления документов. Информацию о ценах на операции удаления см. в разделе «Цены Cloud Firestore Enterprise Edition» .

Ограничения и лимиты

  • Для каждой коллекции можно создать только один TTL-индекс.
  • Максимальное количество индексов с временем жизни (TTL) может составлять 500.

Удаление TTL

Обратите внимание на следующие ключевые особенности удаления, управляемого значением TTL:

  • Удаление через TTL не происходит мгновенно. Документы с истекшим сроком действия продолжают отображаться в запросах и справочных запросах до тех пор, пока процесс TTL фактически не удалит их. TTL жертвует оперативностью удаления ради снижения общей стоимости владения данными. Данные обычно удаляются в течение 24 часов после истечения срока их действия.

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

  • Если у документа истек срок действия, и вы добавляете новый TTL-индекс в коллекцию, документ будет удален в течение 24 часов после завершения настройки TTL-индекса и его активации.

  • Значение TTL не обязательно приводит к удалению документов в том же порядке, что и время истечения срока их действия.

  • Удаление не выполняется транзакционно. Документы с одинаковым сроком действия не обязательно удаляются одновременно. Если вам требуется такое поведение, выполняйте удаление с помощью клиентской библиотеки.

  • Cloud Firestore всегда будет учитывать последнее значение поля TTL для определения даты истечения срока действия. Например, если у документа с истекшим сроком действия, но еще не удаленного, значение поля TTL обновлено на более позднюю дату, документ не будет считаться просроченным, и будет использована новая дата.

  • Cloud Firestore удаляет документ только в том случае, если поле TTL установлено либо в значение Date and time / BSON Date , либо в значение Array , содержащее Date and time / BSON Date . Оставьте поле пустым или установите значение, например, null чтобы отключить удаление документов для каждого из них отдельно.

  • Значение TTL предназначено для минимизации влияния на другие операции с базой данных. Удаления, инициированные значением TTL, обрабатываются с более низким приоритетом. Также используются другие стратегии для сглаживания всплесков трафика, вызванных удалениями, инициированными значением TTL.

Поля TTL и индексы, не являющиеся TTL.

Поле с параметром TTL может быть индексированным или неиндексированным. Однако, поскольку поле TTL представляет собой метку времени, включение этого поля в индекс без параметра TTL может повлиять на производительность при высоких скоростях трафика. Включение поля с меткой времени в индекс без параметра TTL может создавать «горячие точки», что противоречит передовым методам работы. «Горячие точки» — это высокие скорости чтения, записи и удаления в узком диапазоне документов.

Разрешения

Для создания или удаления TTL-индекса пользователю, управляющему проектом, необходимы следующие разрешения:

  • Для просмотра индексов TTL требуются разрешения datastore.indexes.list и datastore.indexes.get .
  • Для создания или удаления индексов с заданным временем жизни (TTL) требуется разрешение datastore.indexes.update .
  • Для проверки состояния операций TTL требуются datastore.operations.list и datastore.operations.get .

Информацию о ролях, назначающих эти разрешения, см. в разделе «Роли управления идентификацией и доступом Cloud Firestore .

Прежде чем начать

Before you use the gcloud CLI to manage TTL indexes, use the gcloud components update command to update components to the latest available version:

gcloud components update

Создайте индекс TTL.

При создании TTL-индекса вы указываете поле документа в качестве времени истечения срока действия для документов в коллекции.

TTL использует указанное поле для идентификации документов, подлежащих удалению. Поле TTL должно быть установлено либо в виде Timestamp / BSON Date , либо в виде Array , содержащего Timestamp / BSON Date . Вы можете выбрать уже существующее поле или указать поле, которое планируете добавить позже.

Перед установкой значения поля TTL учтите следующее:

  • Значение поля TTL может указывать на время в будущем, в настоящем или в прошлом. Если значение указывает на время в прошлом, документ немедленно подлежит удалению. Например, вы можете создать индекс TTL с полем expireAt , который затем добавите к существующим документам.

  • Использование любого другого типа данных или отсутствие указания значения поля TTL приведет к отключению TTL для отдельного документа.

Для создания индекса с временем жизни (TTL) выполните следующие действия:

API MongoDB

При вызове метода createIndex() укажите параметр index, равный expireAfterSeconds :

db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})

Например:

db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})

expireAfterSeconds определяет TTL как индекс TTL и представляет собой смещение между значением метки времени из поля TTL и временем истечения срока действия. Если expireAfterSeconds установлен на 0 , время истечения срока действия определяется непосредственно значением метки времени из поля TTL.

Обратите внимание на следующие ограничения:

  • Индексы TTL должны содержать ровно одно поле.
  • Индексы с заданным временем жизни (TTL) нельзя использовать в запросах.
  • Для каждой коллекции можно создать только один TTL-индекс.
  • Для аудита создания индексов с заданным временем жизни (TTL) с помощью API MongoDB используется метод с именем google.firestore.admin.v1.FirestoreAdmin.UpdateField .

Консоль Google Cloud

  1. В консоли Google Cloud перейдите на страницу «Базы данных» .

    Перейти к базам данных

  2. Выберите необходимую базу данных из списка баз данных.

  3. В навигационном меню нажмите «Время, которое нужно прожить» .

  4. Нажмите «Создать политику» .

  5. Введите название коллекции и название поля для временной метки.

  6. Нажмите «Создать» .

Консоль возвращает нас на страницу «Время жизни» . Если операция начинается успешно, страница добавляет запись в таблицу индексов TTL. В случае сбоя страница отображает сообщение об ошибке.

gcloud

  1. Установите и инициализируйте интерфейс командной строки gcloud CLI .

  2. Используйте команду firestore fields ttls update для настройки индекса TTL. Добавьте флаг --async , чтобы предотвратить ожидание завершения операции gcloud CLI .

     gcloud firestore fields ttls update
    ttl_field --collection-group=collection_name
    --enable-ttl 

Длительность создания индекса TTL

Даже на пустой базе данных создание индекса TTL может занять десять минут и более. После начала операции закрытие терминала не отменяет её.

Просмотр индексов TTL

Для просмотра индексов TTL выполните следующие действия:

API MongoDB

Для просмотра индексов TTL используйте метод listIndexes() . Например:

db.restaurants.listIndexes()

Обратите внимание, что в выходные данные будут включены как индексы с заданным временем жизни (TTL), так и индексы без этого времени. Индексы с заданным временем жизни будут включать параметр expireAfterSeconds .

Консоль Google Cloud

  1. В консоли Google Cloud перейдите на страницу «Базы данных» .

    Перейти к базам данных

  2. Выберите необходимую базу данных из списка баз данных.

  3. В навигационном меню нажмите «Время, которое нужно прожить» .

В консоли отображается список TTL-индексов для вашей базы данных, а также статус каждого индекса.

gcloud

  1. Установите и инициализируйте интерфейс командной строки gcloud CLI .

  2. Используйте команду firestore fields ttls list для настройки индекса с заданным временем жизни (TTL). Следующая команда выводит список всех индексов с заданным временем жизни.

    gcloud firestore fields ttls list
    

    Чтобы вывести список TTL-индексов для конкретной коллекции, используйте следующий код:

    gcloud firestore fields ttls list  --collection-group=collection_name
    

Просмотреть подробности операции

С помощью gcloud CLI можно просмотреть более подробную информацию об индексе TTL, находящемся в состоянии CREATING .

Используйте команду operations list , чтобы просмотреть все запущенные и недавно завершенные операции:

gcloud firestore operations list

В ответе содержится оценка хода операции.

Удалить индекс TTL

Чтобы удалить индекс с заданным временем жизни (TTL), выполните следующие действия:

API MongoDB

Для удаления индекса с заданным временем жизни (TTL) используйте метод dropIndex() . Например:

Удалите индекс с заданным временем жизни (TTL), используя имя индекса.

db.restaurants.dropIndex("ts_1")

Удалите TTL-индекс с помощью определения индекса.

db.restaurants.dropIndex({"ts": 1})

Обратите внимание, что в журналах аудита для удаления индекса с заданным временем жизни (TTL) с помощью API MongoDB используется имя метода google.firestore.admin.v1.FirestoreAdmin.UpdateField .

Консоль Google Cloud

  1. В консоли Google Cloud перейдите на страницу «Базы данных» .

    Перейти к базам данных

  2. Выберите необходимую базу данных из списка баз данных.

  3. В навигационном меню нажмите «Время, которое нужно прожить» .

  4. В таблице индексов TTL найдите строку с индексом TTL. В этой строке таблицы нажмите кнопку «Удалить » (корзина).

  5. Подтвердите, нажав кнопку «Удалить» .

Консоль возвращается на страницу «Время жизни» . В случае успеха Cloud Firestore удаляет индекс TTL из таблицы.

gcloud

  1. Установите и инициализируйте интерфейс командной строки gcloud CLI .

  2. Используйте команду firestore fields ttls update для настройки индекса TTL. Добавьте флаг --async , чтобы предотвратить ожидание завершения операции gcloud CLI .

    gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
    

Мониторинг удаления TTL

С помощью Cloud Monitoring можно просматривать метрики, связанные с удалением данных по значению TTL. Cloud Firestore предоставляет следующие метрики для TTL:

Тип метрики Название метрики Описание метрики
firestore.googleapis.com/document/ttl_deletion_count Время до удаления живого объекта

Общее количество документов, удаленных индексами TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Время жизни, истечение срока действия и задержка удаления

Прошло время между моментом, когда срок действия документа истек в индексе TTL, и моментом его фактического удаления.

Чтобы настроить панель мониторинга с метриками Cloud Firestore , см. раздел «Управление пользовательской панелью мониторинга и добавление виджетов панели мониторинга» .