While both CouchDB and RethinkDB store JSON, the differences between them are more radical. I cannot post an as-extensive comparison as the one with MongoDB, but here are some aspects.
Please keep in mind that this is not an authoritative comparison and it may contain mistakes. Plus as for many such systems, the aspects covered are in reality not that easy to be described in just a few words.
Platforms:
- RethinkDB: Linux, OS X
- CouchDB: where Erlang VM is supported
Data model:
- both JSON
Data access:
- RethinkDB: Unified chainable dynamic query language
- CouchDB: key-value, incremental map/reduce
Javascript integration:
- RethinkDB: V8 engine; JS expressions are allowed pretty much anywhere in the RQL
- CouchDB: Spindermonkey (?); incremental map/reduce, views are JS-based
Yeah, I thought about that, but it seems like you can only use them to get the "map" part of map/reduce... no aggregation. Unless I'm missing something.
> Yeah, I thought about that, but it seems like you can only use them to get the "map" part of map/reduce... no aggregation. Unless I'm missing something.
Yes. RethinkDB is really well set up to do this due to the underlying parallelized map/reduce infrastructure. This feature is a matter of scheduling priorities. I don't have an ETA yet, but it will almost certainly get done in the medium-term.
Please keep in mind that this is not an authoritative comparison and it may contain mistakes. Plus as for many such systems, the aspects covered are in reality not that easy to be described in just a few words.
Platforms:
- RethinkDB: Linux, OS X
- CouchDB: where Erlang VM is supported
Data model: - both JSON
Data access:
- RethinkDB: Unified chainable dynamic query language
- CouchDB: key-value, incremental map/reduce
Javascript integration:
- RethinkDB: V8 engine; JS expressions are allowed pretty much anywhere in the RQL
- CouchDB: Spindermonkey (?); incremental map/reduce, views are JS-based
Access languages:
- RethinkDB: Protocol Buffers
- CouchDB: HTTP
Indexing:
- RethinkDB: Multiple types of indexes (primary key, compound, secondary, arbitrarily computed)
- CouchDB: incremental indexes based on view functions
Sharding:
- RethinkDB: Guided range-based sharding (supervised/guided/advised/trained)
- CouchDB: -
Replication:
- RethinkDB - sync and async replication
- CouchDB - bi-directional replication can be set between multiple CouchDB servers
Multi-datancenter:
- RethinkDB - Multiple DC support with per-datacenter replication and write acknowledgements
- CouchDB - (?)
MapReduce:
- RethinkDB: Multiple MapReduce functions executing ReQL or Javascript operations
- CouchDB: views are map/reduce but they need to be pre-defined
Consistency model:
- RethinkDB: Immediate/strong consistency with support for out of date reads
- CouchDB: http://guide.couchdb.org/draft/consistency.html
Atomicity:
- both document level
Durability:
- both durable
Storage engine:
- RethinkDB: Log-structured B-tree serialization with incremental, fully concurrent garbage compactor
- CouchDB: B-tree
Query distribution engine:
- RethinkDB: Transparent routing, distributed and parallelized
- CouchDB: none
Caching engine:
- RethinkDB: Custom per-table configurable B-tree aware caching
- CouchDB: none (?)