基本含義
NoSQL(NoSQL = Not Only SQL ),意即"不只僅是SQL"。
在現代的計算系統上天天網絡上都會產生龐大的數據量。這些數據有很大一部分是由關係數據庫管理系統(RDMBS)來處理。
1970年 E.F.Codd's提出的關係模型的論文 "A relational model of data for large shared data banks",這使得數據建模和應用程序編程更加簡單。
經過應用實踐證實,關係模型是很是適合於客戶服務器編程,遠遠超出預期的利益,今天它是結構化數據存儲在網絡和商務應用的主導技術。
NoSQL 是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一律念無疑是一種全新的思惟的注入。算法
RDBMS vs NoSQL
RDBMS
- 高度組織化結構化數據
- 結構化查詢語言(SQL)
- 數據和關係都存儲在單獨的表中。
- 數據操縱語言,數據定義語言
- 嚴格的一致性
- 基礎事務數據庫
NoSQL
- 表明着不只僅是SQL
- 沒有聲明性查詢語言
- 沒有預約義的模式
- 鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
- 最終一致性,而非ACID屬性
- 非結構化和不可預知的數據
- CAP定理
- 高性能,高可用性和可伸縮性編程
NoSQL的優勢/缺點
優勢:
- 高可擴展性
- 分佈式計算
- 低成本
- 架構的靈活性,半結構化數據
- 沒有複雜的關係json
缺點:
- 沒有標準化
- 有限的查詢功能(到目前爲止)
- 最終一致是不直觀的程序緩存
NoSQL 數據庫的四大分類
鍵值(Key-Value)存儲數據庫
這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。
Key/value模型對於IT系統來講的優點在於簡單、易部署。
可是若是DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。
舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.安全
列存儲數據庫
這部分數據庫一般是用來應對分佈式存儲的海量數據。
鍵仍然存在,可是它們的特色是指向了多個列。這些列是由列家族來安排的。
如:Cassandra, HBase, Riak.服務器
文檔型數據庫
文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,並且它同第一種鍵值存儲相相似。
該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。
文檔型數據庫能夠看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。
如:CouchDB, MongoDb. 國內也有文檔型數據庫SequoiaDB,已經開源。網絡
圖形(Graph)數據庫
圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。
NoSQL數據庫沒有標準的查詢語言(SQL),所以進行數據庫查詢須要制定數據模型。
許多NoSQL數據庫都有REST式的數據接口或者查詢API。
如:Neo4J, InfoGrid, Infinite Graph.數據結構
NoSQL 數據庫的四大分類表格分析架構
分類 | Examples舉例 | 典型應用場景 | 數據模型 | 優勢 | 缺點 |
---|---|---|---|---|---|
鍵值(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。 | Key 指向 Value 的鍵值對,一般用hash table來實現 | 查找速度快 | 數據無結構化,一般只被看成字符串或者二進制數據 |
列存儲數據庫 | Cassandra, HBase, Riak | 分佈式的文件系統 | 以列簇式存儲,將同一列數據存在一塊兒 | 查找速度快,可擴展性強,更容易進行分佈式擴展 | 功能相對侷限 |
文檔型數據庫 | CouchDB, MongoDb | Web應用(與Key-Value相似,Value是結構化的,不一樣的是數據庫可以瞭解Value的內容) | Key-Value對應的鍵值對,Value爲結構化數據 | 數據結構要求不嚴格,表結構可變,不須要像關係型數據庫同樣須要預先定義表結構 | 查詢性能不高,並且缺少統一的查詢語法。 |
圖形(Graph)數據庫 | Neo4J, InfoGrid, Infinite Graph | 社交網絡,推薦系統等。專一於構建關係圖譜 | 圖結構 | 利用圖結構相關算法。好比最短路徑尋址,N度關係查找等 | 不少時候須要對整個圖作計算才能得出須要的信息,並且這種結構不太好作分佈式的集羣方案。 |
NoSQL 數據庫更多分類
類型 | 部分表明 | 特色 |
列存儲 | Hbase Cassandra Hypertable |
顧名思義,是按列存儲數據的。最大的特色是方便存儲結構化和半結構化數據,方便作數據壓縮,對針對某一列或者某幾列的查詢有很是大的IO優點。 |
文檔存儲 |
MongoDB CouchDB |
文檔存儲通常用相似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段創建索引,實現關係數據庫的某些功能。 |
key-value存儲 |
Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis |
能夠經過key快速查詢到其value。通常來講,存儲無論value的格式,照單全收。(Redis包含了其餘功能) |
圖存儲 |
Neo4J FlockDB |
圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,並且設計使用不方便。 |
對象存儲 |
db4o Versant |
經過相似面嚮對象語言的語法操做數據庫,經過對象的方式存取數據。 |
xml數據庫 |
Berkeley DB XML BaseX |
高效的存儲XML數據,並支持XML的內部查詢語法,好比XQuery,Xpath。 |
適用場景
NoSQL數據庫在如下的這幾種狀況下比較適用:
一、數據模型比較簡單;
二、須要靈活性更強的IT系統;
三、對數據庫性能要求較高;
四、不須要高度的數據一致性;
五、對於給定key,比較容易映射覆雜值的環境。
共同特徵
對於NoSQL並無一個明確的範圍和定義,可是他們都廣泛存在下面一些共同特徵:
一、不須要預約義模式:不須要事先定義數據模式,預約義表結構。數據中的每條記錄均可能有不一樣的屬性和格式。當插入數據時,並不須要預先定義它們的模式。
二、無共享架構:相對於將全部數據存儲的存儲區域網絡中的全共享架構。NoSQL每每將數據劃分後存儲在各個本地服務器上。由於從本地磁盤讀取數據的性能每每好於經過網絡傳輸讀取數據的性能,從而提升了系統的性能。
三、彈性可擴展:能夠在系統運行的時候,動態增長或者刪除結點。不須要停機維護,數據能夠自動遷移。
四、分區:相對於將數據存放於同一個節點,NoSQL數據庫須要將數據進行分區,將記錄分散在多個節點上面。而且一般分區的同時還要作複製。這樣既提升了並行性能,又能保證沒有單點失效的問題。
五、異步複製:和RAID存儲系統不一樣的是,NoSQL中的複製,每每是基於日誌的異步複製。這樣,數據就能夠儘快地寫入一個節點,而不會被網絡傳輸引發遲延。缺點是並不老是能保證一致性,這樣的方式在出現故障的時候,可能會丟失少許的數據。
六、BASE:相對於事務嚴格的ACID特性,NoSQL數據庫保證的是BASE特性。BASE是最終一致性和軟事務。
NoSQL數據庫並無一個統一的架構,兩種NoSQL數據庫之間的不一樣,甚至遠遠超過兩種關係型數據庫的不一樣。能夠說,NoSQL各有所長,成功的NoSQL必然特別適用於某些場合或者某些應用,在這些場合中會遠遠賽過關係型數據庫和其餘的NoSQL。
發展示狀
計算機體系結構在數據存儲方面要求具有龐大的水平擴展性,而NoSQL致力於改變這一現狀。Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型數據庫。
NoSQL項目的名字上看不出什麼相同之處,可是,它們一般在某些方面相同:它們能夠處理超大量的數據。
這場革命仍然須要等待。的確,NoSQL對大型企業來講還不是主流,可是,一兩年以後極可能就會變個樣子。在NoSQL運動的最新一次聚會中,來自世界各地的150人擠滿了CBS Interactive的一間會議室。分享他們如何推翻緩慢而昂貴的關係數據庫的暴政的經驗,怎樣使用更有效和更便宜的方法來管理數據。
「關係型數據庫給你強加了太多東西。它們要你強行修改對象數據,以知足RDBMS (relational database management system,關係型數據庫管理系統)的須要,」在NoSQL擁護者們看來,基於NoSQL的替代方案「只是給你所須要的」。
水平擴展性(horizontal scalability)指可以鏈接多個軟硬件的特性,這樣能夠將多個服務器從邏輯上當作一個實體。
挑戰
儘管大多數NoSQL數據存儲系統都已被部署於實際應用中,但概括其研究現狀,還有許多挑戰性問題。
一、已有key-value數據庫產品大可能是面向特定應用自治構建的,缺少通用性;
二、已有產品支持的功能有限(不支持事務特性),致使其應用具備必定的侷限性;
三、已有一些研究成果和改進的NoSQL數據存儲系統,但它們都是針對不一樣應用需求而提出的相應解決方案,如支持組內事務特性、彈性事務等,不多從全局考慮系統的通用性,也沒有造成系列化的研究成果;
四、缺少相似關係數據庫所具備的強有力的理論(如armstrong公理系統)、技術(如成熟的基於啓發式的優化策略、兩段封鎖協議等)、標準規範(如SQL語言)的支持。
五、目前,HBase數據庫是安全特性最完善的NoSQL數據庫產品之一,而其餘的NoSQL數據庫多數沒有提供內建的安全機制,但隨着NoSQL的發展,愈來愈多的人開始意識到安全的重要,部分NoSQL產品逐漸開始提供一些安全方面的支持。
隨着雲計算、互聯網等技術的發展,大數據普遍存在,同時也呈現出了許多雲環境下的新型應用,如社交網絡網、移動服務、協做編輯等。這些新型應用對海量數據管理或稱雲數據管理系統也提出了新的需求,如事務的支持、系統的彈性等。同時雲計算時代海量數據管理系統的設計目標爲可擴展性、彈性、容錯性、自管理性和「強一致性」。目前,已有系統經過支持可隨意增減節點來知足可擴展性;經過副本策略保證系統的容錯性;基於監測的狀態消息協調實現系統的自管理性。「彈性」的目標是知足Pay-per-use 模型,以提升系統資源的利用率。該特性是已有典型NoSQL數據庫系統所不完善的,但倒是雲系統應具備的典型特色;「強一致性」主要是新應用的需求。