原文:
http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
While SQL databases are insanely useful tools, their tyranny of ~15 years is coming to an end. And it was just time: I can’t even count the things that were forced into relational databases, but never really fitted them.
But the differences between "NoSQL" databases are much bigger than it ever was between one SQL database and another. This means that it is a bigger responsibility on software architects to choose the appropriate one for a project right at the beginning.
In this light, here is a comparison of Cassandra, Mongodb, CouchDB, Redis, Riak and HBase:
Best used: For accumulating, occasionally changing data, on which pre-defined queries are to be run. Places where versioning is important.
For example: CRM, CMS systems. Master-master replication is an especially interesting feature, allowing easy multi-site deployments.
Best used: For rapidly changing data with a foreseeable database size (should fit mostly in memory).
For example: Stock prices. Analytics. Real-time data collection. Real-time communication.
Best used: If you need dynamic queries. If you prefer to define indexes, not map/reduce functions. If you need good performance on a big DB. If you wanted CouchDB, but your data changes too much, filling up disks.
For example: For all things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back.
Best used: When you write more than you read (logging). If every component of the system must be in Java. ("No one gets fired for choosing Apache’s stuff.")
For example: Banking, financial industry (though not necessarily for financial transactions, but these industries are much bigger than that.) Writes are faster than reads, so one natural niche is real time data analysis.
Best used: If you want something Cassandra-like (Dynamo-like), but no way you’re gonna deal with the bloat and complexity. If you need very good single-site scalability, availability and fault-tolerance, but you’re ready to pay for multi-site replication.
For example: Point-of-sales data collection. Factory control systems. Places where even seconds of downtime hurt.
(With the help of ghshephard)
Best used: If you’re in love with BigTable. And when you need random, realtime read/write access to your Big Data.
For example: Facebook Messaging Database (more general example coming soon)
Of course, all systems have much more features than what’s listed here. I only wanted to list the key points that I base my decisions on. Also, development of all are very fast, so things are bound to change. I’ll do my best to keep this list updated.
– Kristof
CouchDB
语言 Erlang
特征 数据库一致性,易于使用
适合 积累性的、较少改变的数据。或者是需要文档的多版本支持(?这句话翻译不好 Places where versioning is important)
场合 CRM CMS
Redis
语言 c/c++
特征 非常快
适合 总数据集快速变化且总量可预测
场合 股票价格、实时分析、实时数据收集、实时通信
MongoDB
语言 c++
特征 与sql风格类似(查询/索引)
适合 动态查询; 索引比map/reduce方式更合适时; 需要CouchDB但数据变动更多时
场合 任何用Mysql/PostgreSQL,但是无法忍受预先定义好所有列的时候
Cassandra
语言 java
适合 写入比查询多
略 (我个人也觉得不靠谱)
Riak
语言 c++/erlang javascript
据说有开源版和企业版
特征 容错
适合 需要Cassandra式的扩展性,但是不想惹麻烦
场合 销售数据收集 … 反正坏一秒就很麻烦的场合
hbase
语言 java
类似 bigtable
适用 随机读取