This page describes how to use the Google Cloud console and the Google Cloud CLI to configure time to live (TTL) policies. Before you read this page, you should understand the Cloud Firestore data model .
Обзор времени начала жизни
Use TTL policies to automatically remove stale data from your databases. A TTL policy designates a given field as the expiration time for documents in a given collection group. With TTL, you can decrease storage costs by cleaning out obsolete data. Data is typically deleted within 24 hours after its expiration date.
Цены
Операции удаления с временем жизни (TTL) учитываются в стоимости удаления документов. Информацию о ценах на операции удаления см. в разделе «Цены Cloud Firestore .
Ограничения и лимиты
- В каждой группе коллекций можно пометить только одно поле как поле с параметром TTL.
- You can have a maximum of 1000 field level configurations. One field configuration can contain multiple configurations for the same field. For example, a single-field indexing exemption and a TTL policy on the same field count as one field configuration towards the limit.
- For Firestore in Datastore mode customers, TTL cannot be used with a concurrency mode of Optimistic With Entity Groups . Consider changing the concurrency mode to the Optimistic concurrency mode .
Удаление TTL
Обратите внимание на следующие ключевые особенности удаления, управляемого значением TTL:
Deletion through TTL is not an instantaneous process. Expired documents continue to appear in queries and lookup requests until the TTL process actually deletes them. TTL trades deletion timeliness for the benefit of reduced total cost of ownership for deletions. Data is typically deleted within 24 hours after its expiration date.
Удаление документа с помощью параметра TTL не приводит к удалению подколлекций, находящихся внутри этого документа.
Applying a TTL policy on an existing collection group results in a bulk deletion of all expired data according to the new TTL policy. Note that this bulk deletion is also not instantaneous and depends on how much data exists for that collection group.
If a document has an expiration time in the past and you add a new TTL policy to the collection, the document will be deleted within 24 hours of when the TTL policy finishes setup and becomes active.
Значение TTL не обязательно приводит к удалению документов в том же порядке, что и время истечения срока их действия.
Deletions are not done transactionally. Documents with the same expiration time are not necessarily deleted at the same time. If you require this behavior, perform the deletions using a client library.
Cloud Firestore will always honor the latest TTL field to determine the expiration. For example, if an expired but not-yet-deleted document has its TTL field updated to a later date, the document won't be expired and the new date will be used.
Cloud Firestore удаляет документ по истечении срока его действия только в том случае, если поле TTL имеет определенный тип значения. Для баз данных Standard Edition это поле должно быть установлено на значение
Date and time. Для баз данных Enterprise Edition это поле должно быть установлено либо на значениеDate and time, либо на значениеArrayсодержащегоDate and time. Если поле отсутствует или установлено на значение, например,nullэто позволяет отключить удаление документов по истечении срока их действия.TTL is designed to minimize impact on other database activities. Deletions driven by TTL are treated with a lower priority. Other strategies are also in place to smooth out traffic spikes from TTL-driven deletes.
Удаление с помощью TTL вызывает все активные обработчики снимков и запускает триггеры Cloud Functions Cloud Firestore .
Поля и индексы TTL
A TTL field can be indexed or unindexed. However, because a TTL field is a timestamp, indexing the field can affect performance at higher traffic rates. Indexing a timestamp field can create hotspots which is against best practices. Hotspots are high read, write, and delete rates to a narrow document range.
По умолчанию Cloud Firestore Standard создает единый индекс для всех полей. Вы можете создать исключение для единого индекса , чтобы отключить индексирование поля с определенным временем жизни (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 использует указанное поле для идентификации документов, подлежащих удалению. Для баз данных Standard Edition поле TTL должно быть установлено на значение Date and time . Для баз данных Enterprise Edition оно должно быть установлено либо на значение Date and time , либо на значение Array , содержащего Date and time . Вы можете выбрать уже существующее поле или указать поле, которое планируете добавить позже.
Перед установкой значения поля TTL учтите следующее:
The TTL field value can be a time in the future, now, or in the past. If the value is a time in the past, the document is immediately eligible for deletion. For example, you might create a TTL policy with the field
expireAt, which you then add to existing documents.Использование любого другого типа данных или отсутствие указания значения поля TTL приведет к отключению TTL для отдельного документа.
Для создания политики TTL выполните следующие действия:
Консоль Google Cloud
В консоли Google Cloud перейдите на страницу «Базы данных» .
Выберите необходимую базу данных из списка баз данных.
В навигационном меню нажмите «Время, которое нужно прожить» .
Нажмите «Создать политику» .
Введите название группы коллекций и название поля для временной метки.
Необязательно: настройте смещение срока действия . Введите значение и выберите единицу измерения (дни, часы, минуты или секунды). По умолчанию смещение равно 0.
Нажмите «Создать» .
Консоль возвращает нас на страницу «Время жизни» . Если операция запускается успешно, страница добавляет запись в таблицу политик TTL. В случае сбоя страница отображает сообщение об ошибке.
gcloud
Используйте команду firestore fields ttls update для настройки политики TTL. Добавьте флаг ` --async , чтобы предотвратить ожидание завершения операции интерфейсом командной строки gcloud.
gcloud firestore fields ttls update
ttl_field
--collection-group=collection_group_name
--enable-ttl
Чтобы включить TTL с указанием смещения истечения срока действия, добавьте флаг --expiration-offset :
gcloud firestore fields ttls update
ttl_field
--collection-group=collection_group_name
--enable-ttl
--expiration-offset=expiration_offset
Замените expiration_offset на продолжительность, например, 7d для 7 дней или 24h для 24 часов. Если этот флаг опущен, смещение истечения срока действия по умолчанию будет равно 0.
длительность действия политики TTL
Для активации политики TTL может потребоваться не менее десяти минут. После начала операции закрытие терминала не отменяет её.
Просмотреть политики TTL
Чтобы просмотреть политики TTL и их статусы, выполните следующие действия:
Консоль Google Cloud
В консоли Google Cloud перейдите на страницу «Базы данных» .
Выберите необходимую базу данных из списка баз данных.
В навигационном меню нажмите «Время, которое нужно прожить» .
В консоли отображается список политик TTL для вашей базы данных, а также статус каждой политики.
gcloud
Используйте команду ` firestore fields ttls list для настройки политики TTL. Следующая команда выводит список всех политик TTL.
gcloud firestore fields ttls list
Чтобы отобразить список политик TTL для конкретной группы коллекций, используйте следующую команду:
gcloud firestore fields ttls list --collection-group=collection_group_name
Просмотреть подробности операции
Для просмотра более подробной информации о политике TTL, находящейся в состоянии CREATING , можно использовать интерфейс командной строки gcloud.
Используйте команду operations list , чтобы просмотреть все запущенные и недавно завершенные операции:
gcloud firestore operations list
В ответе содержится оценка хода операции.
Отключить политику TTL
Чтобы отключить политику TTL, выполните следующие действия:
Консоль Google Cloud
В консоли Google Cloud перейдите на страницу «Базы данных» .
Выберите необходимую базу данных из списка баз данных.
В навигационном меню нажмите «Время, которое нужно прожить» .
В таблице политик TTL найдите строку, содержащую политику TTL. В этой строке таблицы нажмите кнопку «Удалить » (корзина).
Подтвердите, нажав кнопку «Удалить» .
Консоль возвращается на страницу «Время жизни» . В случае успеха 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 , см. раздел «Управление пользовательской панелью мониторинга и добавление виджетов панели мониторинга» .