CPC G06F 16/273 (2019.01) [G06F 3/065 (2013.01); G06F 16/24568 (2019.01); G06F 2201/82 (2013.01)] | 24 Claims |
1. A system, comprising:
one or more computers at a first location implementing an event sender, configured with computer executable instructions to:
receive a stream of update events from a source data store, wherein the update events are in an order;
for individual update events:
read from an item version object on persistent storage a logical clock value for a data item updated by the update event;
update the item version object to increment the logical clock value to a next logical clock value; and
send the update event with the next logical clock value over a communication channel that does not guarantee that the update events will be delivered in the order of the stream; and
one or more computers at a second location implementing a plurality of replicator nodes executing concurrently and configured with computer executable instructions to apply the update events from the communication channel to a destination data store, individual ones of the replicator nodes configured to:
for a particular update event of a particular data item:
responsive to a determination that (a) the data item does not exist in a destination object and (b) a particular logical clock value of the update event is newer than another logical clock value of the data item in a tombstone object stored on persistent storage separate from the destination object:
update the tombstone object:
to indicate the particular logical clock value for the data item, and
to set a barrier attribute in the tombstone object that indicates to other ones of the replicator nodes to not perform delete events for the data item on the destination object;
add the data item to the destination object while the barrier attribute in the tombstone object is set; and
clear the barrier attribute in the tombstone object after the data item has been added to the destination object.
|