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
:
CouchDB
-
Written in:
Erlang
-
Main point:
DB consistency, ease of use
-
License:
Apache
-
Protocol:
HTTP/REST
- Bi-directional (!) replication,
- continuous or ad-hoc,
- with conflict detection,
- thus, master-master replication. (!)
- MVCC - write operations do not block reads
- Previous versions of documents are available
- Crash-only (reliable) design
- Needs compacting from time to time
- Views: embedded map/reduce
- Formatting views: lists & shows
- Server-side document validation possible
- Authentication possible
- Real-time updates via _changes (!)
- Attachment handling
- thus, CouchApps
(standalone js apps)
- jQuery library included
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.
Redis
-
Written in:
C/C++
-
Main point:
Blazing fast
-
License:
BSD
-
Protocol:
Telnet-like
- Disk-backed in-memory database,
- but since 2.0, it can swap to disk.
- Master-slave replication
- Simple keys and values,
- but complex operations
like ZREVRANGEBYSCORE
- INCR & co (good for rate limiting or statistics)
- Has sets (also union/diff/inter)
- Has lists (also a queue; blocking pop)
- Has hashes (objects of multiple fields)
- Of all these databases, only Redis does transactions (!)
- Values can be set to expire (as in a cache)
- Sorted sets (high score table, good for range queries)
- Pub/Sub and WATCH on data changes (!)
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.
MongoDB
-
Written in:
C++
-
Main point:
Retains some friendly properties of SQL. (Query, index)
-
License:
AGPL (Drivers: Apache)
-
Protocol:
Custom, binary (BSON)
- Master/slave replication
- Queries are javascript expressions
- Run arbitrary javascript functions server-side
- Better update-in-place than CouchDB
- Sharding built-in
- Uses memory mapped files for data storage
- Performance over features
- After crash, it needs to repair tables
- Better durablity coming in V1.8
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.
Cassandra
-
Written in:
Java
-
Main point:
Best of BigTable and Dynamo
-
License:
Apache
-
Protocol:
Custom, binary (Thrift)
- Tunable trade-offs for distribution and replication (N, R, W)
- Querying by column, range of keys
- BigTable-like features: columns, column families
- Writes are much faster than reads (!)
- Map/reduce possible with Apache Hadoop
- I admit being a bit biased against it, because of the bloat
and complexity it has partly because of Java (configuration, seeing
exceptions, etc)
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.
Riak
-
Written in:
Erlang & C, some Javascript
-
Main point:
Fault tolerance
-
License:
Apache
-
Protocol:
HTTP/REST
- Tunable trade-offs for distribution and replication (N, R, W)
- Pre- and post-commit hooks,
- for validation and security.
- Built-in full-text search
- Map/reduce in javascript or Erlang
- Comes in "open source" and "enterprise" editions
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.
HBase
(With the help of ghshephard)
-
Written in:
Java
-
Main point:
Billions of rows X millions of columns
-
License:
Apache
-
Protocol:
HTTP/REST (also Thrift)
- Modeled after BigTable
- Map/reduce with Hadoop
- Query predicate push down via server side scan and get filters
- Optimizations for real time queries
- A high performance Thrift gateway
- HTTP supports XML, Protobuf, and binary
- Cascading, hive, and pig source and sink modules
- Jruby-based (JIRB) shell
- No single point of failure
- Rolling restart for configuration changes and minor upgrades
- Random access performance is like MySQL
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.
原文地址:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
分享到:
相关推荐
官方给出的三种NoSQL数据库:SequoiaDB&Cassandra&MongoDB性能对比测试报告;值得参考;
NULL 博文链接:https://13146489.iteye.com/blog/1123018
非关系数据库(经常被称为NoSQL)的特点是弹性和可伸缩性。另外,它们可以存储大数据并与云计算系统协同工作。这些因素导致非关系数据库非常流行。在2013年,NoSQL数据库的种类达到了150多个,并且一直在增长,多种...
Cassandra与HBase系统架构比对
针对这种情况,这里对 Cassandra、 Mongodb、CouchDB、Redis、 Riak、 Membase、Neo4j和HBase进行了比较: (编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的...
近期, 知名独立基准测评机构bankmark,针对SequoiaDB、MongoDB以及Cassandra三款NoSQL数据库产品做了性能对比测试。在所有的测试中,三款产品的表现各有千秋。 报道详情:http://code.csdn.net/news/2823026
各种流行的分布式应用技术资料合集(涵盖Hadoop Cassandra HBase NoSQL)
benchmark_hbase_cassandra 使用 YCSB 对 HBase 和 Cassandra 进行基准测试的脚本。 数据库 - HBase 和 Cassandra benchmark_report.pdf 该文件包含使用 YCSB 的 HBase 和 Cassandra 基准测试结果的报告和观察结果。...
nosqlJavaLib NoSQL Java库,用于使用同一接口对Cassandra和MongoDB进行基本操作,例如扫描,项目和文件管理器。
其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常...
一个封装了 hbase、cassandra 和 mongodb 的 java 地图实现。 允许人们通过本机地图界面在这些 NoSQL 数据库中缓存对象。 它使 NoSQL 数据库的迁移变得容易。 这个想法也是为了让 Hazelcast 赚钱。 先决条件 您需要...
云计算 ISAS PAAS SAAS 云计算好比大货轮,docker就是集装箱 Git docker: 鲸鱼背上的集装箱,彼此之间互相不影响,各自运行在各自的...Cassandra、 Mongodb、 CouchDB、 Redis、 Riak、 Membase、 Neo4j、 HBase redis
Cassandra与HBase系统架构比对.zip
The HBase design patterns apply equally well to Cassandra, MongoDB, and so on. In Detail With the increasing use of NoSQL in general and HBase in particular, knowing how to build practical ...
TutorialsPoint SpringJDBC JSoup CouchDB Cassandra JSF Kotlin 教程
Yahoo 专门用于主流的 nosql 性能测试,java 编写,内集成 hbase,mongodb,cassandra,voldemort,redis。使用时注意需要将相应的数据库驱动复制到对应的数据库 lib 下面。
Cloud Serving Benchmark”,是雅虎开发的用来对云服务进行基础测试的工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。在运行YCSB的时候,可以配置不同的workload和DB,也可以...
可视化MongoDB数据库管理工具,NoSQL Manager for MongoDB,破解版,解压就可以用。