Each replica in a group of replicas of a data set is assigned a unique
identifier and maintains an independent counter. When a change is made to
an element in the data set, a change bucket, is assigned to the changed
data element. The change bucket includes the identifier of the replica at
which the change was made and the count of the counter of the replica at
which the change was made at the time of the change. Each replica also
maintains an array of change buckets each corresponding to the most
recent changes replicated from the other replicas in the group. When
replicas synchronize, the replicas exchange and compare replication state
vectors to identify changes present at a replica and not present at
another replica. Once such changes are identified, they and their
corresponding change buckets are sent to the other replica to be
replicated. Once new changes are replicated, the replicas join their
replication state vectors to reflect that they are synchronized.