소스 검색

EAGLESIX-4483: add doc src micro benchmarks w/ results

Kyle P Davis 11 년 전
부모
커밋
0b8c3d52e3

+ 1 - 0
bench/micro/README.md

@@ -0,0 +1 @@
+Some custom micro benchmarks that should be ported to work with benchmarksman once it works for async tests.

+ 17 - 0
bench/micro/group.js

@@ -0,0 +1,17 @@
+var microbench = require("./lib/microbench.js");
+
+microbench({
+	module: module,
+	generateInputDoc: function(i, size) {
+		return {
+			v: i % (size / 10),
+		};
+	},
+	pipeline: [
+		{$group:{
+			_id: "$v",
+		}},
+	],
+	sizes: [100, 1000, 10000, 100000, 1000000],
+	nIterations: 3,
+});

+ 64 - 0
bench/micro/lib/microbench.js

@@ -0,0 +1,64 @@
+var path = require("path"),
+	async = require("async"),
+	aggregate = require("../../../");
+
+module.exports = function _runner(opts) {
+
+	var testName = path.basename(opts.module.filename),
+		testTime = Date.now();
+
+	// run for different input sizes
+	async.map(
+		opts.sizes,
+		function mapper(size, nextSize) {
+
+			var datas = [];
+			for (var i = 0, n = size; i < n; i++) {
+				var input = opts.generateInputDoc(i, size);
+				if (input instanceof Array) {
+					datas.push.apply(datas, input);
+				} else {
+					datas.push(input);
+				}
+			}
+
+			// run for a couple of iterations
+			var iterations = Array.apply(null, new Array(opts.nIterations)).map(Number);
+			async.map(
+				iterations,
+				function mapper(iteration, nextIteration) {
+					var t0 = Date.now();
+					aggregate(opts.pipeline, datas, function(err, docs) {
+						if (err) return nextIteration(err);
+						return nextIteration(null, {
+							ms: Date.now() - t0,
+							//docs: docs.length,
+							//doc0: docs[0],
+						});
+					});
+				},
+				function done(err, iterations) {
+					if (err) return nextSize(err);
+					// get avg
+					var sum = 0;
+					iterations.forEach(function(iteration) {
+						sum += iteration.ms;
+					});
+					// report results
+					console.log("%j", {
+						n: testName,
+						t: testTime,
+						inputs: size,
+						avgMs: sum / iterations.length,
+						iterations: iterations,
+					});
+				}
+			);
+
+		},
+		function done(err, sizes) {
+			if (err) throw err;
+		}
+	);
+
+};

+ 18 - 0
bench/micro/match.js

@@ -0,0 +1,18 @@
+var microbench = require("./lib/microbench.js");
+
+microbench({
+	module: module,
+	generateInputDoc: function(i) {
+		return {
+			v: i,
+		};
+	},
+	pipeline: [
+		{$project:{
+			v: true,
+			copy: "$v",
+		}},
+	],
+	sizes: [100, 1000, 10000, 100000, 1000000],
+	nIterations: 3,
+});

+ 18 - 0
bench/micro/project.js

@@ -0,0 +1,18 @@
+var microbench = require("./lib/microbench");
+
+microbench({
+	module: module,
+	generateInputDoc: function(i) {
+		return {
+			v: i,
+		};
+	},
+	pipeline: [
+		{$project:{
+			v: true,
+			copy: "$v",
+		}},
+	],
+	sizes: [100, 1000, 10000, 100000, 1000000],
+	nIterations: 3,
+});

+ 5 - 0
bench/micro/results/mungedb24/group.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"group.js","t":1422647511705,"inputs":100,"avgMs":276.3333333333333,"iterations":[{"ms":277},{"ms":276},{"ms":276}]}
+{"n":"group.js","t":1422647511705,"inputs":1000,"avgMs":286.3333333333333,"iterations":[{"ms":285},{"ms":287},{"ms":287}]}
+{"n":"group.js","t":1422647511705,"inputs":10000,"avgMs":297.3333333333333,"iterations":[{"ms":294},{"ms":297},{"ms":301}]}
+{"n":"group.js","t":1422647511705,"inputs":100000,"avgMs":361.6666666666667,"iterations":[{"ms":330},{"ms":364},{"ms":391}]}
+{"n":"group.js","t":1422647511705,"inputs":1000000,"avgMs":1191.6666666666667,"iterations":[{"ms":664},{"ms":1238},{"ms":1673}]}

