Mengonfigurasi nilai time-to-live (TTL) untuk dokumen tertentu

Selesai

Azure Cosmos DB SDK memungkinkan Anda mengonfigurasi Time-to-Live (TTL) pada item individual dalam kontainer. TTL memastikan bahwa item dihapus secara otomatis setelah durasi yang ditentukan. Untuk menerapkan time-to-live (TTL) pada item individual, Anda dapat menggunakan strategi yang sama seperti yang Anda gunakan untuk memperbarui item.

Pertama, mari kita lihat kelas Produk . Kita dapat menentukan properti TimeToLive baru yang hanya mengatur properti ttl pada JSON jika bukan null. Teknik ini dilakukan dengan mengonfigurasi header JsonProperty untuk mengabaikan nilai null dan mengkonfigurasi anggota sebagai nullable int.

[JsonProperty(PropertyName = "ttl", NullValueHandling = NullValueHandling.Ignore)]
public int? ttl { get; set; }

Dari sana, Anda dapat memperbarui variabel saddle dengan mengatur nilai TimeToLive ke bilangan bulat untuk menunjukkan berapa lama, dalam detik, Anda ingin item bertahan sebelum secara otomatis dihapus menyeluruh melebihi waktu modifikasi terakhirnya.

saddle.ttl = 1000;

Perbarui item menggunakan metode ReplaceItemAsync<> .

await container.ReplaceItemAsync<Product>(saddle);

Python SDK memungkinkan Anda untuk secara dinamis menetapkan nilai properti baru pada item. Untuk mengatur nilai TimeToLive pada item, tetapkan bilangan bulat untuk menunjukkan berapa lama, dalam detik, Anda ingin item bertahan sebelum secara otomatis dihapus menyeluruh melebihi waktu modifikasi terakhirnya. Anda melakukan perubahan ini dengan memperbarui objek item dengan nilai properti ttl baru.

saddle["ttl"] = 1000

Perbarui item menggunakan metode replace_item .

container.replace_item(item=saddle, body=saddle)

Namun, seingat Anda, kami mendefinisikan kelas Produk untuk mewakili item kami. Kita dapat menentukan properti TimeToLive baru yang hanya mengatur properti ttl pada JSON jika bukan null. Teknik ini dicapai dengan mengonfigurasi anggota sebagai int nullable.

class Product:
    def __init__(
            self,
            internal_id: str,
            name: str,
            category_id: str,
            price: float,
            tags: list[str],
            ttl: int = None):
        self.internal_id = internal_id
        self.name = name
        self.category_id = category_id  # Partition key
        self.price = price
        self.tags = tags
        self.ttl = ttl # Time to live

    def to_dict(self):
        product_dict = {
            "id": self.internal_id,  # Map internal_id to id
            "name": self.name,
            "categoryId": self.category_id,
            "price": self.price,
            "tags": self.tags
        }
        if self.ttl is not None:
            product_dict["ttl"] = self.ttl
        return product_dict

Untuk bekerja dengan kelas ini setelah menambahkan properti ttl , kita dapat membuat instans objek Produk baru dan mengatur nilai properti.

# Perform the point read
saddle = container.read_item(item=item_id, partition_key=partition_key_value)

# Convert the response to a Product object
product = Product(
    internal_id=saddle["id"],
    name=saddle["name"],
    category_id=saddle["categoryId"],
    price=saddle["price"],
    tags=saddle["tags"],
    # Add the TTL value here if it exists
    ttl=saddle.get("ttl")
)

# Set the TTL property (in seconds)
product.ttl = 1000

# Update the item in Cosmos DB
container.replace_item(item=item_id, body=product.to_dict())

Kami menggunakan to_dict() metode untuk mengonversi objek Produk kembali ke kamus dan memperbarui item. Seperti yang Anda ingat, kami menggunakan metode ini alih-alih __dict__ atribut untuk memastikan bahwa properti internal_id dipetakan dengan benar ke properti id pada objek JSON.

Catatan

Metode get("ttl") ini digunakan untuk mengambil nilai properti ttl dari objek saddle . Jika properti tidak ada, metode akan mengembalikan None. Nilai ini kemudian diteruskan ke objek Produk saat dibuat.

JavaScript SDK memungkinkan Anda mengatur nilai properti baru secara dinamis pada item. Untuk mengatur nilai TimeToLive pada item, tetapkan bilangan bulat untuk menunjukkan berapa lama, dalam detik, Anda ingin item bertahan sebelum secara otomatis dihapus menyeluruh melebihi waktu modifikasi terakhirnya. Anda melakukan perubahan ini dengan memperbarui objek item dengan nilai properti ttl baru.

saddle.ttl = 1000;

Perbarui item menggunakan metode ganti .

await container.item(saddle.id, saddle.categoryId).replace(saddle);

Namun, seingat Anda, kami mendefinisikan kelas Produk untuk mewakili item kami. Kita dapat menentukan properti TimeToLive baru yang hanya mengatur properti ttl pada JSON jika bukan null. Teknik ini dicapai dengan mengonfigurasi anggota sebagai int nullable.

class Product {
    constructor(internalId, name, categoryId, price, tags, ttl=null) {
        this.internalId = internalId;
        this.name = name;
        this.categoryId = categoryId; // Partition key
        this.price = price;
        this.tags = tags;
        this.ttl = ttl; // Optional time-to-live
    }

    toJSON() {
        const json = {
            id: this.internalId, // Map internalId to id
            name: this.name,
            categoryId: this.categoryId,
            price: this.price,
            tags: this.tags
        };
        if (this.ttl !== null) {
            json.ttl = this.ttl;
        }
        return json;
    }
}

Untuk bekerja dengan kelas ini setelah menambahkan properti ttl , kita dapat membuat instans objek Produk baru dan mengatur nilai properti.

// Perform the point read
const { resource: saddle } = await container.item(itemId, partitionKeyValue).read();

const product = new Product(
    saddle.id,
    saddle.name,
    saddle.categoryId,
    saddle.price,
    saddle.tags,
    saddle.ttl // Include the TTL value if it exists
);

// Set the TTL property (in seconds)
product.ttl = 1500;

// Update the item in Cosmos DB
await container.item(product.internalId, product.categoryId).replace(product.toJSON());

Kami menggunakan toJSON() metode untuk mengonversi objek Produk kembali ke kamus dan memperbarui item. Seperti yang mungkin Anda ingat, kami menggunakan metode ini sebagai gantinya mengandalkan serialisasi JSON standar untuk memastikan bahwa properti internalId dipetakan dengan benar ke properti id pada objek JSON.

Catatan

Ingat, proses ini tidak berfungsi jika properti DefaultTimeToLive tidak dikonfigurasi di tingkat kontainer. Selain itu, nilai ttl sebesar -1 menonaktifkan TTL untuk item.