Stream perubahan di API Azure Cosmos DB untuk MongoDB
BERLAKU UNTUK: MongoDB
Dukunganumpan perubahan di API Azure Cosmos DB untuk MongoDB tersedia dengan menggunakan API stream perubahan. Dengan menggunakan API stream perubahan, aplikasi Anda bisa mendapatkan perubahan yang dilakukan pada koleksi atau item dalam satu pecahan. Nantinya Anda dapat mengambil tindakan lebih lanjut berdasarkan hasilnya. Perubahan pada item dalam koleksi ditangkap dalam urutan waktu modifikasinya dan urutan sortir dijamin per kunci pecahan.
Catatan
Untuk menggunakan stream perubahan, buat API Azure Cosmos DB untuk akun MongoDB dengan versi server 3.6 atau yang lebih tinggi. Jika Anda menjalankan contoh stream perubahan terhadap versi yang lebih lama, Anda mungkin melihat kesalahan Nama tahap pipeline yang tidak dikenal: $changeStream.
Contoh
Contoh berikut menunjukkan cara mendapatkan stream perubahan pada semua item dalam koleksi. Contoh ini membuat kursor untuk mengamati item saat disisipkan, diperbarui, atau diganti. $match
Tahap, $project
tahap, fullDocument
dan opsi diperlukan untuk mendapatkan stream perubahan. Mengamati operasi hapus menggunakan stream perubahan saat ini tidak didukung. Sebagai solusinya, Anda bisa menambahkan penanda lembut pada item yang sedang dihapus. Misalnya, Anda dapat menambahkan atribut dalam item bernama "dihapus." Bila Anda ingin menghapus item, Anda bisa menyetel "dihapus" ke true
dan mengatur TTL pada item. Karena memperbarui "dihapus" true
adalah pembaruan, perubahan ini akan terlihat di stream perubahan.
var cursor = db.coll.watch(
[
{ $match: { "operationType": { $in: ["insert", "update", "replace"] } } },
{ $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }
],
{ fullDocument: "updateLookup" });
while (!cursor.isExhausted()) {
if (cursor.hasNext()) {
printjson(cursor.next());
}
}
Perubahan dalam satu pecahan
Contoh berikut menunjukkan cara mendapatkan perubahan pada item dalam satu pecahan. Contoh ini mendapatkan perubahan item yang memiliki kunci pecahan sama dengan "a" dan nilai kunci pecahan sama dengan "1". Klien yang berbeda dapat membaca perubahan dari pecahan yang berbeda secara paralel.
var cursor = db.coll.watch(
[
{
$match: {
$and: [
{ "fullDocument.a": 1 },
{ "operationType": { $in: ["insert", "update", "replace"] } }
]
}
},
{ $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1} }
],
{ fullDocument: "updateLookup" });
Penskalaan aliran perubahan
Saat menggunakan aliran perubahan pada skala, sebaiknya sebarkan beban secara merata. Gunakan GetChangeStreamTokens custom command untuk menyebarkan beban ke seluruh partisi/pecahan fisik.
Batasan saat ini
Batasan berikut ini berlaku saat menggunakan stream perubahan:
- Properti
operationType
danupdateDescription
belum didukung dalam dokumen output. - Jenis operasi
insert
,update
, danreplace
saat ini didukung. Namun, operasi hapus atau peristiwa lain belum didukung.
Karena keterbatasan ini, opsi tahap $match, tahap $project, dan fullDocument diperlukan seperti yang ditunjukkan dalam contoh sebelumnya.
Tidak seperti umpan perubahan di API Azure Cosmos DB untuk NoSQL, tidak ada Pustaka Prosesor Umpan Perubahan terpisah untuk menggunakan aliran perubahan atau kebutuhan akan kontainer sewa. Saat ini tidak ada dukungan untuk pemicu Azure Functions untuk memproses stream perubahan.
Penanganan kesalahan
Kode kesalahan dan pesan berikut ini didukung saat menggunakan stream perubahan:
Kode kesalahan HTTP 16500 - Saat stream perubahan dibatasi, akan ditampilkan halaman kosong.
NamespaceNotFound (OperationType Invalidate) - Jika Anda menjalankan stream perubahan pada koleksi yang tidak ada atau jika koleksi dihilangkan, maka
NamespaceNotFound
kesalahan akan ditampilkan. KarenaoperationType
properti tidak dapat ditampilkan dalam dokumen output, bukanoperationType Invalidate
kesalahan,NamespaceNotFound
kesalahan akan ditampilkan.