MySQL是一開放源碼資料庫軟體,除了有免費下載版可用之外,也提供商用版的訂閱服務。

MySQL的姊妹資料庫MariaDB

瑪莉亞資料庫 (MariaDB)如同MySQL的影子版本,瑪莉亞資料庫 (MariaDB)是MySQL的一個分支版本 (Branch),而不是衍生版本 (Fork),提供的功能可和MySQL完全相容

MySQL作者兼聯合創辦人Michael Widenius (代號Monty) 和其他創始人在1994年開始開發MySQL,2008年將MySQL賣給了昇陽電腦(Sun),傳為開源軟體商業化的經典案例。

Michael Widenius(網路代號:Monty)同為MySQLMariaDB的創辦人,2008年他以10億美元的代價將MySQL出售給昇陽,兩年後甲骨文併購昇陽,MySQL經二度轉手。在甲骨文的經營下,原本主張開源的MySQL轉趨封閉,由於Michael Widenius對此策略不認同,因而分支出與MySQL 5.5完全相容的MariaDB 5.5。

2010年,MySQL更推出大受歡迎的5.5版,但甲骨文 (Oracle)卻收購了昇陽電腦(Sun)。MySQL二度易主,MySQL社群擔心甲骨文 (Oracle)箝制而紛紛出走,Michael Widenius因而推出了與MySQL相容的瑪莉亞資料庫 (MariaDB),而MySQL原有高層則成立了SkySQL公司,廣納舊版MySQL的開發工程師,來與甲骨文 (Oracle)主導的MySQL分庭抗禮。

主導MySQL甲骨文 (Oracle)著重於追加一些華麗的新功能,而忽視了MySQL的穩定性與整體效率。甲骨文 (Oracle)主導下的MySQL,在正式釋出可用版,對外揭露的資訊不足,十分缺乏透明度,而且,甲骨文 (Oracle)較少修正來自使用者回報的臭蟲、也不常聽取開發社群的討論、意見與對新功能的需求,雖然MySQL是開放源碼的資料庫,甲骨文 (Oracle)的作為,讓MySQL的封閉性色彩逐漸濃厚。

瑪莉亞資料庫 (MariaDB) 雖然MySQL是同源所生的程式碼,但運作的理念卻有很大的不同。MariaDB是由Michael Widenius領導,並囊括了許多最初開發MySQL的開發人員,創立目的就是為了擺脫甲骨文 (Oracle)的控制。

甲骨文 (Oracle)對MySQL的封閉態度,加上瑪莉亞資料庫 (MariaDB)和MySQL到目前為止其資料格式可以互通,導致許多企業都有將資料庫系統轉換的打算,例如,維基百科早已將資料庫從MySQL換成瑪莉亞資料庫 (MariaDB)、而Linux作業系統Red HatSUSE也採用了瑪莉亞資料庫 (MariaDB)作為其網站資料庫。

瑪莉亞資料庫 (MariaDB)在因應複雜的查詢上,效率高過MySQL,而在複製設定 (Replication Setup) 上的速度,瑪莉亞資料庫 (MariaDB)也比MySQL高出許多

MySQL適合用管理小於1.5TB的資料,或者作為大量資料的後端備份系統

MySQL的優點是,簡易查詢的效率較高,對於一個簡易查詢的要求,通常能以小於500微秒 (μs) 的時間回應,此外,MySQL也有一個相對穩定的資料儲存層InnoDB,最後,MySQL的安裝與操作都相對容易,同時也有許多網路上的學習資源可供利用

MySQL 5.7主要強化效能、可擴充性,與管理能力。在SysBench標竿測試中,基於1204個連結的Read-only Point-Selects每秒傳遞160萬次的查詢(QPS),為MySQL 5.6的3倍。另有優化的InnoDB、更強大的複製能力、新的優化器、支援JSON、新的效能綱要(performance schema)與SYS綱要,改善了安全性,強化NoSQL能力,並擴充行動應用對地理資訊系統(GIS)的支援 。全新的MySQL Router則可藉由智慧型的MySQL資料庫路徑查詢以增加效能與上線時間,進而簡化應用的開發,亦針對MySQL Fabric提供跨語言的支援,能更方便地管理MySQL資料庫群組,自動化的資料切分(data sharding)則帶來高可得性與擴充性。

MySQL 埠號 3306

甲骨文 (Oracle)在2010年底發布了MySQL的改版,5.5版中有不少重大的更新,例如:將原本預設的資料表儲存引擎由MyISAM更改成InnoDB、提供更多的分區選項、對多處理器核心系統效能的改進、支援半同步複製功能 (Semi-Synchronous Replication)、加強資料毀壞修復的能力等。

