Awesome
LSEQArray
<i>Keywords: distributed systems, collaborative editing, CRDT, LSEQ allocation strategy, unique identifiers</i>
This project aims to provide an implementation of a CRDT-based array using the allocation strategy LSEQ. Thus, the array structure allows distributed updates without having to manage the difficult task of solving conflict resolution.
Installation
$ npm install lseqarray
Usage
var LSEQArray = require('lseqarray');
// #1 creating the array
// site: our unique site identifier
var lseqArray = new LSEQArray(site);
// #2a inserting an element at the targeted index
// ei: a couple {_e: the element, _i: its unique identifier}
var ei = lseqArray.insert("A",0);
// #2b inserting an element that comes from a remote insert
// re: the element remotely inserted
// ri: the unique identifier of the element
var index = lseqArray.applyInsert(re, ri);
// #3a deleting the element at targeted index
// i: the unique identifier of the element at the index
var i = lseqArray.remove(0);
// #3b deleting the element with its unique identifier "ri"
// ri: the unique identifier of the element to delete
var index = lseqArray.applyRemove(ri);
// #4 accessing the length of the array
var length = lseqArray.length;
Example
SandEdit is a distributed and decentralized collaborative editor using LSEQArray. It has an optionnal web front end. Thus, one can simply trigger the events of a Replica to build its distributed array.
Others
In this implementations, each cell of the javascript array contains an element and its unique and immutable identifier. An alternative is the tree-based structure of the LSEQ-based array accessible at Flood-it.
Learn more about CRDTs: A comprehensive study of Convergent and Commutative Replicated Data Types
Learn more about LSEQ: LSEQ: an Adaptive Structure for Sequences in Distributed Collaborative Editing