原文地址:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison
Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison
While SQL databases are insanely useful tools, their monopoly 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 oneSQL database and another. This means that it is a bigger responsibility onsoftware architectsto
choose the appropriate one for a project right at the beginning.
In this light, here is a comparison ofCassandra,Mongodb,CouchDB,Redis,Riak,Membase,Neo4j
andHBase:
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. (Going away after 2.4!)
- Master-slave replication
- Simple values or hash tables by keys,
- 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)
- Sorted sets (high score table, good for range queries)
- Redis has transactions (!)
- Values can be set to expire (as in a cache)
- Pub/Sub lets one implement messaging (!)
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 (auto failover with replica sets)
- Sharding built-in
- Queries are javascript expressions
- Run arbitrary javascript functions server-side
- Better update-in-place than CouchDB
- Uses memory mapped files for data storage
- Performance over features
- Journaling (with --journal) is best turned on
- On 32bit systems, limited to ~2.5Gb
- An empty database takes up 192Mb
- GridFS to store big data + metadata (not actually an FS)
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 most things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back.
Riak
-
Written in: Erlang & C, some Javascript
-
Main point: Fault tolerance
-
License: Apache
-
Protocol: HTTP/REST or custom binary
- Tunable trade-offs for distribution and replication (N,R,W)
- Pre- and post-commit hooks in JavaScript or Erlang, for validation and security.
- Map/reduce in JavaScript or Erlang
- Links & link walking: use it as a graph database
- Indices: put metadata in, search it (coming in 1.0)
- Large object support (Luwak)
- Comes in "open source" and "enterprise" editions
- Full-text search, indexing, querying with Riak Search server (beta)
- Masterless multi-site replication replication and SNMP monitoring are commercially licensed
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. Could be used as a well-update-able web server.
Membase
-
Written in: Erlang & C
-
Main point: Memcache compatible, but with persistence and clustering
-
License: Apache 2.0
-
Protocol: memcached plus extensions
- Very fast (200k+/sec) access of data by key
- Persistence to disk
- All nodes are identical (master-master replication)
- Provides memcached-style in-memory caching buckets, too
- Write de-duplication to reduce IO
- Very nice cluster-management web GUI
- Software upgrades without taking the DB offline
- Connection proxy for connection pooling and multiplexing (Moxi)
Best used:Any application where low-latency data access, high concurrency support and high availability is a requirement.
For example:Low-latency use-cases like ad targeting or highly-concurrent web apps like online gaming (e.g. Zynga).
Neo4j
-
Written in: Java
-
Main point: Graph database - relationships
-
License: GPL, some features AGPL/commercial
-
Protocol: HTTP/REST (or embedding in Java)
- Standalone, or embeddable into Java applications
- Both vertices and edges can have metadata
- Nice self-contained web admin
- Advanced path-finding with multiple algorithms
- Indexing of keys and relationships
- Optimized for reads
- Has transactions (in the Java API)
- "Gremlin" graph traversal language
- Scriptable in Groovy
- Online backup, advanced monitoring and High Availability is AGPL/commercial licensed
Best used:For graph-style data. Neo4j is quite different from the others in this sense.
For example:Social relations, public transport links, road maps, network topologies.
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.
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.
分享到:
相关推荐
官方给出的三种NoSQL数据库:SequoiaDB&Cassandra&MongoDB性能对比测试报告;值得参考;
针对这种情况,这里对 Cassandra、 Mongodb、CouchDB、Redis、 Riak、 Membase、Neo4j和HBase进行了比较: (编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的...
NULL 博文链接:https://13146489.iteye.com/blog/1123018
非关系数据库(经常被称为NoSQL)的特点是弹性和可伸缩性。另外,它们可以存储大数据并与云计算系统协同工作。这些因素导致非关系数据库非常流行。在2013年,NoSQL数据库的种类达到了150多个,并且一直在增长,多种...
云计算 ISAS PAAS SAAS 云计算好比大货轮,docker就是集装箱 Git docker: 鲸鱼背上的集装箱,彼此之间互相不影响,各自运行在各自的...Cassandra、 Mongodb、 CouchDB、 Redis、 Riak、 Membase、 Neo4j、 HBase redis
Cassandra与HBase系统架构比对
近期, 知名独立基准测评机构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进行基本操作,例如扫描,项目和文件管理器。
键值数据库:Redis、Memcached、Riak 文档数据库:Mongodb、CouchDB 列族数据库:Cassandra、Hbase 图数据库:Neo4j ■不课程内容简介: ■数据库基本概念 ■关系代数 ■SQL命令 ■关系数据理论 ■数据库...
其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常...
一个封装了 hbase、cassandra 和 mongodb 的 java 地图实现。 允许人们通过本机地图界面在这些 NoSQL 数据库中缓存对象。 它使 NoSQL 数据库的迁移变得容易。 这个想法也是为了让 Hazelcast 赚钱。 先决条件 您需要...
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 ...
图数据库的应用场景 键值型,如 Redis 或 Riak 列型,如 HBase 或 Cassandra 文档型,如 MongoDB 或 CouchDB 图型,如 Neo4j 或 GraphDB 图数据库怎么样?图数据库的应用场景全文共28页,当前为第3页。 这些数据库各...
TutorialsPoint SpringJDBC JSoup CouchDB Cassandra JSF Kotlin 教程
SpringBoot2.0 + NoSQL使用教程,项目名称:“ SpringBoot2NoSQL” 项目介绍 一站式SpringBoot for ...重点介绍Redis,MongoDB,ElasticSeach,Cassandra模型数据库,因为它们是各自领域的领先者(分别是KV缓存,文