CouchDB - The Hidden Gem of NoSQL Databases
Use Cases and Deployment Scope
We use CouchDB + Logstash + Elasticsearch to provide incredibly fast, powerful "search and do stuff" functionality for our customers. And they love it!
Pros
- Technically easy to use and integrate. REST API allows CouchDB to work with all technologies we use: node.js, lua, python, elasticsearch, logstash, etc. Our experience is that it is very robust and has been trouble-free to sue for over 5 years of heavy daily use.
- Using map/reduce allows us to quickly implement new views into our customer's data based on their needs. Easy to develop new features based on CouchDB's view/list/show mechanism. Functions are written in Javascript, which allows a broad range of our developer's to understand and contribute to code.
- NoSQL is wonderful for our data set. We support format-specific metadata for many thousands of different file types without the need to change schemas or anything else. We find that CouchDB allows us to focus more on our applications and customers and less on back-end design.
- Scales for us well. We have 100's millions of documents, many with binary attachments, stored in thousands of databases. Running on some fairly meager hardware distributed across multiple locations. There is not difference in performance today as when we had a few thousand documents when we started.
- Replication model is very nice and simple. And fast! We use it for obvious things like backups & redundancy. But we also use it for deploying software updates and for remote data colleciton from customer sites.
Cons
- CouchDB's documentation is a bit lacking. The technical bits are all there from Apache, but meaningful examples are hard to find. I would say the learning curve is a few months to get fluent. Not that CouchDB is too complex, but it has a design that takes some effort to understand and leverage. But for us the results have been more than worth it.
- CouchDB could use some better tools for managing & administrating itself. We have many thousands of CouchDB databases and had to invest a bit of development effort to be able to managing it all. But the REST API is simple, there are node.js modules like cradle, etc that minimze any challenges we have had.
- It is not widely used. Or if it is, not a lot of people are admitting to it! This may be a concern if you are looking for people that have CouchDB experience to work on your project.
Likelihood to Recommend
Do your homework and understand the nature of your data and how it needs to be stored, accessed, and moved around. Make sure that NoSQL fits your problem. If it does, look at CouchDB. It isn't the most popular NoSQL database, but we love it.
