If multiple servers allow the same key to be updated, its important to detect when the values are concurrently updated across a set of replicas.
Each key value is associated with a version vector that maintains a number for each cluster node.
In essence, a version vector is a set of counters, one for each node. A version vector for three nodes (blue, green, black) would look something like [blue: 43, green: 54, black: 12]. Each time a node has an internal update, it updates its own counter, so an update in the green node would change the vector to [blue: 43, green: 55, black: 12]. Whenever two nodes communicate, they synchronize their vector stamps, allowing them to detect any simultaneous updates.
[vector-clock] implementation is similar. But vector clocks are used to track every event occurring on the server. In contrast, version vectors are used to detect concurrent updates to same key across a set of replicas. So an instance of a version vector is stored per key and not per server. Databases like [riak] use the term version vector instead of vector clock for their implementation. Refer to [version-vectors-are-not-vector-clocks] for more details.