NoSQL:從關係型數據庫到非關係型數據庫

關係型數據庫web

所謂關係型數據庫,,就是指採用了關係模型來組織數據的數據庫數據庫

什麼是關係模型,簡單說,關係模型就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。數據結構

關係模型中經常使用的概念:併發

一、關係高併發

能夠理解爲一張二維表,每一個關係都有一個關係名,在數據庫中被稱爲表名性能

二、元組大數據

能夠理解爲二維表中的一行,在數據庫中被稱爲記錄網站

三、屬性spa

能夠理解爲二維表中的一列,在數據庫中被稱爲字段設計

四、域

屬性的取值範圍,在數據庫中爲某一列的取值限制

五、關鍵字

一族能夠惟一標識元組的屬性,在數據庫中被稱爲主鍵

六、關係模型

指對關係的描述,其格式爲:關係名(屬性一、屬性二、屬性三、...、屬性N),在數據庫中稱爲表結構

 

關係型數據庫的優缺點

關係型數據庫有以下優勢:

一、容易理解

二維表結構是很是貼近邏輯世界的一個概念,關係模型相對網狀、層次等其餘模型來講更容易理解

二、使用方便

通用的SQL語言使得操做關係型數據很是方便

三、易於維護

豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大見底了數據冗餘和數據不一致的機率

關係型數據庫有以下缺點:

一、高併發讀寫

網站的用戶併發性很是高,每每達到每秒上萬次的讀寫請求,對於傳統關係型數據庫來講,硬盤I/O是一個很大的瓶頸

二、海量數據的高效率讀寫

網站天天產生的數據量是巨大的,對於關係型數據庫來講,在一張包含海量數據的表中查詢,效率是很低的

三、擴展性和可用性低

基於Web的結構當中,數據庫是最難進行橫向擴展的,同時對於數據庫的升級也是很是痛苦的,每每須要停機維護和數據遷移

對於一個網站來講,關係型數據庫的不少特性是不須要的:

一、事務一致性

關係型數據庫在對事物一致性的維護中有很大的開銷,而如今不少Web系統對事物讀寫一致性的要求都不高

二、讀寫實時性

對關係型數據庫而言,插入一條數據以後當即查詢,那確定是能夠讀出這條數據的。可是對於不少Web系統來講並不須要這麼高的實時性,好比發了一條消息後,過幾秒乃至十幾秒以後纔看到這條動態數據是徹底能夠接受的

三、複雜SQL特別是多表關聯查詢

任何大數據的Web系統,都很是忌諱多個大表的關聯查詢以及複雜的數據複雜類型的複雜SQL報表查詢,對不少網站來講,都要經常避免這點,所以極大弱化了SQL的功能

 

NoSQL

NoSQL,Not only SQL,即不只僅是SQL,泛指非關係型數據庫。由於傳統的關係型數據庫在應付Web2.0網站,尤爲是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,NoSQL的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題。

NoSQL提出另外一種不一樣的存儲理念,例如以鍵值對存儲,且結構不固定,每個元組能夠有不同的字段,每一個元組能夠根據須要增長一些本身的鍵值對,這樣就不會侷限於固定的結構,能夠減小一些時間和空間的開銷。使用這種方式,用戶能夠根據須要去添加本身的資源,這樣獲取信息的時候就不須要像關係型數據庫那樣,對多表進行關聯查詢了。只須要根據鍵,拿到對應的value就能夠完成一次查詢。

不過,NoSQL因爲極少的約束,所以它不可以像關係型數據庫所提供的where這種對於字段屬性值狀況的查詢,而且難以體現設計的完整性,它只適合存儲一些較爲簡單的數據,對於須要進行較複雜查詢的數據,關係型數據庫顯得更爲合適。

 

關係型數據庫VS非關係型數據庫

關係型數據庫最大的特色就是事物的一致性:傳統的關係型數據庫讀寫操做都是事物的,具備ACID的特色,這個特性使得關係型數據庫能夠用在幾乎全部對一致性有要求的系統中,好比火車購票系統,搶票的時候同一時間只能有一個用戶搶到某一張固定的車票。

可是,在網頁應用中,尤爲是SNS應用中,一致性卻不是顯得那麼重要,比方說淘寶吧,某件商品有10個庫存量,用戶A和用戶B同時點了下單,照理說應該點擊以後用戶A和用戶B看到的剩餘庫存量應該是8,可是實際上他們看到的可能同時都是9,這又有什麼關係呢?在某些業務場景下,數據在幾秒、十幾秒的更新存在時間差是徹底能夠容忍的,所以,關係型數據庫的最大特色在這裏已經被淡化了。

相反地,關係型數據庫爲了維護一致性所付出的巨大代價就是其讀寫性能較差,而像微博、facebook這類SNS應用,對併發讀寫能力要求極高,關係型數據庫已經沒法應對了,所以,必須用一種新型的數據結構來替代關係型數據庫。

關係型數據庫的另外一個特色就是其具備固定的表結構,所以,其擴展性能極差,而在SNS中,系統的升級、功能的增長,每每意味着數據結構巨大的變更,這一點關係型數據庫也難以應付,須要新的結構化數據存儲,

因而,非關係型數據庫就應運而生,因爲不可能用一種數據結構化存儲應付全部的新需求,所以非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合

相關文章
相關標籤/搜索