На этой странице рассказывается, как настроить индексы TTL с помощью API MongoDB, консоли Google Cloud и Google Cloud CLI.
Обзор времени жизни
Используйте индексы TTL, чтобы автоматически удалять устаревшие данные из баз данных. Индекс TTL указывает, что определенное поле является временем истечения срока действия документов в заданной коллекции. С помощью TTL можно снизить расходы на хранение, удаляя устаревшие данные. Обычно данные удаляются в течение 24 часов после истечения срока их хранения.
Цены
Операции удаления с использованием TTL используют управляемые единицы удаления. Информацию о ценах можно найти на странице Цены на версию Cloud Firestore Enterprise.
Ограничения
- Для каждой коллекции можно создать только один индекс TTL.
- Можно создать не более 500 индексов TTL.
Удаление по истечении срока жизни
Обратите внимание на следующие ключевые особенности удаления на основе TTL:
Удаление с помощью TTL не происходит мгновенно. Документы с истекшим сроком действия продолжают появляться в запросах и запросах на поиск, пока процесс TTL не удалит их. Время жизни позволяет снизить совокупную стоимость владения при удалении данных. Обычно данные удаляются в течение 24 часов после истечения срока хранения.
Создание индекса TTL в существующей коллекции приводит к массовому удалению всех данных с истекшим сроком хранения в соответствии с новым индексом TTL. Обратите внимание, что массовое удаление также не происходит мгновенно и зависит от объема данных, собранных для этого ресурса.
Если срок действия документа истек и вы добавили в коллекцию новый индекс TTL, документ будет удален в течение 24 часов после того, как индекс TTL будет настроен и активирован.
Документы с истекшим сроком хранения удаляются не обязательно в том порядке, в котором истекает срок их хранения.
Удаление не выполняется транзакционно. Документы с одинаковым сроком действия не обязательно удаляются одновременно. Если вам нужно именно такое поведение, удаляйте данные с помощью клиентской библиотеки.
Cloud Firestore всегда учитывает последнее значение поля TTL, чтобы определить срок действия. Например, если срок действия документа истек, но он ещё не удален, и в поле TTL указана более поздняя дата, срок действия документа будет продлен.
Cloud Firestore удаляет документ только в том случае, если в поле TTL задано значение
Date and time/BSON Dateили значениеArray, содержащее значениеDate and time/BSON Date. Чтобы отключить срок действия для отдельного документа, оставьте поле пустым или задайте значение, напримерnull.Время жизни данных настроено так, чтобы не влиять на другие действия с базой данных. Удаления, вызванные TTL, обрабатываются с более низким приоритетом. Также используются другие стратегии, чтобы сгладить пики трафика, вызванные удалением данных по истечении срока жизни.
Различия с индексами TTL
В отличие от других индексов Firestore, индексы TTL не используются при планировании запросов для повышения производительности. Чтобы повысить производительность запросов к полю, используемому с TTL, добавьте его в отдельный индекс без TTL.
Важно помнить, что поскольку в полях TTL используются временные метки, добавление их в индекс, не относящийся к 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 использует указанное поле, чтобы определить, какие документы можно удалить.
Поле TTL должно быть установлено на значение Timestamp/BSON Date или на значение Array, содержащее значение Timestamp/BSON Date. Вы можете выбрать существующее поле или указать поле, которое планируете добавить позже.
Прежде чем задавать значение поля TTL, учитывайте следующее:
В поле TTL можно указать время в будущем, настоящее время или время в прошлом. Если указано время в прошлом, документ сразу же может быть удален. Например, вы можете создать индекс TTL с полем
expireAt, которое затем добавите в существующие документы.Если вы используете другой тип данных или не задаете значение поля TTL, срок жизни отдельного документа будет отключен.
Чтобы создать индекс TTL, выполните следующие действия:
MongoDB API
Добавьте параметр индекса expireAfterSeconds при вызове метода createIndex():
db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})
Пример:
db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})
expireAfterSeconds – индекс TTL, смещение между значением временной метки из поля TTL и временем истечения срока действия. Если для параметра expireAfterSeconds задано значение 0, срок действия определяется непосредственно по значению временной метки из поля TTL.
Обратите внимание на следующие ограничения:
- Индексы TTL должны содержать ровно одно поле.
- Индексы TTL не используются при планировании запросов и не повышают их производительность.
- Для каждой коллекции можно создать только один индекс TTL.
- Журналы аудита для создания индекса TTL с помощью API MongoDB используют название метода
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
В консоли Google Cloud перейдите на страницу Базы данных.
Выберите нужную базу данных из списка.
В меню навигации нажмите Время жизни.
Нажмите Создать правило.
Введите название коллекции и название поля временной метки.
При необходимости настройте смещение срока действия. Введите значение и выберите единицу измерения (дни, часы, минуты или секунды). По умолчанию смещение равно 0.
Нажмите Создать.
Консоль вернется на страницу Время жизни. Если операция успешно запущена, на странице в таблицу индексов TTL добавляется запись. Если что-то пойдет не так, на странице появится сообщение об ошибке.
gcloud
Установите и инициализируйте интерфейс командной строки gcloud CLI.
Чтобы настроить индекс TTL, используйте команду
firestore fields ttls update. Добавьте флаг--async, чтобы gcloud CLI не ждал завершения операции.gcloud firestore fields ttls update \ ttl_field \ --collection-group=collection_name \ --enable-ttl
Чтобы включить индекс TTL со смещением срока действия, добавьте флаг
--expiration-offset:gcloud firestore fields ttls update \ ttl_field \ --collection-group=collection_name \ --enable-ttl \ --expiration-offset=expiration_offset
Замените expiration_offset на продолжительность, например
7d(7 дней) или24h(24 часа). Если вы не укажете этот флаг, смещение срока действия по умолчанию будет равно 0.
Продолжительность создания индекса TTL
Создание индекса TTL может занять не менее десяти минут. Если вы начали операцию, закрытие терминала не отменит ее.
Как посмотреть индексы TTL
Чтобы посмотреть индексы TTL, выполните следующие действия:
MongoDB API
Используйте метод listIndexes(), чтобы посмотреть индексы TTL. Пример:
db.restaurants.listIndexes()
Обратите внимание, что в выходных данных будут как индексы TTL, так и обычные индексы. Индексы TTL будут включать параметр expireAfterSeconds.
Google Cloud Console
В консоли Google Cloud перейдите на страницу Базы данных.
Выберите нужную базу данных из списка.
В меню навигации нажмите Время жизни.
В консоли перечислены индексы TTL для вашей базы данных и указан статус каждого индекса.
gcloud
Установите и инициализируйте интерфейс командной строки gcloud CLI.
Чтобы настроить индекс TTL, используйте команду
firestore fields ttls list. Следующая команда позволяет получить список всех индексов TTL:gcloud firestore fields ttls list
Чтобы получить список индексов TTL в определенной коллекции, выполните следующие действия:
gcloud firestore fields ttls list --collection-group=collection_name
Как посмотреть сведения об операции
Чтобы посмотреть подробную информацию об индексе TTL, который находится в состоянии CREATING, используйте команду gcloud CLI.
Чтобы посмотреть все выполняемые и недавно завершенные операции, используйте команду operations list:
gcloud firestore operations list
В ответе приводится оценка хода выполнения операции.
Как удалить индекс TTL
Чтобы удалить индекс TTL, выполните следующие действия:
MongoDB API
Чтобы удалить индекс TTL, используйте метод dropIndex(). Пример:
Как удалить индекс TTL, используя имя индекса
db.restaurants.dropIndex("ts_1")
Как удалить индекс TTL, используя определение индекса
db.restaurants.dropIndex({"ts": 1})
Обратите внимание, что в журналах аудита для удаления индекса TTL с помощью API MongoDB используется название метода google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
В консоли Google Cloud перейдите на страницу Базы данных.
Выберите нужную базу данных из списка.
В меню навигации нажмите Время жизни.
В таблице индекса TTL найдите строку с нужным индексом TTL. В этой строке таблицы нажмите кнопку Удалить (значок корзины).
Подтвердите действие, нажав Удалить.
Консоль вернется на страницу Время жизни. После успешного выполнения операции Cloud Firestore удаляет индекс TTL из таблицы.
gcloud
Установите и инициализируйте интерфейс командной строки gcloud CLI.
Чтобы настроить индекс TTL, используйте команду
firestore fields ttls update. Добавьте флаг--async, чтобы gcloud CLI не ждал завершения операции.gcloud firestore fields ttls update ttl_field --collection-group=collection_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) |
Время, прошедшее с момента истечения срока действия документа в индексе TTL и до его фактического удаления. |
Чтобы настроить сводку с показателями Cloud Firestore, ознакомьтесь со статьями Как управлять специальными сводками и Как добавлять виджеты в сводки.