A version vector is a mechanism for tracking changes to data in a distributed system, where multiple agents might update the data at different times.
The version vector allows the participants to determine if one update preceded another (happened-before), followed it, or if the two updates happened concurrently (and therefore might conflict with each other).
In this way, version vectors enable causality tracking among data replicas and are a basic mechanism for optimistic replication.
In mathematical terms, the version vector generates a preorder that tracks the events that precede, and may therefore influence, later updates.
Version vectors maintain state identical to that in a vector clock, but the update rules differ slightly; in this example, replicas can either experience local updates (e.g., the user editing a file on the local node), or can synchronize with another replica: Pairs of replicas, a, b, can be compared by inspecting their version vectors and determined to be either: identical (
The ordered relation is defined as: Vector
Version vectors[1] or variants are used to track updates in many distributed file systems, such as Coda (file system) and Ficus, and are the main data structure behind optimistic replication.