MySQL從零開始 20-關係型數據庫與非關係型數據庫

1. 關係數據庫

 關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係(即二維表格形式)。通過外鍵關聯來建立表與表之間的關係,通常在關係型數據庫中搜索一條數據,結果是一個對象。

2. 非關係數據庫

非關係型數據庫通常指數據以對象的形式存儲在數據庫中,而對象之間的關係通過每個對象自身的屬性來決定。在非關係型數據庫中搜索一條數據,結果是一個數組。

 非關係型數據庫也被稱爲NoSQL數據庫,NOSQL的本意是”Not Olnly SQL”。指的是非關係型數據庫,而不是“No SQL”的意思,因此,NoSQL的產生並不是要徹底地否定關係型數據庫,而是作爲傳統關係型數據庫的一個有效補充。NOSQL數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。

 非關係行數據庫主要針對的是高性能、高併發、對數據一致性要求不高的場景。

 開源的NoSQL體系,如Facebook的Cassandra,Apache的HBase,也得到了廣泛認同,Redis,mongb也逐漸越來越受到各類大中小型公司的歡迎和追捧。

 非關係型數據庫主要爲如下幾種:

2.1 鍵值(Key-Value)存儲數據庫

 鍵值數據庫的存儲形式類似於哈希表,以K-V的形式進行存儲,通過key來添加、查詢或刪除數據。因爲使用key主鍵訪問,所以會獲得很高的性能及擴展性。

 鍵值(Key-Value)數據庫主要是使用一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來說的優勢在於簡單、易部署、高併發。

 典型產品:Memcached、Redis、MemcacheDB、BerkeleyDB

2.2 列存儲(Column-oriedted)數據庫

 列存儲數據庫將數據庫存儲在列族(column family)中,一個列族存儲經常被一起查詢的相關數據。舉個例子,如果我們有一個Person類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。

 這部分數據庫通常用來分佈式存儲的海量數據,鍵仍然存在,但是他們的特點是指向了多個列。
 典型產品:Cassandra,HBase

2.3 面向文檔(Document-Oriented)數據庫

 面向文檔數據庫會將以文檔的形式存儲。每個文檔都是自包含的數據單元,是一系列數據項的集合。每個數據項都有一個名稱與對應的值,值既可以是簡單的數據類型,如字符串、數字和日期等;也可以是複雜的類型,如有序列表和關係對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用XML、JSON或者JSONB等多種形式存儲

 典型產品:MorgoDB、CouchDB

2.4 圖形(Graph)數據庫

 圖形數據庫是NoSQL數據庫的一種類型,它應用圖形理論存儲實體之間的關係信息,應用圖形理論存儲實體之間的關係信息。最常見例子就是社會網絡中人與人之間的關係。關係型數據庫用於存儲關係型數據的效果並不好,其查詢複雜、緩慢、超出預期,而圖形數據庫的獨特設計恰恰彌補了這個缺陷。

關係型數據庫與非關係型數據庫的對比

3. 主要關係型數據庫介紹

Oracle、SQLServer、Sybase、Informix、access、DB2、mysql、vfp、INGRES、FoxPro等等,一般關係型數據庫使用較多,所以這裏不進行介紹。

