Impostare la scadenza dei dati con l'API di Azure Cosmos DB per MongoDB

SI APPLICA A: MongoDB

La funzionalità di durata (TTL) consente di impostare la scadenza automatica dei dati nel database. L'API Azure Cosmos DB for MongoDB usa le funzionalità TTL di base di Cosmos DB. Sono supportate due modalità: l'impostazione di un valore di durata predefinito per l'intera raccolta e l'impostazione di valori di durata specifici per ogni documento. La logica che regola gli indici TTL e i valori di TTL per singolo documento nell'API Cosmos DB for MongoDB è la stessa usata per Azure Cosmos DB.

Indici TTL

Per abilitare la durata per tutti i documenti di una raccolta, è necessario creare un "indice TTL" (time-to-live). L'indice TTL è un indice sul campo _ts con un valore "expireAfterSeconds".

Esempio di MongoShell:

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

Il comando nell'esempio precedente crea un indice con funzionalità TTL.

L'output del comando include vari metadati:

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

Dopo la creazione dell'indice, il database elimina automaticamente tutti i documenti della raccolta che non sono stati modificati negli ultimi 10 secondi.

Nota

_ts è un campo specifico di Cosmos DB e non è accessibile dai client MongoDB. Si tratta di una proprietà di sistema riservata che contiene il timestamp dell'ultima modifica del documento.

Esempio di Java:

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

Esempio in 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); 

Impostazione del valore di durata per un documento

Sono supportati anche valori di durata per singolo documento. Il documento deve contenere una proprietà a livello di radice "ttl" (in lettere minuscole) e deve essere stato creato un indice di durata (TTL) per la raccolta, come descritto sopra. Il valore di durata impostato per un documento sostituirà il valore di durata della raccolta.

Il valore di durata deve essere di tipo Int32 oppure, in alternativa, un oggetto Int64 che rientra in un Int32 o un valore double senza la parte decimale che rientra in un Int32. I valori della proprietà di durata non conformi a queste specifiche sono consentiti ma non sono considerati valori di durata del documento significativi.

Il valore di durata per il documento è facoltativo. Nella raccolta possono essere inseriti documenti senza un valore di durata (TTL). In tal caso verrà applicato il valore di durata della raccolta.

I documenti seguenti hanno valori di durata validi. Dopo l'inserimento, i valori di durata dei documenti sostituiranno quelli della raccolta. I documenti verranno quindi rimossi dopo 20 secondi.

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)}) 

I seguenti documenti hanno valori di durata non validi. I documenti verranno inseriti, ma il loro valore di durata non sarà rispettato. I documenti verranno quindi rimossi dopo 10 secondi, in base al valore di durata della raccolta.

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). 

Passaggi successivi