This is a post in a series about the Apache CouchDB 3.0 release. Check out the other posts in this series.
In early 2019, the IBM/Cloudant team proposed a major change to CouchDB: replace the storage and clustering subsystems with FoundationDB.
The reasoning is straightforward: how much effort would it be to bring the existing underpinnings into the 2020s and beyond? Are there alternative options? Can we use something that exists already?
After about seven months of diligent research, design and planning, we concluded that it would not only be feasible, but also beneficial to CouchDB to make the move to FoundationDB.
We have a lot more to say about this in the future, but if you want to follow along at home, check out the RFCs where we discuss the various technical details.
One of the consequences for moving foundations (pun!), is that the new one is built on different tradeoffs than the old one, which has served us very well so far. This in turn leads to certain limits that we’ll have to impose on certain operations in CouchDB 4.0 and beyond.
Since it is beneficial to keep to those limits already in 3.0, and to make the transition to 4.0 easier in the future, we have introduced, or reduced limits to certain things in CouchDB in line with the limits we believe that CouchDB 4.0 will have.
If you need to go beyond those limits, they are configurable for all of CouchDB 3.x, but won’t be configurable at all in 4.x.
For now, the only limit we’ve added is max_document_size, it drops from 4GB, which was a theoretical limit to begin with, to 8MB, which is much more reasonable in terms of CouchDB performance.