+ 5 - 0
bench/micro/results/mungedb24/match.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"match.js","t":1422647513739,"inputs":100,"avgMs":276.6666666666667,"iterations":[{"ms":277},{"ms":277},{"ms":276}]}
+{"n":"match.js","t":1422647513739,"inputs":1000,"avgMs":297.6666666666667,"iterations":[{"ms":294},{"ms":298},{"ms":301}]}
+{"n":"match.js","t":1422647513739,"inputs":10000,"avgMs":375.6666666666667,"iterations":[{"ms":340},{"ms":375},{"ms":412}]}
+{"n":"match.js","t":1422647513739,"inputs":100000,"avgMs":1121,"iterations":[{"ms":752},{"ms":1107},{"ms":1504}]}
+{"n":"match.js","t":1422647513739,"inputs":1000000,"avgMs":8803.333333333334,"iterations":[{"ms":5076},{"ms":8703},{"ms":12631}]}

+ 5 - 0
bench/micro/results/mungedb24/project.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"project.js","t":1422647526735,"inputs":100,"avgMs":276,"iterations":[{"ms":277},{"ms":275},{"ms":276}]}
+{"n":"project.js","t":1422647526735,"inputs":1000,"avgMs":295.3333333333333,"iterations":[{"ms":291},{"ms":296},{"ms":299}]}
+{"n":"project.js","t":1422647526735,"inputs":10000,"avgMs":376.6666666666667,"iterations":[{"ms":339},{"ms":377},{"ms":414}]}
+{"n":"project.js","t":1422647526735,"inputs":100000,"avgMs":1127.6666666666667,"iterations":[{"ms":761},{"ms":1118},{"ms":1504}]}
+{"n":"project.js","t":1422647526735,"inputs":1000000,"avgMs":8801.666666666666,"iterations":[{"ms":5094},{"ms":8778},{"ms":12533}]}

+ 5 - 0
bench/micro/results/mungedb24/sort.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"sort.js","t":1422647539623,"inputs":100,"avgMs":302.3333333333333,"iterations":[{"ms":302},{"ms":302},{"ms":303}]}
+{"n":"sort.js","t":1422647539623,"inputs":1000,"avgMs":323,"iterations":[{"ms":318},{"ms":323},{"ms":328}]}
+{"n":"sort.js","t":1422647539623,"inputs":10000,"avgMs":438.6666666666667,"iterations":[{"ms":387},{"ms":436},{"ms":493}]}
+{"n":"sort.js","t":1422647539623,"inputs":100000,"avgMs":1710,"iterations":[{"ms":1105},{"ms":1709},{"ms":2316}]}
+{"n":"sort.js","t":1422647539623,"inputs":1000000,"avgMs":17386,"iterations":[{"ms":9735},{"ms":17394},{"ms":25029}]}

+ 5 - 0
bench/micro/results/mungedb24/unwind.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"unwind.js","t":1422647565072,"inputs":100,"avgMs":537.3333333333334,"iterations":[{"ms":534},{"ms":538},{"ms":540}]}
+{"n":"unwind.js","t":1422647565072,"inputs":1000,"avgMs":564.3333333333334,"iterations":[{"ms":558},{"ms":565},{"ms":570}]}
+{"n":"unwind.js","t":1422647565072,"inputs":10000,"avgMs":701.6666666666666,"iterations":[{"ms":635},{"ms":702},{"ms":768}]}
+{"n":"unwind.js","t":1422647565072,"inputs":100000,"avgMs":2188,"iterations":[{"ms":1456},{"ms":2244},{"ms":2864}]}
+{"n":"unwind.js","t":1422647565072,"inputs":1000000,"avgMs":17756.333333333332,"iterations":[{"ms":9768},{"ms":17696},{"ms":25805}]}

+ 5 - 0
bench/micro/results/mungedb26/group.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"group.js","t":1422647680075,"inputs":100,"avgMs":246.33333333333334,"iterations":[{"ms":249},{"ms":245},{"ms":245}]}
+{"n":"group.js","t":1422647680075,"inputs":1000,"avgMs":314,"iterations":[{"ms":314},{"ms":314},{"ms":314}]}
+{"n":"group.js","t":1422647680075,"inputs":10000,"avgMs":738.3333333333334,"iterations":[{"ms":739},{"ms":738},{"ms":738}]}
+{"n":"group.js","t":1422647680075,"inputs":100000,"avgMs":3645,"iterations":[{"ms":3645},{"ms":3645},{"ms":3645}]}
+{"n":"group.js","t":1422647680075,"inputs":1000000,"avgMs":15959.333333333334,"iterations":[{"ms":15959},{"ms":15959},{"ms":15960}]}

