Skip to content

Instantly share code, notes, and snippets.

@rvagg
Created March 8, 2013 13:42
Show Gist options
  • Save rvagg/5116514 to your computer and use it in GitHub Desktop.
Save rvagg/5116514 to your computer and use it in GitHub Desktop.
LevelUP rangeDel() benchmarks

LevelUP rangeDel() benchmarks

Tests a native C++ .rangeDel() method via upper-rangedel/downer-rangedel against a JavaScript implementation of the same via level-delete-range.

  1. make files with contents below
  2. npm install (twice, first one will fail)
  3. node ./
  4. observe results
Native .rangeDel() benchmark
Filling database
Starting .rangeDel()...
Native .rangeDel() on 100000 entries took 262 ms
JS rangeDel() benchmark
Filling database
Starting rangeDel()...
JS rangeDel() on 100000 entries took 1636 ms
Done
require('upper-rangedel').use()
var assert = require('assert')
, levelup = require('levelup')
, bogan = require('boganipsum')
, delayed = require('delayed')
, rangeDel = require('level-delete-range')
, db = levelup('/tmp/bench.db')
, entries = 100000
, data = Array.apply(null, Array(entries)).map(function (x, i) {
return { type: 'put', key: 'entrykey_' + i, value: bogan({ paragraphs: 1 }) }
})
, countEntries = function (callback) {
var count = 0
db.createKeyStream()
.on('data', function () { count++ })
.on('error', callback)
.on('close', function () { callback(null, count) })
}
, testNative = function (callback) {
console.log('Native .rangeDel() benchmark')
console.log('Filling database')
db.batch(data, delayed.delayed(function (err) {
if (err) throw err
console.log('Starting .rangeDel()...')
var start = Date.now()
db.rangeDel(function (err) {
if (err) throw err
console.log('Native .rangeDel() on', entries, 'entries took', Date.now() - start, 'ms')
countEntries(function (err, count) {
if (err) throw err
assert.equal(count, 0, 'database should be empty')
delayed.delay(callback, 1)
})
})
}, 1))
}
, testJS = function (callback) {
console.log('JS rangeDel() benchmark')
console.log('Filling database')
db.batch(data, delayed.delayed(function (err) {
if (err) throw err
console.log('Starting rangeDel()...')
var start = Date.now()
rangeDel(db, {}, function (err) {
if (err) throw err
console.log('JS rangeDel() on', entries, 'entries took', Date.now() - start, 'ms')
countEntries(function (err, count) {
if (err) throw err
assert.equal(count, 0, 'database should be empty')
delayed.delay(callback, 1)
})
})
}, 1))
}
testNative(function () {
testJS(function () {
console.log('Done')
})
})
{
"name": "rangedelbench",
"version": "0.0.0",
"main": "bench.js",
"dependencies": {
"delayed": "~0.0.0",
"boganipsum": "~0.0.0",
"level-delete-range": "~0.1.0",
"levelup": "~0.7.0-b02",
"upper-rangedel": "~0.0.1",
"leveldown": "~0.2.0-b02"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment