一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

從關(guān)系型數(shù)據(jù)庫到非關(guān)系型數(shù)據(jù)庫

 神人自有天助 2016-12-03

1. 關(guān)系型數(shù)據(jù)庫

關(guān)系型數(shù)據(jù)庫,是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫。

關(guān)系模型是在1970年由IBM的研究員E.F.Codd博士首先提出的,在之后的幾十年中,關(guān)系模型的概念得到了充分的發(fā)展并逐漸成為主流數(shù)據(jù)庫結(jié)構(gòu)的主流模型。

簡單來說,關(guān)系模型指的就是二維表格模型,而一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系所組成的一個數(shù)據(jù)組織。

關(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)

關(guān)系型數(shù)據(jù)庫的優(yōu)點:

  • 容易理解:二維表結(jié)構(gòu)是非常貼近邏輯世界的一個概念,關(guān)系模型相對網(wǎng)狀、層次等其他模型來說更容易理解
  • 使用方便:通用的SQL語言使得操作關(guān)系型數(shù)據(jù)庫非常方便
  • 易于維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率

2. 關(guān)系型數(shù)據(jù)庫瓶頸

  • 高并發(fā)讀寫需求

網(wǎng)站的用戶并發(fā)性非常高,往往達到每秒上萬次讀寫請求,對于傳統(tǒng)關(guān)系型數(shù)據(jù)庫來說,硬盤I/O是一個很大的瓶頸

  • 海量數(shù)據(jù)的高效率讀寫

網(wǎng)站每天產(chǎn)生的數(shù)據(jù)量是巨大的,對于關(guān)系型數(shù)據(jù)庫來說,在一張包含海量數(shù)據(jù)的表中查詢,效率是非常低的

  • 高擴展性和可用性

在基于web的結(jié)構(gòu)當中,數(shù)據(jù)庫是最難進行橫向擴展的,當一個應用系統(tǒng)的用戶量和訪問量與日俱增的時候,數(shù)據(jù)庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節(jié)點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網(wǎng)站來說,對數(shù)據(jù)庫系統(tǒng)進行升級和擴展是非常痛苦的事情,往往需要停機維護和數(shù)據(jù)遷移。


對網(wǎng)站來說,關(guān)系型數(shù)據(jù)庫的很多特性不再需要了:

  • 事務一致性

關(guān)系型數(shù)據(jù)庫在對事物一致性的維護中有很大的開銷,而現(xiàn)在很多web2.0系統(tǒng)對事物的讀寫一致性都不高

  • 讀寫實時性

對關(guān)系數(shù)據(jù)庫來說,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出這條數(shù)據(jù)的,但是對于很多web應用來說,并不要求這么高的實時性,比如發(fā)一條消息之后,過幾秒乃至十幾秒之后才看到這條動態(tài)是完全可以接受的

  • 復雜SQL,特別是多表關(guān)聯(lián)查詢

任何大數(shù)據(jù)量的web系統(tǒng),都非常忌諱多個大表的關(guān)聯(lián)查詢,以及復雜的數(shù)據(jù)分析類型的復雜SQL報表查詢,特別是SNS類型的網(wǎng)站,從需求以及產(chǎn)品階級角度,就避免了這種情況的產(chǎn)生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能極大的弱化了


在關(guān)系型數(shù)據(jù)庫中,導致性能欠佳的最主要原因是多表的關(guān)聯(lián)查詢,以及復雜的數(shù)據(jù)分析類型的復雜SQL報表查詢。為了保證數(shù)據(jù)庫的ACID特性,我們必須盡量按照其要求的范式進行設計,關(guān)系型數(shù)據(jù)庫中的表都是存儲一個格式化的數(shù)據(jù)結(jié)構(gòu)。每個元組字段的組成都是一樣,即使不是每個元組都需要所有的字段,但數(shù)據(jù)庫會為每個元組分配所有的字段,這樣的結(jié)構(gòu)可以便于標語表之間進行鏈接等操作,但從另一個角度來說它也是關(guān)系型數(shù)據(jù)庫性能瓶頸的一個因素。

3. NoSQL

NoSQL一詞首先是Carlo Strozzi在1998年提出來的,指的是他開發(fā)的一個沒有SQL功能,輕量級的,開源的關(guān)系型數(shù)據(jù)庫。這個定義跟我們現(xiàn)在對NoSQL的定義有很大的區(qū)別,它確確實實字如其名,指的就是“沒有SQL”的數(shù)據(jù)庫。但是NoSQL的發(fā)展慢慢偏離了初衷,我們要的不是“no sql”,而是“no relational”,也就是我們現(xiàn)在常說的非關(guān)系型數(shù)據(jù)庫了。

