Dela via


Förfalla data med Azure Cosmos DB för MongoDB och TTL per dokument

Med time to live (TTL)-funktionen kan databasen automatiskt låta data gå ut. Azure Cosmos DB for MongoDB använder Azure Cosmos DB:s grundläggande TTL-funktioner. Två lägen stöds: ange ett TTL-värde på hela samlingen och ange enskilda TTL-värden för varje dokument. Logiken som styr TTL-index och TTL-värden per dokument i Azure Cosmos DB för MongoDB är densamma som i Azure Cosmos DB.

TTL-index

Om du vill aktivera förfallodatum för dokumenten i en viss samling måste du skapa ett TTL-index (Time to Live). TTL-indexet är ett index i fältet _ts med värdet "expireAfterSeconds".

MongoDB-gränssnittsexempel:

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

Kommandot i föregående exempel skapar ett index med TTL-funktioner.

Kommandots utdata innehåller olika metadata:

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

När indexet har skapats tar databasen bort alla dokument i samlingen som inte har ändrats under de senaste 10 sekunderna.

Kommentar

_ts är ett Azure Cosmos DB-specifikt fält och är inte tillgängligt från MongoDB-klienter. Det är en reserverad egenskap (system) som innehåller tidsstämpeln för dokumentets senaste ändring.

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

Ange TTL-värde för ett dokument

TTL-värden per dokument stöds också. Om du vill använda den här funktionen lägger du till en rotnivåegenskap "ttl" (gemener) i ett eller flera dokument och skapar ett TTL-index för samlingen enligt beskrivningen tidigare. TTL-värdet som anges i ett dokument åsidosätter samlingens TTL-värde.

TTL-värdet måste vara ett int32. Du kan också använda ett int64 som passar i int32 eller dubbelt med någon decimaldel som passar i int32. Värden för TTL-egenskapen som inte överensstämmer med dessa specifikationer tillåts men behandlas inte som ett beskrivande TTL-värde för dokument.

TTL-värdet för dokumentet är valfritt. Dokument utan ett TTL-värde kan infogas i samlingen. I det här fallet respekteras samlingens TTL-värde.

Följande dokument har giltiga TTL-värden. När dokumenten är infogat används dokumentets TTL-värden istället för samlingens TTL-värden. Därför tas dokumenten bort efter 20 sekunder.

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

Följande dokument har ogiltiga TTL-värden. Databasen infogar dokumenten, men uppfyller inte dokumentets TTL-värde. Databasen tar bort dokumenten efter 10 sekunder enligt samlingens TTL-värde.

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