Skip to content

Instantly share code, notes, and snippets.

@thangngoc89
Forked from soldair/db.js
Created June 2, 2017 13:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thangngoc89/f67cc785fe46704842f67705549c6454 to your computer and use it in GitHub Desktop.
Save thangngoc89/f67cc785fe46704842f67705549c6454 to your computer and use it in GitHub Desktop.
backup a running node levelup process
var levelup = require('level')
var zlib = require('zlib')
var fs = require('fs')
var through = require('through')
//hot backup
db = levelup(...)
var backingup = false
var backupfile = "./backupjson.log.gz"
process.on('SIGHUP', function() {
if(backingup) return console.log('im already backing up')
console.log('backup started!')
var t = Date.now()
// an example of backing up to a file.
db.createReadStream()
.pipe(through(function(obj) {
// depending on if you store binary data your serialization method could be msgpack.
this.queue(JSON.stringify(obj)+"\n");
}))
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream(backupfile))
.on("close",function() {
backingup = false;
console.log('backup complete. took ', Date.now()-t, 'ms');
})
})
var split = require("split")
var through = require("through")
var fs = require("fs")
var zlib = require("zlib")
var levelup = require("level")
var db = levelup("./db2")
fs.createReadStream("./backupjson.log.gz")
.pipe(zlib.createGunzip())
.pipe(split())
.pipe(through(function(str){
this.queue(JSON.parse(str))
}))
.pipe(db.createWriteStream())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment