iridium
Version:
A custom lightweight ORM for MongoDB designed for power-users
113 lines (103 loc) • 2.8 kB
JavaScript
var async = require('async'),
MongoClient = require('mongodb').MongoClient,
Iridium = require('./');
var objects = [];
for(var i = 0; i < 10000; i++)
objects.push({
name: 'John',
surname: 'Doe',
birthday: new Date()
});
var iDB = new Iridium({
database: 'iridium_bench'
});
var model = new Iridium.Model(iDB, 'iridium', {
name: String,
surname: String,
birthday: Date
});
iDB.register('model', model);
function printTime(format, start) {
var ms = (new Date()).getTime() - start.getTime();
console.log(format, ms.toString() + 'ms');
}
MongoClient.connect('mongodb://localhost/iridium_bench', function(err, mDB) {
if(err) throw err;
iDB.connect(function(err) {
if(err) throw err;
// Both databases are ready, let's start testing...
var mDBcol = mDB.collection('mongo');
async.series([
function(done) {
mDBcol.remove({}, { w: 1 }, function(err, removed) {
if(err) return done(err);
return done();
});
},
function(done) {
model.remove({}, function(err, removed) {
if(err) return done(err);
return done();
});
},
function(done) {
console.log('MongoDB 10000 Inserts { w: 1 }');
var start = new Date();
mDBcol.insert(objects, { w: 1 }, function(err, inserted) {
if(err) return done(err);
printTime(' => %s', start);
return done();
});
},
function(done) {
console.log('Iridium 10000 Inserts { w: 1, wrap: false }');
var start = new Date();
model.insert(objects, { wrap: false }, function(err, inserted) {
if(err) return done(err);
printTime(' => %s', start);
return done();
});
},
function(done) {
console.log('MongoDB find()');
var start = new Date();
mDBcol.find({}).toArray(function(err, results) {
if(err) return done(err);
printTime(' => %s', start);
return done();
});
},
function(done) {
console.log('Iridium find() { wrap: false }');
var start = new Date();
model.find({}, { wrap: false }, function(err, results) {
if(err) return done(err);
printTime(' => %s', start);
return done();
});
},
function(done) {
console.log('MongoDB remove()');
var start = new Date();
mDBcol.remove({}, function(err, results) {
if(err) return done(err);
printTime(' => %s', start);
return done();
});
},
function(done) {
console.log('Iridium remove()');
var start = new Date();
model.remove(function(err, results) {
if(err) return done(err);
printTime(' => %s', start);
return done();
});
}
], function(err) {
if(err) throw err;
mDB.close();
iDB.disconnect();
});
});
});