1. A method for synchronizing a first replica of a data set and a second replica of the data set, each of the first and second replicas having an associated identifier and counter whereby, for each change made to an element in the data set, a change bucket is assigned to the element, the change bucket including an associated identifier and a count of an associated counter at the time of the change, the method comprising: receiving at the second replica a first replication state vector maintained at the first replica, the first replication state vector including a first change bucket corresponding to a most recent change made at the first replica and a second change bucket corresponding to a most recent change made at the second replica and replicated at the first replica; comparing at the second replica the first replication state vector and a second replication state vector maintained at the second replica, the second replication state vector including a first change bucket corresponding to a most recent change made at the first replica and replicated at the second replica and a second change bucket corresponding to a most recent change made at the second replica; identifying changes to be replicated at the first replica, the changes to be replicated at the first replica each having a change bucket with the identifier of the second replica and a count greater than the count of the second change bucket of the first replication state vector and less than or equal to the count of the second change bucket of the second replication state vector; and sending to the first replica the changes to be replicated at the first replica and their corresponding change buckets.