oracle數據庫與mysql數據庫的區別

1、關係型數據庫

    關係型數據庫,是指採用了關係模型來組織數據的數據庫。
    關係模型是在1970年由IBM的研究員E.F.Codd博士首先提出的,在以後的幾十年中,關係模型的概念獲得了充分的發展並逐漸成爲主流數據庫結構的主流模型。
    簡單來講,關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。
關係模型中經常使用的概念:
    關係
:能夠理解爲一張二維表,每一個關係都具備一個關係名,就是一般說的表名
    元組:能夠理解爲二維表中的一行,在數據庫中常常被稱爲記錄
    屬性:能夠理解爲二維表中的一列,在數據庫中常常被稱爲字段
    :屬性的取值範圍,也就是數據庫中某一列的取值限制
    關鍵字:一組能夠惟一標識元組的屬性,數據庫中常稱爲主鍵,由一個或多個列組成
    關係模式:指對關係的描述。其格式爲:關係名(屬性1,屬性2, ... ... ,屬性N),在數據庫中成爲表結構

關係型數據庫的優勢:
    容易理解:二維表結構是很是貼近邏輯世界的一個概念,關係模型相對網狀、層次等其餘模型來講更容易理解
    使用方便:通用的SQL語言使得操做關係型數據庫很是方便
    易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗餘和數據不一致的機率

關係型數據庫瓶頸
  1).高併發讀寫需求
    網站的用戶併發性很是高,每每達到每秒上萬次讀寫請求,對於傳統關係型數據庫來講,硬盤I/O是一個很大的瓶頸
  2).海量數據的高效率讀寫
    網站天天產生的數據量是巨大的,對於關係型數據庫來講,在一張包含海量數據的表中查詢,效率是很是低的
  3).高擴展性和可用性
    在基於web的結構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,數據庫卻沒有辦法像web server和app server那樣簡單的經過添加更多的硬件和服務節點來擴展性能和負載能力。對於不少須要提供24小時不間斷服務的網站來講,對數據庫系統進行升級和擴展是很是痛苦的事情,每每須要停機維護和數據遷移。

對網站來講,關係型數據庫的不少特性再也不須要了
  事務一致性: 關係型數據庫在對事物一致性的維護中有很大的開銷,而如今不少web2.0系統對事物的讀寫一致性都不高
  讀寫實時性: 對關係數據庫來講,插入一條數據以後馬上查詢,是確定能夠讀出這條數據的,可是對於不少web應用來講,並不要求這麼高的實時性,好比發一條消息以後,過幾秒乃至十幾秒以後纔看到這條動態是徹底能夠接受的
  複雜SQL,特別是多表關聯查詢: 任何大數據量的web系統,都很是忌諱多個大表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢,特別是SNS類型的網站(SNS,專指社交網絡服務,包括了社交軟件和社交網站。),從需求以及產品階級角度,就避免了這種狀況的產生。每每更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能極大的弱化了

    在關係型數據庫中,致使性能欠佳的最主要緣由是多表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢。爲了保證數據庫的ACID特性,咱們必須儘可能按照其要求的範式進行設計,關係型數據庫中的表都是存儲一個格式化的數據結構。每一個元組字段的組成都是同樣,即便不是每一個元組都須要全部的字段,但數據庫會爲每一個元組分配全部的字段,這樣的結構能夠便於標語表之間進行連接等操做,但從另外一個角度來講它也是關係型數據庫性能瓶頸的一個因素。
 php

2、NoSQL

    NoSQL一詞首先是Carlo Strozzi在1998年提出來的,指的是他開發的一個沒有SQL功能,輕量級的,開源的關係型數據庫。這個定義跟咱們如今對NoSQL的定義有很大的區別,它確確實實字如其名,指的就是「沒有SQL」的數據庫。可是NoSQL的發展慢慢偏離了初衷,咱們要的不是「no sql」,而是「no relational」,也就是咱們如今常說的非關係型數據庫了。
    2009年初,Johan Oskarsson舉辦了一場關於開源分佈式數據庫的討論,Eric Evans在此次討論中再次提出了NoSQL一詞,用於指代那些非關係型的,分佈式的,且通常不保證遵循ACID原則的數據存儲系統。Eric Evans使用NoSQL這個詞,並非由於字面上的「沒有SQL」的意思,他只是以爲不少經典的關係型數據庫名字都叫「**SQL」,因此爲了表示跟這些關係型數據庫在定位上的大相徑庭,就是用了「NoSQL「一詞。
