multileveldown

    4.0.0 • Public • Published

    multileveldown

    multilevel implemented using leveldowns with seamless retry support

    level badge npm Node version Travis npm Coverage Status JavaScript Style Guide Backers on Open Collective Sponsors on Open Collective

    Usage

    Similar to multilevel you can use this to share a levelup database across multiple processes over a stream. In addition multileveldown supports seamless retry so you can reconnect to a server without your read streams / puts failing etc.

    First create a server

    var multileveldown = require('multileveldown')
    var level = require('level')
    var net = require('net')
    
    var db = level('db')
    
    var server = net.createServer(function (sock) {
      sock.on('error', function () {
        sock.destroy()
      })
    
      sock.pipe(multileveldown.server(db)).pipe(sock)
    })
    
    server.listen(9000)

    Then create some clients

    var multileveldown = require('multileveldown')
    var net = require('net')
    
    var db = multileveldown.client()
    
    var sock = net.connect(9000)
    sock.pipe(db.connect()).pipe(sock)
    
    db.put('hello', 'world', function () {
      db.get('hello', console.log)
    })

    Reconnect

    To setup reconnect in your client simply set retry: true and reconnect to your server when the connection fails

    var multileveldown = require('multileveldown')
    var net = require('net')
    
    var db = multileveldown.client({
      retry: true
    })
    
    var connect = function () {
      var sock = net.connect(9000)
      var remote = db.connect()
    
      sock.on('error', function () {
        sock.destroy()
      })
    
      sock.on('close', function () {
        remote.destroy()
        setTimeout(connect, 1000) // reconnect after 1s
      })
    
      sock.pipe(remote).pipe(sock)
    }
    
    connect()

    multileveldown will now make sure to retry your pending operations when you reconnect. If you create a read stream and your connection fails half way through reading that stream multileveldown makes sure to only retry the part of the stream you are missing. Please note that this might not guarantee leveldb snapshotting if you rely on that.

    API

    multileveldown.server(db, [options])

    Returns a new duplex server stream that you should connect with a client. Options include

    {
      readonly: true, // make the database be accessible as read only
      preput: function (key, val, cb) {}, // called before puts
      predel: function (key, cb) {}, // called before dels
      prebatch: function (batch, cb) {} // called before batches
    }

    clientDb = multileveldown.client([options])

    Creates a new client levelup that you can connect to a server. Options are forwarded to the levelup constructor.

    clientDb.connect()

    Returns a new duplex client stream that you should connect with a server stream

    clientDb.createRpcStream()

    Just an alias to .connect for multilevel API compatibility.

    Install

    With npm do:

    npm i multileveldown
    

    Contributing

    Level/multileveldown is an OPEN Open Source Project. This means that:

    Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.

    See the Contribution Guide for more details.

    Donate

    To sustain Level and its activities, become a backer or sponsor on Open Collective. Your logo or avatar will be displayed on our 28+ GitHub repositories and npm packages. 💖

    Backers

    Open Collective backers

    Sponsors

    Open Collective sponsors

    License

    MIT © 2015-present Mathias Buus and contributors.

    Keywords

    none

    Install

    npm i multileveldown

    DownloadsWeekly Downloads

    2,196

    Version

    4.0.0

    License

    MIT

    Unpacked Size

    74.3 kB

    Total Files

    21

    Last publish

    Collaborators

    • avatar
    • avatar