知乎1:https://www.zhihu.com/question/24225007/answer/32091571
https://www.zhihu.com/question/24225007/answer/81501685
本質(zhì):非關(guān)系型是傳統(tǒng)關(guān)系型閹割版本徐紧,減少功能,提高性能意乓。
非關(guān)系型Mysql免費(fèi)(實(shí)際開發(fā)足夠)拆檬。Oracle、DB2屡贺、MSSQL是收費(fèi)蠢棱。
非關(guān)系型優(yōu)勢(shì):
性能高:不需SQL層解析,NOSQL是基于鍵值對(duì)甩栈,可以想象成表中的主鍵和值的對(duì)應(yīng)關(guān)系
容易水平擴(kuò)展:基于鍵值對(duì)泻仙,數(shù)據(jù)之間沒有耦合性
關(guān)系型優(yōu)勢(shì):
復(fù)雜查詢:可用SQL語(yǔ)句方便的在一個(gè)表以及多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢。
事務(wù)支持:安全性能很高的數(shù)據(jù)訪問要求得以實(shí)現(xiàn)量没。
都在向著另外一個(gè)方向進(jìn)化玉转。例:NOSQL數(shù)據(jù)庫(kù)具備SQL數(shù)據(jù)庫(kù)復(fù)雜查詢功能的雛形,比如Couchbase的index以及MONGO的復(fù)雜查詢殴蹄。對(duì)于事務(wù)的支持也可以用一些系統(tǒng)級(jí)的原子操作來(lái)實(shí)現(xiàn)例如樂觀鎖之類的方法來(lái)曲線救國(guó)究抓。
SQL數(shù)據(jù)庫(kù)也開始慢慢進(jìn)化,比如HandlerSocker技術(shù)的實(shí)現(xiàn)袭灯,可以在MYSQL上實(shí)現(xiàn)對(duì)于SQL層的穿透刺下,用NOSQL的方式訪問數(shù)據(jù)庫(kù),性能可以上可以達(dá)到甚至超越NOSQL數(shù)據(jù)庫(kù)稽荧¢佘裕可擴(kuò)展性上例如Percona Server,實(shí)現(xiàn)無(wú)中心化的集群姨丈。
特性增加會(huì)消弱本來(lái)優(yōu)勢(shì)畅卓,如Couchbase的index增加會(huì)逐步降低讀寫性能
一、關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系模型指的就是二維表格模型构挤,關(guān)系型數(shù)據(jù)庫(kù)就是由二維表及其之間的聯(lián)系所組成的一個(gè)數(shù)據(jù)組織髓介。
常用的概念:
??? 關(guān)系:二維表,每個(gè)關(guān)系都具有一個(gè)關(guān)系名筋现,就是通常說(shuō)的表名
??? 元組:行唐础,稱為記錄
??? 屬性:列箱歧,稱為字段
??? 域:屬性的取值范圍,某一列的取值限制
??? 關(guān)鍵字:一組可以唯一標(biāo)識(shí)元組的屬性一膨,數(shù)據(jù)庫(kù)中常稱為主鍵呀邢,由一個(gè)或多個(gè)列組成
??? 關(guān)系模式:指對(duì)關(guān)系的描述。其格式為:關(guān)系名(屬性1豹绪,屬性2价淌, ... ... ,屬性N)瞒津,在數(shù)據(jù)庫(kù)中成為表結(jié)構(gòu)
優(yōu)點(diǎn):
容易理解蝉衣,使用方便:通用的SQL語(yǔ)言使得操作關(guān)系型數(shù)據(jù)庫(kù)非常方便
易于維護(hù):豐富的完整性(實(shí)體完整性、參照完整性和用戶定義的完整性)大大減低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率
瓶頸
? 1).高并發(fā)讀寫
??? 硬盤I/O是一個(gè)很大的瓶頸巷蚪,并發(fā)性非常高病毡,每秒上萬(wàn)次讀寫請(qǐng)求時(shí)
? 2).海量數(shù)據(jù)的高效率讀寫
? ? 張包含海量數(shù)據(jù)的表中查詢,效率是非常低的
? 3).高擴(kuò)展性和可用性
? ? 難橫向擴(kuò)展的屁柏,用戶量和訪問量與日俱增啦膜,沒辦法像web server和app server通過(guò)添加硬件和服務(wù)節(jié)點(diǎn)來(lái)擴(kuò)展性能和負(fù)載能力。24小時(shí)不間斷服務(wù)的網(wǎng)站淌喻,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行升級(jí)和擴(kuò)展非常痛苦僧家,需要停機(jī)維護(hù)和數(shù)據(jù)遷移。
? 對(duì)網(wǎng)站來(lái)說(shuō)裸删,關(guān)系型數(shù)據(jù)庫(kù)的很多特性不再需要了:
? 事務(wù)一致性: 維護(hù)中開銷大
? 讀寫實(shí)時(shí)性: 幾秒乃至十幾秒之后才看完全可以接受的
? 復(fù)雜SQL: 任何大數(shù)據(jù)量的web系統(tǒng)八拱,忌諱多個(gè)大表關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的復(fù)雜SQL報(bào)表查詢烁落,特別是SNS類型的網(wǎng)站(SNS乘粒,專指社交網(wǎng)絡(luò)服務(wù),包括了社交軟件和社交網(wǎng)站伤塌。),更多的只是單表的主鍵查詢轧铁,簡(jiǎn)單條件分頁(yè)查詢每聪,SQL的功能極大的弱化了。導(dǎo)致性能欠佳的最主要原因是多表的關(guān)聯(lián)查詢
二齿风、NoSQL
?“no relational”药薯,也就是非關(guān)系型數(shù)據(jù)庫(kù)了。
數(shù)據(jù)庫(kù)事務(wù)必須具備ACID特性救斑,ACID是Atomic原子性童本,Consistency一致性,Isolation隔離性脸候,Durability持久性穷娱。
非關(guān)系型數(shù)據(jù)庫(kù)適合存儲(chǔ)一些較為簡(jiǎn)單的數(shù)據(jù)绑蔫,復(fù)雜查詢的數(shù)據(jù),SQL數(shù)據(jù)庫(kù)顯的更為合適泵额。
2-1.非關(guān)系型數(shù)據(jù)庫(kù)分類
大部分都是開源的配深。極高的性能高,主要分以下幾類:
??? 1).高性能并發(fā)讀寫的key-value數(shù)據(jù)庫(kù):Redis,Tokyo Cabinet,Flare就是這類的代表
??? 2).海量數(shù)據(jù)訪問的面向文檔數(shù)據(jù)庫(kù):海量的數(shù)據(jù)中快速的查詢數(shù)據(jù)嫁盲,MongoDB以及CouchDB
??? 3).可擴(kuò)展性的分布式數(shù)據(jù)庫(kù):可適應(yīng)數(shù)據(jù)量的增加以及數(shù)據(jù)結(jié)構(gòu)的變化
三. 關(guān)系型數(shù)據(jù)庫(kù)? V.S.? 非關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型事務(wù)的一致性:讀寫操作都是事務(wù)篓叶,ACID的特點(diǎn),銀行系統(tǒng)羞秤。
SNS應(yīng)用中缸托,一致性不重要,并發(fā)讀寫要求極高瘾蛋,關(guān)系型數(shù)據(jù)庫(kù)無(wú)法應(yīng)付(在讀方面俐镐,傳統(tǒng)上為了克服關(guān)系型數(shù)據(jù)庫(kù)缺陷,提高性能瘦黑,增加一級(jí)memcache來(lái)靜態(tài)化網(wǎng)頁(yè)京革,而在SNS中,變化太快幸斥,memchache已經(jīng)無(wú)能為力了)
固定表結(jié)構(gòu)匹摇,擴(kuò)展性差,SNS系統(tǒng)升級(jí)甲葬,功能增加廊勃,難以應(yīng)付
數(shù)據(jù)持久存儲(chǔ),尤其是海量數(shù)據(jù)的持久存儲(chǔ)经窖,還是要關(guān)系數(shù)據(jù)庫(kù)這員老將坡垫。
四、oracle與mysql的區(qū)別
一画侣、并發(fā)性
??? mysql:表級(jí)鎖為主冰悠,粒度大,session對(duì)表加鎖時(shí)間過(guò)長(zhǎng)配乱,讓其他session無(wú)法更新溉卓。InnoDB表可用行級(jí)鎖,依賴表索引搬泥。
??? oracle:行級(jí)鎖桑寨,粒度小,只是鎖定sql需要的資源忿檩,數(shù)據(jù)行上加鎖尉尾,不依賴索引。并發(fā)性好
二燥透、一致性
? ?mysql:只支持read commited隔離級(jí)別沙咏。一個(gè)session讀取數(shù)據(jù)時(shí)辨图,其他session不能改,可最后插入芭碍。session更新加排它鎖徒役,其他session無(wú)法訪問。
???oracle:支持serializable隔離級(jí)別窖壕,實(shí)現(xiàn)高級(jí)別的讀一致性忧勿。每個(gè)session提交后其他session才能看到提交的更改。oracle通過(guò)在undo表空間中構(gòu)造多版本數(shù)據(jù)塊來(lái)實(shí)現(xiàn)讀一致性瞻讽,每個(gè)session查詢時(shí)鸳吸,如果對(duì)應(yīng)的數(shù)據(jù)塊發(fā)生變化,oracle會(huì)在undo表空間中為這個(gè)session構(gòu)造它查詢時(shí)的舊的數(shù)據(jù)塊速勇。
三晌砾、事務(wù)
? ? mysql:innodb存儲(chǔ)引擎的行級(jí)鎖的情況下才支持。
??? oracle:完全支持
四烦磁、數(shù)據(jù)持久性
? ? mysql:默認(rèn)提交sql語(yǔ)句养匈,但如果更新過(guò)程中出現(xiàn)db或主機(jī)重啟,也許會(huì)丟失數(shù)據(jù)都伪。
??? oracle:保證提交的數(shù)據(jù)均可恢復(fù)呕乎,因?yàn)閛racle把提交的sql操作線寫入了在線聯(lián)機(jī)日志文件中,保持到了磁盤上陨晶,如果出現(xiàn)數(shù)據(jù)庫(kù)或主機(jī)異常重啟猬仁,重啟后oracle可以考聯(lián)機(jī)在線日志恢復(fù)客戶提交的數(shù)據(jù)。
五先誉、提交方式
? ? mysql自動(dòng)提交湿刽。
??? oracle手動(dòng)提交。
六褐耳、邏輯備份
? ? ?mysql邏輯備份時(shí)要鎖定數(shù)據(jù)诈闺,才能保證備份的數(shù)據(jù)是一致的,影響業(yè)務(wù)正常的dml使用铃芦。
? ? ?oracle邏輯備份時(shí)不鎖定數(shù)據(jù)买雾,且備份的數(shù)據(jù)是一致的。
七杨帽、熱備份
? ?mysql:myisam的引擎,用mysql自帶mysqlhostcopy熱備時(shí)嗤军,需要給表加讀鎖注盈,影響dml操作。innodb引擎叙赚,備份innodb的表和索引老客,不會(huì)備份.frm文件僚饭。用ibbackup備份時(shí),日志文件記錄備份期間數(shù)據(jù)變化胧砰,不用鎖表鳍鸵,不影響其他用戶使用數(shù)據(jù)庫(kù)。此工具是收費(fèi)的尉间。innobackup是結(jié)合ibbackup使用的一個(gè)腳本偿乖,他會(huì)協(xié)助對(duì).frm文件的備份。
??? oracle有成熟的熱備工具rman哲嘲,熱備時(shí)贪薪,不影響用戶使用數(shù)據(jù)庫(kù)。即使備份的數(shù)據(jù)庫(kù)不一致眠副,也可以在恢復(fù)時(shí)通過(guò)歸檔日志和聯(lián)機(jī)重做日志進(jìn)行一致的回復(fù)画切。
八、sql語(yǔ)句的擴(kuò)展和靈活性
??? mysql:對(duì)sql語(yǔ)句方便的擴(kuò)展囱怕,比如limit功能霍弹,insert可以一次插入多行數(shù)據(jù),select某些管理數(shù)據(jù)可以不加from娃弓。
??? oracle:穩(wěn)重傳統(tǒng)一些典格。
九、復(fù)制
? ? mysql:復(fù)制服務(wù)器配置簡(jiǎn)單忘闻,但主庫(kù)出問題時(shí)钝计,叢庫(kù)有可能丟失一定的數(shù)據(jù)。且需要手工切換叢庫(kù)到主庫(kù)齐佳。
??? oracle:既有推或拉式的傳統(tǒng)數(shù)據(jù)復(fù)制私恬,也有dataguard的雙機(jī)或多機(jī)容災(zāi)機(jī)制,主庫(kù)出現(xiàn)問題是炼吴,可以自動(dòng)切換備庫(kù)到主庫(kù)本鸣,配置管理復(fù)雜。
十硅蹦、性能診斷
? ? mysql診斷調(diào)優(yōu)方法較少荣德,主要有慢查詢?nèi)罩?/b>。
??? oracle有各種成熟的性能診斷調(diào)優(yōu)工具童芹,能實(shí)現(xiàn)很多自動(dòng)分析涮瞻、診斷功能。比如awr假褪、addm署咽、sqltrace、tkproof等
十一、權(quán)限與安全
??? mysql用戶與主機(jī)有關(guān)宁否,沒有什么意義窒升,另外更容易被仿冒主機(jī)及ip有可乘之機(jī)。
??? oracle的權(quán)限與安全概念比較傳統(tǒng)慕匠,中規(guī)中矩饱须。
十二、分區(qū)表和分區(qū)索引
??? oracle成熟
??? mysql不太成熟穩(wěn)定台谊。
十三蓉媳、管理工具
? ? mysql管理工具較少,在linux下的管理工具的安裝有時(shí)要安裝額外的包(phpmyadmin, etc)青伤,有一定復(fù)雜性督怜。
??? oracle有多種成熟的命令行、圖形界面狠角、web管理工具号杠,還有很多第三方的管理工具,管理極其方便高效丰歌。
原文:https://blog.csdn.net/oChangWen/article/details/53423301