注:數據庫事務必須具有ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔離性,Durability持久性。
    非關係型數據庫提出另外一種理念,例如,以鍵值對存儲,且結構不固定,每個元組能夠有不同的字段,每一個元組能夠根據須要增長一些本身的鍵值對,這樣就不會侷限於固定的結構,能夠減小一些時間和空間的開銷。使用這種方式,用戶能夠根據須要去添加本身須要的字段,這樣,爲了獲取用戶的不一樣信息,不須要像關係型數據庫中,要對多表進行關聯查詢。僅須要根據id取出相應的value就能夠完成查詢。但非關係型數據庫因爲不多的約束,他也不可以提供像SQL所提供的where這種對於字段屬性值狀況的查詢。而且難以體現設計的完整性。他只適合存儲一些較爲簡單的數據,對於須要進行較複雜查詢的數據,SQL數據庫顯的更爲合適。

2-1.非關係型數據庫分類
    因爲非關係型數據庫自己自然的多樣性,以及出現的時間較短,所以,不想關係型數據庫,有幾種數據庫可以一統江山,非關係型數據庫很是多,而且大部分都是開源的。
    這些數據庫中,其實實現大部分都比較簡單,除了一些共性外,很大一部分都是針對某些特定的應用需求出現的,所以,對於該類應用,具備極高的性能。依據結構化方法以及應用場合的不一樣,主要分爲如下幾類:
    1).面向高性能併發讀寫的key-value數據庫:key-value數據庫的主要特色即便具備極高的併發讀寫性能,Redis,Tokyo Cabinet,Flare就是這類的表明
    2).面向海量數據訪問的面向文檔數據庫:這類數據庫的特色是,能夠在海量的數據中快速的查詢數據,典型表明爲MongoDB以及CouchDB
    3).面向可擴展性的分佈式數據庫:這類數據庫想解決的問題就是傳統數據庫存在可擴展性上的缺陷,這類數據庫能夠適應數據量的增長以及數據結構的變化html

三. 關係型數據庫  V.S.  非關係型數據庫

    關係型數據庫的最大特色就是事務的一致性:傳統的關係型數據庫讀寫操做都是事務的,具備ACID的特色,這個特性使得關係型數據庫能夠用於幾乎全部對一致性有要求的系統中,如典型的銀行系統。
    可是,在網頁應用中,尤爲是SNS應用中,一致性卻不是顯得那麼重要,用戶A看到的內容和用戶B看到同一用戶C內容更新不一致是能夠容忍的,或者說,兩我的看到同一好友的數據更新的時間差那麼幾秒是能夠容忍的,所以,關係型數據庫的最大特色在這裏已經無用武之地,起碼不是那麼重要了。
    相反地,關係型數據庫爲了維護一致性所付出的巨大代價就是其讀寫性能比較差,而像微博、facebook這類SNS的應用,對併發讀寫能力要求極高,關係型數據庫已經沒法應付(在讀方面,傳統上爲了克服關係型數據庫缺陷,提升性能,都是增長一級memcache來靜態化網頁,而在SNS中,變化太快,memchache已經無能爲力了),所以,必須用新的一種數據結構存儲來代替關係數據庫。
    關係數據庫的另外一個特色就是其具備固定的表結構,所以,其擴展性極差,而在SNS中,系統的升級,功能的增長,每每意味着數據結構巨大變更,這一點關係型數據庫也難以應付,須要新的結構化數據存儲。
    因而,非關係型數據庫應運而生,因爲不可能用一種數據結構化存儲應付全部的新的需求,所以,非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。mysql

    必須強調的是,數據的持久存儲,尤爲是海量數據的持久存儲,仍是須要一種關係數據庫這員老將。linux

 

---------------------------------------------------------------------------------------------------------------------------------------------web

 

oracle與mysql的區別

 

1、併發性
  併發性是數據庫最重要的特性,但併發涉及到資源的獲取、共享與鎖定。
    mysql:mysql以表級鎖爲主,對資源鎖定的粒度很大,若是一個session對一個表加鎖時間過長,會讓其餘session沒法更新此表中的數據。雖然InnoDB引擎的表能夠用行級鎖,但這個行級鎖的機制依賴於表的索引,若是表沒有索引,或者sql語句沒有使用索引,那麼仍然使用表級鎖。
    oracle:oracle使用行級鎖,對資源鎖定的粒度要小不少,只是鎖定sql須要的資源,而且加鎖是在數據庫中的數據行上,不依賴與索引。因此oracle對併發性的支持要好不少。

