event sourcing
Event sourcing is a coding practice used by computer programmers to model a system as a sequence of events in order to identify the changes made over time. Instead of using the traditional method of creating a program entity out of the application's current state, event sourcing stores business objects as a string of state-changing events. Whenever an object changes, a new event is appended to the event stream.
Event sourcing helps developers maintain consistency and integrity of an application. Having a complete history of object states allows for mistakes to easily be corrected, information loss to be reconstructed and code to be easily debugged. Stored events include state-altering actions such as mouse clicks, electronic inputs and key strikes.
Benefits of event sourcing
Event sourcing is a useful tool when a programmer wants to recreate a specific occurrence identically and persist it to various destinations within a network. Benefits of event sourcing include:
- The ability to completely discard and rebuild an application by running the event stream on an empty application state.
- Event log capabilities such as replaying, reversing and changing the order.
- Convenience with modeling or predicting various behaviors and outcomes of an application.
- Ensures better system reliability.
- The ability to simply implement temporal queries.
- Organizes system updates and patches.
- Enables more accurate audit logging.
Applications of event sourcing
Event sourcing can be applied whenever a system would normally capture the state of a specific event. It is generally applied as part of a local use, such as a network or computer that is part of a single system. However, it is also possible to perpetuate information about events that are gathered from external systems.
A common example of an event sourcing application is a Version control system. This type of system relies on frequent temporal queries and the ability to completely rebuild repository files.
The event replay capability of event sourcing is often used to remedy events that were received in the wrong order, a common issue with asynchronous messaging.