جریان تغییر به برنامه ها اجازه می دهد تا بدون پیچیدگی و خطر خیاطی Oplog به تغییرات داده های زمان واقعی دسترسی پیدا کنند. برنامه ها می توانند از جریان های تغییر برای مشترک شدن در کلیه تغییرات داده در یک مجموعه واحد ، یک پایگاه داده یا یک استقرار کامل استفاده کنند و بلافاصله به آنها واکنش نشان دهند. از آنجا که جریان های تغییر از چارچوب جمع آوری استفاده می کنند ، برنامه ها همچنین می توانند برای تغییرات خاص فیلتر شوند یا اعلان ها را به خواست تغییر دهند.
با شروع از MongoDB 5. 1 ، جریان های تغییر بهینه شده و استفاده از منابع کارآمدتر و اجرای سریعتر برخی از مراحل خط لوله جمع آوری را فراهم می کند.
دسترسی
جریان های تغییر برای مجموعه های ماکت و خوشه های Sharded در دسترس هستند:
موتور ذخیره سازی
مجموعه های ماکت و خوشه های Sharded باید از موتور ذخیره سازی Wiredtiger استفاده کنند. جریان های تغییر نیز می توانند در استقرار استفاده شوند که از ویژگی رمزگذاری MongoDB استفاده می کنند.
نسخه پروتکل تنظیم ماکت.
مجموعه های ماکت و خوشه های Sharded باید از پروتکل مجموعه ماکت نسخه 1 (PV1) استفاده کنند.
نگرانی "اکثریت" را بخوانید.
با شروع از MongoDB 4. 2 ، جریان های تغییر بدون در نظر گرفتن پشتیبانی از نگرانی "اکثریت" در دسترس هستند. یعنی ، خواندن نگرانی اکثریت را می توان فعال کرد (به طور پیش فرض) یا غیرفعال برای استفاده از جریان های تغییر.
در MongoDB 4. 0 و قبل از آن ، جریان های تغییر فقط درصورتی در دسترس هستند که "اکثریت" پشتیبانی نگرانی را بخوانید (پیش فرض).
وصل کردن
اتصالات برای یک جریان تغییر می تواند از لیست بذر DNS با گزینه اتصال +SRV یا با لیست سرورها به صورت جداگانه در رشته اتصال استفاده کند.
اگر راننده اتصال به یک جریان تغییر را از دست بدهد یا اتصال پایین بیاید ، تلاش می کند تا از طریق یک گره دیگر در خوشه که دارای اولویت خواندن است ، اتصال به جریان تغییر را دوباره برقرار کند. اگر درایور نتواند گره ای با اولویت خواندن صحیح پیدا کند ، یک استثنا را به وجود می آورد.
یک مجموعه ، پایگاه داده یا استقرار را تماشا کنید
می توانید جریان های تغییر را در برابر:
می توانید یک مکان نما تغییر جریان را برای یک مجموعه واحد باز کنید (به جز مجموعه های سیستم یا هر مجموعه در پایگاه داده های مدیر ، محلی و پیکربندی).
مثالهای موجود در این صفحه از درایورهای MongoDB برای باز و کار با یک مکان نما تغییر برای یک مجموعه واحد استفاده می کنند. همچنین به روش mongosh db. collection. watch () مراجعه کنید.
با شروع از MongoDB 4. 0 ، می توانید یک مکان نما تغییر جریان را برای یک پایگاه داده واحد (به استثنای پایگاه داده مدیر ، محلی و پیکربندی) باز کنید تا در همه مجموعه های غیر سیستم خود تغییرات را مشاهده کنید.
برای روش درایور MongoDB ، به مستندات درایور خود مراجعه کنید. همچنین به روش mongosh db. watch () مراجعه کنید.
با شروع از MongoDB 4. 0 ، می توانید یک مکان نما تغییر جریان را برای استقرار (یا یک مجموعه ماکت یا یک خوشه Sharded) باز کنید تا در همه مجموعه های غیر سیستم در تمام پایگاه داده ها به استثنای سرپرست ، محلی و پیکربندی ، مراقب باشید.
برای روش درایور MongoDB ، به مستندات درایور خود مراجعه کنید. همچنین به روش Mongosh Mongo. Watch () مراجعه کنید.
نمونه های جریان را تغییر دهید
مثالهای موجود در این صفحه از درایورهای MongoDB برای نشان دادن نحوه باز کردن یک مکان نما تغییر برای یک مجموعه و کار با مکان نما تغییر استفاده می کنند.
یک جریان تغییر را باز کنید
برای باز کردن یک جریان تغییر:
برای یک مجموعه ماکت ، می توانید عملیات جریان تغییر باز را از هر یک از اعضای دارای داده های دارای داده صادر کنید.
برای یک خوشه خرد شده ، باید عملیات جریان تغییر باز را از مونگوس صادر کنید.
مثال زیر جریان تغییر را برای یک مجموعه باز می کند و برای بازیابی اسناد جریان تغییر ، از مکان نما تکرار می شود.[1]
➤ از منوی کشویی زبان خود در سمت راست بالا استفاده کنید تا زبان نمونه ها را در این صفحه تنظیم کنید.
برای بازیابی رویداد تغییر داده از مکان نما ، مکان نما جریان تغییر را تکرار کنید. برای اطلاعات در مورد رویداد تغییر جریان ، به وقایع تغییر مراجعه کنید.
در حالی که اتصال به استقرار MongoDB باز است ، مکان نما تا زمانی که یکی از موارد زیر رخ دهد باز است:
مکان نما صریحاً بسته است.
اگر استقرار یک خوشه خرد شده باشد ، یک حذف Shard ممکن است باعث بسته شدن یک مکان نما تغییر باز شود و مکان نما جریان بسته ممکن است کاملاً از سر گرفته نشود.
چرخه عمر یک مکان نما بدون بسته وابسته به زبان است.
[1] | با شروع از MongoDB 4. 0 ، می توانید یک شروع کار را برای باز کردن مکان نما در یک نقطه خاص از زمان مشخص کنید. اگر نقطه شروع مشخص شده در گذشته باشد ، باید در محدوده زمانی Oplog باشد. |
تغییر خروجی جریان را تغییر دهید
➤ از منوی کشویی زبان خود در سمت راست بالا استفاده کنید تا زبان نمونه ها را در این صفحه تنظیم کنید.
قسمت _id سند رویداد تغییر جریان به عنوان نشانه رزومه عمل می کند. از خط لوله برای اصلاح یا حذف قسمت Change Stream _id استفاده نکنید.
با شروع از MongoDB 4. 2 ، اگر خط لوله جمع آوری جریان تغییر ، میدان _id یک رویداد را اصلاح کند ، جریان های تغییر استثنا می شوند.
برای اطلاعات بیشتر در مورد قالب سند پاسخ جریان تغییر ، به تغییر رویدادها مراجعه کنید.
جستجوی سند کامل برای عملیات به روزرسانی
➤ از منوی کشویی زبان خود در سمت راست بالا استفاده کنید تا زبان نمونه ها را در این صفحه تنظیم کنید.
➤ از منوی کشویی زبان خود در سمت راست بالا استفاده کنید تا زبان نمونه ها را در این صفحه تنظیم کنید.
مهم
مهم
برای اطلاعات بیشتر در مورد قالب سند پاسخ جریان تغییر ، به تغییر رویدادها مراجعه کنید.
می توانید resumetoken را نصب و اجرا کنید
شما همچنین می توانید resumetoken را اجرا کنید
از خط فرمان (بدون استفاده از mongosh) اگر npm روی سیستم شما نصب شده باشد:
برای جزئیات بیشتر به موارد زیر مراجعه کنید:
رزومه توکن ها از تغییر رویدادها
اعلانهای رویداد تغییر شامل یک نشانه رزومه در فیلد _id است:
رزومه توکن ها از مجموع
هنگام استفاده از دستور aggregate، مرحله تجمع $changeStream شامل یک نشانه رزومه در قسمت cursor. postBatchResumeToken است:
رزومه توکن ها از getMore
دستور getMore همچنین شامل یک نشانه رزومه در قسمت cursor. postBatchResumeToken است:
موارد استفاده
رزومه توکن ها از تغییر رویدادها
اعلانهای رویداد تغییر شامل یک نشانه رزومه در فیلد _id است:
رزومه توکن ها از مجموع
برای باز کردن یک جریان تغییر در یک پایگاه داده، برنامهها باید دارای امتیازاتی باشند که به changeStream اعطا میکنند و اقداماتی را در تمام مجموعههای غیر سیستمی در یک پایگاه داده پیدا میکنند.
برای باز کردن یک جریان تغییر در کل استقرار، برنامهها باید دارای امتیازاتی باشند که به changeStream اعطا میکنند و اقداماتی را در تمام مجموعههای غیر سیستمی برای همه پایگاههای داده در استقرار پیدا میکنند.
اطلاع رسانی رویداد
جریانهای تغییر فقط در مورد تغییرات دادهای که برای اکثر اعضای دارای داده در مجموعه کپی ادامه داشته است، مطلع میشوند. این تضمین میکند که اعلانها فقط با تغییراتی که اکثریت متعهد شدهاند و در سناریوهای شکست بادوام هستند، راهاندازی میشوند.
به عنوان مثال، یک مجموعه ماکت 3 نفره را در نظر بگیرید که مکاننمای جریان تغییر در برابر اصلی باز شده است. اگر یک کلاینت عملیات درج را صادر کند، جریان تغییر تنها زمانی اعمال تغییر داده را به اکثر اعضای دارای داده ادامه می دهد.
اگر عملیاتی با یک تراکنش مرتبط باشد، سند رویداد تغییر شامل txnNumber و lsid است.
گردآوری
با شروع MongoDB 4. 2، جریانهای تغییر از مقایسههای باینری ساده استفاده میکنند، مگر اینکه یک ترکیب صریح ارائه شود. در نسخههای قبلی، جریانهای تغییر باز شده روی یک مجموعه واحد (db. collection. watch()) ردهبندی پیشفرض آن مجموعه را به ارث میبرد.
جریان و اسناد یتیم را تغییر دهید
با شروع از MongoDB 5. 3 ، در حین مهاجرت دامنه ، رویدادهای جریان تغییر برای به روزرسانی در اسناد یتیم ایجاد نمی شود.
جریان را با اسناد قبل و بعد از تصویر تغییر دهید
با شروع MongoDB 6. 0 ، می توانید از رویدادهای تغییر جریان برای خروجی نسخه یک سند قبل و بعد از تغییرات استفاده کنید (سند قبل و بعد از تصویر):
قبل از تعویض ، به روزرسانی یا حذف آن ، قبل از تصویر ، سند است. هیچ تصویری برای یک سند درج شده وجود ندارد.
پس از تصویر پس از درج ، تعویض یا به روزرسانی ، سند است. هیچ تصویر پس از تصویر برای یک سند حذف شده وجود ندارد.
changestreampreandpostimages را برای یک مجموعه با استفاده از db. createcollection () ، ایجاد یا collmod فعال کنید.
در صورت وجود تصاویر ، تصاویر قبل و بعد از آن برای یک رویداد جریان تغییر در دسترس نیستند:
در زمان بروزرسانی سند یا حذف عمل در مجموعه فعال نشده است.
پس از مدت زمان احتباس قبل و بعد از تصویر ، در معرض خطر قرار گرفت.
مثال زیر Extireafterseconds را به 100 ثانیه تعیین می کند:
مثال زیر تنظیمات فعلی ChangeStreamOptions ، از جمله Extireafterseconds را برمی گرداند:
تنظیم extireafterseconds برای استفاده از خط مشی پیش فرض حفظ: تصاویر قبل و بعد از آن حفظ می شوند تا زمانی که وقایع جریان تغییر مربوطه از Oplog حذف شوند.
اگر یک رویداد جریان تغییر از Oplog حذف شود ، پس از آن تصاویر قبل و بعد از آن نیز بدون در نظر گرفتن زمان احتباس قبل و بعد از تصویر ، حذف می شوند.
فعال کردن تصاویر قبل و بعد از آن فضای ذخیره سازی را مصرف می کند و زمان پردازش را اضافه می کند. در صورت نیاز به تصاویر قبل و بعد از آن فقط امکان پذیر است.
اندازه رویداد تغییر جریان را به کمتر از 16 مگابایت محدود کنید. برای محدود کردن اندازه رویداد ، می توانید:
اندازه سند را به 8 مگابایت محدود کنید. اگر سایر زمینه های رویداد تغییر جریان مانند به روزرسانی نسخه بزرگ نیستند ، می توانید به طور همزمان در خروجی جریان تغییر درخواست کنید.
اگر سایر زمینه های رویداد Change جریان مانند نسخه به روز شده بزرگ نیستند ، فقط در خروجی جریان تغییر برای اسناد تا 16 مگابایت درخواست کنید.
فقط در مورد خروجی جریان تغییر برای اسناد حداکثر 16 مگابایت درخواست کنید:
به روزرسانی های اسناد فقط بخش کوچکی از ساختار اسناد یا محتوا را تحت تأثیر قرار می دهند و
باعث ایجاد یک رویداد تغییر جایگزین نشوید. یک رویداد جایگزین همیشه شامل تصویر پس از تصویر است.
برای درخواست یک تصویر قبلی، fullDocumentBeforeChange را روی الزامی یا WhenAvailable در db. collection. watch() تنظیم می کنید. برای درخواست تصویر پست، fullDocument را با استفاده از همین روش تنظیم می کنید.
تصاویر پیشین در مجموعه config. system. preimages نوشته می شوند.
مجموعه config. system. preimages ممکن است بزرگ شود. برای محدود کردن اندازه مجموعه، میتوانید زمان expireAfterSeconds را برای تصاویر پیشتصاویر همانطور که قبلا نشان داده شده است تنظیم کنید.
تصاویر پیشین به صورت ناهمزمان توسط یک فرآیند پس زمینه حذف می شوند.
مهم
ویژگی ناسازگار با عقب
با شروع MongoDB 6. 0، اگر از تصاویر پیش و پس از سند برای جریان های تغییر استفاده می کنید، باید قبل از اینکه بتوانید به نسخه قبلی MongoDB تنزل دهید، changeStreamPreAndPostImages را برای هر مجموعه با استفاده از دستور collMod غیرفعال کنید.
همچنین ببینید:
برای تغییر رویدادهای جریان و خروجی، به تغییر رویدادها مراجعه کنید.
برای مشاهده یک مجموعه برای تغییرات، به db. collection. watch() مراجعه کنید.
برای مثالهای کامل با خروجی جریان تغییر، به تغییر جریانها با تصاویر پیش و پس از سند مراجعه کنید.
برای مثالهای کامل با خروجی جریان تغییر، به تغییر جریانها با تصاویر پیش و پس از سند مراجعه کنید.