4. 主要非關係型數據庫介紹

  • MongoDB

 MongoDB是個面向文檔的數據庫,使用JSON風格的數據格式。它非常適合於網站的數據存儲、內容管理與緩存應用,並且通過配置可以實現複製與高可用性功能。

 MongoDB具有很強的可伸縮性,性能表現優異。它使用C++編寫,基於文檔存儲。此外,MongoDB還支持全文檢索、跨WAN與LAN的高可用性、易於實現的複製、水平擴展、基於文檔的豐富查詢、在數據處理與聚合等方面具有很強的靈活性。

  • Cassandra

 這是個Apache軟件基金會的項目,Cassandra是個分佈式數據庫,支持分散的數據存儲,可以實現容錯以及無單點故障等。換句話說,“Cassandra非常適合於那些無法忍受數據丟失的應用”。

  • CouchDB

 這也是Apache軟件基金會的一個項目,CouchDB是另一個面向文檔的數據庫,以JSON格式存儲數據。它兼容於ACID,像MongoDB一樣,CouchDB也可以用於存儲網站的數據與內容,以及提供緩存等。

 可以通過JavaScript在CouchDB上運行MapReduce查詢。此外,CouchDB還提供了一個非常方便的基於Web的管理控制檯。它非常適合於Web應用。

  • Hypertable

 Hypertable模仿的是Google的BigTable數據庫系統。Hypertable的創建者將“成爲高可用、PB規模的數據庫開源標準”作爲Hypertable的目標。換言之,Hypertable的設計目標是跨越多個廉價的服務器可靠地存儲大量數據。

  • Redis

 這是個開源、高級的鍵值存儲。由於在鍵中使用了hash、set、string、sorted set及list,因此Redis也稱作數據結構服務器。這個系統可以幫助你執行原子操作,比如說增加hash中的值、集合的交集運算、字符串拼接、差集與並集等。Redis通過內存中的數據集實現了高性能。此外,該數據庫還兼容於大多數編程語言。

  • Riak

 Riak是最爲強大的分佈式數據庫之一,它提供了輕鬆且可預測的伸縮能力,向用戶提供了快速測試、原型與應用部署能力,從而簡化應用的開發過程。

  • Neo4j

 Neo4j是一款NoSQL圖型數據庫,具有非常高的性能。它擁有一個健壯且成熟的系統的所有特性,向程序員提供了靈活且面向對象的網絡結構,可以讓開發者充分享受到擁有完整事務特性的數據庫的所有好處。相較於RDBMS,Neo4j還對某些應用提供了不少性能改進。

  • Hadoop HBase

 HBase是一款可伸縮、分佈式的大數據存儲。它可以用在數據的實時與隨機訪問的場景下。HBase擁有模塊化與線性的可伸縮性,並且能夠保證讀寫的嚴格一致性。HBase提供了一個Java API,可以實現輕鬆的客戶端訪問;提供了可配置且自動化的表分區功能;還有Bloom過濾器以及block緩存等特性。

  • Couchbase

 雖然Couchbase是CouchDB的派生,不過它已經成爲了一款功能完善的數據庫產品。它向文檔數據庫轉移的趨勢會讓MongoDB感到壓力。每個節點上它都是多線程的,這是個非常主要的可伸縮性優勢,特別是當託管在自定義或是Bare-Metal硬件上時更是如此。

 藉助於一些非常棒的集成特性,諸如與Hadoop的集成,Couchbase對於數據存儲來說是個非常不錯的選擇。

  • MemcacheDB

 這是個分佈式的鍵值存儲系統,我們不應該將其與緩存解決方案搞混;相反,它是個持久化存儲引擎,用於數據存儲並以非常快速且可靠的方式檢索數據。它遵循memcache協議。其存儲後端用於Berkeley DB中,支持諸如複製與事務等特性。

  • REVENDB

 RAVENDB是第二代開源數據庫,它面向文檔存儲並且無模式,這樣就可以輕鬆將對象存儲到其中了。它提供了非常靈活且快速的查詢,通過對複製、多租與分片提供開箱即用的支持使得我們可以非常輕鬆地實現伸縮功能。它對ACID事務提供了完整的支持,同時又能保證數據的安全性。除了高性能之外,它還通過bundle提供了輕鬆的可擴展性。

  • Voldemort

 這是個自動複製的分佈式存儲系統。它提供了自動化的數據分區功能,透明的服務器失敗處理、可插拔的序列化功能、獨立的節點、數據版本化以及跨越各種數據中心的數據分發功能。

發佈了174 篇原創文章 · 獲贊 125 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章