關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系的個(gè)人理解:關(guān)系就是表內(nèi)數(shù)據(jù)之間的晰搀、表之間的關(guān)系。表內(nèi)數(shù)據(jù)是嚴(yán)格的對(duì)應(yīng)關(guān)系同云,字段缺一不可糖权,值缺一不可,也就是一致的數(shù)據(jù)結(jié)構(gòu)炸站,這也就是django新增字段時(shí)星澳,需要?jiǎng)h掉數(shù)據(jù),重新migrate旱易。表之間的關(guān)系三種:一對(duì)一禁偎、一對(duì)多、多對(duì)多阀坏。關(guān)系模型指的就是二維表格模型如暖;
***關(guān)系型數(shù)據(jù)庫(kù)以行和列的形式存儲(chǔ)數(shù)據(jù),行和列的形式被稱為表忌堂,表是由一組相關(guān)實(shí)體組成的集合盒至。一組表組成了數(shù)據(jù)庫(kù)。
***表中的一行稱為關(guān)系的一個(gè)元組,用來(lái)存儲(chǔ)事物的一個(gè)實(shí)例枷遂;
***表中的一列稱為關(guān)系的一個(gè)屬性樱衷,用來(lái)描述實(shí)體的某一特征。
***表內(nèi)字段的組成一樣酒唉,即便某個(gè)數(shù)據(jù)不需要某個(gè)字段矩桂,系統(tǒng)也會(huì)強(qiáng)加上這個(gè)字段及默認(rèn)值,這種結(jié)構(gòu)便于表與表之間進(jìn)行操作痪伦,但它也是關(guān)系數(shù)據(jù)庫(kù)性能瓶頸的一個(gè)因素侄榴。
1.關(guān)系型數(shù)據(jù)庫(kù)理論 - ACID
ACID,是指數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)在寫入或更新資料的過(guò)程中网沾,為保證事務(wù)(transaction)是正確可靠的癞蚕,所必須具備的四個(gè)特性:原子性(atomicity,或稱不可分割性)绅这、一致性(consistency)涣达、隔離性(isolation,又稱獨(dú)立性)证薇、持久性(durability)度苔。
A – Atomicity – 原子性
一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成浑度,要么全部不完成寇窑,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤箩张,會(huì)被回滾(Rollback)到事務(wù)開(kāi)始前的狀態(tài)甩骏,就像這個(gè)事務(wù)從來(lái)沒(méi)有被執(zhí)行過(guò)一樣。
C – Consistency – 一致性
在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后先慷,數(shù)據(jù)庫(kù)的完整性沒(méi)有被破壞饮笛。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度论熙、串聯(lián)性以及后續(xù)數(shù)據(jù)庫(kù)可以自發(fā)性地完成預(yù)定的工作福青。
I – Isolation – 隔離性
數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致脓诡。事務(wù)隔離分為不同級(jí)別无午,包括讀未提交(Read uncommitted)、讀提交(read committed)祝谚、可重復(fù)讀(repeatable read)和串行化(Serializable)宪迟。
D – Durability – 持久性
事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改是永久的交惯,即便系統(tǒng)故障也不會(huì)丟失次泽。
2.優(yōu)缺點(diǎn)
關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì):
1: 容易理解:二維表結(jié)構(gòu)是非常貼近邏輯世界一個(gè)概念穿仪,關(guān)系模型相對(duì)網(wǎng)狀、層次等其他模型來(lái)說(shuō)更容易理解箕憾;
2:保持?jǐn)?shù)據(jù)的一致性(事務(wù)處理)
3:由于以標(biāo)準(zhǔn)化為前提牡借,數(shù)據(jù)更新的開(kāi)銷很小(相同的字段基本上都只有一處)
4:支持SQL袭异,可以進(jìn)行Join等復(fù)雜查詢(幾張表之間)
關(guān)系型數(shù)據(jù)庫(kù)的不足:
不擅長(zhǎng)的處理
1:大量數(shù)據(jù)的寫入處理
2:為有數(shù)據(jù)更新的表做索引或表結(jié)構(gòu)(schema)變更
3:字段不固定時(shí)應(yīng)用
4:對(duì)簡(jiǎn)單查詢需要快速返回結(jié)果的處理
非關(guān)系數(shù)據(jù)庫(kù)
結(jié)構(gòu)不固定,集合內(nèi)數(shù)據(jù)字段可以不一樣炬藤,自由度高御铃,可以減少一些時(shí)間和空間的開(kāi)銷。
四大類型:
鍵值對(duì)存儲(chǔ)(key-value)沈矿,文檔存儲(chǔ)(document store:mongodb)上真,基于列的數(shù)據(jù)庫(kù)(column-oriented),還有就是圖形數(shù)據(jù)庫(kù)(graph database)
主流的非關(guān)系型數(shù)據(jù)庫(kù)有 NoSql羹膳、MongoDB睡互、Cloudant、
特征:
1陵像、使用鍵值對(duì)存儲(chǔ)數(shù)據(jù)就珠;
2、分布式醒颖;
3妻怎、一般不支持ACID特性;
4泞歉、非關(guān)系型數(shù)據(jù)庫(kù)嚴(yán)格上不是一種數(shù)據(jù)庫(kù)逼侦,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的集合。
優(yōu)點(diǎn):
1腰耙、無(wú)需經(jīng)過(guò)sql層的解析榛丢,讀寫性能很高;
2挺庞、基于鍵值對(duì)晰赞,數(shù)據(jù)沒(méi)有耦合性,容易擴(kuò)展挠阁;
3宾肺、存儲(chǔ)數(shù)據(jù)的格式:nosql的存儲(chǔ)格式是key,value形式、文檔形式侵俗、圖片形式等等锨用,文檔形式、圖片形式等等隘谣,而關(guān)系型數(shù)據(jù)庫(kù)則只支持基礎(chǔ)類型增拥。
缺點(diǎn):
1啄巧、不提供sql支持,學(xué)習(xí)和使用成本較高掌栅;
2秩仆、無(wú)事務(wù)處理,附加功能bi和報(bào)表等支持也不好猾封;