Udostępnij za pośrednictwem


Wygasanie danych za pomocą interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB

DOTYCZY: MongoDB

Funkcjonalność czasu wygaśnięcia (TTL, time-to-live) umożliwia automatyczne wygasanie danych bazy danych. Interfejs API usługi Azure Cosmos DB dla bazy danych MongoDB korzysta z podstawowych funkcji czasu wygaśnięcia usługi Azure Cosmos DB. Obsługiwane są dwa tryby: ustawianie domyślnej wartości czasu wygaśnięcia dla całej kolekcji oraz ustawianie wartości czasu wygaśnięcia dla poszczególnych dokumentów. Logika rządząca indeksami czasu wygaśnięcia i wartościami czasu wygaśnięcia poszczególnych dokumentów w interfejsie API usługi Azure Cosmos DB dla bazy danych MongoDB jest taka sama jak w usłudze Azure Cosmos DB.

Indeksy czasu wygaśnięcia

Aby włączyć czas wygaśnięcia dla całej kolekcji, należy utworzyć „Indeks czasu wygaśnięcia”. Indeks czasu wygaśnięcia jest indeksem w _ts polu z wartością "expireAfterSeconds".

Przykład programu MongoShell:

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

Polecenie w powyższym przykładzie powoduje utworzenie indeksu z funkcjonalnością czasu wygaśnięcia.

Dane wyjściowe polecenia zawierają różne metadane:

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

Po utworzeniu indeksu baza danych automatycznie usunie wszystkie dokumenty w tej kolekcji, które nie zostały zmodyfikowane w ciągu ostatnich 10 sekund.

Uwaga

_ts jest polem specyficznym dla usługi Azure Cosmos DB i nie jest dostępny z klientów bazy danych MongoDB. Jest zastrzeżoną właściwością (systemową), która zawiera sygnaturę czasową ostatniej modyfikacji dokumentu.

Przykład języka Java:

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

Przykład w języku 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); 

Ustawianie czasu wygaśnięcia dla dokumentu

Obsługiwane są również wartości czasu wygaśnięcia dla poszczególnych dokumentów. Dokumenty muszą zawierać na poziomie głównym właściwość „ttl” (małe litery), a dla danej kolekcji musi być utworzony indeks TTL, zgodnie z opisem powyżej. Wartości czasu wygaśnięcia ustawione w dokumencie zastępują wartość czasu wygaśnięcia kolekcji.

Wartość czasu wygaśnięcia musi być typu int32. Ewentualnie może być wartością typu int64 mieszczącą się w granicach typu int32 lub typu double bez części dziesiętnej mieszczącą się w granicach typu int32. Wartości właściwości czasu wygaśnięcia, które nie są zgodne z tymi specyfikacjami, są dozwolone, ale nie są traktowane jako znacząca wartość czasu wygaśnięcia dokumentu.

Wartość czasu wygaśnięcia dokumentu jest opcjonalna. Do kolekcji można wstawiać dokumenty bez wartości czasu wygaśnięcia. W takim przypadku wartość czasu wygaśnięcia kolekcji jest honorowana.

Poniższe dokumenty mają prawidłowe wartości czasu wygaśnięcia. Po wstawieniu dokumentów ich wartości czasu wygaśnięcia zastępują wartości czasu wygaśnięcia kolekcji. Dokumenty zostaną więc usunięte po 20 sekundach.

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

Poniższe dokumenty mają nieprawidłowe wartości czasu wygaśnięcia. Dokumenty są wstawione, ale wartość czasu wygaśnięcia dokumentu nie zostanie honorowana. Dokumenty zostaną więc usunięte po 10 sekundach z powodu wartości czasu wygaśnięcia kolekcji.

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

Następny krok