Aracılığıyla paylaş


MongoDB için Azure Cosmos DB API'siyle verilerde süre sonu

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB

Yaşam süresi (TTL) işlevi, veritabanının verilerin süresini otomatik olarak sonlandırmasını sağlar. MongoDB için Azure Cosmos DB API'sinde Azure Cosmos DB'nin temel TTL özellikleri kullanılır. İki mod desteklenir: koleksiyonun tamamı için varsayılan TTL değeri ayarlama ve her belge için ayrı bir TTL değeri ayarlama. MongoDB için Azure Cosmos DB API'sindeki TTL dizinlerini ve belge başına TTL değerlerini yöneten mantık, Azure Cosmos DB ile aynıdır.

TTL dizinleri

TTL'yi bir koleksiyonun tamamında etkinleştirmek için bir "TTL dizini" (yaşam süresi dizini) oluşturulması gerekir. TTL dizini, alanda "expireAfterSeconds" değerine sahip bir dizindir _ts .

MongoShell örneği:

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

Yukarıdaki örnekte verilen komut, TTL işlevine sahip bir dizin oluşturur.

Komutun çıktısı çeşitli meta verileri içerir:

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

Dizin oluşturulduktan sonra veritabanı, bu koleksiyondaki son 10 saniye içinde değiştirilmemiş tüm belgeleri otomatik olarak siler.

Not

_ts Azure Cosmos DB'ye özgü bir alandır ve MongoDB istemcilerinden erişilemez. Belgenin son değiştirme tarihinin zaman damgasını içeren ayrılmış (sistem) bir özelliktir.

Java örneği:

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

C# örneği:

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

Bir belge için yaşam süresi değeri belirleme

Belge başına TTL değerleri de desteklenir. Belgelerde "ttl" (küçük harfle) kök düzey özellik olması ve bulunduğu koleksiyon için yukarıda anlatılan TTL dizini oluşturulmalıdır. Belgede ayarlanan TTL değerleri koleksiyonun TTL değerini geçersiz kılar.

TTL değeri bir int32 olmalıdır. Alternatif olarak int32 aralığına sığan bir int64 değeri veya int32 aralığına sığan ve ondalık basamağı olmayan bir çift değer de kullanılabilir. Bu belirtimlere uymayan TTL özelliğinin değerlerine izin verilir, ancak anlamlı bir belge TTL değeri olarak değerlendirilmez.

Belge için TTL değeri isteğe bağlıdır; TTL değeri bulunmayan belgeler de aynı koleksiyona eklenebilir. Bu durumda, koleksiyonun TTL değeri kabul edilir.

Aşağıdaki belgeler geçerli TTL değerlerine sahiptir. Belgeler eklendikten sonra, belge TTL değerleri koleksiyonun TTL değerlerini geçersiz kılar. Bu nedenle belgeler 20 saniye sonra kaldırılır.

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

Aşağıdaki belgeler geçersiz TTL değerlerine sahiptir. Belgeler eklenir, ancak belge TTL değeri kabul edilmez. Bu nedenle belgeler koleksiyonun TTL değeri olan 10 saniye sonra kaldırılır.

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

Sonraki adım