在此前的文章中,我們闡述了Apache Web伺服器的故事、它在網際網路興起中的作用,以及它的市場份額如何被Nginx等競爭對手蠶食。Apache是部分LAMP堆疊–Linux + Apache+ MySQL+ PHP –它不是一個輕描淡寫地說,超過所有的網際網路欠它的存在對LAMP的一半。
今天我們將看看MariaDB和MySQL之間的一些差異,這兩種相似但不同的資料庫技術用於支援全球數百萬個網站。
儘管MariaDB是MySQL的一個分支,但這兩個資料庫管理系統仍然有很大的不同:
- MariaDB是完全GPL許可的,而MySQL採用雙許可方法。
- 每個控制代碼執行緒池以不同的方式。
- MariaDB支援許多不同的儲存引擎。
- 在許多情況下,MariaDB提供了改進的效能。
什麼是MySQL
MySQL是一種關聯式資料庫 (RDBMS),由Michael Monty Widenius和David Axmark建立,於1995年首次出現。它是在市場由Microsoft和Oracle的專有(且昂貴)解決方案主導時建立的。
1998年的舊MySQL頁面(圖片來源:Archive.org)
MySQL現在是一個典型的品牌。正如我們今天所知,它在構建網際網路方面發揮著關鍵作用。Linux Journal上的這篇文章揭示了它的早期發展。
由於早期採用雙重許可——並在其免費版本中使用GNU GPL——MySQL為後來出現的許多其他軟體供應商鋪平了道路。
用Michael Widenius關於雙重許可的話來說:
…由於 MySQL 是一種基礎設施產品,可以輕鬆嵌入到其他產品中,我們可以向那些想要將 MySQL 嵌入到他們的產品中但不想讓他們的產品開源的人出售許可證。
伺服器部署的Web應用程式,作為LAMP堆疊的一部分,通常不會嵌入MySQL並分發它們的程式碼。這意味著任何人都可以自由地將該軟體用於他們自己的網路產品。
在公開發布後不到十年,MySQL就主導了開源關聯式資料庫市場。
谷歌趨勢顯示,全球對MySQL的網路搜尋興趣在2004年至2005年間達到頂峰:
隨著時間的推移對MySQL的興趣
一些值得注意的使用MySQL的公司包括:
- Facebook於2011年的一份報告提到“每秒6000萬次查詢,每秒近400萬次行更改”,而MySQL處理“幾乎所有使用者互動:喜歡、分享、狀態更新、警報、請求”。
- Netflix平臺的計費部分
- YouTube
- Booking.com
- Airbnb
- ……
另一個值得一提的促成MySQL興起和採用的因素是phpMyAdmin。
PhpMyAdmin是一種基於Web的資料庫管理工具,可以追溯到1998年,它很早就進入了共享主機提供商的管理控制檯,包括cPanel。它是一個用PHP編寫的工具,它使得在LAMP伺服器上管理MySQL變得容易。匯入、匯出、編寫複雜的查詢、刪除和建立表、進行復雜的搜尋只是phpMyAdmin使使用者無需使用Linux終端即可實現的一些功能。
WordPress和MySQL
MySQL流行背後的因素之一無疑是WordPress,它如今支援著大約60%的CMS系統或整個Web的34%。WordPress由Matt Mullenweg和Mike Little於2003年建立,作為另一個專案的分支。它是用PHP編寫的,它使用MySQL作為它的資料庫,當它出現時,它的採用就像野火一樣。
WordPress很快成為開源軟體概念的代名詞,其底層伺服器堆疊也是如此。DisplayWP有一個圖表,列出了每個WordPress版本所需的最低MySQL版本。
推動MySQL採用的因素之一是其許可的GPL方面。由於它與Linux相容,因此預設情況下它開始包含在Linux發行版中。今天,它預設包含在Ubuntu中。
MySQL和關係型資料庫模型的簡要概述
MySQL被設想為RDBMS(關聯式資料庫管理系統)。關聯式資料庫模型可以追溯到1970年代,正如“Codd的十二條誡命”所概述的那樣。簡而言之,該模型將資料組織成由列和行組成的表。每行都由一個鍵(主鍵使用SQL術語)唯一標識。
這些主鍵可以用作其他表用來定義與特定行的關係的排序的掛鉤。因此,關聯式資料庫表中的FOREIGN KEY列將引用另一個表中的PRIMARY KEY列,從而定義不同表中行之間的關係。
作為基本SQL解釋, “主鍵由其資料包含在用於一個或多個列的唯一標識表中的每一行。” d在主鍵列ATA必須是唯一的,而不能為空或NULL。在關聯式資料庫中,“表只有一個主鍵,它的定義是強制性的。”同時,“外來鍵是一個表中的一組一個或多個列,引用另一個表中的主鍵。無需放置任何特殊程式碼、配置或表定義來正式“指定”外來鍵。
MySQL中的關聯式資料庫模型
這樣,對於關聯式資料庫,就可以以複雜的方式對資料進行建模並定義各種資料之間的連線。在上面的簡單示例中,我們有兩個表,其中的行可以相互關聯,例如。每個人都擁有一輛汽車。
我們可以根據我們需要的邏輯查詢這些資料,我們可以根據不同的條件集過濾結果集,我們可以用比上面概述的複雜得多的方式構造我們的查詢。
出於這個原因,關聯式資料庫——以及一般的資料庫——使用特定於領域的語言,其中SQL(代表結構化查詢語言)是RDBMS使用的流行語言,如果不是唯一的話。
被Sun收購
2008年,MySQL背後的公司MySQL AB被Sun Microsystems收購。該公司建立了JAVA、Solaris Unix作業系統,並且是不同計算機技術的重要貢獻者。正如美國商業資訊當時報道的那樣:
“Sun Microsystems, Inc.(納斯達克股票程式碼:JAVA)今天宣佈已達成最終協議,以約10億美元的總對價收購MySQL AB,這是一家開源圖示和世界上增長最快的開源資料庫之一的開發商。”
很快就會證明這次收購併不足以阻止Sun的垮臺,但它描繪了MySQL在那個時代的規模有多大。
甲骨文
Oracle Corporation是迄今為止最大的閉源資料庫Oracle資料庫的供應商。
它是MySQL的直接競爭對手,實際上是MySQL那時正在成為的GPL、免費、開源軟體模型的對立面。
當甲骨文在2010年購買Sun和MySQL時(因為它戰勝了IBM),FOSS世界認為這就像星際迷航中的博格攻擊一樣“險惡”。一位使用者回憶了Quora上的事件:
MySQL對Oracle構成了嚴重威脅——當時Oracle資料庫佔所有收入的 80% 以上(考慮到需要維護它的骨幹人員,甚至更多的利潤)。
MySQL正在取得重大進展——擁有數百萬美元站點許可證的財富 50 強大公司正在將資料庫(尤其是隻讀資料庫)從Oracle轉移到MySQL,因為管理開銷要低得多。我知道,我幫助完成了其中的一些。
MySQL社羣中的許多人希望新增一些功能,這些功能甚至會使免費版本的Oracle過時。MySQL肯定會沿著這條路走下去。工具日趨成熟,拉里很害怕。
所以甲骨文購買MySQL是為了確保它可以控制這個品牌,分散社羣並從未清洗的大眾手中拯救它的旗艦。
這是一個合乎邏輯的結論,因為當時MySQL變得如此流行,以至於它可能被視為對Oracle核心業務的真正威脅。正如Geekflare的Ankush Thakur所說,MySQL變得如此流行,以至於開發人員很快就忘記了SQL和MySQL是兩種不同的東西。
在收購發生之前,2009年底,當年離開MySQL團隊成立自己的分支和資料庫公司的Monty Widenius在他的部落格上發表了一篇戲劇性的呼籲(我們只引用開頭):
幫助儲存MySQL
我,Michael “Monty” Widenius,MySQL的創造者,迫切請求您幫助將MySQL從Oracle的魔掌中拯救出來。如果沒有您的直接幫助,甲骨文現在隨時都可能擁有MySQL。通過寫信給歐盟委員會 (EC),您可以支援這一事業並幫助確保產品MySQL作為開源專案的未來發展。
儘管如此,這次收購還是在一個月後完成了,這讓開源社羣的許多人感到沮喪。Widenius已經離開了Sun,成立了Monty Program AB,並創立MySQL分支,為MariaDB奠定了基礎。與此同時,他還帶走了許多MySQL開發人員。
時至今日,人們仍在質疑蒙蒂恐懼的合法性。特別是,因為最壞的情況根本沒有發生:Oracle收購MySQL並不是為了殺死它。
一些人爭辯說,甲骨文購買MySQL只不過是收購Sun的“附帶受害者”。早在2009年,那些關注資料庫市場的人就有理由擔心。
有警告。MySQL的主要儲存引擎開發商InnoDB是一家芬蘭公司,2005年被甲骨文公司收購,後來完全併入甲骨文公司,終止了原來的公司。2006 年,甲骨文收購了Berkeley DB的建立者,後者是另一個不太重要的BDB儲存引擎的提供商。他們圍著轉。
什麼是MariaDB
MariaDB於2009年10月首次釋出,版本為5.1.38 Beta,基於MySQL 5.1.38。這是一個分支,旨在“確保MySQL程式碼庫永遠免費”。
在分支的時候,最常見的恐懼是這次收購是惡意收購,目的是殺死MySQL。事實證明,這種擔憂至少在一定程度上是沒有根據的。
2009年,Monty Program AB和提供優質MySQL服務的公司Percona再次成立了開放資料庫聯盟。他們的目標是“統一所有與MySQL相關的開發和服務,為與MySQL相關的社羣、企業和技術專家面臨的碎片化和不確定性提供解決方案。”
這個想法是“成為MySQL 開源資料庫的行業中心,包括MySQL和衍生程式碼、二進位制檔案、培訓、支援以及MySQL社羣和合作夥伴生態系統的其他增強功能”
回顧過去:這些步驟可能阻止了著名資料庫出現更糟糕的情況。
MariaDB與MySQL:相容性
MariaDB的MySQL分支(以 Widenius 的女兒命名)的全部意義在於確保未來對MySQL的訪問及其進一步發展。這就是為什麼MariaDB被設想為一個完整的二進位制替代品——可以說是一種“插入式”替代品——使MySQL的所有使用者能夠在他們的系統上交換另一個。
MySQL是一個客戶端-伺服器應用程式,它的伺服器程式mysqld、它的客戶端mysql和輔助程式,如mysqldump,都與MariaDB保持相同的名稱。
對於大多數應用程式和目的,尤其是WordPress,用MariaDB替換MySQL成為一個無縫的過程。現有軟體,從流行的CMS工具到phpMyAdmin等應用程式,開箱即用,實際資料可以從一個匯出/匯入到另一個,無需任何更改。
MariaDB的既定目標是保持與MySQL的相容性。根據MariaDB網站,
- 資料和表定義檔案是相容的。
- 所有客戶端 API 和協議都是相容的。
- 檔名、二進位制檔案和路徑在MySQL和MariaDB上是相同的。
- 埠和套接字是相同的。
- 所有MySQL聯結器——PHP、Perl、Python、Java和其他——都可以與MariaDB一起使用。
- MySQL客戶端包可以與MariaDB互換使用,就像與MySQL一樣。
每月進行一次合併以確保相容性並從Oracle獲得任何新特性和錯誤修復。
MariaDB與MySQL:分支背後的原因
MariaDB釋出背後有多種原因。對甲骨文會簡單地殺死其不斷增長的競爭對手以保護其利潤更高的主要產品的擔憂無疑是最大的擔憂之一。使用者會失去一個很棒的免費產品!
其他原因與確保MySQL保持免費和開源有關。今天,MariaDB獲得了完整的GPL許可,其所有功能集,而MySQL保持雙許可方法,高階功能在付費下獲得許可:
“ MySQL企業版包括一套最全面的高階功能、管理工具和技術支援,以實現最高階別的MySQL可擴充套件性、安全性、可靠性和正常執行時間。它降低了開發、部署和管理關鍵業務MySQL應用程式的風險、成本和複雜性。”
如果我們在這裡比較兩者,MariaDB具有由其釋出的GPL許可證提供的明顯優勢。由於專有程式碼庫,Oracle不能合法地利用MariaDB程式碼並將其合併到他們的資料庫中。
Widenius承諾:“當Oracle釋出MySQL的閉源擴充套件時,我們也將釋出一個開源擴充套件。”
社羣事務
分支背後的另一個原因是保持專案“開放”,因為它是一個社羣驅動的專案(如WordPress),其方向和發展就像其許可證一樣開放。如果我們檢視提交日誌,很容易得出結論,大多數MySQL程式碼來自內部開發人員。例如,Oracle的開發人員感謝社羣偶爾做出的顯著貢獻,但這與MariaDB的開放性相去甚遠,也與MySQL過去相去甚遠。
從長遠來看,在撰寫本文時,MariaDB伺服器儲存庫有超過186k次提交、370多個分支和200名貢獻者。另一方面,MySQL有超過148k次提交、9個分支和72個貢獻者。
關於MariaDB開發、方向、功能投票等的討論是在公開可用的郵件列表上完成的:
“Maria開發者”團隊
除了這個,還有Maria Discuss郵件列表。
Maria Captains是一個值得信賴的開發人員團隊,開發人員可以向他們提交補丁。正如團隊在Launchpad上的頁面所說:
“船長是值得信賴的開發人員,擁有對主要 MariaDB 樹的寫訪問許可權。如果您想在樹中新增補丁,請將其提交到maria-developers列表,一位或多位負責人將與您一起審查、批准補丁並最終推送到適當的MariaDB樹中。”
在某些情況下,MariaDB活潑的開發過程證明了其優於Oracle封閉式開發的優勢。
2012年底,MariaDB基金會成立,負責監督資料庫的開發。
在分支之後不久,許多MySQL的原始開發人員跳槽並加入了MariaDB專案。Linux供應商如Red Hat、CentOS、Arch Linux、Debian、OpenSuse、Slackware、Fedora切換到MariaDB作為預設RDBMS,以及BSD發行版、FreeBSD和OpenBSD,而Ubuntu包括MariaDB。可以在此處找到整個列表。
阿里雲、騰訊、IBM、微軟、Booking.com等公司成為白金贊助商。
值得一提的是,MariaDB基金會的董事會中有來自Automattic的人,這清楚地表明WordPress的建立者已經接受了MariaDB。
分支後的幾年裡,MariaDB的發展非常活躍,以至於由於2012年推出的整套新特性,MariaDB從相容MySQL的 5.* 版本號躍升至10.0,想體現在它已經實現的功能。
由於效能原因,維基媒體基金會在2013年宣佈將維基百科切換到MariaDB。谷歌也發生了同樣的事情,它的使用者名稱單現在包括德意志銀行、星展銀行、納斯達克、Verizon、Craigslist等。
在MySQL使用者中,有GitHub、美國海軍、NASA、特斯拉、Netflix、微信、Facebook、Zendesk、Twitter、Zappos、YouTube、Spotify。
正如谷歌搜尋趨勢所顯示的那樣,自首次釋出以來,人們對MySQL繼任者的興趣一直在穩步增長:
隨著時間的推移對MariaDB的興趣
MariaDB與MySQL:主要區別
雖然MariaDB一開始可能與MySQL完全相容,但我們可以預期它們的路徑在未來會有更多分歧。
MariaDB與MySQL
在他的上一篇博文中,Widenius祝賀Oracle在MySQL 8.0版上所做的工作,並概述了一些差異和注意事項,例如:
執行緒池:類似於Nginx伺服器解決的問題,與Apache相比,MySQL為每個客戶端連線分配執行緒,這可以與在PC中啟動整個程式相比,效率低下。MariaDB在5.5版中為此引入了自己的解決方案
Invisible Columns是MariaDB從10.3.3開始的獨有功能。它們不會在SELECT * 語句中返回結果,也不需要在INSERT語句中賦值。
MariaDB在其時間資料型別中引入了microseconds。
儲存引擎:MariaDB使用包括XtraDB, InnoDB, MariaDB ColumnStore, Aria, Archive, Blackhole, Cassandra Storage Engine, Connect, CSV, FederatedX, Memory storage engine, Merge, Mroonga, MyISAM, MyRocks, QQGraph, Sequence Storage Engine, SphinxSE, Spider, TokuDB。ColumnsStore在效能方面很有趣,因為它可以線性擴充套件來處理PB級資料。在他們的部落格上有更多關於它的資訊。
MySQL儲存引擎有InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、Merge、Federated、Example。
資料庫檢視是MariaDB通過僅查詢必要表來引入顯著優化的一項功能。
MySQL引入的一些功能是JSON本機資料型別,MySQL 8.0版本中的MySQL Shell——它允許javascript和python指令碼——並且不適用於MariaDB,基於SHA-256的身份驗證外掛,提高了mysql_native_password的安全性。
在這裡您可以找到MariaDB與MySQL之間差異的完整列表,以及前者與後者相比的優勢。
小結
MySQL隸屬於世界上最大的商業資料庫供應商。有這麼多全職工程師日以繼夜地工作以開發優質的新功能,我們已經有了一些分歧點。另一方面,MariaDB通常會在高階新增方面迎頭趕上,但這並不總是立竿見影的,也沒有任何保證。
儘管如此,MariaDB在許多場景中都提供了改進的效能。再加上更敏捷的補丁和更新、更穩定的開源未來以及更多的樂觀。
評論留言