I understand that an aggregate root usually replays all events to put itself in the right state. This can become inefficient, hence people suggested the memento pattern to create a snapshot of the aggregate root. My understanding is that the domain model has nothing to do with persistence. I also think that the snapshot has nothing to do with read model. Could someone please be so kind and point out where the snapshots are usually persisted then? Thanks.
persistence of the snapshot/memento pattern
2.5k Views Asked by cs0815 At
1
There are 1 best solutions below
Related Questions in DOMAIN-DRIVEN-DESIGN
- Should i take DateTime.Now from Database?
- How to avoid anemic data model? Can repositories be injected into entities?
- Defining aggregate roots when invariants exist within a list
- Is it okay to create a DTO counterpart of a table in a database assuming its persistent ignorant domain model and the DTO is in the repository?
- Should i do authorization on my Domain Services?
- Should i validate if related entity exists before insert?
- Using framework event dispatcher to raise domain event
- How to temporarily circumvent domain object's creation contracts when restoring application from backup?
- Domain Driven Design for Rails App: Implementing a service in a basic example
- DDD\CQRS\Event Sourcing and request historical data
- Is it possible to properly use DDD with all building blocks in monolith application?
- Replicate property size from domain to fluent api and viewmodel
- DDD aware of existance of an entity outside the context?
- Is there a way to access a private property in a where clause?
- Should I unite business domains into one business layer
Related Questions in CQRS
- Correlating aggregates by Saga ID instead of an additional aggregate root
- Command Bus/Dispatcher and Handler registration without Dependency Injection
- WPF Line Of Business Application Architecture
- Command Query Responsibility Segregation (CQRS) / Event Sourcing (ES): Why use it? How to address consistency issues?
- Defining aggregate roots when invariants exist within a list
- Domain Model with Event Sourcing
- DDD\CQRS\Event Sourcing and request historical data
- CQRS + ES - Where to query Data needed for business logic?
- CQRS, multiple write nodes for a single aggregate entry, while maintaining concurrency
- Event sourcing microservices: How to manage timestamp
- In context of CQRS and DDD how would you handle slightly varying use cases?
- EasyNetQ / RabbitMQ consuming events in Web API
- Validation and synchronous commands in CQRS
- Read model for aggregate in DDD CQRS ES
- How to generate identities when source of truth is Apache Kafka?
Related Questions in MEMENTO
- Memento pattern lack
- Java - Memento pattern and Undo
- How to implement Memento Pattern in Kotlin
- Memento pattern issues in c#
- How is the Memento Pattern implemented in C#4?
- .htaccess - Configuring an Apache server for Memento
- Memento patterns doesn't work correctly
- Multiple Originators in Memento
- Issues with implementing an undo feature with stacks in Java
- State Pattern C# with previous states
- Memento design pattern and State design pattern
- Undo/Redo Implementation For Multiple Variables
- What is the difference between the Momento and Prototype Design Pattern?
- How to set memento in memento pattern
- persistence of the snapshot/memento pattern
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
There are much way to do this, depending on the implementation you use to store your events.
Most abstracted Event Store library (those who use an agnostic persistence storage such as MySQL, MongoDB, Redis, whatever), will usually do it on their own.
If you implement your own mechanism, you may provide a Snapshot Service along with a Snapshot Strategy.
For example, you may want to create a snapshot for every events, or every n revisions.
Another solution is to have your EventStore implementation to publish events on some tubes that you can subscribe to and build your snapshot asynchronously.
You may also run a scheduled task to build snapshot from time to time.
If you use the EventStore persistence storage, which is a built-in event store, you probably won't need to snapshot, and you will most likely use projections to build computed states of your Event Stream.
As a general recommendation, snapshotting has drawbacks. By using it, you are re-using a state persistence rather a sequence of events. Make sure you actually need it and there are no better solution to optimize your performance.
Events are usually smalls messages objects and fast to load.