Bosh sahifa Wiki Change stream

Change stream

Change streamdatabase ma’lumotidagi insert, update, replace, delete va boshqa o‘zgarishlarni uzluksiz hodisalar oqimi sifatida kuzatish mexanizmidir. MongoDBda u replica set oplogi va aggregation framework ustida quriladi. Ilova collectionni qayta-qayta so‘ramasdan cache invalidation, audit, qidiruv indeksi yoki downstream pipeline uchun o‘zgarishlarni olishi mumkin.

Hodisa tuzilishi

Change event operation type, namespace, document key, cluster time va resume tokenni o‘z ichiga oladi. Update event o‘zgargan fieldlar hamda olib tashlangan maydonlarni berishi mumkin. fullDocument sozlamasi updatedan keyingi to‘liq hujjatni qo‘shimcha lookup bilan oladi; event bilan lookup orasida hujjat yana o‘zgarsa semantika platforma opsiyasiga bog‘liq.

Collection, database yoki deployment darajasida stream ochilishi mumkin. Aggregation pipeline $match orqali kerakli operation yoki namespace ni filtrlashi, $project bilan payloadni kamaytirishi mumkin. Pipeline faqat change stream uchun ruxsat etilgan va event yaxlitligini buzmaydigan stage lardan foydalanadi.

Resume token

Har eventning resume tokeni oqimdagi pozitsiyani bildiradi. Consumer eventni muvaffaqiyatli side effect bilan qayta ishlagach tokenni durable saqlaydi. Ulanish uzilsa resumeAfter yoki tegishli variant bilan davom etadi. Tokenni eventdan oldin commit qilish data yo‘qotadi; side effectdan keyin, tokendan oldin crash esa duplicate qayta ishlashga olib keladi.

Exactly-once tashqi sink uchun avtomatik emas. Idempotent upsert, event ID deduplikatsiyasi yoki sink transactioni token bilan bog‘lanadi. Email yoki begona API side effecti uchun transactional outboxga o‘xshash qo‘shimcha dizayn kerak.

Oplog oynasi

Consumer uzoq to‘xtab, kerakli change oplogdan chiqib ketsa resume token endi ishlamasligi mumkin. Oplog window maksimal qabul qilinadigan outage va backlogdan katta bo‘ladi. Aks holda consumer to‘liq snapshot olib, snapshot va keyingi stream orasidagi bo‘shliqni izchil bog‘lashi kerak.

Sekin consumer serverda cheksiz state saqlatmaydi; driver eventlarni kelish tezligida o‘qiydi va application backpressure boshqaradi. Queue yoki durable brokerga tez yozib, og‘ir enrichmentni keyingi bosqichda bajarish oplogdan ortda qolish xavfini kamaytiradi.

Shardlangan muhit

Sharded cluster change streami bir nechta shard oqimini cluster time bo‘yicha birlashtiradi. Yangi shard, chunk migration va topology o‘zgarishi driver hamda server tomonidan yashiriladi, ammo global ordering faqat taqdim etilgan semantika doirasida talqin qilinadi. Bir hujjat kaliti bo‘yicha version yoki cluster time conflictni boshqaradi.

Transaction ichidagi o‘zgarishlar commit bo‘lgach ko‘rinadi. Katta transaction ko‘p eventni birdan chiqarishi mumkin. Abort qilingan transaction consumerga data change sifatida yetkazilmaydi.

Xavfsizlik va monitoring

Change stream o‘qiydigan identity tegishli privilegega ega bo‘ladi. Event payload shaxsiy ma’lumotni downstreamga tarqatishi mumkin; filter, maskalash, retention va encryption qo‘llanadi. Audit streamni o‘zgartirib yuborish yoki consumer credentialini o‘g‘irlashdan alohida himoyalanadi.

Monitoring consumer lagni cluster time va wall clock farqi, qayta ulanishlar, resume xatolari, qayta ishlash latency, duplicate va dead-letter eventlar bilan o‘lchaydi. Change stream backup emas: delete hodisasini ko‘rish o‘chirilgan ma’lumotni tiklash uchun to‘liq tarix saqlanganini anglatmaydi.

Iste’molchi dizayni

Change stream iste’molchisi hodisani qayta olishi mumkinligini hisobga olib idempotent ishlashi kerak. Resume token xavfsiz saqlansa, uzilishdan keyin oxirgi tasdiqlangan nuqtadan davom etiladi. Tokenni hodisa oqibatlari yozilishidan oldin saqlash ma’lumot yo‘qotishiga, juda kech saqlash esa takroriy qayta ishlashga olib kelishi mumkin.

Bog‘liq tushunchalar

Change Data Capture, Oplog, Resume token, Replica set, Event stream, Idempotency, Transactional outbox