+ 5 - 0
bench/micro/results/mungedb26/match.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"match.js","t":1422646985154,"inputs":100,"avgMs":255.66666666666666,"iterations":[{"ms":260},{"ms":254},{"ms":253}]}
+{"n":"match.js","t":1422646985154,"inputs":1000,"avgMs":387,"iterations":[{"ms":387},{"ms":387},{"ms":387}]}
+{"n":"match.js","t":1422646985154,"inputs":10000,"avgMs":1284,"iterations":[{"ms":1284},{"ms":1284},{"ms":1284}]}
+{"n":"match.js","t":1422646985154,"inputs":100000,"avgMs":7209,"iterations":[{"ms":7209},{"ms":7209},{"ms":7209}]}
+{"n":"match.js","t":1422646985154,"inputs":1000000,"avgMs":38343,"iterations":[{"ms":38343},{"ms":38343},{"ms":38343}]}

+ 5 - 0
bench/micro/results/mungedb26/project.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"project.js","t":1422647024005,"inputs":100,"avgMs":261.3333333333333,"iterations":[{"ms":265},{"ms":260},{"ms":259}]}
+{"n":"project.js","t":1422647024005,"inputs":1000,"avgMs":394.6666666666667,"iterations":[{"ms":395},{"ms":395},{"ms":394}]}
+{"n":"project.js","t":1422647024005,"inputs":10000,"avgMs":1337.6666666666667,"iterations":[{"ms":1338},{"ms":1338},{"ms":1337}]}
+{"n":"project.js","t":1422647024005,"inputs":100000,"avgMs":7626.666666666667,"iterations":[{"ms":7626},{"ms":7627},{"ms":7627}]}
+{"n":"project.js","t":1422647024005,"inputs":1000000,"avgMs":38809,"iterations":[{"ms":38809},{"ms":38809},{"ms":38809}]}

+ 5 - 0
bench/micro/results/mungedb26/sort.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"sort.js","t":1422647063296,"inputs":100,"avgMs":282.3333333333333,"iterations":[{"ms":286},{"ms":281},{"ms":280}]}
+{"n":"sort.js","t":1422647063296,"inputs":1000,"avgMs":414,"iterations":[{"ms":414},{"ms":414},{"ms":414}]}
+{"n":"sort.js","t":1422647063296,"inputs":10000,"avgMs":1572.3333333333333,"iterations":[{"ms":1573},{"ms":1572},{"ms":1572}]}
+{"n":"sort.js","t":1422647063296,"inputs":100000,"avgMs":13321,"iterations":[{"ms":13321},{"ms":13321},{"ms":13321}]}
+{"n":"sort.js","t":1422647063296,"inputs":1000000,"avgMs":136574,"iterations":[{"ms":136574},{"ms":136574},{"ms":136574}]}

+ 5 - 0
bench/micro/results/mungedb26/unwind.results.jsonl

@@ -0,0 +1,5 @@
+{"n":"unwind.js","t":1422647200369,"inputs":100,"avgMs":520.6666666666666,"iterations":[{"ms":524},{"ms":519},{"ms":519}]}
+{"n":"unwind.js","t":1422647200369,"inputs":1000,"avgMs":826.6666666666666,"iterations":[{"ms":827},{"ms":827},{"ms":826}]}
+{"n":"unwind.js","t":1422647200369,"inputs":10000,"avgMs":3183,"iterations":[{"ms":3183},{"ms":3183},{"ms":3183}]}
+{"n":"unwind.js","t":1422647200369,"inputs":100000,"avgMs":18875.333333333332,"iterations":[{"ms":18876},{"ms":18875},{"ms":18875}]}
+{"n":"unwind.js","t":1422647200369,"inputs":1000000,"avgMs":100897.33333333333,"iterations":[{"ms":100898},{"ms":100897},{"ms":100897}]}

+ 17 - 0
bench/micro/sort.js

@@ -0,0 +1,17 @@
+var microbench = require("./lib/microbench.js");
+
+microbench({
+	module: module,
+	generateInputDoc: function(i, size) {
+		return {
+			v: (i - i / 2) % (i / 10) * i,
+		};
+	},
+	pipeline: [
+		{$sort:{
+			v: 1,
+		}},
+	],
+	sizes: [100, 1000, 10000, 100000, 1000000],
+	nIterations: 3,
+});

+ 15 - 0
bench/micro/unwind.js

@@ -0,0 +1,15 @@
+var microbench = require("./lib/microbench.js");
+
+microbench({
+	module: module,
+	generateInputDoc: function(i, size) {
+		return {
+			v: [i, i + 1, i + 2, i + 3, i + 4],
+		};
+	},
+	pipeline: [
+		{$unwind: "$v"},
+	],
+	sizes: [100, 1000, 10000, 100000, 1000000],
+	nIterations: 3,
+});