На этой странице описано, как использовать консоль Google Cloud и Google Cloud CLI для настройки правил TTL. Прежде чем читать эту страницу, ознакомьтесь с моделью данных Cloud Firestore.
Обзор времени жизни
Используйте правила TTL, чтобы автоматически удалять устаревшие данные из баз данных. Правило TTL назначает определенное поле в качестве времени окончания срока действия документов в заданной группе коллекций. С помощью TTL вы можете снизить затраты на хранение, удалив устаревшие данные. Обычно данные удаляются в течение 24 часов после окончания срока действия.
Цены
Операции удаления TTL учитываются в расходах на удаление документов. Информацию о стоимости операций удаления можно найти в разделе Цены на Cloud Firestore.
Ограничения
- В качестве поля TTL можно пометить только одно поле в группе коллекций.
- Максимальное количество конфигураций на уровне поля – 1000. Одна конфигурация поля может содержать несколько конфигураций для одного и того же поля. Например, исключение из индексирования одного поля и правило TTL для того же поля считаются одной конфигурацией поля.
- Клиенты Firestore в режиме Datastore не могут использовать TTL в режиме параллельной обработки Оптимистичный с группами объектов. Рекомендуем изменить режим параллелизма на оптимистичный.
Удаление TTL
Обратите внимание на следующие особенности удаления на основе TTL:
Удаление с помощью TTL происходит не мгновенно. Документы с истекшим сроком действия продолжают появляться в запросах и запросах на поиск до тех пор, пока процесс TTL фактически не удалит их. TTL позволяет снизить совокупную стоимость владения за счет своевременного удаления данных. Обычно данные удаляются в течение 24 часов после истечения срока хранения.
При удалении документа с помощью TTL вложенные коллекции не удаляются.
Применение правила TTL к существующей группе коллекций приводит к массовому удалению всех данных с истекшим сроком действия в соответствии с новым правилом TTL. Обратите внимание, что массовое удаление также происходит не мгновенно и зависит от объема данных в группе.
Если у документа срок действия истек и вы добавляете новое правило TTL в коллекцию, документ будет удален в течение 24 часов после того, как правило TTL будет настроено и станет активным.
TTL не обязательно удаляет документы в том же порядке, в котором истекает их срок действия.
Удаление не выполняется в рамках транзакции. Документы с одинаковым сроком хранения не обязательно удаляются одновременно. Если вам нужно такое поведение, выполните удаление с помощью клиентской библиотеки.
Cloud Firestore всегда будет использовать последнее значение поля TTL для определения срока действия. Например, если у документа с истекшим сроком действия, который ещё не удален, поле TTL обновлено на более позднюю дату, срок действия документа не истечет и будет использоваться новая дата.
Cloud Firestore удаляет документ, только если в поле TTL указаны определенные типы значений. Для баз данных Standard edition в поле должно быть задано значение
Date and time. Для баз данных Enterprise в поле должно быть указано значениеDate and timeили значениеArray, содержащее значениеDate and time. Если оставить поле пустым или задать значениеnull, срок действия можно будет отключить для каждого документа отдельно.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.
О ролях, которые назначают эти разрешения, рассказывается в статье Роли Identity and Access Management в Cloud Firestore.
Как создать правило TTL
При создании правила TTL вы указываете поле документа, которое будет использоваться в качестве срока хранения документов в группе коллекций.
TTL использует указанное поле, чтобы определить, какие документы можно удалить.
Для баз данных Standard в поле TTL должно быть указано значение Date and time.
Для баз данных Enterprise edition необходимо задать значение Date and time или значение Array, содержащее значение Date and time. Вы можете выбрать поле, которое уже существует, или указать поле, которое планируете добавить позже.
При настройке значения поля TTL учитывайте следующее:
В поле TTL можно указать время в будущем, настоящем или прошлом. Если значение относится к прошлому, документ можно удалить немедленно. Например, вы можете создать правило TTL с полем
expireAt, которое затем добавите в существующие документы.Если вы используете другой тип данных или не зададите значение поля TTL, то TTL для отдельного документа будет отключено.
Чтобы создать правило TTL, выполните следующие действия:
Google Cloud Console
В консоли Google Cloud перейдите на страницу Databases (Базы данных).
Выберите нужную базу данных из списка.
В меню навигации выберите Время жизни.
Нажмите Create Policy (Создать правило).
Введите название группы коллекций и название поля временной метки.
При необходимости настройте срок действия. Введите значение и выберите единицу измерения (дни, часы, минуты или секунды). По умолчанию смещение равно 0.
Нажмите Создать.
Вы вернетесь на страницу Срок жизни. Если операция запускается успешно, на странице добавляется запись в таблицу правил TTL. Если произойдет сбой, на странице появится сообщение об ошибке.
gcloud
Чтобы настроить правило TTL, используйте команду firestore fields ttls
update. Добавьте флаг --async, чтобы gcloud CLI не ждал завершения операции.
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 может занять от 10 минут. Если вы закроете терминал, операция не будет отменена.
Просмотр правил TTL
Чтобы посмотреть правила TTL и их статусы, выполните следующие действия:
Google Cloud Console
В консоли Google Cloud перейдите на страницу Databases (Базы данных).
Выберите нужную базу данных из списка.
В меню навигации выберите Время жизни.
В консоли перечислены правила TTL для вашей базы данных и указан статус каждого правила.
gcloud
Чтобы настроить правило TTL, используйте команду firestore fields ttls list. Следующая команда выводит список всех правил TTL.
gcloud firestore fields ttls list
Чтобы получить список правил TTL для определенной группы коллекций, используйте следующий код:
gcloud firestore fields ttls list --collection-group=collection_group_name
Посмотреть сведения об операции
Чтобы посмотреть подробные сведения о правилах TTL в состоянии CREATING, можно использовать gcloud CLI.
Чтобы посмотреть все выполняемые и недавно завершенные операции, используйте команду operations list:
gcloud firestore operations list
Ответ содержит оценку хода выполнения операции.
Как отключить правило TTL
Чтобы отключить правило TTL, выполните следующие действия:
Google Cloud Console
В консоли Google Cloud перейдите на страницу Databases (Базы данных).
Выберите нужную базу данных из списка.
В меню навигации выберите Время жизни.
В таблице правил TTL найдите строку с нужным правилом. В этой строке таблицы нажмите кнопку Удалить (значок корзины).
Подтвердите действие, нажав Удалить.
Вы вернетесь на страницу Срок жизни. В случае успеха Cloud Firestore удаляет правило TTL из таблицы.
gcloud
1. Чтобы настроить правило TTL, используйте команду firestore fields ttls update. Добавьте флаг --async, чтобы gcloud CLI не ждал завершения операции.
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, ознакомьтесь со статьями Как управлять собственной сводкой и Как добавлять виджеты в сводки.