More honest benchmark for insert

pull/2/head
Louis Chatriot 12 years ago
parent bae0de018f
commit 77b95ce7dc
  1. 17
      benchmarks/commonUtilities.js
  2. 9
      benchmarks/insert.js

@ -31,17 +31,22 @@ module.exports.prepareDb = function (filename, cb) {
/** /**
* Return an array with the numbers from 0 to n-1, in a random order * Return an array with the numbers from 0 to n-1, in a random order
* Uses Fisher Yates algorithm
* Useful to get fair tests * Useful to get fair tests
*/ */
function getRandomArray (n) { function getRandomArray (n) {
var res, next; var res = []
, i, j, temp
;
if (n === 0) { return []; } for (i = 0; i < n; i += 1) { res[i] = i; }
if (n === 1) { return [0]; }
res = getRandomArray(n - 1); for (i = n - 1; i >= 1; i -= 1) {
next = Math.floor(Math.random() * n); j = Math.floor((i + 1) * Math.random());
res.splice(next, 0, n - 1); // Add n-1 at a random position in the array temp = res[i];
res[i] = res[j];
res[j] = temp;
}
return res; return res;
}; };

@ -21,12 +21,19 @@ console.log("Test with " + n + " documents");
console.log(program.withIndex ? "Use an index" : "Don't use an index"); console.log(program.withIndex ? "Use an index" : "Don't use an index");
console.log("----------------------------"); console.log("----------------------------");
async.waterfall([ async.waterfall([
async.apply(commonUtilities.prepareDb, benchDb) async.apply(commonUtilities.prepareDb, benchDb)
, function (cb) { , function (cb) {
d.loadDatabase(function (err) { d.loadDatabase(function (err) {
if (err) { return cb(err); } if (err) { return cb(err); }
if (program.withIndex) { d.ensureIndex({ fieldName: 'docNumber' }); } if (program.withIndex) {
d.ensureIndex({ fieldName: 'docNumber' });
n = 2 * n; // We will actually insert twice as many documents
// because the index is slower when the collection is already
// big. So the result given by the algorithm will be a bit worse than
// actual performance
}
cb(); cb();
}); });
} }

Loading…
Cancel
Save