NoSQL是什麼?

導讀 NoSQL(not only sql,不只僅是SQL),是一項全新的數據庫革命性運動,泛指非關係型數據庫,對於NoSQL這個新興的名詞,每一個人的理解都不一樣。其實NoSQL一詞最先出現於1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關係數據庫。可是直到2009年,Johan Oskarsson發起了一次關於分佈式開源數據庫的討論,來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關係型、分佈式、不提供ACID的數據庫設計模式。

2009年在亞特蘭大舉行的」no:sql(east)」討論會是一個里程碑,其口號是」select fun, profit from real_world where relational=false;」。所以,對NoSQL最廣泛的解釋是」非關聯型的」,強調Key-Value存儲和文檔數據庫的優勢,而不是單純的反對RDBMS。web

NoSQL的迅速發展以及因爲NoSQL中沒有像傳統數據庫那樣定義數據的組織方式爲關係型的,因此只要內部的數據組織採用了非關係型的方式,就能夠稱之爲NoSQL數據庫。因此隨之帶來了開源社區上百種所謂的NoSQL數據庫,讓人眼花繚亂。對於NoSQL並無一個明確的範圍和定義,可是他們都廣泛存在下面一些共同特徵:算法

不須要預約義模式:不須要事先定義數據模式,預約義表結構。數據中的每條記錄均可能有不一樣的屬性和格式。當插入數據時,並不須要預先定義它們的模式。sql

彈性可擴展:能夠在系統運行的時候,動態增長或者刪除結點。不須要停機維護,數據能夠自動遷移。數據庫

分佈式:相對於將數據存放於同一個節點,NoSQL數據庫須要將數據進行分區,將記錄分散在多個節點上面。而且一般分區的同時還要作複製。這樣既提升了並行性能,又能保證沒有單點失效的問題。設計模式

BASE:相對於事務嚴格的ACID特性,NoSQL數據庫保證的是BASE特性。BASE是最終一致性和軟事務。緩存

NoSQL優點:避免沒必要要的複雜性、高吞吐量、高水平擴展能力;好比隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,而非關係型的數據庫則因爲其自己的特色獲得了很是迅速的發展。NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題。服務器

NoSQL劣勢:數據模型和查詢語言沒有通過數據驗證,沒有堅實的理論基礎;不支持ACID特性,固然使用SQL數據庫能夠解決這個問題;有些NoSQL數據庫過於簡單,好比Memcache只是一個內存數據庫,適用於某些特性場景;最大的劣勢就是沒有統一的數據查詢模型,每種NoSQL產品都有本身的語言使用方式。網絡

因爲NoSQL數據庫並無一個統一的架構,兩種NoSQL數據庫之間的不一樣,甚至遠遠超過兩種關係型數據庫的不一樣。能夠說,NoSQL各有所長,成功的NoSQL必然特別適用於某些場合或者某些應用,在這些場合中會遠遠賽過關係型數據庫和其餘的NoSQL。架構

什麼是NewSQL?

經過比較能夠發現NoSQL跟SQL之間的對立性太強了,基於NoSQL跟SQL之間的某種差別,好比NoSQL有的功能SQL沒有,如分佈式、簡單數據模型;而SQL有的特性NoSQL又沒有,如ACID功能;固然無論哪一種數據庫,無論其劣勢仍是優點都有其適用的場景。而SQL很難實現分佈式的緣由在於,SQL自身的日誌機制、鎖機制以及緩衝區管理機制。因而就出來了NewSQL數據庫的概念,所謂的NewSQL是什麼呢?就是想柔和SQL與NoSQL獨有的特性。併發

目前NewSQL大概有兩類,第一類是擁有關係型數據庫產品和服務,並將關係型數據庫的好處與優點帶入到分佈式架構上,簡單來講就是把ACID引入到分佈式中;第二類是提供關係型數據庫的性能,達到不用考慮水平擴展的方式,簡單來講就是改變SQL架構使得它不用水平擴展,不用運行在分佈式環境中就可以帶來性能上的提高。對於第一類把ACID引入到分佈式中去的產品有Clustrix、GenieDB、ScaleArc、ScaleBase、NimbusDB以及MySQL Cluster等。

NoSQL的分類?

總的來講,現在的數據庫市場真是百花齊放,大概分類爲SQL、NoSQL、NewSQL以及緩存數據庫系統。而SQL和NewSQL不是本章討論的主題,因此下面來講一說NoSQL數據庫。

首先須要明確的一點,NoSQL數據庫並非要取代如今普遍應用的傳統數據庫,而是採用一種非關係型的方式解決數據的存儲和計算的問題。目前,能夠將衆多的NoSQL數據庫按照內部的數據組織形式進行以下分類:

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

這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key-value模型對於IT系統來講的優點在於簡單、易部署。可是若是DBA只對部分值進行查詢或更新的時候,Key-value就顯得效率低下了。

數據模型:key-value

優勢:查找速度快

缺點:數據無結構,一般只被當作字符串或二進制數據

應用場景:內容緩存

典型產品:Tokyo,Redis(一鍵多值),Dynamo ,Oracle BDB以及Memcache(一鍵一值),但Memcache雖然是Key-avlue存儲可是它是緩存數據庫。

列存儲數據庫

顧名思義,是按列存儲數據的。最大的特色是方便存儲結構化和半結構化數據,方便作數據壓縮,對針對某一列或者某幾列的查詢有很是大的IO優點。

數據模型:數據按列存儲、將同一列數據存在一塊兒

優勢:查找迅速、可擴展性強、易於實現分佈式

缺點:功能相對SQL頗有限

應用場景:分佈式文件系統或分佈式存儲

典型產品:Cassandra, HBase, Bigtable

文檔型數據庫

文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,並且它同第一種鍵值存儲相相似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫可 以看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。

數據模型:與鍵值模型相似,但value指向相似一個容器(文檔),容器內有一組信息

優勢:數據格式要求不嚴格,無須提早定義結構,每一個文檔字段隨意

缺點:查詢性能不高(比SQL可能稍微好點),缺少統一查詢語法

應用場景:只要不須要ACID就可使用

典型產品:CouchDB, MongoDB,國內也有文檔型數據庫SequoiaDB,已經開源

圖式數據庫

圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),所以進行數據庫查詢須要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。

數據模型:圖結構模型

優勢:利用圖結構相關算法提升性能,並知足特殊場景應用需求

缺點:功能有限,且難以實現分佈式

應用場景:社交網絡推薦系統,好比好友推薦功能,關係圖譜

典型產品:Neo4J, InfoGrid, Infinite Graph

所以,咱們總結NoSQL數據庫在如下的這幾種狀況下比較適用:

1. 數據模型比較簡單;

2. 須要靈活性更強的IT系統;

3. 對數據庫性能要求較高;

4. 不須要高度的數據一致性;

5. 對於給定key比較容易映射覆雜值的環境。

相關文章
相關標籤/搜索