Version Vector
also called Vector Clock
A per-replica counter set that lets a system tell whether one version causally descends from another or whether the two are genuinely concurrent.
Wall clocks cannot order events across machines: clocks drift, NTP corrects backwards, and "later timestamp wins" silently discards writes. A version vector replaces the timestamp with a vector of counters, one per replica, incremented on each local write.
Comparing two vectors gives one of three answers, and the third is the valuable one: A descends from B, B descends from A, or neither — meaning the two writes were concurrent and there is a genuine conflict. Last-write-wins cannot distinguish that case from an ordinary update, which is exactly how it loses data.
What you do with a detected conflict is a design decision, not a technical one: keep both versions and let the application or the user resolve (Dynamo's siblings), merge with a data type that is mathematically mergeable (a CRDT), or apply a domain rule.
The cost is metadata that grows with the number of replicas, which is why systems bound it — pruning old entries, or using dotted version vectors.