類別 | HBase | MongoDB | MySQL | Oracle | Redis |
---|---|---|---|---|---|
描述 | 基于 Apache Hadoop 并提供 BigTable 能力的列存儲(chǔ) | 最受歡迎的文檔存儲(chǔ)數(shù)據(jù)庫之一 | 廣泛使用的開源 RDBMS | 廣泛使用的 RDBMS | 內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),被用作數(shù)據(jù)庫,緩存以及消息中間件 |
普及度等級(jí)(參考下文的趨勢(shì)圖) | 15 級(jí)(59.03 分) | 4 級(jí)(300.57 分) | 2 級(jí)(1277.75 分) | 1 級(jí)(1463.37 分) | 10 級(jí)(100.65 分) |
數(shù)據(jù)庫模型 | 列存儲(chǔ) | 文檔存儲(chǔ) | 關(guān)系數(shù)據(jù)庫系統(tǒng) | 關(guān)系數(shù)據(jù)庫系統(tǒng) | 鍵-值存儲(chǔ) |
官網(wǎng) | hbase.apache.org | www.mongodb.org | www.mysql.com | www.oracle.com/-us/-products/-database | redis.io |
技術(shù)文檔 | hbase.apache.org | docs.mongodb.org/-manual | dev.mysql.com/-doc | www.oracle.com/-technetwork/-indexes/-documentation/-index.html | redis.io/-documentation |
開發(fā)者 | Apache 軟件基金會(huì) | MongoDB 公司 | Oracle | Oracle | Salvatore Sanfilippo(Redis 之父) |
首次發(fā)行 | 2008 | 2009 | 1995 | 1980 | 2009 |
當(dāng)前版本 | 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 月 |
許可 | 開源 | 開源 | 開源 | 商業(yè) | 開源 |
是否數(shù)據(jù)庫即服務(wù)(DBaaS) | 否 | 否 | 否 | 否 | 否 |
實(shí)現(xiàn)語言 | Java | C++ | C 和 C++ | C 和 C++ | C |
服務(wù)器操作系統(tǒng) | 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 |
是否結(jié)構(gòu)化數(shù)據(jù) | 自由 | 自由 | 是 | 是 | 自由 |
是否預(yù)定義數(shù)據(jù)類型 | 否 | 是 | 是 | 是 | 部分 |
是否支持 XML | 否 | 是 | 是 | 否 | |
是否支持二級(jí)索引 | 否 | 是 | 是 | 是 | 否 |
是否支持 SQL | 否 | 否 | 是 | 是 | 否 |
API 以及其他訪問方式 | Java API RESTful HTTP API Thrift |
使用 JSON 的專用協(xié)議 | ADO.NET JDBC ODBC |
ODP.NET Oracle Call Interface (OCI) JDBC ODBC |
專用協(xié)議 |
支持的編程語言 | 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 |
是否支持服務(wù)端腳本 | 是 | JavaScript | 是 | PL/SQL | Lua |
是否支持觸發(fā)器 | 是 | 否 | 是 | 是 | 否 |
切分方式 | 分片 | 分片 | 水平切分,使用 MySQL Cluster 或者 MySQL Cluster 進(jìn)行分片 | 水平切分 | 分片 |
主從復(fù)制方式 | 多種主從復(fù)制機(jī)制 | 主-從復(fù)制 | 主-主復(fù)制 主-從復(fù)制 |
主-主復(fù)制 主-從復(fù)制 |
主-從復(fù)制 |
是否支持 MapReduce | 是 | 是 | 否 | 否 | 否 |
分布式場景下數(shù)據(jù)一致性方法 | 立即一致 | 最終一致 立即一致 |
立即一致 | 最終一致 | |
是否支持外鍵 | 否 | 否 | 是 | 是 | 否 |
是否支持事務(wù) | 否 | 否 | ACID | ACID | 樂觀鎖機(jī)制,原子性執(zhí)行的命令塊和腳本 |
是否支持并發(fā) | 是 | 是 | 是 | 是 | 是 |
是否支持持久化存儲(chǔ) | 是 | 是 | 是 | 是 | 是 |
是否支持內(nèi)存存儲(chǔ) | 否 | 是 | 是 | 是 | |
訪問控制 | 訪問控制列表(ACL) | 基于用戶和角色的訪問權(quán)限 | 細(xì)粒度的用戶訪問權(quán)限 | 根據(jù) SQL 標(biāo)準(zhǔn)細(xì)粒度的訪問權(quán)限 | 簡單的基于密碼的訪問控制 |
附錄一:普及度等級(jí)趨勢(shì)圖
附錄二:兩張圖告訴你如何在 SQL、NewSQL、NoSQL 之間進(jìn)行取舍
圖一:Do I Need SQL or Hadoop?
圖二:SQL vs. NewSQL vs. NoSQL
附錄三:Redis 之父 Salvatore Sanfilippo 訪談節(jié)選
Redis 是一個(gè)開源的、高級(jí)鍵值數(shù)據(jù)庫和數(shù)據(jù)結(jié)構(gòu)服務(wù)程序,其中鍵可以保存字符串、散列、列表、集合和有序集合。Redis 的內(nèi)核是用標(biāo)準(zhǔn) ANSI C 寫成的,基于一種事件模型。非阻塞復(fù)制是 Redis 的設(shè)計(jì)目標(biāo)。Redis 中的復(fù)制是異步的。目前已經(jīng)為許多語言(包括大部分常用語言)提供了 Redis 庫。C client 是唯一官方支持的包裝。Redis Pub/Sub 對(duì)實(shí)時(shí)應(yīng)用非常適合。Redis 用戶有的將它用作數(shù)據(jù)庫,有的用作消息總線,也有的用來做 cache。附錄四:NoSQL 數(shù)據(jù)庫的類型一覽表
數(shù)據(jù)庫類型 | 描述 | 主流產(chǎn)品 | 有誰在用 | 適用場景 | 不適用場景 |
---|---|---|---|---|---|
鍵值(Key-Value)數(shù)據(jù)庫 | 鍵值數(shù)據(jù)庫就像在傳統(tǒng)語言中使用的哈希表。你可以通過 key 來添加、查詢或者刪除數(shù)據(jù),鑒于使用主鍵訪問,所以會(huì)獲得不錯(cuò)的性能及擴(kuò)展性。 | Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort | GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached) | 儲(chǔ)存用戶信息,比如會(huì)話、配置文件、參數(shù)、購物車等等。這些信息一般都和 ID(鍵)掛鉤,這種情景下鍵值數(shù)據(jù)庫是個(gè)很好的選擇。 | 1. 取代通過鍵查詢,而是通過值來查詢。Key-Value 數(shù)據(jù)庫中根本沒有通過值查詢的途徑。 2. 需要儲(chǔ)存數(shù)據(jù)之間的關(guān)系。在 Key-Value 數(shù)據(jù)庫中不能通過兩個(gè)或以上的鍵來關(guān)聯(lián)數(shù)據(jù)。 3. 事務(wù)的支持。在 Key-Value 數(shù)據(jù)庫中故障產(chǎn)生時(shí)不可以進(jìn)行回滾。 |
面向文檔(Document-Oriented)數(shù)據(jù)庫 | 面向文檔數(shù)據(jù)庫會(huì)將數(shù)據(jù)以文檔的形式儲(chǔ)存。每個(gè)文檔都是自包含的數(shù)據(jù)單元,是一系列數(shù)據(jù)項(xiàng)的集合。每個(gè)數(shù)據(jù)項(xiàng)都有一個(gè)名稱與對(duì)應(yīng)的值,值既可以是簡單的數(shù)據(jù)類型,如字符串、數(shù)字和日期等;也可以是復(fù)雜的類型,如有序列表和關(guān)聯(lián)對(duì)象。數(shù)據(jù)存儲(chǔ)的最小單位是文檔,同一個(gè)表中存儲(chǔ)的文檔屬性可以是不同的,數(shù)據(jù)可以使用 XML、JSON 或者 JSONB 等多種形式存儲(chǔ)。 | MongoDB、CouchDB、RavenDB | SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB) | 1. 日志。企業(yè)環(huán)境下,每個(gè)應(yīng)用程序都有不同的日志信息。Document-Oriented 數(shù)據(jù)庫并沒有固定的模式,所以我們可以使用它儲(chǔ)存不同的信息。 2. 分析。鑒于它的弱模式結(jié)構(gòu),不改變模式下就可以儲(chǔ)存不同的度量方法及添加新的度量。 |
在不同的文檔上添加事務(wù)。Document-Oriented 數(shù)據(jù)庫并不支持文檔間的事務(wù),如果對(duì)這方面有需求則不應(yīng)該選用這個(gè)解決方案。 |
列存儲(chǔ)(Wide Column Store/Column-Family)數(shù)據(jù)庫 | 列存儲(chǔ)數(shù)據(jù)庫將數(shù)據(jù)儲(chǔ)存在列族(column family)中,一個(gè)列族存儲(chǔ)經(jīng)常被一起查詢的相關(guān)數(shù)據(jù)。舉個(gè)例子,如果我們有一個(gè) Person 類,我們通常會(huì)一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會(huì)被放入一個(gè)列族中,而薪資則在另一個(gè)列族中。 | Cassandra、HBase | Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase) | 1. 日志。因?yàn)槲覀兛梢詫?shù)據(jù)儲(chǔ)存在不同的列中,每個(gè)應(yīng)用程序可以將信息寫入自己的列族中。 2. 博客平臺(tái)。我們儲(chǔ)存每個(gè)信息到不同的列族中。舉個(gè)例子,標(biāo)簽可以儲(chǔ)存在一個(gè),類別可以在一個(gè),而文章則在另一個(gè)。 |
1. 如果我們需要 ACID 事務(wù)。Vassandra 就不支持事務(wù)。 2. 原型設(shè)計(jì)。如果我們分析Cassandra 的數(shù)據(jù)結(jié)構(gòu),我們就會(huì)發(fā)現(xiàn)結(jié)構(gòu)是基于我們期望的數(shù)據(jù)查詢方式而定。在模型設(shè)計(jì)之初,我們根本不可能去預(yù)測它的查詢方式,而一旦查詢方式改變,我們就必須重新設(shè)計(jì)列族。 |
圖(Graph-Oriented)數(shù)據(jù)庫 | 圖數(shù)據(jù)庫允許我們將數(shù)據(jù)以圖的方式儲(chǔ)存。實(shí)體會(huì)被作為頂點(diǎn),而實(shí)體之間的關(guān)系則會(huì)被作為邊。比如我們有三個(gè)實(shí)體,Steve Jobs、Apple 和 Next,則會(huì)有兩個(gè)“Founded by”的邊將 Apple 和 Next 連接到 Steve Jobs。 | Neo4J、Infinite Graph、OrientDB | Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J) | 1. 在一些關(guān)系性強(qiáng)的數(shù)據(jù)中 2. 推薦引擎。如果我們將數(shù)據(jù)以圖的形式表現(xiàn),那么將會(huì)非常有益于推薦的制定 |
不適合的數(shù)據(jù)模型。圖數(shù)據(jù)庫的適用范圍很小,因?yàn)楹苌儆胁僮魃婕暗秸麄€(gè)圖。 |
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com