Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
None
Description
Right now we use a single couch_file server for both updating a database and reading from a database.
This is a contention point, as concurrent read/write access to a database implies having processes waiting for access to the couch_file server.
The following patches add a couch_file server that is used only by the DB updater process and another couch_file meant to be used by anyone else only for read operations:
https://github.com/fdmanana/couchdb/compare/updater_dedicated_fd
Some performance measurements:
- updater_fd vs trunk (small docs, 1Kb each)
$ node tests/compare_write_and_read.js --wclients 50 --rclients 200 \
-name1 updater_fd_small_docs -name2 trunk \
-url1 http://localhost:5984/ -url2 http://localhost:5985/ \
--duration 300
http://graphs.mikeal.couchone.com/#/graph/5c859b3e7d1b9bd0488cfe271104a616
- updater_fd vs trunk (large docs, 100Kb each)
$ node tests/compare_write_and_read.js --wclients 50 --rclients 200 \
-name1 updater_fd_large_docs -name2 trunk \
-url1 http://localhost:5984/ -url2 http://localhost:5985/ \
--duration 300 --doc large
http://graphs.mikeal.couchone.com/#/graph/5c859b3e7d1b9bd0488cfe271104a7a7
We can see that both the response time and throughput gets significantly better for both read and writes.
If no objections I'll commit it to trunk.