Home

Awesome

GenSync - 2.0.4

GenSync is a framework for efficiently synchronizing similar data across multiple devices.

The framework provides a shared library for benchmarking and optimizing a variety of state-of-the-art data synchronization protocols, either offline or directly embedded within application code. In one typical use-case, an application would use GenSync for its core data synchronization needs, and developers can compare and optimize the performance of different synchronization protocols to suit their needs. Alternatively, users could utilize the GenSync library to profile synchronization usage for their application, and then experiment with synchronization protocols offline to improve perfromance.

The current implementation of the framework includes four families of data synchronization protocols (and their variants)):


Contents:


<a name="Motivation"></a>

Motivating example

Suppose that laptop A has a list of contacts:

Alice, Jim, Jane, Rick, Bob

and cellphone B has the contacts:

Alice, Jim, Suzie, Jane, Rick

Then an efficient synchronization protocol might quickly idenfity the differences (Rick on the laptop, and Suzie on the cellphone) and exchange only these contacts, rather than sending the entire contact list from one device to another.


<a name="Code"></a>

Code

The source code for this library is divided among several repositories.


<a name="SyncTypes"></a>

Supported protocols:

Each of these protocols is implemented as a peer-to-peer protocol. For purposes of explanation, one peer is called a client and the other a server .


<a name="References"></a>

References:

If you use this software, please cite at least the following paper (pdf, DOI):

@article{bovskov2022gensync,
  title={Gensync: A new framework for benchmarking and optimizing reconciliation of data},
  author={Bo{\v{s}}kov, Novak and Trachtenberg, Ari and Starobinski, David},
  journal={IEEE Transactions on Network and Service Management},
  volume={19},
  number={4},
  pages={4408--4423},
  year={2022},
  publisher={IEEE}
}

The following works are also significant to this software implementation:

Theoretical foundations

Applications and extensions


<a name="Contributors"></a>

Contributors:

Elements of the GenSync project code have been worked on, at various points, by:


<a name="Acknowledgments"></a>

Acknowledgments: