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

На этой странице описано, как использовать консоль Google Cloud Platform и Google Cloud CLI для настройки политик времени жизни (TTL). Прежде чем читать эту страницу, вы должны понять модель данных Cloud Firestore .

Обзор времени жизни

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

Цены

Операции удаления TTL учитываются в расходах на удаление документа. Цены на операции удаления см. в разделе Цены на Cloud Firestore .

Пределы и ограничения

  • Только одно поле в каждой группе сбора может быть помечено как поле TTL.
  • Всего разрешено 200 конфигураций на уровне поля. Одна конфигурация поля может содержать несколько конфигураций для одного и того же поля. Например, освобождение от индексации одного поля и политика TTL для одного и того же поля считаются одной конфигурацией поля в рамках ограничения.
  • Для клиентов Firestore в режиме хранилища данных TTL не может использоваться с режимом параллелизма Optimistic With Entity Groups . После этого рассмотрите возможность изменения режима параллелизма.

Удаление срока жизни

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

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

  • Удаление документа через TTL не удаляет подколлекции в этом документе.

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

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

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

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

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

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

  • Удаление через TTL вызывает все активные прослушиватели снимков и запускает триггеры Cloud Functions Cloud Firestore.

Поля и индексы TTL

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

По умолчанию Cloud Firestore создает индекс одного поля для всех полей. Вы можете создать исключение для индекса для одного поля , чтобы отключить индексы для поля TTL.

Разрешения

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

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

Роли, которые назначают эти разрешения, см. в разделе Роли Cloud Firestore Identity and Access Management .

Прежде чем вы начнете

Прежде чем использовать интерфейс командной строки gcloud для управления политиками TTL, используйте команду gcloud components update , чтобы обновить компоненты до последней доступной версии:

gcloud components update

Создайте политику TTL

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

TTL использует указанное поле для идентификации документов, подлежащих удалению. Это поле TTL должно иметь тип Date and time . Вы можете выбрать уже существующее поле или указать поле, которое планируете добавить позже.

Прежде чем устанавливать значение поля TTL, учтите следующее:

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

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

Выполните следующие действия, чтобы создать политику TTL:

Облачная консоль Google

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

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

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

  3. В меню навигации нажмите «Время жизни» .

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

  5. Введите имя группы сбора и имя поля метки времени.

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

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

gcloud

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

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

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

Просмотр политик TTL

Выполните следующие действия, чтобы просмотреть политики TTL и их статусы.

Облачная консоль Google

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

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

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

  3. В меню навигации нажмите «Время жизни» .

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

gcloud

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

   gcloud firestore fields ttls list
   

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

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

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

Вы можете использовать интерфейс командной строки gcloud для просмотра более подробной информации о политике TTL, которая находится в состоянии CREATING .

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

gcloud firestore operations list

Ответ включает оценку хода операции.

Отключить политику TTL

Выполните следующие действия, чтобы отключить политику TTL.

Облачная консоль Google

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

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

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

  3. В меню навигации нажмите «Время жизни» .

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

  5. Подтвердите действие, нажав Удалить .

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

gcloud

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

   gcloud firestore fields ttls update ttl_field --collection-group=collection_group_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, см. раздел «Управление пользовательской панелью мониторинга и добавление виджетов панели управления» .