關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫概述與優(yōu)缺點對比
一、關(guān)系型數(shù)據(jù)庫
1、概念
關(guān)系型數(shù)據(jù)庫:是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫,是目前各類數(shù)據(jù)庫中使用最為廣泛的數(shù)據(jù)庫系統(tǒng)。簡單的說,關(guān)系模型指的就是二維表格模型,一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系所組成的一個數(shù)據(jù)組織?,F(xiàn)在使用的主流數(shù)據(jù)庫都是關(guān)系型數(shù)據(jù)庫,比如SQL Server、Mysql、Oracle、DB2、Sybase等。
關(guān)系模型中常用的概念:
關(guān)系:可以理解為一張二維表,每個關(guān)系都具有一個關(guān)系名,就是通常說的表名。
元組:可以理解為二維表中的一行,在數(shù)據(jù)庫中經(jīng)常被稱為記錄。
屬性:可以理解為二維表中的一列,在數(shù)據(jù)庫中經(jīng)常被稱為字段。
域: 屬性的取值范圍,也就是數(shù)據(jù)庫中某一列的取值限制。
關(guān)鍵字:一組可以唯一標識元組的屬性,數(shù)據(jù)庫中常稱為主鍵,由一個或多個列組成。
關(guān)系模式:指對關(guān)系的描述。其格式為:關(guān)系名(屬性1、屬性2......屬性N),在數(shù)據(jù)庫中稱為表結(jié)構(gòu)。
2、關(guān)系型數(shù)據(jù)庫的特點
關(guān)系數(shù)據(jù)庫是支持關(guān)系模型的數(shù)據(jù)庫系統(tǒng)。而關(guān)系模型是由二維表來表示實體和實體間聯(lián)系的模型。使用二維表存儲數(shù)據(jù),對使用者來說很直觀,更容易理解。使用關(guān)系數(shù)據(jù)庫的優(yōu)勢主要表現(xiàn)在以下幾個特性:
(1)操作方便性。通過開發(fā)應用程序和數(shù)據(jù)庫連接,用戶能方便的對數(shù)據(jù)庫中數(shù)據(jù)進行操作,特別對沒有數(shù)據(jù)庫基礎(chǔ)的人,也可以通過數(shù)據(jù)庫管理系統(tǒng),直接在數(shù)據(jù)庫中操作。
(2)易于維護性。關(guān)系數(shù)據(jù)庫在完整性約束中提供了實體完整性、參照完整性和用戶定義的完整性,通過完整性約束可以大大降低數(shù)據(jù)存儲的冗余及數(shù)據(jù)不一致的概率。
(3)訪問數(shù)據(jù)的靈活性。關(guān)系數(shù)據(jù)庫中提供了諸如視圖、存儲過程、觸發(fā)器、索引等對象,使數(shù)據(jù)的訪問更加靈活。
3、關(guān)系型數(shù)據(jù)庫的瓶頸
(1)對數(shù)據(jù)庫高并發(fā)讀寫的需求
Web2.0網(wǎng)站要根據(jù)用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息,無法使用動態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫的并發(fā)負載非常高,往往要達到每秒上萬次的讀寫請求,此時,服務器上的磁盤根本無法承受如此之多的讀寫請求。
(2)對海量數(shù)據(jù)的高效率存儲和訪問的需求
對于大型的社交網(wǎng)站,每天用戶產(chǎn)生海量的用戶動態(tài),隨著用戶的不斷增減,一個數(shù)據(jù)表中的記錄可能有幾億條,對于關(guān)系型數(shù)據(jù)庫來說,在一個有上億條記錄的表里面進行SQL查詢,效率是及其低下的。
(3)高擴展性和可用性
在基于web的結(jié)構(gòu)當中,數(shù)據(jù)庫是最難進行橫向擴展的,當一個應用系統(tǒng)的用戶量和訪問量與日俱增的時候,數(shù)據(jù)庫沒有辦法像web server那樣簡單的通過添加更多的硬件和服務節(jié)點來擴展性能和負載能力。
4、關(guān)系型數(shù)據(jù)遵循ACID原則
事務在英文中是transaction,和現(xiàn)實世界中的交易很類似,它有如下四個特性:
1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務的運行不會改變數(shù)據(jù)庫原本的一致性約束。例如現(xiàn)有完整性約束a+b=10,如果一個事務改變了a,那么必須得改變b,使得事務結(jié)束后依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性
所謂的獨立性是指并發(fā)的事務之間不會互相影響,如果一個事務要訪問的數(shù)據(jù)正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數(shù)據(jù)就不受未提交事務的影響。比如現(xiàn)有有個交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失。
二、NoSQL數(shù)據(jù)庫
NoSQL是用于指代那些非關(guān)系型的、分布式的、且一般不保證遵循ACID原則的非關(guān)系型的數(shù)據(jù)庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。NoSQL用于超大規(guī)模數(shù)據(jù)的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。非關(guān)系型數(shù)據(jù)庫提出了另外一種概念,例如:以鍵值對的方式進行存儲,且結(jié)構(gòu)不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些自己的鍵值對,這樣就不會局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷。使用這種方式,用戶可以根據(jù)需要去添加自己需要的字段。但非關(guān)系型數(shù)據(jù)庫由于很少的約束,他也不能夠提供像SQL所提供的where這種對于字段屬性值情況的查詢。并且難以體現(xiàn)設計的完整性。它只適合存儲一些較為簡單的數(shù)據(jù),對于需要進行較復雜查詢的數(shù)據(jù),SQL數(shù)據(jù)庫顯的更為合適。
1、分布式系統(tǒng)
分布式系統(tǒng)(distributed system)由多臺計算機和通信的軟件組件通過計算機網(wǎng)絡連接(本地網(wǎng)絡或廣域網(wǎng))組成。
分布式系統(tǒng)是建立在網(wǎng)絡之上的軟件系統(tǒng)。正是因為軟件的特性,所以分布式系統(tǒng)具有高度的內(nèi)聚性和透明性。
因此,網(wǎng)絡和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件。
分布式系統(tǒng)可以應用在在不同的平臺上如:Pc、工作站、局域網(wǎng)和廣域網(wǎng)上等。
2、分布式計算的優(yōu)點
可靠性(容錯) :
分布式計算系統(tǒng)中的一個重要的優(yōu)點是可靠性。一臺服務器的系統(tǒng)崩潰并不影響到其余的服務器。
可擴展性:
在分布式計算系統(tǒng)可以根據(jù)需要增加更多的機器。
資源共享:
共享數(shù)據(jù)是必不可少的應用,如銀行,預訂系統(tǒng)。
靈活性:
由于該系統(tǒng)是非常靈活的,它很容易安裝,實施和調(diào)試新的服務。
更快的速度:
分布式計算系統(tǒng)可以有多臺計算機的計算能力,使得它比其他系統(tǒng)有更快的處理速度。
開放系統(tǒng):
由于它是開放的系統(tǒng),本地或者遠程都可以訪問到該服務。
更高的性能:
相較于集中式計算機網(wǎng)絡集群可以提供更高的性能(及更好的性價比)。
3、分布式計算的缺點
故障排除:
故障排除和診斷問題。
軟件:
更少的軟件支持是分布式計算系統(tǒng)的主要缺點。
網(wǎng)絡:
網(wǎng)絡基礎(chǔ)設施的問題,包括:傳輸問題,高負載,信息丟失等。
安全性:
開發(fā)系統(tǒng)的特性讓分布式計算系統(tǒng)存在著數(shù)據(jù)的安全性和共享的風險等問題。
4、關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的比較
4.1、關(guān)系型數(shù)據(jù)庫
- 高度組織化結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化查詢語言(SQL) (SQL)
- 數(shù)據(jù)和關(guān)系都存儲在單獨的表中。
- 數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
- 嚴格的一致性
- 基礎(chǔ)事務
4.2、NoSQL
- 代表著不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預定義的模式
-鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
- 最終一致性,而非ACID屬性
- 非結(jié)構(gòu)化和不可預知的數(shù)據(jù)
- CAP定理
- 高性能,高可用性和可伸縮性
關(guān)系型數(shù)據(jù)庫的最大特點就是事務的一致性:傳統(tǒng)的關(guān)系型數(shù)據(jù)庫讀寫操作都是事務的,具有ACID的特點,這個特性使得關(guān)系型數(shù)據(jù)庫可以用于幾乎所有對一致性有要求的系統(tǒng)中,如典型的銀行系統(tǒng)。
但是,在網(wǎng)頁應用中,尤其是SNS應用中,一致性卻不是顯得那么重要,用戶A看到的內(nèi)容和用戶B看到同一用戶C內(nèi)容更新不一致是可以容忍的,或者說,兩個人看到同一好友的數(shù)據(jù)更新的時間差那么幾秒是可以容忍的,因此,關(guān)系型數(shù)據(jù)庫的最大特點在這里已經(jīng)無用武之地,起碼不是那么重要了。
相反地,關(guān)系型數(shù)據(jù)庫為了維護一致性所付出的巨大代價就是其讀寫性能比較差,而像微博、facebook這類SNS的應用,對并發(fā)讀寫能力要求極高,關(guān)系型數(shù)據(jù)庫已經(jīng)無法應付(在讀方面,傳統(tǒng)上為了克服關(guān)系型數(shù)據(jù)庫缺陷,提高性能,都是增加一級memcache來靜態(tài)化網(wǎng)頁,而在SNS中,變化太快,memchache已經(jīng)無能為力了),因此,必須用新的一種數(shù)據(jù)結(jié)構(gòu)存儲來代替關(guān)系數(shù)據(jù)庫。
關(guān)系數(shù)據(jù)庫的另一個特點就是其具有固定的表結(jié)構(gòu),因此,其擴展性極差,而在SNS中,系統(tǒng)的升級,功能的增加,往往意味著數(shù)據(jù)結(jié)構(gòu)巨大變動,這一點關(guān)系型數(shù)據(jù)庫也難以應付,需要新的結(jié)構(gòu)化數(shù)據(jù)存儲。
于是,非關(guān)系型數(shù)據(jù)庫應運而生,由于不可能用一種數(shù)據(jù)結(jié)構(gòu)化存儲應付所有的新的需求,因此,非關(guān)系型數(shù)據(jù)庫嚴格上不是一種數(shù)據(jù)庫,應該是一種數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合。
必須強調(diào)的是,數(shù)據(jù)的持久存儲,尤其是海量數(shù)據(jù)的持久存儲,還是需要使用關(guān)系型數(shù)據(jù)庫的。
5、NoSQL的優(yōu)點/缺點
優(yōu)點:
- - 高可擴展性
- - 分布式計算
- - 低成本
- - 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
- - 沒有復雜的關(guān)系
缺點:
- - 沒有標準化
- - 有限的查詢功能(到目前為止)
- - 最終一致是不直觀的程序
到此這篇關(guān)于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫概述與優(yōu)缺點對比的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持本站。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。