1. 概述
SQL (Structured Query Language),結構化查詢語言,用來與多種數據庫建立聯系,根據ANSI(美國國家標准協會)的規定,SQL為RDBMS(關系型數據庫)的標准語言。
關系型數據庫:是指采用了關系模型來組織數據的數據庫。簡單來說,關系模型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系組成的一個數據組織。
非關系型數據庫:非關系型數據庫嚴格上說不是一種數據庫,是一種數據結構化儲存方法的集合。
1.1. Oracle數據庫
中文譯作甲骨文;其誕生早、結構嚴謹、高可用、高性能等特點,使其廣泛應用於傳統數據庫。
1.2. IBM DB2 數據庫
DB2 超大型,與Oracle的定位和架構非常相似。是美國IBM公司開發的一套關系型數據庫管理系統,它主要的運行環境為UNIX(包括IBM自家的AIX)、Linux、IBM i(舊稱OS/400)、z/OS,以及Windows服務器版本。
DB2主要應用於大型應用系統,具有較好的可伸縮性,可支持從大型機到單用戶環境,應用於所有常見的服務器操作系統平台下。
DB2提供了高層次的數據利用性、完整性、安全性、可恢復性,以及小規模到大規模應用程序的執行能力,具有與平台無關的基本功能和SQL命令。
DB2采用了數據分級技術,能夠使大型機數據很方便地下載到LAN數據庫服務器,使得客戶機/服務器用戶和基於LAN的應用程序可以訪問大型機數據,並使數據庫本地化及遠程連接透明化。
DB2以擁有一個非常完備的查詢優化器而著稱,其外部連接改善了查詢性能,並支持多任務並行查詢。
DB2具有很好的網絡支持能力,每個子系統可以連接十幾萬個分布式用戶,可同時激活上千個活動線程,對大型分布式應用系統尤為適用。
1.3. MYSQL 數據庫
MySQL的最初的核心思想,主要是開源、簡便易用。
由瑞典 MySQL AB 公司開發,於1995年發行第一個內部發行版本。到1998年,MySQL已經可以支持10中操作系統,其中就包括win平台。但依然問題多多,如不支持事務操作、子查詢 、外鍵、存儲過程和視圖等功能。
MySQL的爆發實際是在01、02年,尤其是02年發布的4.0 Beta版,正式選定InnoDB作為默認引擎,對事務處理能力及數據緩存能力有了極大的提高。同年4.1版開始支持子查詢,至此MySQL終於蛻變成一個成熟的關系型數據庫系統。
05年的5.0版本又添加了存儲過程、服務端游標、觸發器、查詢優化以及分布式事務功能,但同年InnoDB被Oracle收編。
08年,MySQL被Sun收購.
09年,Oracle收購Sun和MySQL。
由於MySQL的早期定位,其主要應用場景就是互聯網開發。基本上,互聯網的爆發成就了MySQL,LAMP架構風靡天下。
由於MySQL更多的的追求輕量、易用,以及早期的事物操作及復雜查詢優化的缺失,在傳統的數據庫應用場景中,份額極少。
MySQL 軟件采用雙授權政策,分為社區版和商業版,其體積小、速度快、總體擁有成本低,開放源碼。
1.4. MS SQL server數據庫
SQL Server最初是由Microsoft, Sybase and Ashton-Tate三家公司為OS/2操作系統(IBM公司)開發的。隨着OS/2項目的失敗,大家也分道揚鑣。
Microsoft轉向自己的win操作系統,作為windows NT軟件方案的一部分。而Sybase則專注於Linux/Unix方向的數據庫開發。
MS SQL Server 是Microsoft公司推出一套產品,它具有使用方便、可伸縮性好、與相關軟件集成程度高等優點,逐漸成為Windows平台下進行數據庫應用開發較為理想的選擇之一。
它提供強大的可視化界面、高度集成的管理開發工具,在快速構建商業智能(BI)方面頗有建樹;且SQL Server與其它數據庫,如Access、FoxPro、Excel等有良好的ODBC接口,可以把上述數據庫 轉成SQLServer的數據庫。
2. 各數據庫的比較
2.1 平台開放性
SQL Server:
- 在Windows下運行; 一般同Microsoft產品.net平台一起搭配使用。
- SQL server2019通過開源支持,可以靈活選擇語言和平台。在支持 Kubernetes 的 Linux 容器上或在 Windows 上運行 SQL Server。
Oracle:在所有主流平台(包括windows)上運行; 完全支持所有的工業標准。采用完全開放策略。可以使客戶選擇最適合的解決方案。對開發商全力支持。
DB2: 能在所有主流平台上運行(包括windows)。最適於海量數據。
MYSQL:在所有主流平台(包括windows)上運行;
2.2 安全性
Oracle/DB2 的安全認證獲得最高認證級別的ISO標准認證,而SQL Server沒有獲得什么安全認證;
2.3 性能
Oracle:性能最高,保持windows NT 下的TPC-D和TPC-C的世界記錄。
DB2:適用於數據倉庫和在線事物處理性能較高。 客戶端支持及應用模式 。
SQL Server:多用戶時性能不佳。
2.4 客戶端支持及應用模式
SQL Server:C/S結構,只支持windows客戶,可以用ADO,DAO,OLEDB,ODBC連接。
Oracle 多層次網絡計算,支持多種工業標准,可以用ODBC、JDBC、OCI等網絡客戶連接。
2.5 費用
Oracle、DB2 和 SQL Server是商業收費的;
MySql 是開源免費的;
Oracle和My Sql是甲骨文的產品,SQL Server是微軟的產品;
Oracle和IBM DB2都是超大型關系數據庫,SQL Server是大型關系數據庫,而My Sql是中小型關系數據庫;
2.6 面向對象
oracle:主流的大型數據庫,用於中大型網站開發,商業收費;
sql server :一般做中小型數據庫,用於中小型網站,以及個人使用 ,商業收費;
mysql:一般做中小型數據庫,用於中小型網站,以及個人使用,開源免費;可配合php,perl, 一般作網站的數據庫。
db2: 對大型分布式應用系統尤為適用
2.7 操作簡便
SQL Server :操作簡單,但只有圖形界面.
Oracle :較復雜, 同時提供GUI和命令行,在windowsNT和unix下操作相同
DB2 :操作簡單,同時提供GUI和命令行,在windowsNT和unix下操作相同
2.8 安裝
Oracle:安裝難度中等,安裝包比較大,占內存較多,圖形界面得借助第三方工具。且Oracle安裝有3G左右,且使用時Oracle占用特別大的內存空間和其他機器性能;
Sql Server:安裝難度較大,出錯要刪除注冊碼,還不行就得重裝系統,安裝包也比較大,占內存中等,有完整的圖形界面。
Mysql:安裝難度易,安裝包小,占內存較小,圖形界面得借助第三方工具
2.9 架構
執行的區別,主要還是架構的區別。架構導致了相同SQL在執行過程中的解釋、優化、效率的差異。
(1)Oracle
Oracle: 數據文件包括:控制文件、數據文件、重做日志文件、參數文件、歸檔文件、密碼文件。這是根據文件功能行進行划分,並且所有文件都是二進制編碼后的文件,對數據庫算法效率有極大的提高。
由於Oracle文件管理的統一性,就可以對SQL執行過程中的解析和優化,指定統一的標准:RBO(基於規則的優化器)、CBO(基於成本的優化器) 通過優化器的選擇,以及無敵的HINT規則,給與了SQL優化極大的自由,對CPU、內存、IO資源進行方方面面的優化。
(2)MySQL
MySQL:最大的一個特色,就是自由選擇存儲引擎。每個表都是一個文件,都可以選擇合適的存儲引擎。
常見的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由於這種開放插件式的存儲引擎,比如要求數據庫與引擎之間的松耦合關系。從而導致文件的一致性大大降低。
在SQL執行優化方面,也就有着一些不可避免的瓶頸。在多表關聯、子查詢優化、統計函數等方面是軟肋,而且只支持極簡單的HINT。
(3)SQL Server
SQL Server :數據架構基本是縱向划分,分為:Protocol Layer(協議層), Relational Engine(關系引擎), Storage Engine(存儲引擎), SQLOS。
SQL執行過程就是逐層解析的過程,其中Relational Engine中的優化器,是基於成本的(CBO),其工作過程跟Oracle是非常相似的。在成本之上也是支持很豐富的HINT,包括:連接提示、查詢提示、表提示。
2.10 文件文件結構不同
(1)oracle的文件體系結構:
- 數據文件 .dbf(真實數據)
- 日志文件 .rdo
- 控制文件 .ctl
- 參數文件 .ora
(2)sql server的文件體系結構為:
- .mdf (數據字典)
- .ndf (數據文件)
- .ldf (日志文件)
2.10 Oracle 和 MySQL 的主要區別
(1)客戶端和命令窗口
Oracle:客戶端和命令窗口,都是由用戶決定內容-> conn user_name/password;
MySQL:客戶端和命令窗口,都是由數據庫決定內容-> use datebase;
都可以創建多數據庫多用戶,個人傾向於Oracle一個數據庫中多個用戶的形式,MySQL多個數據庫多個用戶形式(最好每個數據庫對應一個用戶)
(1)對事務的提交
MySQL默認是自動提交,而Oracle默認不自動提交,需要用戶手動提交,需要在寫commit;指令或者點擊commit按鈕。
(2)分頁查詢
MySQL是直接在SQL語句中寫"select… from …where…limit x, y",有limit就可以實現分頁;而Oracle則是需要用到偽列ROWNUM和嵌套查詢。
(3) 事務隔離級別
MySQL是read commited的隔離級別,而Oracle是repeatable read的隔離級別,同時二者都支持serializable串行化事務隔離級別,可以實現最高級別的讀一致性。
每個session提交后其他session才能看到提交的更改。
Oracle通過在undo表空間中構造多版本數據塊來實現讀一致性,每個session查詢時,如果對應的數據塊發生變化,Oracle會在undo表空間中為這個session構造它查詢時的舊的數據塊。
MySQL沒有類似Oracle的構造多版本數據塊的機制,只支持read commited的隔離級別。
一個session讀取數據時,其他session不能更改數據,但可以在表最后插入數據。session更新數據時,要加上排它鎖,其他session無法訪問數據。
(4)對事務的支持
MySQL在innodb存儲引擎的行級鎖的情況下才可支持事務,而Oracle則完全支持事務。
(5)保存數據的持久性
MySQL是在數據庫更新或者重啟,則會丟失數據,Oracle把提交的sql操作線寫入了在線聯機日志文件中,保持到了磁盤上,可以隨時恢復。
(6)並發性
MySQL以表級鎖為主,對資源鎖定的粒度很大,如果一個session對一個表加鎖時間過長,會讓其他session無法更新此表中的數據。
雖然InnoDB引擎的表可以用行級鎖,但這個行級鎖的機制依賴於表的索引,如果表沒有索引,或者sql語句沒有使用索引,那么仍然使用表級鎖。
Oracle使用行級鎖,對資源鎖定的粒度要小很多,只是鎖定sql需要的資源,並且加鎖是在數據庫中的數據行上,不依賴與索引。所以Oracle對並發性的支持要好很多。
(7)邏輯備份
MySQL邏輯備份時要鎖定數據,才能保證備份的數據是一致的,影響業務正常的dml使用,Oracle邏輯備份時不鎖定數據,且備份的數據是一致。
(8)復制
MySQL:復制服務器配置簡單,但主庫出問題時,叢庫有可能丟失一定的數據。且需要手工切換叢庫到主庫。
Oracle:既有推或拉式的傳統數據復制,也有dataguard的雙機或多機容災機制,主庫出現問題是,可以自動切換備庫到主庫,但配置管理較復雜。
(9)性能診斷
MySQL的診斷調優方法較少,主要有慢查詢日志。
Oracle有各種成熟的性能診斷調優工具,能實現很多自動分析、診斷功能。比如awr、addm、sqltrace、tkproof等。
(10)權限與安全
MySQL的用戶與主機有關,感覺沒有什么意義,另外更容易被仿冒主機及ip有可乘之機。
Oracle的權限與安全概念比較傳統,中規中矩。
(11)分區表和分區索引
MySQL的分區表還不太成熟穩定。
Oracle的分區表和分區索引功能很成熟,可以提高用戶訪問db的體驗。
(12)管理工具
MySQL管理工具較少,在linux下的管理工具的安裝有時要安裝額外的包(phpmyadmin, etc),有一定復雜性。
Oracle有多種成熟的命令行、圖形界面、web管理工具,還有很多第三方的管理工具,管理極其方便高效。
(13)最重要的區別
MySQL是輕量型數據庫,並且免費,沒有服務恢復數據。
Oracle是重量型數據庫,收費,Oracle公司對Oracle數據庫有任何服務。
3. 各數據庫的特點
3.1 My Sql數據庫
優點:
- (1)體積小、速度快、總體擁有成本低,開源。
- (2)支持多種操作系統。
- (3)是開源數據庫,提供的接口支持多種語言連接操作 。
- (4)MySQL的核心程序采用完全的多線程編程。線程是輕量級的進程,它可以靈活地為用戶提供服務,而不是過多的系統資源。用多線程和C語言實現的mysql能很容易充分利用CPU。
- (5)MySql有一個非常靈活而且安全的權限和口令系統。當客戶與MySql服務器連接時,他們之間所有的口令傳送被加密,而且MySql支持主機認證。
- (6)支持大型的數據庫, 可以方便地支持上千萬條記錄的數據庫。即32 位系統表文件最大可支持 4GB,64 位系統支持最大的表文件為8TB。作為一個開放源代碼的數據庫,可以針對不同的應用進行相應的修改。
- (7)擁有一個非常快速而且穩定的基於線程的內存分配系統,可以持續使用面不必擔心其穩定性。
- (8)MySQL同時提供高度多樣性,能夠提供很多不同的使用者介面,包括命令行客戶端操作,網頁瀏覽器,以及各式各樣的程序語言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包裝好的客戶端,或者干脆自己寫一個合適的應用程序。
- (9)MySQL可用於Unix,Windows,以及OS/2等平台,因此它可以用在個人電腦或者是服務器上
缺點:
- (1)不支持熱備份;
- (2)MySQL最大的缺點是其安全系統,主要是復雜而非標准,另外只有到調用mysqladmin來重讀用戶權限時才發生改變。
- (3)沒有一種存儲過程(Stored Procedure)語言,比如MyISAM引擎聯支持交換功能。這是對習慣於企業級數據庫的程序員的最大限制。
- (4)MySQL的價格隨平台和安裝方式變化。Linux的My SQL如果由用戶自己或系統管理員而不是第三方安裝則是免費的,第三方案則必須付許可費。Unix或linux 自行安裝免費 、Unix或Linux 第三方安裝收費。
3.2 MS Sql server數據庫:
優點:
- 1.真正的客戶機/服務器體系結構
- 2.圖形化的用戶界面,使系統管理和數據庫管理更加直觀、簡單
- 3.豐富的編程接口工具,為用戶進行程序設計提供了更大的選擇余地
- 4.與Windows NT完全集成,利用了NT的許多功能,如發送和接受消息,管理登錄安全性等,SQL Server也可以很好地與Microsoft BackOffice產品集成。
- 5.有很好的伸縮性,可以跨平台使用。
- 6.提供決策支持的數據倉庫功能,這個功能只在Oracle和其他昂貴的DBMS中才有。
- 7.支持 OLE DB 和多種查詢;
- 8.支持分布式的分區視圖
- 9.擴展性強:當系統要提高數據庫處理速度時,只要簡單地增加數據庫服務器就可以得到擴展。
- 10.可維護性:當某節點發生故障時,系統會自動檢測故障並轉移故障節點的應用,保證數據庫的持續工作。
- 11.安全性:因為數據會同步的多台服務器上,可以實現數據集的冗余,通過多份數據來保證安全性。另外它成功地將數據庫放到了內網之中,更好地保護了數據庫的安全性。
- 12.易用性:對應用來說完全透明,集群暴露出來的就是一個IP。
- 13.為數據管理與分析帶來了靈活性,允許單位在快速變化的環境中從容響應,從而獲得競爭優勢。從數據管理和分析角度看,將原始數據轉化為商業智能和充分利用Web帶來的機會非常重要。
缺點:
- (1)開放性 :SQL Server 限制在windows上運行,開放性不好。
- (2)伸縮性並行性 :SQL server 並行實施和共存模型並成熟難處理日益增多用戶數和數據卷伸縮性有限。
- (3)安全性:沒有獲得任何安全證書。
- (4)性能 :SQL Server 多用戶時性能佳 。
- (5)客戶端支持及應用模式: 客戶端支持及應用模式。只支持C/S模式,SQL Server C/S結構只支持windows客戶用ADO、DAO、OLEDB、ODBC連接。
- (6)使用風險:SQL server 完全重寫代碼,經歷了長期測試斷延遲,許多功能需要時間來證明並十分兼容。
3.3 Oracle數據庫:
億級的 跨平台,安全性高。
Oracle 體系結構
(1)指數據庫的組成,工作過程與原理,以及數據在數據庫中的組織與管理機制
(2)oracle 服務器結構:由Oracle 數據庫和Oracle 實例組成
(3)oracle 數據庫的結構:包括邏輯結構和物理結構
(4)oracle 數據庫的操作系統文件,即實力物理存儲區
- 路徑:D:\developPrograms\Oracle\oradata\orcl
- * 數據文件 以 dbf 結尾 信息的物理地址
- * 控制文件 以 ctl 結尾
- * 日志文件 以 log 結尾
(5)oracle 系統表
- * 詳細描述了表數量,表名,表的屬主,表的列信息等,通常只能查看
優點:
- 1.Oracle的穩定性要比Sql server好。
- 2.Oracle在導數據工具sqlload.exe功能比Sql server的Bcp功能強大,Oracle可以按照條件把文本文件數據導入.
- 3.Oracle的安全機制比Sql server好。
- 4.Sql server的易用性和友好性方面要比Oracle好。
- 5.在處理大數據方面Oracle會更穩定一些。
- 6.Sql Server在數據導出方面功能更強一些。
- 7.處理速度方面比Oracle快一些,和兩者的協議有關.
- 8.Oracle 支持大並發,大訪問量,是 OLTP(On-Line Transaction Processing 聯機事務處理系統)最好的工具;
缺點:
- 對硬件要求很高
- 價格比較昂貴
- 管理維護麻煩
- 操作比較復雜,需要技術含量較高。
4. 典型應用場景
關於“大型數據庫”,並沒有嚴格的界定,有說以數據量為准,有說以恢復時間為准。如果綜合數據庫應用場景來說,大型數據庫應用有以下特點:海量數據、高吞吐量;復雜邏輯、高計算量,以及高可用性。
從這點上來說,Oracle,DB2就是比較典型的大型數據庫,Sybase SQL Server也算是吧。
4.1 Oracle
Oracle的應用,主要在傳統行業的數據化業務中。oracle傳統,跨平台,穩定,適合OLTP,最接近數據庫設計范式,一致性處理是最好的,也是最復雜的。要想用好並發揮其性能,對管理員的能力要求較高。另維護成本較高。
比如:銀行、金融這樣的對可用性、健壯性、安全性、實時性要求極高的業務;零售、物流這樣對海量數據存儲分析要求很高的業務。
此外,高新制造業如芯片廠也基本都離不開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萬美金。
4.2 MySQL
MySQL基本是生於互聯網,長於互聯網。其應用實例也大都集中於互聯網方向,MySQL的高並發存取能力並不比大型數據庫差,同時價格便宜,安裝使用簡便快捷,深受廣大互聯網公司的喜愛。
並且由於MySQL的開源特性,針對一些對數據庫有特別要求的應用,可以通過修改代碼來實現定向優化,例如SNS、LBS等互聯網業務。
一個典型的應用場景是:
某互聯網公司,成立之初,僅有PC數台,通過LAMP架構迅速搭起網站框架。隨着業務擴張、市場擴大,迅速發展成為6台Dell小型機的中型網站。現在花了三年,終於成為垂直領域的最大網站,計划中的數據中心,擁有Dell機架式服務器40台,總預算20萬美金。
4.3 MS SQL Server
windows生態系統的產品,好處壞處都很分明。
好處就是:高度集成化,微軟也提供了整套的軟件方案,基本上一套win系統裝下來就齊活了。因此,不那么缺錢,但很缺IT人才的中小企業,會偏愛 MS SQL Server 。例如,自建ERP系統、商業智能、垂直領域零售商、餐飲、事業單位等等。
1996年,Bill Gates親自出手,從Borland挖來了大牛Anders,搞定了C#語言。微軟02年搞定了http://ASP.NET。成熟的.NET、Silverlight技術,為 MS SQL Server贏得了部分互聯網市場,其中就有曾經的全球最大社交網站MySpace,其發展歷程很有代表性,可
作為一個比較特別的例子。其巔峰時有超過1.5億的注冊用戶及每月400億的訪問量。應該算是MS SQL Server支撐的最大的數據應用。
壞處就是: Sql Server目前只能在Windows系列執行,限制其發展,所以在高可用,災備,並發也受win的限制。