نحوه استفاده از جریان های تغییر mongoDB به عنوان یک موتور قدرتمند رویداد محور

قبل از اینکه جریانهای تغییر به یکی از ویژگیهای MongoDB تبدیل شوند، توسعهدهندگانی که میخواستند تغییرات بلادرنگ در پایگاه داده را ردیابی کنند، برای نظارت بر ورودیهای آپلوگ و ردیابی تغییرات در یک مجموعه خاص بر اساس مهرهای زمانی استفاده میکردند. این فرآیند اغلب پیچیده بود و مکانیسمهای مورد نیاز برای از سرگیری و بازیابی خواندن از امنیت خاصی برخوردار نبود.
جریانهای تغییر به برنامهها اجازه میدهد تا یک رابط مستقیم در زمان واقعی برای مقابله با تغییرات در مجموعههای پایگاه داده، با ویژگیهای قدرتمند برای معماریهای سفارشی مبتنی بر رویداد.
هنگامی که یک محیط مجموعه replica پیکربندی شده است، جریان های تغییر در MongoDB در دسترس هستند. آنها بر تغییرات اعضا تکیه می کنند، زیرا در مورد یک تغییر خاص در اکثریت اعضا به اجماع می رسند. این امر ایمنی داده ها را در یک مجموعه خاص تضمین می کند، به خصوص در سناریوهایی که ممکن است خرابی رخ دهد.
برای استفاده از جریانهای تغییر در یک محیط توسعه محلی، یک مجموعه کپی را با استفاده از Docker Compose پیکربندی میکنیم. برای دستورالعمل های دقیق در مورد این تنظیم، می توانید به راهنمای نوشته شده توسط @sibelius مراجعه کنید. ما تلاش زیادی کرده ایم تا اطمینان حاصل کنیم که همه توسعه دهندگان ما می توانند به راحتی یک محیط محلی راه اندازی کنند و با طیف کاملی از ویژگی هایی که MongoDB ارائه می دهد کار کنند.
برپایی
در Woovi ما از جریان های تغییر در سرویس خاصی به نام Publisher استفاده می کنیم. این سرویس برنامهای است که برای هر مجموعه در پایگاه داده ما یک مشترک را که میخواهیم رویدادها را از آن استخراج کنیم، معرفی میکند.
import { companySubscriber } from './CompanySubscriber';
import { customerSubscriber } from './CustomerSubscriber';
import { userSubscriber } from './UserSubscriber';
export const setupSubscribers = () => {
companySubscriber();
userSubscriber();
customerSubscriber();
};
مناسبت ها
نقش مشترک نظارت بر مجموعه و تولید یک رویداد داده است. این رویداد سپس به یک handler ارسال میشود که دادهها را بر اساس نیازهای خاص ما پردازش میکند.
export const userSubscriber = async () => {
const stream = User.watch([], { fullDocument: 'updateLookup' });
stream.on('change', (data) => handleUserSubscriberEvent(data));
};
خروجی جریان بر اساس رویدادی که در یک مجموعه خاص رخ می دهد تغییر می کند. Mongodb رویدادهای تغییر زیادی دارد همانطور که در مستندات مشاهده می شود.
خط لوله جریان چندین گزینه را می پذیرد، fullDocument: 'updateLookup'
باعث میشود رویداد بهروزرسانی سند کامل را ارسال کند و نه فقط فیلدهای بهروزرسانی شده را همانطور که پیشفرض است ارسال کند، هر رویداد دارای یک بار جریان خاصی است که میتوانید براساس برنامه خود از آن استفاده کنید و ممکن است پیکربندیهایی را برای تنظیم در صورت نیاز انجام دهید.
پارامتر اول آرایه ای از گزینه های خط لوله است که می توانید برای تغییر خروجی جریان از آنها عبور دهید.
const pipeline = [
{ $match: { 'fullDocument.username': 'alice' } },
{ $addFields: { newField: 'this is an added field!' } }
];
const stream = User.watch(pipeline, { fullDocument: 'updateLookup' });
stream.on('change', (data) => handleUserSubscriberEvent(data));
});
موارد استفاده کنید
در نهایت، در تابع handleUserSubscriberEvent خود، از شی داده برای هدایت هر سرویس رویداد محور در محیط برنامه خود استفاده می کنیم. در مورد خاص خود، از آن برای ایجاد و بهروزرسانی شاخصها در سرویس جستجوی الاستیک خود استفاده میکنیم، که به عنوان فناوری اصلی پشت ابزارهای جستجوی داخلی ما عمل میکند.
export const handleUserSubscriberEvent = (data) => {
const dataPicked = {
_id: data.fullDocument._id,
name: data.fullDocument.name,
email: data.fullDocument.email,
cellphone: data.fullDocument.cellphone,
taxID: data.fullDocument.taxID,
};
const obj = {
data: dataPicked,
};
handleDocumentIndexing(ELASTICSEARCH_INDEXES.USER, obj);
شما می توانید از جریان های تغییر به عنوان یک موتور قدرتمند برای برنامه های کاربردی رویداد محور مانند:
- پردازش تجزیه و تحلیل
- اطلاعیه
- ادغام اینترنت اشیا با MQTT
عملکرد جریانهای تغییر mongoDB به Woovi اجازه میدهد تا محصولات مبتنی بر رویداد را تا آنجایی که میتوانیم سریع و ایمن افزایش دهد.
Woovi یک استارت آپ است که خریداران را قادر می سازد هر طور که دوست دارند پرداخت کنند. برای ایجاد این امکان، Woovi راه حل های پرداخت فوری را برای بازرگانان برای پذیرش سفارشات ارائه می دهد.
اگر می خواهید با ما کار کنید، ما استخدام می کنیم!