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

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

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

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

Цены

Операции удаления с помощью TTL учитываются при расчете стоимости удаления документов. Информацию о стоимости операций удаления можно найти в разделе Цены на Cloud Firestore.

Ограничения

  • В каждой группе подборок можно отметить как поле TTL только одно поле.
  • Можно задать не более 1000 конфигураций на уровне полей. Одна конфигурация поля может содержать несколько конфигураций для одного и того же поля. Например, исключение индексирования одного поля и правило TTL для того же поля считаются как одна конфигурация поля.
  • Для клиентов, использующих Firestore в режиме Datastore, TTL нельзя использовать с режимом параллелизма Оптимистичный с группами объектов. Попробуйте изменить режим параллельного доступа на Оптимистичный режим параллельного доступа.

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

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

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

  • При удалении документа с помощью TTL не удаляются вложенные коллекции.

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

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

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

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

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

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

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

  • При удалении с помощью TTL вызываются все активные прослушиватели моментальных снимков и триггеры Cloud Functions и Cloud Firestore.

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

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

По умолчанию Cloud Firestore Standard edition создает однополевой индекс для всех полей. Вы можете создать исключение для индекса одного поля, чтобы отключить индексы в поле 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 необходимо задать значение Date and time или значение Array, содержащее значение Date and time. Вы можете выбрать существующее поле или указать поле, которое планируете добавить позже.

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

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

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

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

Google Cloud Console

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

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

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

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

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

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

  6. При необходимости настройте смещение срока действия. Введите значение и выберите единицу измерения (дни, часы, минуты или секунды). По умолчанию смещение равно 0.

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

Консоль вернется на страницу Время жизни. Если операция успешно запущена, на странице в таблицу правил 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

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

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

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

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

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

gcloud

Чтобы настроить политику TTL, используйте команду firestore fields ttls list. Следующая команда позволяет получить список всех правил 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 Cloud Console

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

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

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

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

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

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

Консоль вернется на страницу Время жизни. Если операция выполнена успешно, 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
   

Как отслеживать удаление данных по истечении срока жизни

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

Тип показателя Название показателя Описание показателя
firestore.googleapis.com/document/ttl_deletion_count Количество удалений по истечении срока хранения

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Задержки при удалении из-за истечения срока жизни

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

Чтобы настроить сводку с показателями Cloud Firestore, ознакомьтесь со статьями Как управлять специальными сводками и Как добавлять виджеты в сводки.