陳娟 李煒
(1.咸陽師范學院 陜西省咸陽市 712000 2.西藏民族大學 陜西省咸陽市 712082)
在當代生活和工作中,隨時會產生大量的數據信息需要管理,數據庫是最方便、有效的管理工具,目前,數據庫分為關系型與非關系型兩種,關系型數據庫的歷史由來已久且應用范圍更為廣泛,它是采用關系模型來組織數據的數據庫。非關系型數據庫是非關系型、分布式、不提供ACID(數據庫事務處理的四個基本要素)的數據庫設計模式。
使用數據庫管理系統,根據不同的工作項目設計并建立相應的分散獨立的應用數據庫,隨心所欲。當項目需要擴展時,數據庫也會隨之變化,但如果事先沒有進行規劃,大量數據無法正常存儲和操作使用,數據庫不易擴展和維護,項目將無法正常進行。關系型數據庫是一種建立在數據關聯性基礎上的數據庫,但是數據量巨大時,查找數據會產生額外的操作,會花費更多的時間,無法提高效率,所以使用關系型數據庫就會變得不再那么高效。
在互聯網不斷發展壯大的年代,非關系型數據庫成為了一個極其熱門的新的領域并且發展的十分迅速。特別是在一些超大規模和高并發的社交型的網站中,關系型數據庫暴露出了很多難以克服的問題,比如對數據庫高并發讀寫的需求、高效率存儲訪問的需求、高擴展性及可用性的需求。除此之外,關系型數據庫的事務一致性、讀寫實時性、多表關聯查詢這些功能由于在此類型的網站的要求不高從而導致其無法發揮它應有的功能,為了解決這類問題,非關系數據庫應運而生,它的種類較多且大部分都開源,因此非關系型數據庫越來越受歡迎。但由于非關系型數據庫出現時間并不長且本身就具有多樣性,除了它們的一些共性之外,大部分都是針對不同的問題而采用不同的類型的非關系型數據庫。
隨著信息技術的發展,最早人工管理數據的方式已經不能適應大量數據的管理需求,此時數據庫技術逐步發展起來。數據庫(Database)是按照某種數據結構來組織大量數據信息,并對它們進行存儲和管理的倉庫,簡單來說,我們可以把數據庫看成是一個電子化的“文件柜”用來存儲大量的電子文件,用戶可以從“文件柜”中找到相應文件并對其中的數據進行增、刪、改、查等操作。在各單位日常管理中常常需要這樣的“文件柜”,例如,對某校學生的管理,可以把學生的學號、姓名、年齡、性別、籍貫、系別、聯系方式等信息存放在“文件柜”中,可以看成是一個數據庫,在這個數據庫中我們就可以根據需要隨時查詢學生的基本信息。因此,通過計算機對數據進行管理能夠大大提高辦公的效率。數據庫技術具有以下特點:
(1)數據共享。多個用戶可以同時存取數據庫中的數據,也可以通過各種接口使用數據庫中的數據,避免了用戶存儲大量重復數據,減少了數據冗余,避免造成數據之間的不相容性和不一致性。
(2)數據的獨立性。數據獨立性包括數據的物理獨立性和邏輯獨立性。物理獨立性是指數據物理結構的變化不影響數據的邏輯結構;邏輯獨立性是指用戶的應用程序與數據庫中數據相互獨立,應用程序修改不會影響數據的使用。
(3)數據實現集中控制。區別于傳統文件管理方式中的數據分散狀態,數據庫技術可對數據進行集中控制和管理,并使用數據模型來表示各數據之間的關系。
(4)數據一致性和可維護性。通過數據的安全性控制、完整性控制和并發控制可以防止數據丟失、錯誤更新、保證數據的正確性和有效性,使得在同一時間周期內,允許對數據實現多路存取,又能防止用戶之間的不正常交互從而確保了數據的一致性和可維護性。
(5)故障恢復。數據庫系統通過相應機制可及時發現系統物理上或邏輯上的故障,從而盡快恢復數據庫系統運行,防止數據被破壞。
目前數據庫技術分為關系型數據庫和非關系型數據庫。
關系型數據庫是依據關系數據模型(二維表)來創建的數據庫,關系模型使用二維表格來存放所有的數據,二維表也稱為關系,它是一系列二維數組的集合,用來代表與存儲數據對象之間的關系,由行和列組成。二維表之間具有“一對一、一對多、多對多”等關聯,所以,一個關系型數據庫就是由二維表及表之間的關聯組成的一個數據結構。
SQL(Structured Query Language)是結構化查詢語言的英文簡稱,它是建立數據庫、修改、查詢數據等的程序設計語言,同時也是數據庫腳本文件的擴展名。SQL 集數據查詢語言、數據操縱語言、數據定義語言和數據控制語言于一體,風格統一,可以完成數據庫中的全部操作,包括定義關系模型、錄入數據、建立數據庫、查詢、修改、刪除數據庫及數據等,它為數據庫系統的開發提供了良好的基礎。在使用SQL 語言進行數據操作時,用戶只需要告訴計算機“做什么”,而不需要說明“怎么做”,其操作過程會由系統自動控制。這種模式減輕了用戶的負擔,有利于提高數據獨立性。關系型數據庫中普遍使用了標準數據查詢語言SQL,可以對關系數據庫中數據進行查詢、操縱、定義和控制,是一個通用的且簡單易懂的數據庫管理語言。
關系型數據庫經過數十年的發展,其理論基礎和相關技術、產品都非常豐富完善,是數據庫領域中的主流產品,且有著原子性、一致性、持久性、隔離性這四種特性(數據庫事務的ACID 特性),此外關系型數據庫還需要提供事務的恢復、回滾、并發控制、死鎖解決等問題。關系型數據庫便于使用且易于理解與維護,還具有很強的安全性、事務保證性,所以被廣泛使用。但是隨著各類互聯網的興起,在生活中各類數據信息都會被我們在線使用或分享,關系型數據庫因為它本身的結構特點而難以實現高效的易擴展的架構,這時非關系型數據庫相對于關系型就會有更大的用處。
非關系型數據庫,也可稱之為NoSQL(Not Only SQL),意思是不僅僅是結構化查詢語言SQL( Structured QueryLanguage)。NoSQL 不同于關系型數據庫的數據庫管理方式,它所采用的數據模型并非關系型數據庫的關系模型,而是采用鍵值、列式、文檔等的非關系模型。它不支持關系型數據庫事務的ACID 特性。它們是建立在非傳統關系數據模型之上,它們的存在是為了滿足更多的互聯網業務,并且一般它們均為開源免費的,因此使用起來更加的簡單方便。它主要的優勢有兩個:
(1)擁有橫、縱雙向的擴展能力:關系型數據庫由于其自身結構特性問題必須布置在多個服務器上,但NoSQL 則可以布置在一個服務器上。
(2)結構自由:在非關系型數據庫中一般保存的是鍵值對。這兩點優勢可以讓NoSQL 更好的融入云計算環境,構建更好的云服務。
關系型數據庫和非關系型數據庫在使用場景上差別比較大,所以必須要在適合他們的領域應用,才能發揮出這兩類數據庫的優勢。
關系型數據庫具有以下優點:
(1)因為關系型數據庫采用的是二維表,它更加的符合邏輯世界,所以相對于表的結構更容易理解;
(2)它們是通用的SQL 語言,可以在一個表以及多個表之間做非常復雜的數據查詢,所以學習操作更加輕松方便;
(3)它的完整性及事務一致性讓它更容易維護。
關系型數據庫的缺點:
(1)因為要維護它的一致性,所以它的讀寫性會較差;
(2)結構固定;
(3)海量數據的讀寫效率不高。
非關系型數據庫具有以下優點:
(1)讀寫性很高;
(2)基于key-value 鍵值對,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL 層的解析,所以性能較好,易于擴展;
(3)格式靈活,數據類型多種多樣,可以是鍵對值,甚至是文檔、圖片,應用場景廣泛,但是關系型數據庫只支持原有的數據類型。
非關系型數據庫的缺點:
(1)不提供SQL 支持,學習成本高;
(2)沒有事務處理。
目前,關系型數據庫應用廣泛且擁有許多成功案列,但隨著社會的發展,人們對于數據的快速處理、響應及大數據分析有著越來越高的要求,并且對數據的高擴展性的需求也不斷提高。關系型數據庫已不能滿足這些要求,這時候就需要非關系型數據庫。由于數據結構設置的方式不同,關系型數據庫呈現的是一種數據規范化之后的結果,而非關系型數據庫展現的則是一種數據結構化存儲方法的集合,對應不同的使用場景,可以選擇不同的數據庫。
非關系型數據庫嚴格上不是一種數據庫,它是一種數據結構化存儲方法的集合,主要有以下幾類:
基于列式的存儲以流的方式在列中存儲所有的數據。對于任何記錄,索引都可以快速地獲取列上的數據;列式存儲支持行檢索,但這需要從每個列獲取匹配的列值,并重新組成行。這種方式使系統具有更高的可擴展性,使得操作更加簡單方便。基于列式的存儲方式針對海量的數據有很好的適應性,這個特點與云計算所需的相關需求是相符合的。目前使用基于列式的數據庫有Apache HBase,Hypertable 以及Google BigTable。
鍵值對存儲方式是非關系數據庫中最簡單的一種存儲方式,它是一個鍵-值的集合,好像數據結構中的Hash 表一樣,每個鍵分別對應一個值,鍵值中所存儲的數據的類型是不受限制的,可以是一個字符串,也可以是一個數字,甚至也可以是一系列的鍵值對封裝成的對象等。通過對主鍵的操作能夠大大提高查詢和修改的速度,大量數據存放也較為方便。在現實場景中,對大量數據的高訪問負載或日志系統中都應用到了鍵值對存儲方式。使用鍵值對存儲數據的數據庫有MemcacheDB、BerkeleyDB、Redis 等。
文檔存儲方式是基于鍵值對存儲方式的,也是每個Key 分別對應一個Value,但是這類方式更加復雜。設計文檔存儲方式的最初的目的就是用于存儲日常文檔的,它將一個特定文檔的結構使用一種特定的模式來存儲,便于進行復雜的查詢和計算。對于網站中大量數據、緩存以及JSON(JavaScriptObjectNotations) 數據的存儲使用較多。典型代表為MongoDB、CouchDB 等,這類數據庫可在海量的數據中快速查詢數據。
圖數據庫所要解決的問題與圖和圖論相關。圖數據庫,例如Neo4j,其目的是為用戶提供一種更好的方法用于管理結構復雜、呈網狀分布的數據。當然,基于圖模型實現的解決方案并不僅有Neo4j 圖形數據庫,有的產品成熟度不同,有的開源或閉源,例如AllegroGraph、FlockDB、InfiniteGraph 和OrientDB 等。在社交網絡、推薦系統等環境中會使用到圖數據庫。
隨著網絡不斷發展,需要處理的數據規模越來越大、越來越復雜,傳統的關系型數據庫已無法應對更加復雜的模型,非關系數據庫憑借其易擴展、高性能和靈活的數據模型得到了非常迅速的發展。非關系數據庫的優勢相當明顯,但同時也存在一些問題,非關系數據庫不支持結構化查詢語言SQL,這無疑會增大學習和使用成本;非關系數據庫無事務處理,這就決定了數據的一致性、完整性很難保存。由于所使用的場景不同,關系型數據庫與非關系型數據庫并非對立的關系,而應優勢互補,共同作用。通常情況可使用關系型數據庫,在某些關系數據庫無法處理數據時可使用非關系數據庫,讓非關系數據庫作為對關系型數據庫補充。