Data synchronization using a mathematical aproach.
## Features
Helping synchronization between clients and servers accross a network. The client is expected to have pushed its changes to the server and then requests the library to pull changes from the server.
Clients of the library must provide on the server a way to serialize items and an endpoint, as well as a way to deserialize items and to access the server endpoint on the client.
The algorithm requires O(log(n))
roundtrips to the server and consumes a total bandwidth of O(s * n)
where n
is the number of items which changed on the server since the last synchronization and s
the size of an item. The total number of items in the repository has no influence. Underlying algorithm greatly inspired from What’s the Difference? Efficient Set Reconciliation without Prior Context.
Nice features:
- underlying structure can be computed ahead of time (in map/reduce jobs)
- self-stabilizing algorithm (any error would be corrected at the next synchronization)
- the server is neither required to record a log of changes nor to version items
- Google Group for any question
- Github pull requests for suggestions and issues for tickets
## Development
Per-language low levels libraries to be easily integrated anywhere plus higher level integrations for common needs. Everything located in a single git repository to make changes atomic.
Vagrant can be used to get a working virtual machine in minutes with all build requirements. Code can be edited directly in the host while compiling occurs in the VM (at /home/vagrant/dev
). Windows users should ensure that the virtual machine is able to create symlinks on the host file system.
Initial setup is done using:
make init
And builds are launched with:
make build
Each module is unit tested during its own build and later on cross tested as part of the standard build.
### Version bump
- before development:
env VERSION=0.42.1 make set-dev-version
- right before releasing:
env VERSION=0.42.1 make set-release-version