mysql的過去
對於mysql而言,其最大的發展變化就是被sun收購,但是sun原本就有資料庫團隊,mysql被收購之後兩個團隊也合併了起來。mysql的團隊懂得社群並且有激情,而sun的團隊懂得怎樣軟體工程化,懂得保證質量和產品迭代,因此團隊合併之後對於mysql的改變很大。在這之後sun被oracle收購,這又是另外乙個轉折點,oracle不僅給了mysql團隊很大自由,也投入了很多人力和物力。這也保證了2013、2015以及2023年,每間隔2年多的時間就能推出乙個較為成熟的新版本,而在2023年之後其迭代週期就會迅速變短,因為朝著物聯網方向發展,大概每三個月就會迭代一次。
近十年中,oracle做了很多很好的事情,其中有一點事情雖然很少談到,但是對於之後的發展卻極為重要,那就是——**重構。大家都希望完善功能,提高效能,但是很少有人做了**重構。所謂**重構就是在不改變功能的前提下,改善**結構,提高可讀性和可擴充套件性。這件事情雖然說起來簡單,但是做起來難,特別是在進行決策的時候。mysql5.6版本的時候決定進行**重構,這是因為,oracle增加了很多人力進入mysql專案,但是當時的系統卻存在很多bug,這使得**維護變得極為困難,使很多人力用於維護舊**而不是增加新功能。此外,還使新功能的開發周期變得特別長,並且容易發生錯誤。當然,因為有很多錯誤,並且**沒有注釋和文件,使新人接手專案變得困難。
mysql的現狀
因此為了保證長期的市場領先地位,mysql必須要進行**重構。在最開始,主要是將解析、優化、查詢等步驟進行拆分,方便找到存在問題的模組。此外, 還實現了一些工具,來幫助檢測bug。mysql5.7中的優化器部分,30%的**是重寫的,而在8.0中解析器的50%都是重寫的,可見投入很大。mysql將程式語言都統一到c++,編譯器都使用最新版本,**規格採用谷歌的,統一了300人的開發團隊的**標準。**重構這件事情可能是對於未來10年的mysql發展所做的最重要的一件事情。這是因為有了高質量的**,才能夠快速推出新的功能,降低維護成本,使得新人更快上手專案。
解析器在重構之前的結構就像是一盤義大利面,非常混亂,重構之後就變得極為清晰。當重構完解析器之後發現,以前很多解析器的bug都消失了,此外,增加複雜語法的效率也得到了極大的提公升,節約了大量時間。此外,還做了多核效能提高,這也是硬體的趨勢,雖然每個核心不會更快,但是數目卻會增加。在重構之後,讀效能提高了三倍,寫的效能也有很可觀的的提高。
功能上的最大亮點就是在mysql5.7版本中推出了json資料型別。雖然mysql一直都是關係型資料庫,但是發現自己的使用者不僅僅需要關係型資料庫,也需要支援非結構化資料。因此mysql需要和客戶自己成長,因此在5.7版本中加入了json資料型別,也推出了很多適於json的函式,因此使用者可以選擇使用類似於mongodb的document的api,使用者可以將mysql當做nosql來使用,而不用關心底層的原理,而且還實現了nosql所無法比擬的功能。
mysql5.7功能中的另外乙個亮點是「group replication」。這還是因為了除了網際網路客戶已經普遍地應用mysql了,還有很多新增客戶是企業級客戶,他們要求高可靠性。組複製就是提高可靠性的乙個功能,支援自動切換和多寫,而多寫也提公升了高可用性,而且支援多寫檢測。這個功能當前只支援innodb,但很多新功能也支援innodb。
mysql 8.0版本的新功能亮點就是自檢表,對於客戶而言做好的一點就是就是它支援原子操作的ddl,特別是在雲上原子性的ddl發揮了決定的作用,因為很多操作都是自動操作,不可能讓人手動修改ddl回滾時發生的錯誤。這一點對於雲資料庫而言非常重要。
此外,mysql 8.0版本還提公升了information scheme的效能。而無論是系統表還是普通表,都存放在innodb裡面,因此其處理方式是一樣的。對於開發者而言,有了資料自檢,增加新的功能就會非常容易。
遞迴公用表表示式以及視窗函式都是非常複雜的sql語句,在8.0中加入這兩個語句縮短了mysql和oracle的差距,這會大幅度地降低資料庫開發人員的開發時間。cte主要用於對於存在層次等級的表中做遞迴的查詢,這一功能在報表中非常常用。視窗函式則是用在分析型工作中的,比如分析每年、每季度的營收等。這些就是在mysql8.0中新增的針對於資料庫開發者的功能,幫助他們提公升開發效率。
mysql的未來
mysql的未來其實只有乙個字,那就是「雲」。有**稱「在2023年,83% 的企業負載會轉移到雲上」,也就是說大部分線下場景會轉移到雲上,這對於mysql而言既是乙個機會也是乙個挑戰。mysql需要在進行核心改動和優化,使其更適合在雲上發展。
雲上資料庫架構存在著明顯的轉變,最為明顯的就是計算層和儲存層的分離。計算層不共享,但是儲存層會變成共享儲存。共享儲存會達到雲規模,也就是極大規模,能夠支援所有使用者,這樣能夠極大地節約資源。而這樣的想法已經被polardb用到了。而企業級客戶需要高可靠性,所以雲上資料庫需要演變成為可以跨機房的高可靠性,而且需要保證切換的過程中不丟失任何資料。在雲上,很切換過程多操作需要自動化,需要保證ac之間的切換不丟失任何資料。雲上資料庫與傳統資料庫不同的是需要考慮到雲上其他的服務,如何將資料庫和備份、恢復、審計、安全以及監控等其他服務進行整合。
資源管理也是值得mysql提公升的部分,有些事務對於響應時間要求很高,這樣可以優先處理響應時間較高的任務,而降低其他事務的優先順序。此外,當記憶體不夠的時候應該如何處理,不能使得服務宕機。可以進行回滾或者降低新的請求,來保證資料庫的穩定狀態。此外,還有想做的一件事情就是智慧型生成執行計畫。因為乙個sql進來之後,先解析做優化,產生執行計畫,這裡需要改進的是在執行計畫生成的時候需要考慮更多的事情,比如查詢的響應要求以及記憶體限制。對於查詢時間和空間的平衡需要客戶自己決定。而現在的執行計畫是由優化器自己決定的,在未來希望能夠智慧型地生成執行計畫。
回到企業級工作負載,其實mysql用在網際網路業務中是非常多的,但是眾所周知網際網路業務的查詢往往比較簡單,而企業級使用者的查詢相當複雜。mysql目前對於簡單資料庫查詢的效能非常好,在這一方面做了很多優化,而在複雜查詢方面還可以做極多的優化,比如開啟多個執行緒並行執行。同時可以在innodb層做更多的並行執行,比如scan、條件過濾等,因此在複雜查詢方面有無限的提公升空間。
MySQL的未來在哪?
mysql的過去 對於mysql而言,其最大的發展變化就是被sun收購,但是sun原本就有資料庫團隊,mysql被收購之後兩個團隊也合併了起來。mysql的團隊懂得社群並且有激情,而sun的團隊懂得怎樣軟體工程化,懂得保證質量和產品迭代,因此團隊合併之後對於mysql的改變很大。在這之後sun被or...
MySQL的未來在哪?
mysql的過去 對於mysql而言,其最大的發展變化就是被sun收購,但是sun原本就有資料庫團隊,mysql被收購之後兩個團隊也合併了起來。mysql的團隊懂得社群並且有激情,而sun的團隊懂得怎樣軟體工程化,懂得保證質量和產品迭代,因此團隊合併之後對於mysql的改變很大。在這之後sun被or...
MySQL的未來在哪?
對於mysql而言,其最大的發展變化就是被sun收購,但是sun原本就有資料庫團隊,mysql被收購之後兩個團隊也合併了起來。mysql的團隊懂得社群並且有激情,而sun的團隊懂得怎樣軟體工程化,懂得保證質量和產品迭代,因此團隊合併之後對於mysql的改變很大。在這之後sun被oracle收購,這又...