What is CQRS?
satya - 1/23/2015, 10:27:58 AM
CQRS - Command and Query Responsibility Segregation
CQRS - Command and Query Responsibility Segregation
satya - 1/23/2015, 10:30:33 AM
Cloud Design Patterns from Microsoft
Cloud Design Patterns from Microsoft
Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications
Containing twenty-four design patterns and ten related guidance topics, this guide articulates the benefit of applying patterns by showing how each piece can fit into the big picture of cloud application architectures. It also discusses the benefits and considerations for each pattern. Most of the patterns have code samples or snippets that show how to implement the patterns using the features of Microsoft Azure. However the majority of topics described in this guide are equally relevant to all kinds of distributed systems, whether hosted on Azure or on other cloud platforms.
satya - 1/23/2015, 10:34:14 AM
Here is a possible advantage
satya - 1/23/2015, 10:34:32 AM
Notice how there can be multiple read stores or optimized ones
Notice how there can be multiple read stores or optimized ones
satya - 1/23/2015, 10:42:21 AM
A thought: can add considerable and often unnecessary complexity
There are specific components of an overall data management scenario where CQRS can be useful, but it can add considerable and often unnecessary complexity where it is not actually required.
satya - 1/23/2015, 10:43:42 AM
Event sourcing
The CQRS pattern is often used in conjunction with the Event Sourcing pattern. CQRS-based systems use separate read and write data models, each tailored to relevant tasks and often located in physically separate stores. When used with Event Sourcing, the store of events is the write model, and this is the authoritative source of information. The read model of a CQRS-based system provides materialized views of the data, typically as highly denormalized views. These views are tailored to the interfaces and display requirements of the application, which helps to maximize both display and query performance.
Using the stream of events as the write store, rather than the actual data at a point in time, avoids update conflicts on a single aggregate and maximizes performance and scalability. The events can be used to asynchronously generate materialized views of the data that are used to populate the read store.
Because the event store is the authoritative source of information, it is possible to delete the materialized views and replay all past events to create a new representation of the current state when the system evolves, or when the read model must change. The materialized views are effectively a durable read-only cache of the data.
satya - 1/23/2015, 10:46:37 AM
Of course
As with any system where the write and read stores are separate, systems based on this pattern are only eventually consistent. There will be some delay between the event being generated and the data store that holds the results of operations initiated by these events being updated.
The pattern introduces additional complexity because code must be created to initiate and handle events, and assemble or update the appropriate views or objects required by queries or a read model. The inherent complexity of the CQRS pattern when used in conjunction with Event Sourcing can make a successful implementation more difficult, and requires relearning of some concepts and a different approach to designing systems. However, Event Sourcing can make it easier to model the domain, and makes it easier to rebuild views or create new ones because the intent of the changes in the data is preserved.
Generating materialized views for use in the read model or projections of the data by replaying and handling the events for specific entities or collections of entities may require considerable processing time and resource usage, especially if it requires summation or analysis of values over long time periods, because all the associated events may need to be examined. This may be partially resolved by implementing snapshots of the data at scheduled intervals, such as a total count of the number of a specific action that have occurred, or the current state of an entity.
satya - 1/23/2015, 10:54:43 AM
Book: CQRS Journey patterns & practices Developer Center
satya - 1/23/2015, 10:59:53 AM
concept of eventual consistency
An example of this is the concept of eventual consistency. If you come from a relational database background and are accustomed to the ACID properties of transactions, then embracing eventual consistency and understanding its implications at all levels in the system is a big step to take.
satya - 1/23/2015, 5:10:45 PM
Domain Driven Design
Domain Driven Design
satya - 1/23/2015, 5:27:02 PM
A case for CQRS: A PDF file from Greg Young