Condividi tramite


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 aver creato l'indice, il database eliminerà 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. I valori TTL impostati in un documento sostituiscono il valore TTL 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 per la proprietà TTL non conformi a queste specifiche sono consentiti ma non considerati come un valore TTL significativo del documento.

Il valore di durata per il documento è facoltativo. Nella raccolta possono essere inseriti documenti senza un valore di durata (TTL). In questo caso, viene rispettato il valore TTL 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 vengono inseriti, ma il valore TTL del documento non verrà 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). 

Passaggio successivo