Thay vì chỉ lưu trạng thái hiện tại (và ghi đè khi thay đổi), event sourcing lưu toàn bộ chuỗi sự kiện đã làm thay đổi trạng thái, theo thứ tự. Trạng thái hiện tại được tái dựng bằng cách replay các event từ đầu.
Ví dụ tài khoản: thay vì balance = 120, ta lưu Deposited 100, Deposited 50, Withdrew 30.
Ưu điểm:
- Audit log đầy đủ, không mất lịch sử; truy vấn được "trạng thái tại thời điểm T" (temporal query).
- Tái dựng/replay để sửa lỗi, tạo read model mới, debug.
- Hợp tự nhiên với event-driven và CQRS.
Đánh đổi:
- Phức tạp hơn nhiều; replay lâu → cần snapshot định kỳ.
- Versioning schema của event khó; eventual consistency; truy vấn trạng thái hiện tại cần projection riêng.