中文譯做甲骨文,這是一家傳奇的公司,有一個傳奇的大老闆Larry Ellision。 Ellision 32歲還一事無成,讀了三個大學,沒獲得一個學位文憑,換了十幾家公司,老婆也離他而去。開始創業時只有1200美圓,卻使得Oracle公司連續12年銷售額每一年翻一番。
Oracle成立於1977年,早期的理論基礎,反而來自於一篇IBM的論文《A Relational Model of Data for Large Shared Data Banks》【1】。做者CODD選取了關係代數的五種運算,並基於運算,架構了一種新型的數據存儲模型。基於這種模型,Oracle成爲了一個很是典型的關係數據庫。所以也變的嚴謹、安全、高速、穩定,而且變的愈來愈龐大。
因爲其誕生早、結構嚴謹、高可用、高性能等特色,使其在傳統數據庫應用中大殺四方,金融、通訊、能源、運輸、零售、製造等各個行業的大型公司基本都是用了Oracle,世界500強幾乎100%都是Oracle的用戶。php
MySQL的最初的核心思想,主要是開源、簡便易用。其開發可追溯至1985年,而第一個內部發行版本誕生,已是1995年。到1998年,MySQL已經能夠支持10中操做系統了,其中就包括win平臺。但依然問題多多,如不支持事務操做、子查詢 、外鍵、存儲過程和視圖等功能。下圖是一個截止至2006年的數據庫市場佔有率【2】:
圖中能夠看出,MySQL的爆發實際是在0一、02年,尤爲是02年發佈的4.0 Beta版,正式選定InnoDB做爲默認引擎,對事務處理能力及數據緩存能力有了極大的提升。同年4.1版開始支持子查詢,至此MySQL終於蛻變成一個成熟的關係型數據庫系統。05年的5.0版本又添加了存儲過程、服務端遊標、觸發器、查詢優化以及分佈式事務功能,但同年被Oracle抄了後路,InnoDB被Oracle收編。08年,MySQL被Sun收購,09年,Oracle收購了Sun和MySQL。
因爲MySQL的早期定位,其主要應用場景就是互聯網開發。基本上,互聯網的爆發成就了MySQL,LAMP架構風靡天下。而因爲MySQL更多的的追求輕量、易用,以及早期的事物操做及複雜查詢優化的缺失,在傳統的數據庫應用場景中,份額極少。mysql
Oracle的應用,主要在傳統行業的數據化業務中,好比:銀行、金融這樣的對可用性、健壯性、安全性、實時性要求極高的業務;零售、物流這樣對海量數據存儲分析要求很高的業務。此外,高新制造業如芯片廠也基本都離不開Oracle;電商也有不少使用者,如京東(正在投奔Oracle)、阿里巴巴(計劃去Oracle化)。並且因爲Oracle對複雜計算、統計分析的強大支持,在互聯網數據分析、數據挖掘方面的應用也愈來愈多。一個典型場景是這樣的:
某電信公司(非國內)下屬某分公司的數據中心,有4臺Oracle Sun的大型服務器用來安裝Solaris操做系統和Oracle並提供計算服務,3臺Sun Storage磁盤陣列來提供Oracle數據存儲,12臺IBM小型機,一臺Oracle Exadata服務器,一臺500T的磁帶機用來存儲歷史數據,San鏈接內網,使用Tuxedo中間件來保證擴展性和無損遷移。創建支持高併發的Oracle數據庫,經過OLTP系統用來對海量數據實時處理、操做,創建高運算量的Oracle數據倉庫,用OLAP系統用來分析營收數據及提供自動報表。總預算約750萬美金。linux
MySQL基本是生於互聯網,長於互聯網。web
其應用實例也大都集中於互聯網方向,MySQL的高併發存取能力並不比大型數據庫差,同時價格便宜,安裝使用簡便快捷,深受廣大互聯網公司的喜好。而且因爲MySQL的開源特性,針對一些對數據庫有特別要求的應用,能夠經過修改代碼來實現定向優化,例如SNS、LBS等互聯網業務。一個典型的應用場景是:
某互聯網公司,成立之初,僅有PC數臺,經過LAMP架構迅速搭起網站框架。隨着業務擴張、市場擴大,迅速發展成爲6臺Dell小型機的中型網站。如今花了三年,終於成爲垂直領域的最大網站,計劃中的數據中心,擁有Dell機架式服務器40臺,總預算20萬美金。算法
像Facebook、開心00一、人人網、優酷、豆瓣、淘寶等高流量、高併發的網站,單點數據庫很難支撐得住,WEB2.0類型的網站中使用MySQL的居多,要麼用MySQL自帶的MySQL NDB Cluster(MySQL5.0及以上版本支持MySQL NDB Cluster功能),或者用MySQL自帶的分區功能(MySQL5.1及以上版本支持分區功能),我所知道的使用這兩種方案的不多,通常使用主從複製,再加上MySQL Proxy實現負載均衡、讀寫分離等功能,在使用主從複製的基礎上,再使用垂直切分及水平切分;或者不使用主從複製,徹底使用垂直切分加上水平切分再加上相似Memcached的系統也能夠解決問題。sql
其實要說執行的區別,主要仍是架構的區別。正是架構致使了相同SQL在執行過程當中的解釋、優化、效率的差別。這裏只作粗略說明,就不細說了:數據庫
數據文件包括:控制文件、數據文件、重作日誌文件、參數文件、歸檔文件、密碼文件。這是根據文件功能行進行劃分,而且全部文件都是二進制編碼後的文件,對數據庫算法效率有極大的提升。因爲Oracle文件管理的統一性,就能夠對SQL執行過程當中的解析和優化,指定統一的標準:
RBO(基於規則的優化器)、CBO(基於成本的優化器)
經過優化器的選擇,以及無敵的HINT規則,給與了SQL優化極大的自由,對CPU、內存、IO資源進行方方面面的優化。緩存
最大的一個特點,就是自由選擇存儲引擎。每一個表都是一個文件,均可以選擇合適的存儲引擎。常見的引擎有 InnoDB、 MyISAM、 NDBCluster等。但因爲這種開放插件式的存儲引擎,好比要求數據庫與引擎之間的鬆耦合關係。從而致使文件的一致性大大下降。在SQL執行優化方面,也就有着一些不可避免的瓶頸。在多表關聯、子查詢優化、統計函數等方面是軟肋,並且只支持極簡單的HINT。安全
併發性是oltp數據庫最重要的特性,但併發涉及到資源的獲取、共享與鎖定。服務器
mysql以表級鎖爲主,對資源鎖定的粒度很大,若是一個session對一個表加鎖時間過長,會讓其餘session沒法更新此表中的數據。
雖然InnoDB引擎的表能夠用行級鎖,但這個行級鎖的機制依賴於表的索引,若是表沒有索引,或者sql語句沒有使用索引,那麼仍然使用表級鎖。
oracle使用行級鎖,對資源鎖定的粒度要小不少,只是鎖定sql須要的資源,而且加鎖是在數據庫中的數據行上,不依賴與索引。因此oracle對併發性的支持要好不少。
oracle支持serializable的隔離級別,能夠實現最高級別的讀一致性。每一個session提交後其餘session才能看到提交的更改。oracle經過在undo表空間中構造多版本數據塊來實現讀一致性,
每一個session查詢時,若是對應的數據塊發生變化,oracle會在undo表空間中爲這個session構造它查詢時的舊的數據塊。
mysql沒有相似oracle的構造多版本數據塊的機制,只支持read commited的隔離級別。一個session讀取數據時,其餘session不能更改數據,但能夠在表最後插入數據。
session更新數據時,要加上排它鎖,其餘session沒法訪問數據。
很早就徹底支持事務。
在innodb存儲引擎的行級鎖的狀況下才支持事務。
保證提交的數據都可恢復,由於oracle把提交的sql操做線寫入了在線聯機日誌文件中,保持到了磁盤上,若是出現數據庫或主機異常重啓,重啓後oracle能夠考聯機在線日誌恢復客戶提交的數據。
默認提交sql語句,但若是更新過程當中出現db或主機重啓的問題,也許會丟失數據。
默認不自動提交,須要用戶手動提交。
默認是自動提交。
邏輯備份時不鎖定數據,且備份的數據是一致的。
邏輯備份時要鎖定數據,才能保證備份的數據是一致的,影響業務正常的dml使用。
有成熟的熱備工具rman,熱備時,不影響用戶使用數據庫。即便備份的數據庫不一致,也能夠在恢復時經過歸檔日誌和聯機重作日誌進行一致的回覆。
myisam的引擎,用mysql自帶的mysqlhostcopy熱備時,須要給表加讀鎖,影響dml操做。
innodb的引擎,它會備份innodb的表和索引,可是不會備份.frm文件。用ibbackup備份時,會有一個日誌文件記錄備份期間的數據變化,所以能夠不用鎖表,不影響其餘用戶使用數據庫。但此工具是收費的。
innobackup是結合ibbackup使用的一個腳本,他會協助對.frm文件的備份。
對sql語句有不少很是實用而方便的擴展,好比limit功能,insert能夠一次插入多行數據,select某些管理數據能夠不加from。
在這方面感受更加穩重傳統一些。
既有推或拉式的傳統數據複製,也有dataguard的雙機或多機容災機制,主庫出現問題是,能夠自動切換備庫到主庫,但配置管理較複雜。
複製服務器配置簡單,但主庫出問題時,叢庫有可能丟失必定的數據。且須要手工切換叢庫到主庫。
有各類成熟的性能診斷調優工具,能實現不少自動分析、診斷功能。好比awr、addm、sqltrace、tkproof等
的診斷調優方法較少,主要有慢查詢日誌。
的用戶與主機有關,感受沒有什麼意義,另外更容易被仿冒主機及ip有可乘之機。
的權限與安全概念比較傳統,中規中矩。
oracle的分區表和分區索引功能很成熟,能夠提升用戶訪問db的體驗。
mysql的分區表還不太成熟穩定。
mysql有多種成熟的命令行、圖形界面、web管理工具,還有不少第三方的管理工具,管理極其方便高效。
mysql管理工具較少,在linux下的管理工具的安裝有時要安裝額外的包(phpmyadmin, etc),有必定複雜性