This is a post in a series about the Apache CouchDB 3.0 release. Check out the other posts in this series.
Hand in hand with smarter compaction and view indexing, 3.0 introduces the third major Cloudant contribution: A brand new I/O Queue.
CouchDB 1.x did not have a way to manage disk I/O in any way. All requests external and internal (like view indexing or compaction) were treated equally. This meant that while running compaction, for example, all other requests to the database were impacted.
CouchDB 2.x introduced a basic I/O Queue that differentiated between interactive requests and background tasks, and made sure that background tasks did not take away any performance from interactive requests. That is, your application would receive full performance whenever it needed it, and CouchDB would do maintenance when there were spare CPU cycles.
However, this paints a very simple picture, and with the I/O Queue system being very basic, many caveats applied.
CouchDB 3.0 introduces a more sophisticated I/O Queue system that lets you control all types of requests and tasks into queues with different performance characteristics.