vizier
v1.0.0
Published
A framework for realtime distributed data synchronization.
Downloads
7
Maintainers
Readme
Vizier
Overview
Vizier is a tiny framework for performing realtime, distributed, one-way data synchronization.
Usage
On the server, you'll need to install vizier
and connect it to a network pipe. Vizier only works the pipe delivers updates as quickly as possible; two great options are socket.io
or PubNub.
// server.js
import Vizier from 'vizier';
import io from 'socket.io';
Vizier
.build('postgres://my-database-url')
.track('my_table') // Assuming such a table already exists, of course.
.then((vizier) => {
io.on('connect', (socket) => {
let pipe = (update) => socket.emit('vizier', update);
let desynchronize = vizier.synchronize('my_table', pipe);
socket.on('disconnect', () => desynchronize());
});
});
On the client, you'll need to install vizier-client-simple
and submit
Vizier's messages to it.
// client.js
import io from 'socket.io-client';
import Sink from 'vizier-client-simple';
let sink = new Sink();
io.on('vizier', (message) => {
sink.submit(message);
});
setInterval(() => {
console.log(`There are now ${sink.get('item').length} items in the database.`);
}, 1000);
Any table you've synchronized on the server will be stored in sink
, updated in realtime (or however fast your actual network framework is).
Configuration
Pass options to make(connection, options)
or use Vizier#configure(options)
. You may also pass per-synchronization options from the options.synchronization
key directly to Vizier#synchronize(table, pipe, options)
to override the instance options. Anyway, here are the available options and their defaults:
/**
* Reconfigures this Vizier instance with new options.
*
* @param {object} options
* The options to use; read the method for details.
*/
configure (options) {
// Set defaults for the options.
options = options || {};
// A delimiter used to manage objects in the database.
options.delimiter = options.delimiter || '‡';
// A prefix used to manage objects in the database.
options.prefix = options.prefix || 'vizier';
// Set default synchronization options.
options.synchronization = options.synchronization || {};
// Whether or not we synchronize from now, or from all time.
options.synchronization.full = options.synchronization.full || false;
// The loader for tables/rows coming in from the database.
options.synchronization.loader = options.synchronization.loader || new DefaultLoader(this.client);
// Initialize this instance's options.
this.options = options;
}