Adatok lejárttá tétele a MongoDB-hez készült Azure Cosmos DB API-val
A KÖVETKEZŐKRE VONATKOZIK: MongoDB
Az élettartam- (TTL-) funkció lehetővé teszi, hogy az adatbázis adatai automatikusan elévüljenek. Az Azure Cosmos DB MongoDB-hez készült API-ja az Azure Cosmos DB alapvető TTL-képességeit használja. Két mód támogatott: alapértelmezett TTL-érték beállítása az egész gyűjteményhez és egyedi TTL-érték megadása az egyes dokumentumokhoz. A TTL-indexeket és a dokumentumonkénti TTL-értékeket szabályozó logika az Azure Cosmos DB MongoDB-hez készült API-jában ugyanaz, mint az Azure Cosmos DB-ben.
TTL-indexek
A TTL gyűjteményben történő univerzális engedélyezéséhez TTL-index (élettartamindex) létrehozása szükséges. A TTL-index a mező "expireAfterSeconds" értékkel rendelkező indexe _ts
.
MongoShell-példa:
globaldb:PRIMARY> db.coll.createIndex({"_ts":1}, {expireAfterSeconds: 10})
A fenti példában lévő parancs létrehoz egy TTL-funkcióval rendelkező indexet.
A parancs kimenete különböző metaadatokat tartalmaz:
{
"_t" : "CreateIndexesResponse",
"ok" : 1,
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 4
}
Az index létrehozása után az adatbázis automatikusan törli a gyűjtemény azon dokumentumait, amelyeket az elmúlt 10 másodpercben nem módosítottak.
Feljegyzés
_ts
Egy Azure Cosmos DB-specifikus mező, és nem érhető el a MongoDB-ügyfelekről. Ez egy fenntartott (rendszer-) tulajdonság, amely tartalmazza a dokumentum utolsó módosításának időbélyegét.
Java-példa:
MongoCollection collection = mongoDB.getCollection("collectionName");
String index = collection.createIndex(Indexes.ascending("_ts"),
new IndexOptions().expireAfter(10L, TimeUnit.SECONDS));
C# példa:
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);
Dokumentum élettartamértékének megadása
A dokumentumonkénti TTL-értékek is támogatottak. A dokumentumnak tartalmaznia kell egy gyökérszintű „ttl” tulajdonságot (kisbetűs), és a gyűjteményhez létre kell hozni egy TTL-indexet a fent leírtak alapján. A dokumentumon beállított TTL-értékek felülbírálják a gyűjtemény TTL-értékét.
Az élettartamnak int32 típusú értéknek kell lennie. Vagy lehet egy int32-be illő int64 vagy egy tizedesjeggyel nem rendelkező dupla, amely illik az int32-be. Azoknak a TTL-tulajdonságnak az értékei, amelyek nem felelnek meg ezeknek a specifikációknak, engedélyezettek, de nem tekinthetők értelmezhető dokumentumTL-értéknek.
A dokumentum TTL-értékének megadása nem kötelező, TTL-értékkel nem rendelkező dokumentumok is beszúrhatók a gyűjteménybe. Ebben az esetben a gyűjtemény TTL-értéke tiszteletben van adva.
A következő dokumentumok érvényes TTL-értékekkel rendelkeznek. A dokumentumok beszúrása után a dokumentum TTL-értékei felülbírálják a gyűjtemény TTL-értékeit. Tehát a dokumentumok 20 másodperc után el lesznek távolítva.
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 következő dokumentumok TTL-értéke érvénytelen. A rendszer beszúrja a dokumentumokat, de a dokumentum TTL-értéke nem lesz betartva. Tehát a dokumentumok 10 másodperc után el lesznek távolítva a gyűjtemény TTL-értéke miatt.
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).