HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流開源 NoSQL 資料庫的 PK 兩大主流傳統 SQL 資料庫,nosqlredismongodb

來源:互聯網
上載者:User

HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流開源 NoSQL 資料庫的 PK 兩大主流傳統 SQL 資料庫,nosqlredismongodb

HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流開源 NoSQL 資料庫的 PK 兩大主流傳統 SQL 資料庫
類別 HBase MongoDB MySQL Oracle Redis
描述 基於 Apache Hadoop 並提供 BigTable 能力的列儲存 最受歡迎的文檔儲存資料庫之一 廣泛使用的開源 RDBMS 廣泛使用的 RDBMS 記憶體中的資料結構儲存,被用作資料庫,緩衝以及訊息中介軟體
普及度等級(參考下文的趨勢圖) 15 級(59.03 分) 4 級(300.57 分) 2 級(1277.75 分) 1 級(1463.37 分) 10 級(100.65 分)
資料庫模型 列儲存 文檔儲存 關聯式資料庫系統 關聯式資料庫系統 鍵-值儲存
官網 hbase.apache.org www.mongodb.org www.mysql.com www.oracle.com/-us/-products/-database redis.io
技術文檔 hbase.apache.org docs.mongodb.org/-manual dev.mysql.com/-doc www.oracle.com/-technetwork/-indexes/-documentation/-index.html redis.io/-documentation
開發人員 Apache 軟體基金會 MongoDB 公司 Oracle Oracle Salvatore Sanfilippo(Redis 之父)
首次發行 2008 2009 1995 1980 2009
目前的版本 1.1.0.1,2015 年 5 月 3.0.5,2015 年 7 月 5.6.26,2015 年 7 月 12 Release 1 (12.1.0.2),2014 年 7 月 3.0.3,2015 年 6 月
許可 開源 開源 開源 商業 開源
是否資料庫即服務(DBaaS)
實現語言 Java C++ C 和 C++ C 和 C++ C
伺服器作業系統 Linux
Unix
Windows
Linux
OS X
Solaris
Windows
FreeBSD
Linux
OS X
Solaris
Windows
AIX
HP-UX
Linux
OS X
Solaris
Windows
z/OS
BSD
Linux
OS X
Windows
是否結構化資料 自由 自由 自由
是否預定義資料類型 部分
是否支援 XML  
是否支援二級索引
是否支援 SQL
API 以及其他訪問方式 Java API
RESTful HTTP API
Thrift
使用 JSON 的專用協議 ADO.NET
JDBC
ODBC
ODP.NET
Oracle Call Interface (OCI)
JDBC
ODBC
專用協議
支援的程式設計語言 C
C#
C++
Groovy
Java
PHP
Python
Scala
Actionscript 
C
C#
C++
Clojure 
ColdFusion 

Dart 
Delphi 
Erlang
Go 
Groovy 
Haskell
Java
JavaScript
Lisp 
Lua 
MatLab 
Perl
PHP
PowerShell 
Prolog 
Python

Ruby
Scala
Smalltalk
Ada
C
C#
C++
D
Eiffel
Erlang
Haskell
Java
Objective-C
OCaml
Perl
PHP
Python
Ruby
Scheme
Tcl
C
C#
C++
Clojure
Cobol
Eiffel
Erlang
Fortran
Groovy
Haskell
Java
JavaScript
Lisp
Objective C
OCaml
Perl
PHP
Python
R
Ruby
Scala
Tcl
Visual Basic
C
C#
C++
Clojure
Crystal
D
Dart
Elixir
Erlang
Fancy
Go
Haskell
Haxe
Java
JavaScript (Node.js)
Lisp
Lua
MatLab
Objective-C
OCaml 
Perl
PHP
Prolog
Pure Data
Python
R
Rebol
Ruby
Rust
Scala
Scheme
Smalltalk
Tcl
是否支援服務端指令碼 JavaScript PL/SQL Lua
是否支援觸發器
切分方式 分區 分區 水平切分,使用 MySQL Cluster 或者 MySQL Cluster 進行分區 水平切分 分區
主從複製方式 多種主從複製機制 主-從複製 主-主複製
主-從複製
主-主複製
主-從複製
主-從複製
是否支援 MapReduce
分布式情境下資料一致性方法 立即一致 最終一致
立即一致
  立即一致 最終一致
是否支援外鍵
是否支援事務 ACID ACID 樂觀鎖機制,原子性執行的命令塊和指令碼
是否支援並發
是否支援持久化儲存
是否支援記憶體儲存  
存取控制 存取控制清單(ACL) 基於使用者和角色的存取權限 細粒度的使用者存取權限 根據 SQL 標準細粒度的存取權限 簡單的基於密碼的存取控制