MySQL高可用性架構搭配使用InnoDB儲存引擎,更能達到一致性要求。因為InnoDB有Crash Safe功能,當主機發生故障時,可保證還在處理的資料能完全寫入,而且具有一致性。

5.1版之前,MyISAM一直是預設的儲存引擎,雖然它有著快速、簡單的特性,卻不支援Transaction(交易)的特性(不可分割、一致、隔離、耐久,簡稱為ACID)、Foreign Key外鍵)等功能,但InnoDB都有,在5.5版中MySQL正式將InnoDB更改為預設的儲存引擎。

InnoDB支援了Transaction的上述4種特性,它的特色是將數個SQL指令視為一個整體執行,只要其中一個指令錯誤,就會取消掉所有步驟,舉個例子,假設你正在提款機前操作某項交易,如果在過程中某個步驟發生錯誤,例如停電,則系統會取消掉整筆交易,而不是取消該步驟,這對於交易來說是一個很重要的安全機制;它同時支援Foreign Key,可以將數個資料表連結,而這最主要的功能就是確保資料的一致性;InnoDB也支援資料列鎖定Row-level locking),如果有使用者正在操作一張資料表,那麼InnoDB會鎖定對方目前在存取的資料列,而非鎖定整個資料表,如此若別人存取同資料表的其他資料列就不會受影響。

MySQL在5.5版中更進一步加強了InnoDB儲存引擎的功能,例如改善資料毀壞修復,過去如果資料庫發生了資料損壞,可能要數小時的修復時間,現在只要幾分鐘就能完成。另外針對資料庫暫存區的改進,現在MySQL可以新增多個暫存區(Multiple Buffer Pool Instances)──Buffer Pool是記憶體中的暫存區塊,將資料放在這個暫存區可以增加存取的速度,不過如果同時有多個執行?對暫存區進行存取,就會造成傳輸的瓶頸,而MySQL 5.5版允許使用者可以開啟最多64個暫存區,以改善這個問題,進而增加存取性能,同時管理者也可以自由設定暫存區的大小。

一般資料庫若沒有分區功能,又想將資料分散儲存,它可能必須將資料庫或資料表移動分散到不同的磁碟,然後利用連結指向這些位置,以提升系統的速度。而分區Partition)則是更進階的作法,它是將資料表中同個屬性的欄或列進行分割,在不同的地方儲存成單獨的資料表,例如:我們可以將某資料表中不常使用到的欄位分配到同一個分區,這樣可以減少搜尋資料表的時間;另外,在搜尋資料時,資料庫系統如果知道要搜尋的資料在那個分區,就可以直接到該分區找,這樣會比搜尋整個資料表快。

MySQL先前就有分區功能,在5.5版又有一些強化,例如:在5.1版中不支援對非整數類型例如Date(日期)分區,必須使用函數進行轉換,在5.5版中則可以對日期直接進行分區,而不需再透過函數,同時也加入了TRUNCATE PARTITION指令。

以往要刪除分區裡的資料只能用DROP PARTITION指令,該指令可以刪除分區的資料但同時也會將分區刪除,如果資料庫系統管理員想刪除分區的某部份資料,但又想保留分區本身就會非常麻煩,現在有了TRUNCATE PARTITION指令可以刪除分區資料,同時又保留分區本身,這對於管理員來說相當有幫助。

支援半同步複製也是新版才有的機制。在5.5版之前,MySQL只支援非同步複製,也就是說Master主要資料庫)在使用者送來一個操作請求時,先將該操作處理完畢回覆給使用者,再將該記錄傳送給Slave備份資料庫),缺點是兩套資料庫之間的內容會有時間差,如果主要資料庫發生資料毀損,而備份資料庫的資料還沒更新到與主資料庫資料一致的情形下,那麼就無法靠備用資料庫維持資料一致性

而在5.5版中,MySQL提供了半同步複製機制(Semi-Synchronous Replication),這個功能可以保證資料在主從伺服器同時傳入資料的情況下,將結果回傳給使用者,而所謂的半同步,是指它只保證資料已經傳到備份資料庫上,卻不保證資料在備份資料庫上執行完成,所以還是有可能會發生資料不同步的狀況發生

MySQL 5.5版本已經推出且穩定運行了一段時間,而5.6版也即將推出,預計會加入全文檢索及支援NoSQL,會是一個重大更新。

甲骨文 (Oracle) 釋出開放源碼的最新關聯性資料庫版本MySQL 5.7.4 開發者里程碑版 (Development Milestone Release, DMR),強調為了符合現代雲端與嵌入應用的需求,大幅改善了MySQL的效能、擴展性與可靠性,在標竿測試中其查詢速度是MySQL 5.6的兩倍、MySQL 5.5的3倍。

