الگوی CQRS یا Command Query Responsibility Segregation یک الگوی طراحی برای جدا کردن فرآیندهای خواندن و نوشتن برنامه شما می باشد. به عملیات خواندن Query و به عملیات نوشتن Command گفته می شود.
در یک اپلیکشن، ما بر روی دیتابیس عملیات های write و read انجام خواهیم داد. در خیلی از مواقع عملیات write به ندرت روی دیتابیس انجام می شود اما عملیات read زیاد اتفاق می افتد. اگر یک سایت خبرگزاری را در نظر بگیرید، در طول روز خبرها ایجاد، ویرایش، حذف و خوانده می شوند. تعداد عملیات های ایجاد، ویرایش و حذف ممکن است در طول روز به عدد صد برسد. اما خبرها میلیون ها بار خوانده می شوند. اگر این خبرگزاری دارای یک دیتابیس باشد و تمام اطلاعات خود را در آن بنویسد و از همان هم بخواهد بخواند، در فرآیند خواندن کندی ایجاد می شود.
بنابراین در یک وبسایت خبرگزاری که دارای بازدید بالایی می باشد، ادمین های خبرگزاری عملیات نوشتن را بر روی یک دیتابیس انجام می دهند و این دیتابیس با دیتابیس دیگری در یک بازه زمانی sync خواهد شد و برای خواندن از دیتابیس دوم استفاده می شود.
حتی این نکته را هم در نظر بگیرید که ممکن است این دو دیتابیس از یک engine نباشند. ممکن است دیتابیس اول از نوع RDBMS و دیگری از نوع NoSQL باشد. بنابراین CQRS به ما پیشنهاد می کند که عملیات های نوشتن را در قالب command بر روی یک دیتابیس انجام دهیم و برای عملیات های خواندن در قالب query از دیتابیس دیگری استفاده کنیم.
در شروع کار ممکن کار خود را با یک دیتابیس انجام دهید. اما معماری شما باید به گونه ای باشد که پیش بینی های لازم را کرده باشید که در آینده دیتابیس شما ممکن است به دو دیتابیس تبدیل شود و یا حتی از SQL Server به Mongo DB تبدیل شود.
نکته ای که وجود دارد، خواندن هایی را که در زمان نوشتن مورد نیاز هستند و یا خواندن هایی که مربوط به ادمین می باشند را همچنان در command قرار می دهیم و خواندن هایی که احساس می کنیم ممکن است بار بر روی دیتابیس ما ایجاد کنند را در query قرار می دهیم.
پایان