2、一致性
    oracle:oracle支持serializable的隔離級別,能夠實現最高級別的讀一致性。每一個session提交後其餘session才能看到提交的更改。oracle經過在undo表空間中構造多版本數據塊來實現讀一致性,每一個session查詢時,若是對應的數據塊發生變化,oracle會在undo表空間中爲這個session構造它查詢時的舊的數據塊。
    mysql:mysql沒有相似oracle的構造多版本數據塊的機制,只支持read commited的隔離級別。一個session讀取數據時,其餘session不能更改數據,但能夠在表最後插入數據。session更新數據時,要加上排它鎖,其餘session沒法訪問數據。

3、事務
    oracle很早就徹底支持事務。
    mysql在innodb存儲引擎的行級鎖的狀況下才支持事務。

4、數據持久性
    oracle:保證提交的數據都可恢復,由於oracle把提交的sql操做線寫入了在線聯機日誌文件中,保持到了磁盤上,若是出現數據庫或主機異常重啓,重啓後oracle能夠考聯機在線日誌恢復客戶提交的數據。
    mysql:默認提交sql語句,但若是更新過程當中出現db或主機重啓的問題,也許會丟失數據。

5、提交方式
    oracle默認不自動提交,須要用戶手動提交。
    mysql默認是自動提交。

6、邏輯備份
    oracle邏輯備份時不鎖定數據,且備份的數據是一致的。
    mysql邏輯備份時要鎖定數據,才能保證備份的數據是一致的,影響業務正常的dml使用。

7、熱備份
    oracle有成熟的熱備工具rman,熱備時,不影響用戶使用數據庫。即便備份的數據庫不一致,也能夠在恢復時經過歸檔日誌和聯機重作日誌進行一致的回覆。
    mysql:myisam的引擎,用mysql自帶的mysqlhostcopy熱備時,須要給表加讀鎖,影響dml操做。innodb的引擎,它會備份innodb的表和索引,可是不會備份.frm文件。用ibbackup備份時,會有一個日誌文件記錄備份期間的數據變化,所以能夠不用鎖表,不影響其餘用戶使用數據庫。但此工具是收費的。innobackup是結合ibbackup使用的一個腳本,他會協助對.frm文件的備份。

8、sql語句的擴展和靈活性
    mysql對sql語句有不少很是實用而方便的擴展,好比limit功能,insert能夠一次插入多行數據,select某些管理數據能夠不加from。
    oracle在這方面感受更加穩重傳統一些。

9、複製
    oracle:既有推或拉式的傳統數據複製,也有dataguard的雙機或多機容災機制,主庫出現問題是,能夠自動切換備庫到主庫,但配置管理較複雜。
    mysql:複製服務器配置簡單,但主庫出問題時,叢庫有可能丟失必定的數據。且須要手工切換叢庫到主庫。

10、性能診斷
    oracle有各類成熟的性能診斷調優工具,能實現不少自動分析、診斷功能。好比awr、addm、sqltrace、tkproof等
    mysql的診斷調優方法較少,主要有慢查詢日誌。

11、權限與安全
    mysql的用戶與主機有關,感受沒有什麼意義,另外更容易被仿冒主機及ip有可乘之機。
    oracle的權限與安全概念比較傳統,中規中矩。

12、分區表和分區索引
    oracle的分區表和分區索引功能很成熟,能夠提升用戶訪問db的體驗。
    mysql的分區表還不太成熟穩定。

十3、管理工具
    oracle有多種成熟的命令行、圖形界面、web管理工具,還有不少第三方的管理工具,管理極其方便高效。
    mysql管理工具較少,在linux下的管理工具的安裝有時要安裝額外的包(phpmyadmin, etc),有必定複雜性。sql

轉載:http://blog.csdn.net/oChangWen/article/details/53423301數據庫

 

zhuan安全

 

 

 

 

 

 

參考:http://blog.sina.com.cn/s/blog_61e034d50100k6xn.html服務器

相關文章
相關標籤/搜索