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