انتهاء صلاحية البيانات مع واجهة برمجة التطبيقات لقاعدة بيانات Azure Cosmos لأجل MongoDB
ينطبق على: MongoDB
تسمح وظيفة مدة البقاء (TTL) لقاعدة البيانات بانتهاء صلاحية البيانات تلقائياً. تستخدم واجهة برمجة تطبيقات Azure Cosmos DB ل MongoDB قدرات TTL الأساسية ل Azure Cosmos DB. يتم اعتماد وضعين: تعيين قيمة TTL افتراضية على المجموعة بأكملها، وإعداد قيم TTL فردية لكل مستند. المنطق الذي يحكم فهارس TTL وقيم TTL لكل مستند في واجهة برمجة تطبيقات Azure Cosmos DB ل MongoDB هو نفسه كما هو الحال في Azure Cosmos DB.
فهارس TTL
لتمكين TTL عالمياً على مجموعة، يجب إنشاء "فهرس TTL" (فهرس مدة البقاء). فهرس TTL هو فهرس في _ts
الحقل بقيمة "expireAfterSeconds".
مثال MongoShell:
globaldb:PRIMARY> db.coll.createIndex({"_ts":1}, {expireAfterSeconds: 10})
الأمر في المثال أعلاه سينشئ فهرس مع وظائف TTL.
يتضمن إخراج الأمر بيانات تعريف مختلفة:
{
"_t" : "CreateIndexesResponse",
"ok" : 1,
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 4
}
بمجرد إنشاء الفهرس، ستحذف قاعدة البيانات تلقائيا أي مستندات في تلك المجموعة لم يتم تعديلها في آخر 10 ثوان.
إشعار
_ts
هو حقل خاص ب Azure Cosmos DB ولا يمكن الوصول إليه من عملاء MongoDB. وهي خاصية محجوزة (نظام) تحتوي على الطابع الزمني للتعديل الأخير للمستند.
مثال على Java:
MongoCollection collection = mongoDB.getCollection("collectionName");
String index = collection.createIndex(Indexes.ascending("_ts"),
new IndexOptions().expireAfter(10L, TimeUnit.SECONDS));
مثال # 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);
تعيين قيمة مدة البقاء لمستند
يتم أيضاً دعم قيم TTL لكل مستند. يجب أن يحتوي المستند (المستندات) على خاصية على مستوى الجذر "ttl" (الأحرف الصغيرة)، ويجب أن يكون قد تم إنشاء فهرس TTL كما هو موضح أعلاه لتلك المجموعة. تتجاوز قيم TTL التي تم تعيينها على مستند قيمة TTL للمجموعة.
يجب أن تكون قيمة TTL هي int32. بدلاً من ذلك، int64 الذي يناسب int32، أو مزدوجة مع أي جزء عشري يناسب int32. القيم الخاصة بخاصية TTL التي لا تتوافق مع هذه المواصفات مسموح بها ولكن لا يتم التعامل معها كقيمة TTL لمستند ذي معنى.
قيمة TTL للمستند اختيارية، يمكن إدراج المستندات بدون قيمة TTL في المجموعة. في هذه الحالة، يتم تكريم قيمة TTL للمجموعة.
تحتوي المستندات التالية قيم TTL صالحة. بمجرد إدراج المستندات، تمنع قيم مستند TTL قيم TTL الخاصة بالمجموعة. لذلك، سيتم إزالة المستندات بعد 20 ثانية.
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)})
تحتوي المستندات التالية على قيم TTL غير صالحة. يتم إدراج المستندات، ولكن لن يتم احترام قيمة TTL للمستند. لذلك، سيتم إزالة المستندات بعد 10 ثوانٍ بسبب قيمة TTL الخاصة بالمجموعة.
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).