- معماری نرم افزار
- 1401-04-22
- 801
- 0
در رویکرد Two-database، ما دو پایگاه داده اختصاصی داریم ، یکی برای ذخیره اطلاعات و دیگری برای خواندن آن ها. بخش Commands برای عملیات نوشتن، پایگاه داده نوشتن را بهینه کرده و بخش Queries، پایگاه داده خواندن را برای انجام عملیات خواندن بهینه کرده است.
با هر تغییر وضعیت توسط بخش Commands ، داده های اصلاح شده بعد از نوشته شدن در دیتابیس نوشتن (Write Database) باید به دیتابیس خواندن (Read Database) فرستاده شده تا با استفاده از یک الگوی منسجم و هماهنگ در هر دو پایگاه داده ذخیره شود.
این معماری باعث بهبود عملکرد نرم افزار در قسمت جستجوهای یک نرم افزار می شود و این موضوع را می توان به عنوان یک نکته مثبت تلقی کرد زیرا کاربران یک نرم افزار معمولاً بیشتر از نوشتن، وقت خود را با خواندن داده ها می گذرانند.
چگونه پایگاه های داده را در رویکرد Two-database با همگام کنیم؟
وقتی پایگاه های خواندن و نوشتن را در 2 پایگاه داده مختلف جدا می کنیم، توجه اصلی این است که این دو پایگاه داده را به روشی مناسب همگام سازی کنیم.
این را می توان با استفاده از Event Driven Architecture حل کرد. Event Driven Architecture، زمانی که چیزی در پایگاهداده نوشتن بهروزرسانی میشود، یک رویداد بهروزرسانی را با استفاده از سیستمهای message broker منتشر میکند و این امر توسط read database اجرا میشود و دادهها را مطابق آخرین تغییرات همگامسازی میکند.
اما این راه حل یک مشکل سازگاری ایجاد می کند، زیرا از آنجایی که ما ارتباط همگام با کارگزاران پیام را پیاده سازی کرده ایم، داده ها بلافاصله منعکس نمی شوند.
در اینجا است که Event Sourcing pattern به کار ما می آید.
معماری CQRS با استفاده از روش event-sourcing
این پیچیده ترین معماری CQRS است. روش event-sourcing (منبع یابی رویدادی) کاملاً متفاوت از ذخیره سازی داده ها نسبت به دو معماری است که قبلاً ارائه شده است.
در این حالت ما وضعیت فعلی entityها را در یک دیتابیس نرمالایز شده ذخیره نمی کنیم. ما فقط تغییرات entity ها را در طول زمان ذخیره می کنیم. تاریخچه ای از تغییرات را خواهیم داشت که به آن event store می گوییم. می توانیم با مکانیزمی وضعیت فعلی هر entity را در اختیار داشته باشیم.
این روش به ما کمک بزرگی می کند تا وضعیت یک object را در گذشته به راحتی پیدا کنیم و از آن می توان به عنوان یک Logger نیز استفاده نمود چون جزء به جزء تغییراتِ وضعیت سیستم، در آن ثبت شده است. از آنجایی که دیتا به صورت سریالایز شده ذخیره می شود، بارگذاری آن نیز با سرعت بالایی انجام خواهد شد. این حالت پیچیده ترین نوع CQRS است، ولی بهینه ترین می باشد.
نکته : در این روش فقط می توانیم Eventهای جدیدی به دیتابیس خود اضافه کنیم و قادر به ویرایش و حذف Eventها نیستیم.
ثبت دیدگاه جدید
0 دیدگاه
نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *