Завершение срока действия данных с помощью API Azure Cosmos DB для MongoDB

ПРИМЕНИМО К: Mongodb

Функция срока жизни позволяет автоматически прекращать хранение данных в базе данных. API Azure Cosmos DB для MongoDB использует основные возможности срока жизни Azure Cosmos DB. Поддерживаются два режима: установка срока жизни по умолчанию для всей коллекции и выбор отдельных значений срока жизни для каждого документа. Логика, управляющая индексами TTL и значениями срока жизни для каждого документа в API Azure Cosmos DB для MongoDB, аналогична логике в Azure Cosmos DB.

Индексы срока жизни

Чтобы установить срок жизни для всей коллекции, нужно создать индекс срока жизни. Это индекс для поля _ts со значением expireAfterSeconds.

Пример для MongoShell:

globaldb:PRIMARY> db.coll.createIndex({"_ts":1}, {expireAfterSeconds: 10})

С помощью приведенной выше команды создается индекс с функцией срока жизни.

Выходные данные команды включают различные метаданные:

{
        "_t" : "CreateIndexesResponse",
        "ok" : 1,
        "createdCollectionAutomatically" : true,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 4
}

После создания индекса в базе данных будут автоматически удаляться все документы в этой коллекции, которые не были изменены за последние 10 секунд.

Примечание

_ts — это конкретное поле Azure Cosmos DB, недоступное клиентам MongoDB. Это зарезервированное (системное) свойство, содержащее метку времени последнего изменения документа.

Пример на Java:

MongoCollection collection = mongoDB.getCollection("collectionName");
String index = collection.createIndex(Indexes.ascending("_ts"),
new IndexOptions().expireAfter(10L, TimeUnit.SECONDS));

Пример на C#:

var options = new CreateIndexOptions {ExpireAfter = TimeSpan.FromSeconds(10)}; 
var field = new StringFieldDefinition<BsonDocument>("_ts"); 
var indexDefinition = new IndexKeysDefinitionBuilder<BsonDocument>().Ascending(field); 
await collection.Indexes.CreateOneAsync(indexDefinition, options); 

Установка срока жизни для документа

Также есть возможность установить срок жизни для документа. Документы должны содержать свойство ttl (в нижнем регистре) корневого уровня. Кроме того, для коллекции нужно создать индекс срока жизни, как описано выше. Значения срока жизни, заданные для отдельных документов, переопределяют значение срока жизни для коллекции.

Значение срока жизни должно быть типа int32, значением типа int64, которое помещается в значение типа int32 либо значением double без десятичной части, которое помещается в значение типа int32. Значения срока жизни, не соответствующие этим характеристикам, допускаются, но не рассматриваются как значимые.

Значение срока жизни для документа является необязательным. В коллекцию можно вставлять и документы без значения срока жизни. В этом случае будет применяться значение срока жизни для коллекции.

Для указанных ниже документов заданы допустимые значения срока жизни. После вставки документов значения их срока жизни переопределяют значение срока жизни для коллекции. Следовательно, документы будут удалены через 20 секунд.

globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: 20.0}) 
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: NumberInt(20)}) 
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: NumberLong(20)}) 

Для указанных ниже документов заданы недопустимые значения срока жизни. Документы будут вставлены, но значения их срока жизни не будут применяться. Следовательно, документы будут удалены через 10 секунд из-за истечения срока жизни, заданного для коллекции.

globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: 20.5}) //TTL value contains non-zero decimal part. 
globaldb:PRIMARY> db.coll.insert({id:1, location: "Paris", ttl: NumberLong(2147483649)}) //TTL value is greater than Int32.MaxValue (2,147,483,648). 

Дальнейшие действия