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

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

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

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

Цены

Для операций удаления с использованием TTL применяются управляемые блоки удаления. Информацию о ценах см. в разделе «Цены на версию Cloud Firestore Enterprise» .

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

  • Для каждой коллекции можно создать только один 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

В отличие от других индексов Firestore, индексы с 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 .

Создайте индекс 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 , см. раздел «Управление пользовательской панелью мониторинга и добавление виджетов панели мониторинга» .