類別 | 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 D Dart Delphi Erlang Go Groovy Haskell Java JavaScript Lisp Lua MatLab Perl PHP PowerShell Prolog Python R 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 數據庫的類型一覽表
數據庫類型 | 描述 | 主流產品 | 有誰在用 | 適用場景 | 不適用場景 |
---|---|---|---|---|---|
鍵值(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. 推薦引擎。如果我們將數據以圖的形式表現,那么將會非常有益于推薦的制定 |
不適合的數據模型。圖數據庫的適用范圍很小,因為很少有操作涉及到整個圖。 |
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com