共找到2條詞條名為非關係型資料庫的結果 展開
- 非關係型資料庫
- 非關係型的資料庫
非關係型資料庫
非關係型資料庫
非關係型資料庫,又被稱為NoSQL(Not Only SQL ),意為不僅僅是SQL( Structured QueryLanguage,結構化查詢語言),NoSQL最早出現於1998 年,是由Carlo Storzzi最早開發的個輕量、開源、不兼容SQL 功能的關係型資料庫,2009 年,在一次分散式開源資料庫的討論會上,再次提出了NoSQL 的概念,此時NoSQL主要是指非關係型、分散式、不提供ACID (資料庫事務處理的四個基本要素)的資料庫設計模式。同年,在亞特蘭大舉行的“NoSQL(east)”討論會上,對NoSQL 最普遍的定義是“非關聯型的”,強調Key-Value 存儲和文檔資料庫的優點,而不是單純地反對RDBMS,至此,NoSQL 開始正式出現在世人面前。
NoSQL描述的是大量結構化數據存儲方法的集合,根據結構化方法以及應用場合的不同,主要可以將NoSQL分為以下幾類。
面向檢索的列式存儲,其存儲結構為列式結構,同於關係型資料庫的行式結構,這種結構會讓很多統計聚合操作更簡單方便,使系統具有較高的可擴展性。這類資料庫還可以適應海量數據的增加以及數據結構的變化,這個特點與雲計算所需的相關需求是相符合的,比如GoogleAppengine的BigTable以及相同設計理念的Hadoop子系統HaBase就是這類的典型代表。需要特別指出的是,Big Table特別適用於MapReduce處理,這對於雲計算的發展有很高的適應性。
面向高性能併發讀/寫的緩存存儲,其結構類似於數據結構中的Hash表,每個Key分別對應一個Value,能夠提供非常快的查詢速度、大數據存放量和高併發操作,非常適合通過主鍵對數據進行查詢和修改等操作。Key-Value資料庫的主要特點是具有極高的併發讀/寫性能,非常適合作為緩存系統使用。MemcacheDB、BerkeleyDB、Redis、Flare就是Key-Value資料庫的代表。
面向海量數據訪問的文檔存儲,這類存儲的結構與Key-Value非常相似,也是每個Key分別對應一個Value,但是這個Value主要以JSON(JavaScriptObjectNotations)或者XML等格式的文檔來進行存儲。這種存儲方式可以很方便地被面向對象的語言所使用。這類資料庫可在海量的數據中快速查詢數據,典型代表為MongoDB、CouchDB等。
NoSQL具有擴展簡單、高併發、高穩定性、成本低廉等優勢,也存在一些問題。例如,NoSQL暫不提供SQL的支持,會造成開發人員的額外學習成本;NoSQL大多為開源軟體其成熟度與商用的關係型資料庫系統相比有差距;NoSQL的架構特性決定了其很難保證數據的完整性,適合在一些特殊的應用場景使用。
NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL僅僅是一個概念,泛指非關係型的資料庫,區別於關係資料庫,它們不保證關係數據的ACID特性。NoSQL是一項全新的資料庫革命性運動,其擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型資料庫運用,這一概念無疑是一種全新的思維的注入。
對於NoSQL並沒有一個明確的範圍和定義,但是他們都普遍存在下面一些共同特徵:
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關係資料庫的關係型特性。數據之間無關係,這樣就非常容易擴展。無形之間,在架構的層面上帶來了可擴展的能力。
NoSQL資料庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,資料庫的結構簡單。一般MySQL使用Query Cache。NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說性能就要高很多。
NoSQL無須事先為要存儲的數據建立欄位,隨時可以存儲自定義的數據格式。而在關係資料庫里,增刪欄位是一件非常麻煩的事情。如果是非常大數據量的表,增加欄位簡直就是——個噩夢。這點在大數據量的Web 2.0時代尤其明顯。
NoSQL在不太影響性能的情況,就可以方便地實現高可用的架構。比如Cassandra、HBase模型,通過複製模型也能實現高可用。
NoSQL框架體系NosoL整體框架分為四層,由下至上分為數據持久層(data persistence)、整體分佈層(data distribution model)、數據邏輯模型層(data logical model)、和介面層(interface),層次之間相輔相成,協調工作。
數據持久層定義了數據的存儲形式,主要包括基於內存、基於硬碟、內存和硬碟介面、訂製可拔插四種形式。基於內存形式的數據存取速度最快,但可能會造成數據丟失。基於硬碟的數據存儲可能保存很久,但存取速度較基於內存形式的慢。內存和硬碟相結合的形式,結合了前兩種形式的優點,既保證了速度,又保證了數據不丟失。訂製可拔插則保證了數據存取具有較高的靈活性。
數據分佈層定義了數據是如何分佈的,相對於關係型資料庫,NoSQL可選的機制比較多,主要有三種形式:一是CAP支持,可用於水平擴展。二是多數據中心支持,可以保證在橫跨多數據中心是也能夠平穩運行。三是動態部署支持,可以在運行著的集群中動態地添加或刪除節點。
數據邏輯層表述了數據的邏輯表現形式,與關係型資料庫相比,NoSQL在邏輯表現形式上相當靈活,主要有四種形式:一是鍵值模型,這種模型在表現形式上比較單一,但卻有很強的擴展性。二是列式模型,這種模型相比於鍵值模型能夠支持較為複雜的數據,但擴展性相對較差。三是文檔模型,這種模型對於複雜數據的支持和擴展性都有很大優勢。四是圖模型,這種模型的使用場景不多,通常是基於圖數據結構的數據定製的。
介面層為上層應用提供了方便的數據調用介面,提供的選擇遠多於關係型資料庫。介面層提供了五種選擇:Rest,Thrift,Map/Reduce,Get/Put,特定語言API,使得應用程序和資料庫的交互更加方便。
NoSQL分層架構並不代表每個產品在每一層只有一種選擇。相反,這種分層設計提供了很大的靈活性和兼容性,每種資料庫在不同層面可以支持多種特性。
NoSQL資料庫在以下的這幾種情況下比較適用:
1、數據模型比較簡單;
2、需要靈活性更強的IT系統;
3、對資料庫性能要求較高;
4、不需要高度的數據一致性;
5、對於給定key,比較容易映射複雜值的環境。
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解決方案所承諾的可預測性能,通過如下方式可以獲得:
1)自動將在線數據遷移到低延遲的存儲介質的技術(內存,固態硬碟,磁碟)。
2)可選的寫操作——非同步、同步(基於複製,持久化)。
3)反向通道再平衡。
4)多線程低鎖爭用。
5)儘可能使用非同步處理。
6)自動實現重複數據刪除。
7)動態再平衡現有集群。
8)通過把數據複製到多個集群單元和支持快速失敗轉移來提供系統的高可用性。
MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫中功能最豐富,最像關係資料庫的。它支持的數據結構非常鬆散,是類似Json的Bjson格式,因此可以存儲比較複雜的數據類型。MongoDB最大的特點是它支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,還支持為數據建立索引。它的特點是高性能、易部署、易使用、存儲數據非常方便。
主要功能特性:
1)面向集合存儲,易存儲對象類型的數據。
“面向集合”( Collenction-oriented),意思是數據被分組,存儲在數據集中,被稱為一個集合。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型資料庫里的表,不同的是它不需要定義任何模式(Schema)。
2)模式自由。
模式自由,意味著對於存儲在Mongodb資料庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個資料庫里。