transforms every database into a object key value store, written in node.js
Switch branches/tags
Nothing to show
Clone or download
Latest commit f3369fd Jul 20, 2018
Failed to load latest commit information.
tests Merge pull request #95 from leandromoreira/new_mongodb Apr 4, 2018
var first commit May 8, 2011
.gitignore added rethinkdb driver May 26, 2016 Contributing guidelines Oct 14, 2012
CacheAndBufferLayer.js Merge pull request #76 from webzwo0i/actually-use-cbs-in-setSub Apr 4, 2018
CloneAndAtomicLayer.js [fix] Do not raise error if no callback is provided on remove operation May 5, 2017
LICENSE first commit May 8, 2011 mysql 8 is not supported yet. Document it. Jul 14, 2018
benchmark.js added rethinkdb driver May 26, 2016
caseSensitiveTest.js Fixed the case sensitive problem of mysql Dec 10, 2011
cassandra_db.js Brought in the new Cassandra driver Mar 19, 2015
couch_db.js couch can now delete things Mar 25, 2016
crate_db.js added support for crate ( Jan 28, 2016
defaultTestSettings.js added support for crate ( Jan 28, 2016
dirty_db.js added call dirty db close function - dirty 0.9.9 Jan 29, 2014
elasticsearch_db.js elasticsearch: link to doc with valid API values Jul 14, 2018
findKeysTest.js adjusted findKeysTest to work with results in different order Mar 5, 2013
leveldb_db.js Fix LevelDB indentation Jan 10, 2013
lmdb_db.js Adds lmdb support Oct 23, 2013
mongodb_db.js [feat] Re-write mongodb connector to allow more flexible configs Apr 24, 2017
mysql_db.js Create mysql table with utf8mb4 charset Dec 21, 2015
package.json Update package.json Jul 20, 2018
postgres_db.js Allow option for setting cache limit Feb 15, 2018
postgrespool_db.js Allow to use a pool of connection to PostgreSQL May 18, 2017
randomAccessTest.js move default test settings into seperate file Dec 10, 2011
redis_db.js Update redis_db.js Jul 11, 2013
rethink_db.js added rethinkdb driver May 26, 2016
sqlite_db.js Implemented findKeys for SQLite, updated Jan 27, 2013


Abstract your databases, make datababies. ueberDB turns every database into a simple key value store by providing a layer of abstraction between your software and your database. ueberDB uses a smart cache and buffer algorithm to make databases faster. Reads are cached and writes are done in a bulk. The bulk writing reduces the overhead of a database transaction. The syntax is simple and clean and getting started is easy.

Database Support

  • Couch
  • Crate
  • Dirty
  • Elasticsearch
  • Level
  • Mongo
  • MySQL (<= 5.7)
  • Postgres
  • Redis
  • RethinkDB
  • SQLite


npm install ueberDB


var ueberDB = require("ueberDB");

var db = new ueberDB.database("mysql", {"user":"root", host: "localhost", "password":"", database: "store"});
//sqlite in-memory
//var db = new ueberDB.database("sqlite");
//sqlite in file
//var db = new ueberDB.database("sqlite", {filename:"var/sqlite3.db"});
//sqlite in file with a write interval of a half second
//var db = new ueberDB.database("sqlite", {filename:"var/sqlite3.db"}, {writeInterval: 500});

//initialize the database
db.init(function (err)

  //set a object as a value
  //can be done without a callback, cause the value is immediately in the buffer
  db.set("valueA", {a:1,b:2});

  //get the object
  db.get("valueA", function(err, value){


How to add support for another database

Look at sqlite_db.js and mysql_db.js, your module have to provide the same functions. Call it DATABASENAME_db.js and reimplement the functions for your database. If you think it works, test it with node benchmark.js DATABASENAME. Benchmark.js is benchmark and test at the same time. It tries to set 100000 values. You can pipe stderr to a file and will create a csv with benchmark results.


Only mysql, dirty, mongodb, couch, rethink and crate currently support findKeys feature. The following do not yet support the function:

  • leveldb
  • redis (Only keys of the format *:*:*)
  • cassandra (Only keys of the format *:*:*)
  • elasticsearch (Only keys of the format *:*:*)

For details on how it works please refer to the wiki:


Apache License v2