diff --git a/benchmarks/commonUtilities.js b/benchmarks/commonUtilities.js index 494acad..d26624c 100644 --- a/benchmarks/commonUtilities.js +++ b/benchmarks/commonUtilities.js @@ -184,6 +184,32 @@ module.exports.removeDocs = function (options, d, n, profiler, cb) { }; +/** + * Load database + */ +module.exports.loadDatabase = function (d, n, profiler, cb) { + var beg = new Date() + , order = getRandomArray(n) + ; + + profiler.step("Loading the database " + n + " times"); + + function runFrom(i) { + if (i === n) { // Finished + console.log("Average time for one loadDatabse for a collection of " + n + " docs: " + (profiler.elapsedSinceLastStep() / n) + "ms"); + profiler.step('Finished loading a database' + n + ' times'); + return cb(); + } + + d.loadDatabase(function (err) { + process.nextTick(function () { + runFrom(i + 1); + }); + }); + } + runFrom(0); +}; + diff --git a/benchmarks/loadDatabase.js b/benchmarks/loadDatabase.js new file mode 100644 index 0000000..ff6489a --- /dev/null +++ b/benchmarks/loadDatabase.js @@ -0,0 +1,27 @@ +var Datastore = require('../lib/datastore') + , benchDb = 'workspace/loaddb.bench.db' + , fs = require('fs') + , path = require('path') + , async = require('async') + , commonUtilities = require('./commonUtilities') + , execTime = require('exec-time') + , profiler = new execTime('LOADDB BENCH') + , d = new Datastore(benchDb) + , n = 10000 + ; + +if (process.argv[2]) { n = parseInt(process.argv[2], 10); } + +async.waterfall([ + async.apply(commonUtilities.prepareDb, benchDb) +, function (cb) { + d.loadDatabase(cb); + } +, function (cb) { profiler.beginProfiling(); return cb(); } +, async.apply(commonUtilities.insertDocs, d, n, profiler) +, async.apply(commonUtilities.loadDatabase, d, n, profiler) +], function (err) { + profiler.step("Benchmark finished"); + + if (err) { return console.log("An error was encountered: ", err); } +});