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

На этой странице описано, как использовать консоль 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 Edition поле должно быть установлено в значение Date and time или Array, содержащее значение Date and time. Если поле не заполнено или в нем указано значение null, срок действия можно отключить для каждого документа отдельно.

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

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

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

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

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

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

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

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

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

Google Cloud Console

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

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

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

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

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

  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 перейдите на страницу Databases (Базы данных).

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

  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
   

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

Чтобы посмотреть подробные сведения о правилах TTL в состоянии CREATING, используйте gcloud CLI.

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

gcloud firestore operations list

Ответ содержит оценку хода выполнения операции.

Как отключить правило TTL

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

Google Cloud Console

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

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

  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
   

Как отслеживать удаление данных с помощью 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, ознакомьтесь со статьями Как управлять собственной сводкой и Как добавлять виджеты в сводки.