Event Sourcing — pattern, где current state derived из sequence immutable events, хранящихся в event log. Вместо UPDATE user SET balance = 100, пишем BalanceCredited {amount: 100}. Преимущества: full audit trail, time-travel queries, rebuild of state. Минусы: сложная схема migrations, eventual consistency, "upcasting" старых events при schema evolution.
Ниже: подробности, пример, смежные термины, FAQ.
// Events append
EventStore.append('order-123', [
OrderCreated { customerId, items }
OrderConfirmed { timestamp }
OrderShipped { trackingNumber }
])
// Rebuild state by replaying events
state = fold(events, initialState, applyEvent)Нет, но часто их combine. ES даёт write-side, CQRS разделяет read и write models.
Upcasters: at read time, old event versions transformed до new schema. Или versioned event types (OrderCreated_V1, V2).
Events накапливаются линейно. Для long-lived streams — snapshots каждые N events. Или archival старых events в cold storage.