成都理工大學 雷宇輝 鐘 雯 何 清 唐曼玲 劉超英
Nosql數據庫研究文獻綜述
成都理工大學 雷宇輝 鐘 雯 何 清 唐曼玲 劉超英
隨著擁有海量數據寫入的Web 2.0網絡應用的興起以及用戶需求和現代硬件要求的提高,在傳統關系型數據庫因為自身限制而無法解決動態數據處理、實時數據插入等諸類問題的背景下,Nosql數據庫毫無疑問成為解決此類辦法的熱門議題之一。
Nosql;web2.0;傳統關系式數據庫
1969年,Edgar Frank Codd首次提出了關系數據庫模型的概念。關系型數據庫以擁有較高事物可靠性的特點在各個行業中得到廣泛運用。如果從web2.0網站的角度看關系型數據庫,它的許多特征將無用武之地,因為傳統關系型數據庫不能完全負荷海量數據寫入的web2.0網站。同時,關系型數據庫難以進行橫向擴展,當我們需要對數據進行增加、查找、刪除等操作時,有時需要停機更改數據表結構,無法動態進行數據庫數據變更操作。關系型數據庫需要分析提出的SQL操作請求,再根據請求找到并解鎖相關的數據表,與Nosql數據庫相比,增加了一些多余的步驟。
Nosql,是指not only sql,運用非關系式的方法解決傳統數據庫無法解決的問題,而并非要取代現在廣泛應用的傳統關系式數據,。Nosql遵守CAP原則和BASE思想,CAP原則,指的是在分布式系統中,只可以同時滿足Consistency(一致性)、Availability(可用性)、Tolerance(區分容錯性)其中的兩種要求,不能三種兼顧,因此,不同的Nosql數據庫會根據自身的開發目的選擇滿足哪些要求,比如,Mongodb滿足CP要求。BASE是基本可用(Basically Available)、軟狀態(Soft state)、最終一致性(Eventually consistent)三個術語的縮寫,基本可用性是指在分布式系統出現故障時,同意系統部分失去可用性,保證核心部分的可用性,軟狀態是指同意系統不同節點同步有延時,最終一致性系統所有數據在最后能達到一致的狀態的性能。大部分Nosql數據庫都遵循BASE思想,舍去高一致性得到可用性和可靠性。
Nosql數據庫種類繁多,如果只用一個Nosql標簽來代表所有Nosql數據庫就太籠統了,比如memcached和mongodbt這兩種數據,盡管在都是Nosql數據庫的同類比較下彼此也會顯示出很大的區別,所以,Nosql數據庫大致可以分為以下幾類:
鍵值型數據庫,該數據庫會使用哈希表,數據以鍵值的形式存放,一個或多個鍵對應一個值。鍵值型數據庫處理速度最快,但是必須通過匹配完全一致的鍵查詢數據。
列存儲數據庫,以列為單位存放數據。目前大部分關系型數據庫是以行為單位存放數據,當面對大量數據時,以行為單位的數據庫操作會更加困難,寫入速度降低。對以列存儲的數據庫來說,可以對大量數據進行讀取,具有高擴展性,但因為思維方式與傳統型數據庫多有不同,應用困難。
文檔型數據庫,將數據封裝存儲到未嚴格定義的以JSON、XML等類型的文件中,雖然它與鍵值型數據庫有相似點,每個文檔存儲一個或多個鍵值,但不同的是,其中值可以是文件類型。在文檔型數據庫中,即使沒有提前定義數據表結構,也可以繼續使用。鍵值型數據庫必須通過匹配完全一致的鍵查詢數據,文檔型則可以通過復雜的查詢條件進行操作。但是文檔型數據庫沒有事務處理能力。
圖形數據庫,起源于歐拉公式和圖論,應用圖論的節點、關系、屬性三個基本要素存放數據之間的關系信息,將點、線、面等基本圖形元素按照一定結構排列的數據集合,在此類數據庫中,程序員可以任意添加屬性、節點、關系且不影響系統的初始狀態,適用于處理復雜的、相互交叉的數據,解決復雜的圖形問題。
4.1 高速響應的鍵值數據庫memcached
memcached,是LiveJournal旗下的Danga Interactive公司開發的一款軟件,適用于需要頻繁訪問的、共享數據的分布式系統。Memcached中mem代表memory(內存),cached代表緩存,它是高性能分布式內存緩存服務器,通過緩存服務器查詢結果減少數據庫訪問次數,有效提高了動態web的響應速度,同時它也是一個高性能開源分布式內存對象緩存系統,mem-cached數據庫的加載均在內存中進行,在動態中減少數據庫負載提升性能。Memcached利用網絡連接方式完成服務,可在高并發條件下迅速響應操作需求。Memcached將數據保存到內存當中,雖然是數據寫入、讀出非???,但是當Memcached停止工作時,比如,操作超出內存容量等情況時,數據容易丟失。
4.2 高存儲量的列存儲數據庫Hbase
Hbase,即Hadoop Database,是一個高性能、面向對象、分布式、面向列的開源數據庫。在Hbase中主要以下兩個主要概念,Row key和Column Family ,Row key用于檢索數據,Column Family 是指列族且必須在Hbase表使用前定義。Hbase表可以存儲上千萬個行、支持列的獨立搜索并且 null列不占據存儲空間。Hbase有以下物理模型,Region、HLog、Store、客戶端更新操作流程、Hmaster。當Hbase中數據達到一定程度,數據庫將對數據水平切割并存儲到多臺服務器中去,不同用戶來訪時,會根據訪問數據的不同將用戶分配至相應的服務器中,有效提高了數據庫訪問性能。Hbase的數據和日志均存儲在Hadoop 分布式文件系作為文件存儲系統中,即使在應用過程中服務器停止服務,數據、日志均不會丟失。但是,Hbase只能按照Row key查詢,并且當master停止工作時,整個系統過停止。
4.3 靈活、可擴展的文檔型數據庫Mongodb
Mongodb來源于humongous英文單詞中間部分意為巨大的,可以看出Mongodb的主要目的是在于處理包含“大量”的操作,比如大量數據的存儲,大量數據的寫入等。Mongodb將傳統關系型數據庫中“行”替換成“文檔”,它可以運行在Windows、linux、OSX等系統上, Mongodb還提供了多種編程語言支持,比如java、php、c#等。
在mongodb中,一個數據庫由一個或多個集合組成,一個集合則由一個或以上的文檔組成,其中集合可以看做是傳統關系型數據庫中的數據表。以文檔存儲可以在單獨的記錄中表示復雜的關系,存儲文檔內嵌對象以及數組等面向對象的數據類型。mongodb中,文檔以二進制的JSON格式存儲即BSON格式,支持二進制數據或大型數據的存儲,輕巧、高效、靈活。Mongodb也支持在多個服務器中自動分片技術,在一群節點中按水平比例分割文檔集,使負載均衡,使其擁有更高的讀取速度,也可以避免程序員考慮擴展問題。同時,mongodb提供了主從式和副本集兩種復制方式,在副本集中,所有節點都是彼此的備份節點,沒有單點故障,可用于備份、故障修復、讀擴展等。
4.4 高性能的圖引擎Neo4j
Neo4j是基于Java的高性能的圖形數據庫,對比與傳統關系型數據庫,Neo4j將數據從數據表轉移存儲到圖中。一個圖包含節點和關系兩種數據類型,節點通過關系相連形成關系型網絡結構。Neo4j具備健壯數據庫的所有特性,是高性能的圖引擎,在圖中,節點可以任意增加、刪除、修改,適用于半結構化數據存儲,解決其浪費內存問題。Neo4j,根據深度遍歷接口,可以以相同的速度遍歷邊和節點,解決了擁有大量連接的傳統RDBMS在查詢時出現的性能衰退問題。
傳統關系型數據庫和NoSQL數據庫的關系是互補的,對于這兩類數據庫,我們需要做到因人而異、因事而異、因時而異,通常情況下可以使用關系型數據庫,但對于其不擅長的領域,則可以使用NoSQL數據庫彌補不足。
[1]范凱.NoSQL數據庫綜述[J].程序員,2010(6):76-78.
[2]申德榮,于戈,王習特,等.支持大數據管理的NoSQL系統研究綜述[J].軟件學報,2013(8):1786-1803.
[3]陳莉瑩,雙鍇.NoSQL數據庫綜述[J]. 2012.
[4]吾木提·那合曼.NoSQL數據庫綜述[J].電子世界,2015(17): 146-147.
[5]佐佐木達也羅勇.NoSQL數據庫入門[M].人民郵電出版社,2012.
[6]蕭毅,劉景豊,林威廷,黃奕欽,蔡慶堂,雲端分散式資料庫技術之介紹-以MongoDB為例[J].電信研究雙月刊,第42卷第2期,281-294,2012.
[7]霍多羅夫.MongoDB權威指南[M].人民郵電出版社,2014.
[8]Jeelani Ahmed?, Raafiya Gulmeher. NEW TREND OF DATABASES,EMERGING REASONS,CLASSIFICATION AND SECURITY ISSUES[J]. International Journal of Engineering Sciences & Research Technology, Volume 30; 4(6): 176–184.
[9]Sharma S,Shandilya R,Patnaik S,et al.Leading NoSQL Models for Handling Big Data:A Brief Review[J].International Journal of Business Information Systems,2015.