1. 程式人生 > >HBase、MongoDB、MySQL、Oracle、Redis--nosql資料庫與關係資料庫對比

HBase、MongoDB、MySQL、Oracle、Redis--nosql資料庫與關係資料庫對比

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. 推薦引擎。如果我們將資料以圖的形式表現,那麼將會非常有益於推薦的制定
不適合的資料模型。圖資料庫的適用範圍很小,因為很少有操作涉及到整個圖。