附錄一:普及度等級趨勢圖


附錄二:兩張圖告訴你如何在 SQL、NewSQL、NoSQL 之間進行取捨

圖一:Do I Need SQL or Hadoop?



圖二:SQL vs. NewSQL vs. NoSQL



附錄三:Redis 之父 Salvatore Sanfilippo 訪談節選

  • Redis 是一個開源的、進階索引值資料庫和資料結構服務程式,其中鍵可以儲存字串、散列、列表、集合和有序集合。
  • Redis的核心是用標準ANSI C寫成的,基於一種事件模型。
  • 非阻塞複製是Redis的設計目標。
  • Redis中的複製是非同步。
  • 目前已經為許多語言(包括大部分常用語言)提供了Redis庫。
  • C client是唯一官方支援的封裝。
  • Redis Pub/Sub 對即時應用非常適合。
  • Redis使用者有的將它用作資料庫,有的用作訊息匯流排,也有的用來做cache。

附錄四:NoSQL 資料庫的類型一覽表

NoSQL 資料庫的類型一覽表
資料庫類型 描述 主流產品 有誰在用 適用情境 不適用情境
索引值(Key-Value)資料庫 索引值資料庫就像在傳統語言中使用的雜湊表。你可以通過key來添加、查詢或者刪除資料,鑒於使用主鍵訪問,所以會獲得不錯的效能及擴充性。 Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached) 儲存使用者資訊,比如會話、設定檔、參數、購物車等等。這些資訊一般都和ID(鍵)掛鈎,這種情景下索引值資料庫是個很好的選擇。 1. 取代通過鍵查詢,而是通過值來查詢。Key-Value資料庫中根本沒有通過值查詢的途徑。
2. 需要儲存資料之間的關係。在Key-Value資料庫中不能通過兩個或以上的鍵來關聯資料。
3. 事務的支援。在Key-Value資料庫中故障產生時不可以進行復原。
面向文檔(Document-Oriented)資料庫 面向文檔資料庫會將資料以文檔的形式儲存。每個文檔都是自包含的資料單元,是一系列資料項目的集合。每個資料項目都有一個名稱與對應的值,值既可以是簡單的資料類型,如字串、數字和日期等;也可以是複雜的類型,如有序列表和關聯對象。資料存放區的最小單位是文檔,同一個表中儲存的文件屬性可以是不同的,資料可以使用XML、JSON或者JSONB等多種形式儲存。 MongoDB、CouchDB、RavenDB SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB) 1. 日誌。企業環境下,每個應用程式都有不同的日誌資訊。Document-Oriented資料庫並沒有固定的模式,所以我們可以使用它儲存不同的資訊。
2. 分析。鑒於它的弱模式結構,不改變模式下就可以儲存不同的度量方法及添加新的度量。
在不同的文檔上添加事務。Document-Oriented資料庫並不支援文檔間的事務,如果對這方面有需求則不應該選用這個解決方案。
列儲存(Wide Column Store/Column-Family)資料庫 列儲存資料庫將資料儲存在列族(column family)中,一個列族儲存經常被一起查詢的相關資料。舉個例子,如果我們有一個Person類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。 Cassandra、HBase Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase) 1. 日誌。因為我們可以將資料儲存在不同的列中,每個應用程式可以將資訊寫入自己的列族中。
2. 部落格平台。我們儲存每個資訊到不同的列族中。舉個例子,標籤可以儲存在一個,類別可以在一個,而文章則在另一個。
1. 如果我們需要ACID事務。Vassandra就不支援事務。
2. 原型設計。如果我們分析Cassandra的資料結構,我們就會發現結構是基於我們期望的資料查詢方式而定。在模型設計之初,我們根本不可能去預測它的查詢方式,而一旦查詢方式改變,我們就必須重新設計列族。
圖(Graph-Oriented)資料庫 圖資料庫允許我們將資料以圖的方式儲存。實體會被作為頂點,而實體之間的關係則會被作為邊。比如我們有三個實體,Steve Jobs、Apple和Next,則會有兩個“Founded by”的邊將Apple和Next串連到Steve Jobs。 Neo4J、Infinite Graph、OrientDB Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J) 1. 在一些關係性強的資料中
2. Recommendation Engine。如果我們將資料以圖的形式表現,那麼將會非常有益於推薦的制定
不適合的資料模型。圖資料庫的適用範圍很小,因為很少有操作涉及到整個圖。

參考資料

  • HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis Popularity
  • 一網打盡當下NoSQL類型、適用情境及使用公司
  • Redis之父Salvatore Sanfilippo訪談
  • 一張圖告訴你是需要 SQL 還是 Hadoop


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

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.