The Road to CouchDB 3.0: Smarter Smarter I/O Queue

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.

See the documentation for all details.

The Road to CouchDB 3.0: Smarter Compaction Daemon

This is a post in a series about the Apache CouchDB 3.0 release. Check out the other posts in this series.

Much like automatic view index building, database compaction is a maintenance task that needs to run periodically. Unlike automatic view index building, CouchDB has included a Compaction Daemon since 1.x, which saw significant improvements in 2.x.

For 3.x, we are taking this to a whole new level.

The 1.x/2.x compaction daemon works in the most primitive way:

for each database/shard:

  start compaction

  for each design document in database:

    start compaction

That is it. There are some configuration options about when compactions can run, but with the introduction of ioq in 2.x. those have mostly been obsolete.

In CouchDB 3.0, we are introducing Smoosh, again a contribution from Cloudant.

Smoosh lets you define channels for different operations in CouchDB, some databases and view indexes might need compaction more eagerly than others, and you can now configure this every which way you’d need to slice it.

This ensures that your operational CouchDB experience should be a lot smoother.
See the documentation for all available options.