Skip to content

Instantly share code, notes, and snippets.

@secretfader
Created June 11, 2015 01:06
Show Gist options
  • Save secretfader/cde70340b9efca21d0e7 to your computer and use it in GitHub Desktop.
Save secretfader/cde70340b9efca21d0e7 to your computer and use it in GitHub Desktop.
Naïve benchmark, comparing RethinkDB to MongoDB.
/**
* Shim
*/
var Promise = require('bluebird');
/**
* Dependencies
*/
var mongo = require('mongodb')
, router = require('koa-router')()
, app = module.exports = require('koa')();
/**
* Utilities
*/
function Acquire () {
return new Promise(function (resolve, reject) {
var self = this;
if (self.client) return resolve(self.client);
mongo('mongodb://localhost:27017/benchmark', function (err, client) {
if (err) return reject(err);
self.client = client;
resolve(self.client);
});
});
}
function ReadQuery (conn) {
return new Promise(function (resolve, reject) {
conn.collection('records')
.findOne({
// NOTE: ObjectId of the created document goes here.
_id: mongo.ObjectId.createFromHexString('55783e5da412a74d22ebee69')
}, function (err, result) {
if (err) return reject(err);
resolve(result);
});
});
}
function WriteQuery(conn) {
return new Promise(function (resolve, reject) {
conn.collection('records').insert({
ip: '127.0.0.1'
}, function (err, result) {
if (err) return reject(err);
resolve(result);
});
});
}
/**
* Route Handlers
*/
router.get('/', function * Index () {
var query = yield Acquire().then(ReadQuery);
this.body = query;
});
router.post('/', function * Create () {
var query = yield Acquire().then(WriteQuery);
this.body = query;
});
/**
* Mount
*/
app.use(require('koa-logger')());
app.use(router.routes());
/**
* Boot
*/
if (!module.parent) app.listen(9292);
/**
* Shim
*/
var Promise = require('bluebird');
/**
* Dependencies
*/
var rethink = require('rethinkdb')
, Pool = require('generic-pool').Pool
, router = require('koa-router')()
, app = module.exports = require('koa')();
var connections = Pool({
name: 'rethinkdb',
min: 2,
max: 10,
idleTimeoutMillis: 30000,
create: function (done) {
rethink.connect({
db: 'benchmark'
}, function (err, conn) {
if (err) return done(err);
done(null, conn);
});
},
destroy: function (conn) {
conn.close();
}
});
/**
* Utilities
*/
function Acquire () {
return new Promise(function (resolve, reject) {
connections.acquire(function (err, conn) {
if (err) return reject(err);
resolve(conn);
});
});
}
function ReadQuery (conn) {
return rethink.table('records')
// NOTE: ID of the created document goes here.
.get('f1ff2553-21e4-4029-bd1a-92ff5e268369')
.run(conn).then(function (results) {
connections.release(conn);
return results;
});
}
function WriteQuery (conn) {
return rethink.table('records').insert({
ip: '127.0.0.1'
}).run().then(function (results) {
connections.release(conn);
return results;
});
}
/**
* Route Handlers
*/
router.get('/', function * Index () {
var query = yield Acquire().then(ReadQuery);
this.body = query;
});
router.post('/', function * Create () {
var query = yield Acquire().then(WriteQuery);
this.body = query;
});
/**
* Mount
*/
app.use(require('koa-logger')());
app.use(router.routes());
/**
* Boot
*/
if (!module.parent) app.listen(9292);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment