NoSQL

NoSQL

非關系型的數據庫
關系型數據庫,是指采用了關系模型來組織數據的數據庫。[1]NoSQL,泛指非關系型的數據庫。随着互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特别是超大規模和高并發的SNS類型的web2.0純動态網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。
    中文名: 外文名:NoSQL 适用領域: 所屬學科: 全稱:Not Only SQL 類别:非關系型的數據庫 應用領域:計算機;軟件;數據庫

四大分類

這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。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數據庫在以下的這幾種情況下比較适用:1、數據模型比較簡單;2、需要靈活性更強的IT系統;3、對數據庫性能要求較高;4、不需要高度的數據一緻性;5、對于給定key,比較容易映射複雜值的環境。

共同特征

對于NoSQL并沒有一個明确的範圍和定義,但是他們都普遍存在下面一些共同特征:

不需要預定義模式:不需要事先定義數據模式,預定義表結構。數據中的每條記錄都可能有不同的屬性和格式。當插入數據時,并不需要預先定義它們的模式。

無共享架構:相對于将所有數據存儲的存儲區域網絡中的全共享架構。NoSQL往往将數據劃分後存儲在各個本地服務器上。因為從本地磁盤讀取數據的性能往往好于通過網絡傳輸讀取數據的性能,從而提高了系統的性能。

彈性可擴展:可以在系統運行的時候,動态增加或者删除結點。不需要停機維護,數據可以自動遷移。

分區:相對于将數據存放于同一個節點,NoSQL數據庫需要将數據進行分區,将記錄分散在多個節點上面。并且通常分區的同時還要做複制。這樣既提高了并行性能,又能保證沒有單點失效的問題。

異步複制:和RAID存儲系統不同的是,NoSQL中的複制,往往是基于日志的異步複制。這樣,數據就可以盡快地寫入一個節點,而不會被網絡傳輸引起遲延。缺點是并不總是能保證一緻性,這樣的方式在出現故障的時候,可能會丢失少量的數據。

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

NoSQL數據庫并沒有一個統一的架構,兩種NoSQL數據庫之間的不同,甚至遠遠超過兩種關系型數據庫的不同。可以說,NoSQL各有所長,成功的NoSQL必然特别适用于某些場合或者某些應用,在這些場合中會遠遠勝過關系型數據庫和其他的NoSQL。

适用場景

NoSQL數據庫在以下的這幾種情況下比較适用:1、數據模型比較簡單;2、需要靈活性更強的IT系統;3、對數據庫性能要求較高;4、不需要高度的數據一緻性;5、對于給定key,比較容易映射複雜值的環境。

發展現狀

計算機體系結構在數據存儲方面要求具備龐大的水平擴展性,而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數據庫系統所不完善的,但卻是雲系統應具有的典型特點;“強一緻性”主要是新應用的需求。

缺點

但是一些人承認,沒有正式的官方支持,萬一出了差錯會是可怕的,至少很多管理人員是這樣看。

“我們确實需要做一些說服工作,但基本在他們看到我們的第一個原型運行良好之後,我們就能夠說服他們,這是條正确的道路。”

此外,nosql并未形成一定标準,各種産品層出不窮,内部混亂,各種項目還需時間來檢驗

開源軟件

Membase

Membase是NoSQL家族的一個新的重量級的成員。Membase是開源項目,源代碼采用了Apache2.0的使用許可。該項目托管在GitHub.Source tarballs上,可以下載beta版本的Linux二進制包。該産品主要是由North Scale的memcached核心團隊成員開發完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線遊戲和社區網絡空間的供應商。

Membase容易安裝、操作,可以從單節點方便的擴展到集群,而且為memcached(有線協議的兼容性)實現了即插即用功能,在應用方面為開發者和經營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經在不同類型的領域(特别是大容量的Web應用)有了廣泛的使用,其中Memcached的部分基礎代碼被直接應用到了Membase服務器的前端。

通過兼容多種編程語言和框架,Membase具備了很好的複用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置的告警信息。

Membase的目标是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統一的節點進行複制。另外,對存儲的數據進行再分配仍然是必要的。

這方面的一個有趣的特性是NoSQL解決方案所承諾的可預測的性能,類準确性的延遲和吞吐量。通過如下方式可以獲得上面提到的特性:

自動将在線數據遷移到低延遲的存儲介質的技術(内存,固态硬盤,磁盤)

可選的寫操作一一異步,同步(基于複制,持久化)

反向通道再平衡[未來考慮支持]

多線程低鎖争用

盡可能使用異步處理

自動實現重複數據删除

動态再平衡現有集群

通過把數據複制到多個集群單元和支持快速失敗轉移來提供系統的高可用性。

MongoDB

MongoDB是一個介于關系數據庫和非關系數據庫之間的産品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它的特點是高性能、易部署、易使用,存儲數據非常方便。

MongoDB的主要目标是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋梁,集兩者的優勢于一身。MongoDB最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

主要功能特性:

面向集合存儲,易存儲對象類型的數據

“面向集合”(Collenction-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個集合在數據庫中都有一個唯一的标識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)裡的表(table),不同的是它不需要定義任何模式(schema)。

模式自由

模式自由(schema-free),意味着對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫裡。

支持動态查詢

支持完全索引,包含内部對象

支持查詢

支持複制和故障恢複

使用高效的二進制數據存儲,包括大型對象(如視頻等)

自動處理碎片,以支持雲計算層次的擴展性

支持RUBY,PYTHON,JAVA,C++,PHP等多種語言

文件存儲格式為BSON(一種JSON的擴展)

BSON(Binary Serialized document Format)存儲形式是指:存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一标識一個文檔,為字符串類型,而值則可以是各中複雜的文件類型。

可通過網絡訪問

MongoDB服務端可運行在Linux、Windows或OSX平台,支持32位和64位應用,默認端口為27017。推薦運行在64位平台,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB。

MongoDB把數據存儲在文件中(默認路徑為:/data/db),為提高效率使用内存映射文件進行管理。

Hypertable

Hypertable是一個開源、高性能、可伸縮的數據庫,它采用與Google的Bigtable相似的模型。在過去數年中,Google為在PC集群上運行的可伸縮計算基礎設施設計建造了三個關鍵部分。

第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的文件系統,提供了一個全局的命名空間。它通過跨機器(和跨機架)的文件數據複制來達到高可用性,并因此免受傳統文件存儲系統無法避免的許多失敗的影響,比如電源、内存和網絡端口等失敗。第二個基礎設施是名為Map-Reduce的計算框架,它與GFS緊密協作,幫助處理收集到的海量數據。第三個基礎設施是Bigtable,它是傳統數據庫的替代。

Bigtable讓你可以通過一些主鍵來組織海量數據,并實現高效的查詢。Hypertable是Bigtable的一個開源實現,并且根據我們的想法進行了一些改進。

相關詞條

相關搜索

其它詞條