* The community is great.
* Documentation is amazing, and up to date.
* Examples actually work.
* Installation is simple. Runs on multiple platforms.
* Clustering is easy. Sharding is easy. Management is easy.
* Built for today's needs, not for what we were doing 30 years ago.
If you haven't yet taken a look at RethinkDB, do yourself a favor and spend a couple hours dinking around with it. You may just be impressed.
* [0] http://rethinkdb.com/
Oh yeah, and something that is a cross between SPARQL and SQL 1999.
couchdb seems to fit this requirement really well. You explicitly create indexes on the fields that you want to query. The index creation part is slow but once it's done your queries are really fast. All data is compressed with snappy[1].
couchdb also encourages you to split your data across multiple databases. Effectively you can have thousands of databases all managed by a single couchdb server instance. You can move your data in temporary databases and "purge" them when they are no longer required. It's all really cool once you get a hang of how to use this feature. Although if you query across databases you'll have to "join" the result set within your application.
You should give it a try, you'll really like it :)
The query results are retuned with Etags that you can cache like you do any http resource.
http://stackoverflow.com/questions/4952429/couchdb-supports-...
The _revs themselves follow a pattern that is semi-human readable.Like so:-
`1-some_uuid,2-some_uuid,3-some_uuid` and so on.
The versioning functionality is not comprehensive but you certainly have the building blocks.
Web socket is not supported out of the box yet but you can always put couchdb in front of a proxy and send the changes feed over the socket connection once it's established.