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