Mengubah Stream di Azure DocumentDB

Aliran perubahan adalah aliran perubahan database real time yang mengalir dari database Anda ke aplikasi Anda. Fitur ini memungkinkan Anda membangun aplikasi reaktif dengan berlangganan perubahan database, menghilangkan kebutuhan polling berkelanjutan untuk mendeteksi perubahan.

Nota

Azure DocumentDB saat ini mendukung Change Stream dalam kluster shard tunggal. Kami secara aktif berupaya memberikan dukungan Change Stream untuk kluster multi-shard dalam waktu dekat.

Azure DocumentDB memberlakukan batas log yang dikelola sistem 400 MB untuk Change Streams. Pelanggan harus memproses "Change Streams" terus-menerus untuk menghindari kejadian perubahan historis yang hilang. Change Streams menggunakan log yang dikelola sistem dengan batas ukuran maksimum 400 MB. Jika token resume mengacu pada peristiwa perubahan yang telah diluncurkan dari log, Aliran Perubahan tidak dapat dilanjutkan dari titik tersebut dan harus dimulai ulang. Kami merencanakan pratinjau untuk dukungan diperluas dalam waktu dekat.

Mengaktifkan aliran perubahan

Anda dapat mengaktifkan atau menonaktifkan fitur ini menggunakan Azure CLI atau templat ARM. Dukungan portal akan segera ditambahkan.

Langkah-langkah untuk mengaktifkan aliran perubahan pada kluster melalui CLI

  1. Masuk ke Azure CLI
az login
  1. Ambil pengaturan saat ini untuk bendera fitur pada kluster Anda. Ini memastikan Anda mempertahankan bendera yang ada saat menambahkan fitur baru.
az resource show --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Azure DocumentDB cluster>" --api-version 2024-10-01-preview
  1. Kirim permintaan PATCH untuk mengaktifkan fitur.
az resource patch --ids "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>" --api-version 2024-10-01-preview --properties "{\"previewFeatures\": [ \"ChangeStreams\"]}"
  1. Verifikasi hasil:
    • Pastikan payload respons mencakup "previewFeatures": ["ChangeStreams"].
    • Jika Anda mengalami kesalahan "change streams tidak didukung pada kluster ini", silakan buat permintaan dukungan.

Mengonfigurasi aliran perubahan

Contoh kode ini memulai aliran perubahan pada exampleCollection koleksi, terus memantau perubahan apa pun. Ketika suatu perubahan terdeteksi, sistem mengambil data peristiwa perubahan tersebut dan mencetaknya dalam format JSON.

// Open a change stream
const changeStream = db.exampleCollection.watch();

// Listen for changes
while (changeStream.hasNext()) 
    {
        const change = changeStream.next();
        printjson(change);
    }

Important

Aliran perubahan dapat dilanjutkan dengan menentukan token resume ke resumeAfter saat membuka kursor. Diharapkan ada cukup data riwayat untuk menemukan operasi yang terkait dengan token. Dokumen yang diamati dalam aliran perubahan di _id bidang mewakili token yang dapat dilanjutkan.

cursor = db.exampleCollection.watch(resume_after=resume_token)

Memantau perubahan pada database dengan Change Stream

Mari kita pahami output aliran perubahan melalui contoh.

Dalam peristiwa perubahan aliran ini, kita melihat bahwa rekaman baru ditambahkan inserted ke dalam koleksi exampleCollection di dalam basis data cs, dan detail peristiwa menyertakan konten lengkap dokumen yang baru ditambahkan.

{
  "_id": { "_data": "AeARBpQ/AAAA" }, // "resume_token"
  "operationType": "insert",
  "fullDocument": {
    "_id": { "$oid": "66e6f63e6f49ecaabf794958" },
    "employee_id": "17986",
    "name": "John",
    "position": "Software Engineer",
    "department": "IT",
    "rating": 4
  },
  "ns": { "db": "cs", "coll": "exampleCollection" },
  "documentKey": { "_id": { "$oid": "66e6f63e6f49ecaabf794958" } }
}

Personalisasikan data dalam Aliran Perubahan

Sesuaikan output aliran perubahan Anda dengan menentukan array dari satu atau beberapa tahap alur selama konfigurasi. Operator yang didukung mencakup yang berikut ini.

  • $addFields
  • $match
  • $project
  • $set
  • $unset

Keterbatasan

  • Peristiwa perubahan aliran pada klaster multi-shard belum didukung.
  • Kursor aliran perubahan perlu diinisialisasi ulang setelah peristiwa failover dalam keadaan saat ini.
  • Update peristiwa belum mendukung deskripsi pembaruan.
  • pre-image adalah opsi yang tidak didukung.
  • $changestream sebagai alur berlapis dari tahap lain belum didukung.