在效能與擴展性上,MySQL 5.7.4針對固態硬碟強化了效能與吞吐量,改善InnoDB緩衝區與元資料鎖定,強化其半同步的複製效能,其每秒查詢速度是5.6版的2倍,5.5版的3倍。在管理功能上,帶來更精確的成本計算,改善效能架構,並有符合AES標準的256bit加密及新的密碼管理選項。

甲骨文 (Oracle) 發表MySQL Fabric,這是一個可用來管理眾多MySQL伺服器的開放源碼延伸框架,強調高可得性與擴充能力,為甲骨文MySQL Utilities 1.4.3的元件之一。

MySQL Fabric具備自動化的故障偵測、資料切割 (Sharding) 能力,也支援PHPPythonJava連結器(Connector)。它能夠監控主要的資料庫,在發現該資料庫伺服器故障時,可立即遴選其他資料庫當作主資料庫;還能自動把交易傳送到主資料庫,並保持從屬資料庫的查詢負載平衡,可自應用程式清楚檢視資料庫伺服器的拓撲結構及狀態

把資料庫切割成分片(shards)並放置到不同伺服器的用意在於疏解單一伺服器的負載,並改善效能。其自動化的資料切割與重新切割能力允許表格的讀寫可橫向擴展;可選擇所要切割的表格及指定切割欄位;或是把既有已切割的分片移到新的伺服器或再拆分這些分片。

MySQL 5.5是在2010年12月發表,MySQL 5.6則於2013年2月釋出。

Web2.0概念的成熟發展促成了NoSQL資料庫的興起。過去幾年使用者網路行為的改變,挑戰了關聯式資料庫的效能和彈性,因應爆量讀寫頻繁的需求,NoSQL的概念重新被提出,NoSQL資料庫的特色是不使用SQL當作查詢語言、動態列儲存及分散式架構等。

關聯式資料庫的操作具有ACID的特性,第一、不可分割性 (Atomicity),在一次的交易 (Transaction),操作必須全部成功,一旦發生錯誤,所有資料更動將回復到交易之前,不容許有中間狀態,第二、一致性 (Consistency),所有的交易,都必須遵守資料庫設定規則,第三、獨立性 (Isolation) 資料交易進行中,不受其他交易影響,第四、持久性 (Durability),交易成功後,所做的任何變更都會被永久保存。這些特性在金融交易很重要,可以確保其過程安全及結果的可靠性,而過去的靜態網頁的資料庫操作,讀取比例遠高於寫入,在關聯式資料庫也是沒有問題的。

但近年盛行的網路服務,如社群網站、社群遊戲甚至是網路遊戲,龐大的使用者規模以及頻繁互動的操作模式,關聯式資料庫的可靠性無用武之地,反而成為效能瓶頸。

NoSQL資料庫因其分散式架構,容量容易擴充,但資料更新可能會有不同步的狀況,對此NoSQL資料庫採用資料遲早會一致 (Eventually Consistency) 的做法,不同資料庫伺服器,或許資料會因時間差而不同,但終究會同步。

關聯式資料庫必須遵守ACID的特性,NoSQL資料庫應用上更具彈性,兩類型資料庫系統沒有優劣之分,只有需求考量不同

資料庫的設計是採取主從 (Master/Slave) 架構,並沒有考量到高可用性。這種架構的好處是,讀取與寫入分別由不同主機負責,因此,當使用者端的資料寫入Master主機後,會進一步複寫到Slave主機,等到使用者端需要讀取資料時,就可直接由Slave主機回應,藉此達到降低Master主機負載的目標。

然而,這種架構的設計,因為只有一臺Master主機,沒有考量到高可用性,只要Master主機發生故障,就會影響到網站服務。

MySQL使用memcached分散式快取系統相容的API作為NoSQL,透過該程式介面可以直接驅動InnoDB儲存引擎,大幅提昇讀取速度。另外,memcached的資料都是儲存在記憶體之中,因此執行效率遠高於一般放置於硬碟的SQL資料庫。

負責維護MySQL開源版本的資料庫服務商Percona,該公司旗下QA工程師David Bennett透露,在Percona Live 2016會議上,MySQL社群決定以後不會推出MySQL 5.8,而是直接改版為MySQL 8.0David Bennett表示,8.0版將會針對記憶體、SSD和硬碟的特性,來優化查詢。另外也不再需要依賴MyISAM,不用使用FRM檔案。8.0的新虛擬索引機制可以支援JSON的文件陣列。

powered by Gitbook最後更新: 2017-08-25 10:06:20

results matching ""

    No results matching ""