На этой странице описано, как использовать API MongoDB, консоль Google Cloud и Google Cloud CLI для настройки времени жизни (TTL) индексов.
Обзор времени начала жизни
Используйте TTL-индексы для автоматического удаления устаревших данных из ваших баз данных. TTL-индекс определяет для каждого поля время истечения срока действия документов в данной коллекции. С помощью TTL вы можете снизить затраты на хранение, удаляя устаревшие данные. Данные обычно удаляются в течение 24 часов после истечения срока их действия.
Цены
Операции удаления, соответствующие времени жизни документа (TTL), учитываются в стоимости удаления документов. Информацию о ценах на операции удаления см. в разделе «Цены Cloud Firestore Enterprise Edition» .
Ограничения и лимиты
- Для каждой коллекции можно создать только один 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 и индексы, не являющиеся 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 .
Прежде чем начать
Before you use the gcloud CLI to manage TTL indexes, use the gcloud components update command to update components to the latest available version:
gcloud components update
Создайте индекс 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 , см. раздел «Управление пользовательской панелью мониторинга и добавление виджетов панели мониторинга» .