標籤:oracle和myslq的區別
一、資料庫的主要類型
資料庫類型主要可分為:網狀資料庫、關聯式資料庫、樹狀資料庫、物件導向資料庫。在商業中最主要的是關係型資料庫,例如:Oracle、DB2、Sybase、My SQL Server、Informax、Redis、MySQL等。
Oracle和mysql的區別
Oralce是大型資料而mysql是中小型關係型資料庫。Oralce佔市場的40%而mysql佔市場的20%。
一、並發性
Oracle支援大並發量和訪問量,是oltp最好的工具
並發性是oltp資料庫的最重要的特性,但並發涉及到資源的擷取、共用與鎖定。
mysql安裝後佔152M而orcale佔3G多,在使用和操作的時候佔用機器資源效能特別多。
mysql:以表級鎖為主,對資源鎖定的粒度很大,如果一個session對一個表加鎖時間過長,會讓其他session無法更新比表中的資料。雖然InnoDB引擎的表可以用行級鎖,但這個行級鎖的機制依賴於表的索引,如果表沒有索引,或者sql語句沒有使用索引,那麼仍然使用表級鎖。
Oracle:使用行級鎖,對資源鎖定的粒度小很多,知識鎖定sql需要的資源,並且加鎖實在資料庫中資料行上,不依賴索引,所以oracle對並發性的支援要好很多。
二、一致性
oracle:oracle支援serializable的隔離等級,可以實現最進階別的讀寫一致性,每個 session提交後其他session才能看到提交的更改。Oracle通過在undo資料表空間中構造版多本資料庫來實現讀寫一致性,每個session查詢時,如果對應的資料區塊發生變化,oracle會在undo資料表空間中為欸這個session構造它查詢時的舊的資料區塊。
mysql:mysql沒有類似oracle的構造多版本的資料區塊的機制,支援read commietd的隔離等級。一個session讀取資料時,其他session不能更改資料,但可以在表最後插入資料。
session更新資料時,要加上排它鎖,其他session無法訪問資料。
三、事務
oracle:事務便是是使資料庫從一種狀態換成位另一種狀態,這不同於檔案系統,它是資料所特用的。
它的特性主要分為四個
原子性:語句級原子性,過程級原子性,事務級原子性。
一致性:狀態一致,同一事務中不會有兩種狀態
隔離性:事務鍵是互相分離互不影響(也有可能有自治事物)
持久性:事務提交了,那麼狀態就是用過就的
分散式交易:在oralce中會在一個事務中控制多個資料庫來保證資料庫中的資料的完整性,主要通過dblink。
自治事務:是獨立於務的一個子事務,它的提交與復原不影響主事務的操作。
自治事務提供了一種用PL/SQL控制事務的新方法,可以用於:
1、頂層匿名塊
2、本地,獨立或打包的函數和過程
3、物件類型的方法
4、資料庫觸發器
mysql:事務的實現就是基於資料的引擎,不同的儲存引擎對事務的支援程度不一樣。mysql中支援事務的儲存引擎有innoDB和NDB。innoDB是mysql預設的儲存引擎,預設的隔離界別是RR,並且在RR的隔離等級下更近一步,通過多版本並發控制,解決不可重複都的問題,加上間隙鎖(並發控制)解決 幻讀問題,因此innoDB的RR隔離界別其實實現了序列化層級的效果,而且保留了比較好的並發效能。
事務的隔離性是通過鎖實現,而事務的原子性、一致性和持久性則是通過事務的日誌實現。事務就是redo和undo
分散式交易:分散式交易的實現方式有很多,既可以採用innoDB提供的原生的事務支援,也可以採用訊息佇列來實現分散式交易的最終一致性。
模型分三塊:應用程式,資源管理員,事物管理器
應用程式定義了事務的邊界,指定需要做哪些事務;
資源管理員提供了訪問事務的方法,通暢一個資料庫就是一個資源管理員;
交易管理員協調 參與了全域事務中的各個事務。
分散式交易採用了兩段式提交的方式,第以階段所有的事務節點開始準備,告訴交易管理員ready。第二階段交易管理員告訴每個節點是commit還是rollback。如果有一個節點失敗,就要全域的節點全部是rollback,從此保障事務的原子性。
原子性:一個事務的執行視為一個不可分割的最小單元,事務裡面的操作,要麼全部成功執行,要麼全部失敗復原,不可以執行其中的一部分。
一致性:一個事務的執行 不應該破壞資料的完整性。
隔離性:通常來說,事務之間的行為不應該互相影響,然而實際情況中,事務相互影響的程度收到了隔離等級的影響 。
持久性:事務提交後,需要將提交的事務持久化到磁碟,即使系統崩潰,提交的資料也不應該丟失。
事務的四種隔離等級:
1.READ UNCOMMITTED(未提交讀)。在RU的隔離等級下,事務A對資料做的修改,即使沒有提交,對於事務B來說也是可見的,這種問題叫髒讀。這是隔離程度較低的一種隔離等級,在實際運用中會引起很多問題,因此一般不常用。
2.READ COMMITTED(提交讀)。在RC的隔離等級下,不會出現髒讀的問題。事務A對資料做的修改,提交之後會對事務B可見,舉例,事務B開啟時讀到資料1,接下來事務A開啟,把這個資料改成2,提交,B再次讀取這個資料,會讀到最新的資料2。在RC的隔離等級下,會出現不可重複讀取的問題。這個隔離等級是許多資料庫的預設隔離等級。
3.REPEATABLE READ(可重複讀)。在RR的隔離等級下,不會出現不可重複讀取的問題。事務A對資料做的修改,提交之後,對於先於事務A開啟的事務是不可見的。舉例,事務B開啟時讀到資料1,接下來事務A開啟,把這個資料改成2,提交,B再次讀取這個資料,仍然只能讀到1。在RR的隔離等級下,會出現幻讀的問題。幻讀的意思是,當某個事務在讀取某個範圍內的值的時候,另外一個事務在這個範圍插入入了新記錄,那麼之前的事務再次讀取這個範圍的值,會讀取到新插入的資料。Mysql預設的隔離等級是RR,然而mysql的innoDB引擎間隙鎖成功解決了幻讀的問題。
4.SERIALIZABLE(可序列化)。可序列化是最高的隔離等級。這種隔離等級強制要求所有事物串列執行,在這種隔離等級下,讀取的每行資料都加鎖,會導致大量的鎖徵用問題,效能最差。
mysql在innodb儲存的 引擎的行級鎖的情況才支援事務。
四、資料持久化
oracle
保證提交的資料均可恢複,因為oracle把提交的sql操作線寫入了線上聯機的記錄檔中,保持到了磁碟上。如果出現資料庫或主機異常重啟,重啟後oracle可以考聯機線上日誌恢複客戶提交的資料。
mysql
預設提交sql語句,但如果更新過程中出現db或主機重啟的問題也許會遺失資料。
五、提交方式
oracle預設不自動認可,需要使用者手動提交。
mysql預設是自動認可的。
六、邏輯備份
oracle邏輯備份時不鎖定資料,且備份的資料是一致的。
mysql邏輯備份時要鎖定資料,才能保證備份資料是一致的,影響業務正常的dml使用。
七、熱備份
oracle有成熟的熱備份工具rman,熱備時,不影響使用者使用資料庫,即使備份資料庫不一致,也可以恢複時通過歸檔日誌,和聯機重做體制進一致恢複。
mysql:myisam的引擎,用myslq內建的myslqhostcopy熱備時i,需要給表加讀鎖,影響dml操作。
innodb的引擎,它會備份innodb的表和索引,但是不會備份,frm檔案用ibbackup備份檔案時,會有一個記錄檔記錄備份期間的資料變化,因此可以不用鎖表,不影響其他使用者使用資料庫,但此工具是收費的。
innobackup是結合ibbackup使用的一個指令碼,他會協助對,frm檔案的備份
八、sql語句的擴充性和靈活性
mysql對sql語句有很多非常實用的方便擴充,比如limit功能,insert可以一次插入多行資料,select某些資料管理可以不加from
oracle在這方面感覺更加穩重傳統一些。
九、複製
oracle:既有推或拉式的傳統資料的複製,也有datagurad的雙機或多 機容災機制,主庫出現問題是,可以自動切換備庫到主庫,但組態管理叫複雜。
mysql:複製伺服器的配置簡單,但主庫問題時,從庫有可能丟失一定的資料,且需要手工切換到從資料庫
十、效能診斷
oracle有各種成熟的效能診斷調優工具,能實現很多自動的分析,診斷功能,比如awr,addm、sqltrace、tkproof等。
myslq的診斷調優方法較少,主要有慢查詢日誌。
十一、許可權與安全
mysql的使用者與主機有關,沒有什麼意義,另外更容易被仿冒者主機及ip有可乘之機。
oracle的許可權與安全概念比較傳統,中規中矩。
十二、分區表的分區索引
oracle的分區表和分區索引功能很成熟,可以提高使用者的訪問db的體驗。
mysql的分區表還不太成熟穩定。
十三、管理工具
oracle有很多成熟的命令列,圖形介面、web管理工具、還有很多第三方的管理工具、管理極其方便高效。
mysql管理工具較少 ,在linux下的管理工具的安裝有時要安裝 額外的包,有一定的複雜性。
本文出自 “淩宇的技術部落格” 部落格,謝絕轉載!
Oracle和mysql的區別