CouchDB View Server Benchmarking Suite
To establish a baseline set of metrics for comparing various view engines. The benchmark is designed to do an "end to end" benchmark of the views, testing the total time it takes for the view engine to process the docs and get the data saved to disk in CouchDB. The motivation for this is to get a relatively accurate look at external view engine performance compared to the native erlang view engine.
Additionally, the results should be saved for easy comparisons and analysis. This will currently save results into http://localhost:5984/all\_the\_numbers\_results.
Ideally this tool will be comprehensive in covering the various view engines and provide simple config examples required to run benchmarks locally against all view engines.
Initial benchmarks that come to mind:
* Base SpiderMonkey view engine
* Jason's direct node.js port
* Native Erlang view engine (how much does serializing to external services really cost)
* Things along the lines of erlv8
* Anything else
This is currently a rough benchmark I threw together today. Hopefully we can get feedback on a comprehensive suite of view tests to accurately guage relative performance. Various settings are currently hardcoded in bench.js.
npm install
node bench.js
; Default view engine
; [query_servers]
; javascript = /usr/local/bin/couchjs /usr/local/share/couchdb/server/main.js
$ node bench.js
RUNNING TESTS -- (batchsize/numDocs):
[ 1000, 10000 ]
BUILDING: base\_spidermonkey
DELETING http://localhost:5984/all\_the\_numbers\_test\_base\_spidermonkey
CREATING http://localhost:5984/all\_the\_numbers\_test\_base\_spidermonkey
FOUND DOCS: 10000/10000
GENERATING VIEW
VIEW BUILD DURATION: 1.495 seconds
MIN DURATION: 1.471
AVG DURATION: 1.5111176470588235
MAX DURATION: 1.548
CURRENT TEST DURATION: 1.495
Finished processing view: base\_spidermonkey
Please!
Fork this repo, add a ddoc for your view engine to the ddocs var, and update the config values in the README for your particular engine. Ideally each additional view engine should be properly namespaced so that all view engines can be easily tested against. For instance, different languages could be "javascript," "javascri_node.js," "javascript_v8_experiments," "some_other_view_engine."
Apache License Version 2.0