NOSQL資料庫大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase

來源:互聯網
上載者:User

話說,儘管 SQL 資料庫一直是我們IT行業中最有用的工具,然而,它們這樣在行業中超過15年以上的“轉正”終於就要壽終正寢了。現在,雖然關係型資料庫仍然無所不在,但它越來越不能滿足我們的需要了。NoSQL成為了業界的新寵。

但是,各種 "NoSQL" 資料庫之間的差異比當年眾多關係型資料庫之間的差異要大許多。這就加大了人們在建設自己的應用是選擇合適的資料庫的難度。

在這篇匯總的PK中,我們對 Cassandra, Mongodb, CouchDB, Redis, Riak 和 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

適用: 累計 堆積計算, 偶爾改變資料, 預先定義的查詢. 非常注重版本控制的場合.

舉例: CRM, CMS系統. 主-主複製是其特別亮點,可以易於多個網站部署。

教程:http://guide.couchdb.org/editions/1/en/index.html

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. 但是從2.0開始直接交換到磁碟
  • Master-slave replication 主-從複製
  • Simple keys and values, 簡單的key-value形式
  • but complex operations like ZREVRANGEBYSCORE 但是複雜操作類似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 (!) 在這些資料庫中,只有Redis有事務機制。
  • Values can be set to expire (as in a cache) 如同緩衝一樣,值能被設定為超過一定時間到期失效。
  • Sorted sets (high score table, good for range queries) 有排序的sets,善於range查詢。
  • Pub/Sub and WATCH on data changes (!) 採取Pub/Sub 和觀察者WATCH事件觸發資料變化。

適用: 在可以控制的資料庫大小情況下(放得下整個記憶體),快速改變資料,快速寫資料。

舉例: 股票價格系統 分析,即時資料收集,聯絡等等。

MongoDB
  • Written in: C++
  • Main point: Retains some friendly properties of SQL. 保留類似SQL風格.(Query, index)
  • License: AGPL (Drivers: Apache)
  • Protocol: Custom, binary (BSON)
  • Master/slave replication 主從複製(分布式狀態叢集方式)
  • Queries are javascript expressions 查詢是javascript運算式
  • Run arbitrary javascript functions server-side
  • Better update-in-place than CouchDB  比CouchDB更好地就地更新
  • Sharding built-in 內建分區片段
  • Uses memory mapped files for data storage 使用記憶體對應檔案方式實現資料存放區
  • Performance over features
  • After crash, it needs to repair tables 當崩潰後,需要修複表。

適用: 需要動態查詢. 願意事先定義索引indexes, 不需要 map/reduce 功能. 你需要巨大的資料庫有良好效能,你需要CouchDB但是你資料變化改變很頻繁,需要頻繁寫。

舉例: 適合所有MySQL 或者 PostgreSQL場合,它也適合

Cassandra
  • Written in: Java
  • Main point: 大表模型BigTable 和 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
  • 部分複雜性可能由於Java自身原因(如配置configuration, seeing exceptions, etc)

適用: 當寫操作多於讀操作 (如日誌logging).

舉例: 銀行Banking, 金融系統,寫必須快雩都的場合,即時的資料分析等.

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 內建全文本搜尋
  • 在 Javascript 中Map/reduce 或 Erlang 支援
  • Comes in "open source" and "enterprise" editions 有兩個版本

適用: 如果你希望有類似Cassandra-like (Dynamo-like)風格, 但是你不想處理器複雜性和膨脹性。單伺服器有良好可伸縮性scalability, 可用性availability 和容錯性 fault-tolerance, 採取是昂貴的多網站複製multi-site replication.

舉例: 銷售點資料收集,工廠控制系統,那些不能允許幾秒當機的場合。

HBase

(With the help of ghshephard)

  • Written in: Java
  • Main point: 十億層級的行 X 百萬層級的列 大容量
  • License: Apache
  • Protocol: HTTP/REST (also Thrift)
  • Modeled after BigTable 大表模型
  • Map/reduce with Hadoop 內建Map/reduce
  • Query predicate push down via server side scan and get filters
  • Optimizations for real time queries 能夠即時獲得基於查詢的最佳化
  • A high performance Thrift gateway 高效能的Thrift型網關
  • 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 隨機訪問的效能類似MySQL

適用: 如果你喜歡大表模型BigTable. 你需要隨機 即時的讀寫操作

舉例: Facebook 訊息資料庫

當然,所有這些資料庫系統都有比列在這裡多得多的功能特性。我這裡僅僅依據我個人認識列出一些關鍵特性,並且這些項目的開發也很活躍,我將儘力保持更新。

-- Kristof

來源:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

項目名稱 語言 容錯性 持久性儲存介質 用戶端協議 資料模型 文檔 贊助商/社區
Project Voldemort Java 分區, 複製,
read-repair
Pluggable: BerkleyDB,
Mysql
Java API Structured /
blob / text
A Linkedin, no
Ringo Erlang 分區, 複製,
immutable
Custom on-disk
(append only log)
HTTP blob B 諾基亞, no
Scalaris Erlang 分區, 複製,
paxos
In-memory only Erlang, Java,
HTTP
blob B OnScale, no
Kai Erlang 分區, 複製? On-disk Dets file Memcached blob C no
Dynomite Erlang 分區, 複製 Pluggable: couch,
dets
Custom ascii,
Thrift
blob D+ Powerset, no
MemcacheDB C 複製 BerkleyDB Memcached blob B 新浪網, some
ThruDB C++ 複製 Pluggable: BerkleyDB,
Custom, Mysql, S3
Thrift Document
oriented
C+ Third rail, unsure
CouchDB Erlang 複製, 分區? Custom on-disk HTTP, json Document
oriented (json)
A Apache, yes
Cassandra Java 複製, 分區 Custom on-disk Thrift Bigtable meets
Dynamo
F Facebook, no
HBase Java 複製, 分區 Custom on-disk Custom API,
Thrift, Rest
Bigtable A Apache, yes
Hypertable C++ 複製, 分區 Custom on-disk
(HDFS, KFS)
Thrift, other Bigtable A Zvents, 百度, yes
Tokyo Tyrant C 複製 Tokyo Cabinet Memcached,
HTTP, other
blob A mixi.jp, no
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.