2009年初,Johan Oskarsson舉辦了一場關(guān)于開源分布式數(shù)據(jù)庫的討論,Eric Evans在這次討論中再次提出了NoSQL一詞,用于指代那些非關(guān)系型的,分布式的,且一般不保證遵循ACID原則的數(shù)據(jù)存儲系統(tǒng)。Eric Evans使用NoSQL這個詞,并不是因為字面上的“沒有SQL”的意思,他只是覺得很多經(jīng)典的關(guān)系型數(shù)據(jù)庫名字都叫“**SQL”,所以為了表示跟這些關(guān)系型數(shù)據(jù)庫在定位上的截然不同,就是用了“NoSQL“一詞。

注:數(shù)據(jù)庫事務必須具備ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔離性,Durability持久性。


非關(guān)系型數(shù)據(jù)庫提出另一種理念,例如,以鍵值對存儲,且結(jié)構(gòu)不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些自己的鍵值對,這樣就不會局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷。使用這種方式,用戶可以根據(jù)需要去添加自己需要的字段,這樣,為了獲取用戶的不同信息,不需要像關(guān)系型數(shù)據(jù)庫中,要對多表進行關(guān)聯(lián)查詢。僅需要根據(jù)id取出相應的value就可以完成查詢。但非關(guān)系型數(shù)據(jù)庫由于很少的約束,他也不能夠提供像SQL所提供的where這種對于字段屬性值情況的查詢。并且難以體現(xiàn)設計的完整性。他只適合存儲一些較為簡單的數(shù)據(jù),對于需要進行較復雜查詢的數(shù)據(jù),SQL數(shù)據(jù)庫顯的更為合適。


4. 關(guān)系型數(shù)據(jù)庫  V.S.  非關(guān)系型數(shù)據(jù)庫

關(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. 非關(guān)系型數(shù)據(jù)庫分類

由于非關(guān)系型數(shù)據(jù)庫本身天然的多樣性,以及出現(xiàn)的時間較短,因此,不想關(guān)系型數(shù)據(jù)庫,有幾種數(shù)據(jù)庫能夠一統(tǒng)江山,非關(guān)系型數(shù)據(jù)庫非常多,并且大部分都是開源的。

這些數(shù)據(jù)庫中,其實實現(xiàn)大部分都比較簡單,除了一些共性外,很大一部分都是針對某些特定的應用需求出現(xiàn)的,因此,對于該類應用,具有極高的性能。依據(jù)結(jié)構(gòu)化方法以及應用場合的不同,主要分為以下幾類:

  • 面向高性能并發(fā)讀寫的key-value數(shù)據(jù)庫:

key-value數(shù)據(jù)庫的主要特點即使具有極高的并發(fā)讀寫性能,Redis,Tokyo Cabinet,Flare就是這類的代表

  • 面向海量數(shù)據(jù)訪問的面向文檔數(shù)據(jù)庫:

這類數(shù)據(jù)庫的特點是,可以在海量的數(shù)據(jù)中快速的查詢數(shù)據(jù),典型代表為MongoDB以及CouchDB

  • 面向可擴展性的分布式數(shù)據(jù)庫:

這類數(shù)據(jù)庫想解決的問題就是傳統(tǒng)數(shù)據(jù)庫存在可擴展性上的缺陷,這類數(shù)據(jù)庫可以適應數(shù)據(jù)量的增加以及數(shù)據(jù)結(jié)構(gòu)的變化




    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    一区二区免费视频中文乱码国产| av在线免费观看在线免费观看| 久久热在线视频免费观看| 夜色福利久久精品福利| 日本高清加勒比免费在线| 九九热在线视频观看最新| 日韩精品中文字幕在线视频| 日韩性生活视频免费在线观看| 国产熟女一区二区不卡| 亚洲欧美国产精品一区二区| 精品丝袜一区二区三区性色| 欧美人妻盗摄日韩偷拍| 日本欧美一区二区三区就| 国产精品午夜福利免费在线| 99久久精品免费精品国产| 亚洲二区欧美一区二区| 精品少妇一区二区三区四区| 精品国产亚洲av成人一区| 成人你懂的在线免费视频| 日本精品啪啪一区二区三区| 日韩欧美二区中文字幕| 亚洲欧美日韩精品永久| 久久亚洲成熟女人毛片| 欧美国产极品一区二区| 国产不卡的视频在线观看| 欧美成人黄色一区二区三区| 黄色国产一区二区三区| 东北女人的逼操的舒服吗| 精品推荐久久久国产av| 国产美女网红精品演绎| 国产精品免费精品一区二区| 亚洲欧美国产精品一区二区| 99国产精品国产精品九九| 91人妻人人精品人人爽| 欧美日韩国内一区二区| 久久91精品国产亚洲| 熟女乱一区二区三区四区| 国产一区欧美一区日韩一区 | 黄色国产自拍在线观看| 欧美精品二区中文乱码字幕高清| 正在播放国产又粗又长|