Created
June 11, 2015 01:06
-
-
Save secretfader/cde70340b9efca21d0e7 to your computer and use it in GitHub Desktop.
Naïve benchmark, comparing RethinkDB to MongoDB.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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