from: http://blog.csdn.net/defonds/article/details/48471087
HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis铣口,三大主流開源 NoSQL 數(shù)據(jù)庫的 PK 兩大主流傳統(tǒng) SQL 數(shù)據(jù)庫
附錄一:普及度等級趨勢圖
附錄二:兩張圖告訴你如何在 SQL运怖、NewSQL卖子、NoSQL 之間進(jìn)行取舍
圖一:Do I Need SQL or Hadoop?
圖二:SQL vs. NewSQL vs. NoSQL
附錄三:Redis 之父 Salvatore Sanfilippo 訪談節(jié)選
Redis 是一個開源的抬虽、高級鍵值數(shù)據(jù)庫和數(shù)據(jù)結(jié)構(gòu)服務(wù)程序官觅,其中鍵可以保存字符串、散列阐污、列表休涤、集合和有序集合。
Redis 的內(nèi)核是用標(biāo)準(zhǔn) ANSI C 寫成的笛辟,基于一種事件模型功氨。
非阻塞復(fù)制是 Redis 的設(shè)計目標(biāo)。
Redis 中的復(fù)制是異步的手幢。
目前已經(jīng)為許多語言(包括大部分常用語言)提供了 Redis 庫捷凄。
C client 是唯一官方支持的包裝。
Redis Pub/Sub 對實時應(yīng)用非常適合围来。
Redis 用戶有的將它用作數(shù)據(jù)庫跺涤,有的用作消息總線匈睁,也有的用來做 cache。
附錄四:NoSQL 數(shù)據(jù)庫的類型一覽表
NoSQL 數(shù)據(jù)庫的類型一覽表
數(shù)據(jù)庫類型
描述
主流產(chǎn)品
有誰在用
適用場景
不適用場景
鍵值(Key-Value)數(shù)據(jù)庫
鍵值數(shù)據(jù)庫就像在傳統(tǒng)語言中使用的哈希表桶错。你可以通過 key 來添加航唆、查詢或者刪除數(shù)據(jù),鑒于使用主鍵訪問牛曹,所以會獲得不錯的性能及擴展性佛点。
Riak醇滥、Redis黎比、Memcached、Amazon’s Dynamo鸳玩、Project Voldemort
GitHub (Riak)阅虫、BestBuy (Riak)、Twitter (Redis和Memcached)不跟、StackOverFlow (Redis)颓帝、 Instagram (Redis)、Youtube (Memcached)窝革、Wikipedia(Memcached)
儲存用戶信息购城,比如會話、配置文件虐译、參數(shù)瘪板、購物車等等。這些信息一般都和 ID(鍵)掛鉤漆诽,這種情景下鍵值數(shù)據(jù)庫是個很好的選擇侮攀。
- 取代通過鍵查詢,而是通過值來查詢厢拭。Key-Value 數(shù)據(jù)庫中根本沒有通過值查詢的途徑兰英。2. 需要儲存數(shù)據(jù)之間的關(guān)系。在 Key-Value 數(shù)據(jù)庫中不能通過兩個或以上的鍵來關(guān)聯(lián)數(shù)據(jù)供鸠。3. 事務(wù)的支持畦贸。在 Key-Value 數(shù)據(jù)庫中故障產(chǎn)生時不可以進(jìn)行回滾。
面向文檔(Document-Oriented)數(shù)據(jù)庫
面向文檔數(shù)據(jù)庫會將數(shù)據(jù)以文檔的形式儲存楞捂。每個文檔都是自包含的數(shù)據(jù)單元家制,是一系列數(shù)據(jù)項的集合。每個數(shù)據(jù)項都有一個名稱與對應(yīng)的值泡一,值既可以是簡單的數(shù)據(jù)類型颤殴,如字符串、數(shù)字和日期等鼻忠;也可以是復(fù)雜的類型涵但,如有序列表和關(guān)聯(lián)對象杈绸。數(shù)據(jù)存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的矮瘟,數(shù)據(jù)可以使用 XML瞳脓、JSON 或者 JSONB 等多種形式存儲。
MongoDB澈侠、CouchDB劫侧、RavenDB
SAP (MongoDB)、Codecademy (MongoDB)哨啃、Foursquare (MongoDB)烧栋、NBC News (RavenDB)
- 日志。企業(yè)環(huán)境下拳球,每個應(yīng)用程序都有不同的日志信息审姓。Document-Oriented 數(shù)據(jù)庫并沒有固定的模式,所以我們可以使用它儲存不同的信息祝峻。2. 分析魔吐。鑒于它的弱模式結(jié)構(gòu),不改變模式下就可以儲存不同的度量方法及添加新的度量莱找。
在不同的文檔上添加事務(wù)酬姆。Document-Oriented 數(shù)據(jù)庫并不支持文檔間的事務(wù),如果對這方面有需求則不應(yīng)該選用這個解決方案奥溺。
列存儲(Wide Column Store/Column-Family)數(shù)據(jù)庫
列存儲數(shù)據(jù)庫將數(shù)據(jù)儲存在列族(column family)中辞色,一個列族存儲經(jīng)常被一起查詢的相關(guān)數(shù)據(jù)。舉個例子谚赎,如果我們有一個 Person 類淫僻,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下壶唤,姓名和年齡就會被放入一個列族中雳灵,而薪資則在另一個列族中。
Cassandra闸盔、HBase
Ebay (Cassandra)悯辙、Instagram (Cassandra)、NASA (Cassandra)迎吵、Twitter (Cassandra and HBase)躲撰、Facebook (HBase)、Yahoo!(HBase)
- 日志击费。因為我們可以將數(shù)據(jù)儲存在不同的列中拢蛋,每個應(yīng)用程序可以將信息寫入自己的列族中。2. 博客平臺蔫巩。我們儲存每個信息到不同的列族中谆棱。舉個例子快压,標(biāo)簽可以儲存在一個,類別可以在一個垃瞧,而文章則在另一個蔫劣。
- 如果我們需要 ACID 事務(wù)。Vassandra 就不支持事務(wù)个从。2. 原型設(shè)計脉幢。如果我們分析Cassandra 的數(shù)據(jù)結(jié)構(gòu),我們就會發(fā)現(xiàn)結(jié)構(gòu)是基于我們期望的數(shù)據(jù)查詢方式而定嗦锐。在模型設(shè)計之初嫌松,我們根本不可能去預(yù)測它的查詢方式,而一旦查詢方式改變意推,我們就必須重新設(shè)計列族豆瘫。
圖(Graph-Oriented)數(shù)據(jù)庫
圖數(shù)據(jù)庫允許我們將數(shù)據(jù)以圖的方式儲存珊蟀。實體會被作為頂點菊值,而實體之間的關(guān)系則會被作為邊。比如我們有三個實體育灸,Steve Jobs腻窒、Apple 和 Next,則會有兩個“Founded by”的邊將 Apple 和 Next 連接到 Steve Jobs磅崭。
Neo4J儿子、Infinite Graph、OrientDB
Adobe (Neo4J)砸喻、Cisco (Neo4J)柔逼、T-Mobile (Neo4J)
- 在一些關(guān)系性強的數(shù)據(jù)中2. 推薦引擎。如果我們將數(shù)據(jù)以圖的形式表現(xiàn)割岛,那么將會非常有益于推薦的制定
不適合的數(shù)據(jù)模型愉适。圖數(shù)據(jù)庫的適用范圍很小,因為很少有操作涉及到整個圖癣漆。
參考資料
HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis Popularity
一網(wǎng)打盡當(dāng)下NoSQL類型维咸、適用場景及使用公司
Redis之父Salvatore Sanfilippo訪談
一張圖告訴你是需要 SQL 還是 Hadoop