Skip to content

Instantly share code, notes, and snippets.

@braydonf
Last active April 5, 2017 22:18
Show Gist options
  • Save braydonf/ff1f2b3352ae80a86a41a3644a111670 to your computer and use it in GitHub Desktop.
Save braydonf/ff1f2b3352ae80a86a41a3644a111670 to your computer and use it in GitHub Desktop.
bench-redis-memcached-mongodb.js
/*
"dependencies": {
"benchmark": "^2.1.4",
"memcached": "^2.2.2",
"mongodb-core": "^2.1.9",
"redis": "^2.7.1"
}
*/
const redis = require('redis');
const Memcached = require('memcached');
const Server = require('mongodb-core').Server
const Benchmark = require('benchmark');
const value0 = 'eb5281e5ec4707371338979422deb90171f360a7db3d35b3c2ce6d37eb80870a';
const value1 = '23bf96e14a3e0ed83f7b95a4617fd7af37df5420ce5ccbf270628733d0f88bc0c21a4dbe6537516820bb0f1b37a0668a8b2b32e74dd1b33485e17f3240f30285';
const value2 = '50330447a9d85aba221028f59f9d14f4a0f5739dedaef16bdca0c367d1d2a3fdccb0526e95b15f3caa7da4544377f35bc8fe7747b0a53ad5f39910e0870517100ab2060af7bd5499e312f002417694e053fca378bc31aca286150c877914172737cb8b5f4110323a2592cf64450085f282b28dd37202b03dd7ef553463c11f52';
const suite = new Benchmark.Suite;
const client = redis.createClient();
const memcached = new Memcached('localhost:11211', {
retries:10,
retry:10000,
remove:true,
failOverServers: []
});
memcached.on('reconnecting', function( details ){
sys.debug( "Total downtime caused by server " + details.server + " :" + details.totalDownTime + "ms")
});
memcached.on('failure', function( details ){
sys.error( "Server " + details.server + "went down due to: " + details.messages.join( '' ) )
});
const mongo = new Server({host: 'localhost', port: 27017,
reconnect: true, reconnectInterval: 50});
let connection = null;
mongo.on('close', function() {
console.log('MongoDB connection closed');
});
mongo.on('connect', function(server) {
connection = server;
});
mongo.connect();
let rc = 0;
suite.add('redis#set', function(deferred) {
client.set(rc, value1, (err, result) => {
if (err) {
console.error(err);
}
rc++;
deferred.resolve();
});
}, { defer: true });
let mc = 0;
suite.add('memcached#set', function(deferred) {
memcached.set(mc, value1, 5000, (err, result) => {
if (err) {
console.error(err);
}
mc++;
deferred.resolve();
});
}, { defer: true});
let moc = 0;
suite.add('mongodb#set', function(deferred) {
connection.insert('benchmark.inserts', {_id: moc, value: value1}, {
writeConcern: {w:1}, ordered:true
}, (err, result) => {
if (err) {
console.error(err);
}
moc++;
deferred.resolve();
});
}, { defer: true});
let rgc = 0;
suite.add('redis#get', function(deferred) {
client.get(rgc, (err, result) => {
if (err) {
console.error(err);
}
rgc++;
deferred.resolve();
});
}, { defer: true });
let mgc = 0;
suite.add('memcached#get', function(deferred) {
memcached.get(mgc, (err, result) => {
if (err) {
console.error(err);
}
mgc++;
deferred.resolve();
});
}, { defer: true});
let mogc = 0;
suite.add('mongodb#get', function(deferred) {
if (mogc >= moc) {
mogc = 0;
}
var cursor = connection.cursor('benchmark.inserts', {
find: 'benchmark.inserts',
query: {_id: mogc}
});
cursor.next(function(err, doc) {
if (err) {
console.error(err);
}
mogc++;
deferred.resolve();
});
}, { defer: true});
suite.on('cycle', function(event) {
console.log(String(event.target));
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').map('name'));
client.quit();
memcached.end();
mongo.destroy();
});
suite.run({ 'async': true });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment