詳解MySQL重大新增功能,專治數據分析之痛

作者介紹

韓鋒,阿里雲高級產品專家,dbaplus社羣聯合發起人,CCIA(中國計算機協會)常務理事、Oracle ACE,曾擔任多家公司首席DBA、數據庫架構師等職務。具有豐富的一線數據庫架構、設計、開發經驗,精通多種關係型數據庫,包括Oracle、MySQL、GreenPlum、Informix等,對NoSQL及大數據相關技術也有實踐經驗。著有《SQL優化最佳實踐》《數據庫高效優化》等書籍。

 

12月2日,Oracle在其官網正式推出“MySQL Database Service with Analytics Engine”。作爲MySQL產品的一個重大增強,這一特性頗引人注目。抽空做了個簡單瞭解,各位從中可窺其一二。(本文部分資料、插圖來自Oracle官方網站)

 

一、MySQL的天然短板“數據分析”

 

MySQL,作爲最爲流行的一款開源數據庫,已經得到非常廣泛地使用。從最新的db-engines指數可以看出,其在數據庫領域中佔據了重要的位置。

 

 

但作爲一款如此流行的數據庫產品,其存在一個明顯的短板就是數據分析。相信MySQL使用者都有這種感覺,在大規模數據情況下MySQL有些力不從心。儘管其內核也在不斷加強這方面的能力(如最新8.0支持hash join、直方圖等),但相較於其他數據庫仍然存在一定劣勢。其核心在於MySQL原生是爲OLTP場景設計的,並沒有考慮OLAP場景。

 

雖然也有一些廠商通過擴展其存儲引擎,增強其數據分析能力,但總體來講還是不盡如人意。於是,通常的一種選擇就是在數據分析時,不得不將數據遷移到另一種數據庫/大數據架構中。通過後者,去完成數據分析工作。在這一過程中,需要開發者自己定義ETL邏輯(可能基於日誌解析或邏輯數據抽取),完成數據遷移。同時,在運行中需時刻關注數據同步,保證數據有效性。在使用上,還需編寫單獨的語句(異構數據源的語句),來完成數據分析動作。

 

整個這一過程,無疑對用戶來說具有一定的使用門檻,且需要花費額外的精力去解決這一問題。相信Oracle原廠也是看到這一問題,因而推出了MySQL Analytics Engine。

 

二、MAE到底是個啥?

 

MySQL Analytics Engine(簡稱MAE),籠統來說是一款內置的分析引擎。通過它與MySQL Database的組合,可以使得數據庫管理員和應用程序開發人員能夠直接將MySQL數據庫作爲OLTP和OLAP工作負載的統一服務。其提供的“MySQL Database Service with Analytics Engine”,是由一個MySQL DB實例和多個分析節點組成。當分析功能被啓用時,分析服務將被安裝在DB實例上,其負責集羣管理、數據加載、查詢執行等。從用戶角度來看,可以通過標準的MySQL JDBC/ODBC Connector來連接使用。下面我們詳細展開看看。

 

 

首先從整體使用來看,對外提供統一的MySQL Database Service。用戶仍然是通過傳統的方式去使用它,無論是OLTP還是OLAP場景。在這個服務的內部,是包括了傳統的OLTP引擎和新的Analytics引擎。在數據上,也是存在兩份。前者仍然保存在例如InnoDB這樣的存儲引擎之中,後者則保存在一組節點構成集羣的內存之中。正常事務操作帶來的數據變化,會透明地傳播到後面的分析集羣中,以加速分析處理。這樣就使得客戶可以在單個數據庫平臺上同時運行OLTP和OLAP工作負載。簡言之,就是兩個計算引擎、兩份數據存儲。

 

 

MAE的核心工作思想就是“化大爲小”,通過分區機制,將數據打散後利用獨立的CPU資源進行處理。處理後的結果統一返回。

 

 

在MAE內部,由多個分析節點組成。其具體節點數量,可由MySQL分析引擎提供的自動配置顧問自動獲得。在節點中,數據以一種混合列壓縮的格式存儲。這有助於向量化處理,從而獲得非常好的查詢性能。數據在內存中運行之前被編碼和壓縮。這種壓縮和優化的內存使用,對於數值和字符串數據尤爲顯著,可提高性能並減少內存佔用,從而爲客戶降低成本。同時在每個節點中使用並行操作技術,這爲分析提供了高緩存命中率,並提供良好的節點間可伸縮性。集羣內的每個分析節點和節點內的每個核心都可以並行處理分區數據,包括並行掃描、連接、分組、聚合和top-k處理。

 

 

MySQL分析引擎爲分佈式內存分析處理實現了最新的算法。通過使用向量化的構建和探測連接內核,可以快速處理分區內的連接。通過使用異步批處理I/O,優化了分析節點之間的網絡通信。算法的設計是爲了使計算時間與跨節點的數據通信重疊,這有助於實現良好的可伸縮性。

 

 

MySQL分析引擎與MySQL數據庫服務的集成爲企業的所有OLTP和分析需求提供了一個單一的數據管理平臺。MySQL分析引擎被設計成一個MySQL可插拔存儲引擎,它完全屏蔽了存儲層的所有底層實現細節,不讓最終用戶看到。用戶和應用程序通過集羣中的MySQL數據庫節點與MySQL分析交互。用戶通過標準工具和基於標準的ODBC/JDBC連接器連接到MySQL分析引擎。

 

MySQL分析引擎支持與MySQL相同的ANSI SQL標準和ACID屬性,並支持不同的數據類型。這使得現有的應用程序無需對其應用程序進行任何更改就可以利用MySQL分析引擎,從而實現簡單快速的集成。一旦用戶向MySQL數據庫提交查詢,MySQL查詢優化器就會透明地決定是否將查詢卸載到分析集羣以加速執行。這是基於MySQL分析引擎是否支持查詢中引用的所有操作符和函數並且使用分析引擎處理查詢的估計時間比在MySQL中更少時,查詢將被下推到分析節點進行處理。處理之後,結果被髮送回MySQL數據庫節點並返回給用戶。

 

 

由於MySQL分析引擎是一個內存處理引擎,數據被持久化到MySQL InnoDB存儲引擎中。對錶的任何更新都會自動實時地傳播到分析節點的內存中。這使得後續查詢始終能夠訪問最新的數據。這是通過一個輕量級的更改傳播算法在後臺完成的,該算法可以跟上MySQL的數據更新率。同步原理未說明?

 

三、MAE能爲我們帶來什麼?

 

從產品角度來看,MySQL Analytics Engine是一種雲原生服務,專門在Oracle雲基礎設施中提供,爲分析工作負載提供了令人信服的性能和成本。使用MySQL數據庫管理企業數據的組織現在可以使用MySQL分析引擎運行分析查詢,性能顯著提高,成本更低,不需要ETL,並且支持實時分析。該服務可以只部署在雲中,也可以部署在混合環境中,它簡化了事務和分析應用程序的管理。從其推出產品上,可歸納爲以下幾個理念:

 

  ONE DB

 

這一產品最核心價值點就是統一處理場景。之前MySQL的在處理混合業務場景是不得不使用下面方式(如下圖):

 

 

通過引入MAE,增強MySQL能力,達到統一效果。

 

 

  ONE SQL

 

第二個價值點在於,不僅僅是統一平臺,而且使用同樣的交互方式。原有的邏輯,不需要做任何的改變。無論是前端的事務交易場景,還是後端的數據可視化分析,均不需要做改變。這無疑對用戶的吸引力很大,可以有效保護用戶的已有軟件資產。

 

 

  NO ETL

 

對用戶來說,不在需要關心數據同步的細節,不需要編寫額外的ETL作業。這將大大減少用戶的負擔。

 

  NO TUNING

 

在MAE之前,用戶如果想解決數據分析問題,無外乎兩種。要麼在庫內解決,要麼在庫外解決。在庫內解決的話,需要對MySQL做大量的優化工作或者採取針對分析場景的存儲引擎,這些都帶來了優化的工作量。對於庫外方案同樣如此,用戶需要自己完成優化工作。

 

而使用MAE則不需要顧慮這點。其利用了Oracle實驗室開發的自動機器學習(AutoML)功能來自動化服務的各個方面。由於這種自動化是基於機器學習的,系統可以智能地預測各種場景並採取行動,包括自動估算工作負載所需的分析節點數量。

 

當服務啓動時,需要將運行分析查詢的數據庫表加載到MySQL分析集羣內存中。所需集羣的大小取決於加載所需的表和列,以及此數據在內存中實現的壓縮。在傳統的配置中,用戶需要猜測集羣的大小。由於空間限制,低估會導致數據加載或查詢執行失敗。高估會導致不必要資源的額外成本。因此,用戶會不斷迭代,直到確定正確的集羣大小,當更新表時,這種大小估計就會變得不準確。而MAE則可自動完成上述過程。

 

  HIGH PERFORMANCE

 

MAE作爲一種分佈式、可伸縮、內存型、混合列式查詢引擎,其通過內存中的矢量化處理及大規模節點間和節點內並行處理來極速性能。同時查詢處理已針對Oracle雲基礎設施做了優化,包括節點間網絡帶寬優化等。通過上述能力,MAE提供了強大的分析能力。下面是針對其主要競品的性能對比。

 

  • MySQL Analytics vs MySQL

 

 

  • MySQL Analytics vs Amazon Aurora

 

 

  • MySQL Analytics vs Amazon Redshift

 

 

  LOW COST

 

使用帶有分析引擎的MySQL數據庫服務的成本取決於配置的分析節點的數量。分析集羣的大小取決於數據集的大小和工作負載的特性。一個分析節點可以容納大約400GB的數據。當客戶使用Analytics Engine遷移到MySQL數據庫服務時,他們的成本有望大幅降低。與Amazon Aurora和Redshift相比,MySQL分析引擎的成本是其成本的1/3。

 

  EASY SCALE

 

MAE目前在一個集羣中支持最多24個分析節點(上千個Core),處理能力約爲10 TB的分析數據。10TB是在給定時刻可以填充到分析節點內存中的大約數據量。MySQL數據庫中存儲的數據量沒有限制,客戶可以選擇從MySQL數據庫模式中加載哪些表或列到分析節點的內存中。如果查詢不再需要這些表,用戶可以從內存中刪除這些表,爲其他數據騰出空間。

 

  EASY USE

 

MAE將大量細節隱藏在後面,對於前端客戶來講使用非常簡單。只需要根據推薦大小配置分析集羣、配置預加速查詢的對象、手工完成第一次加載。後面即可享受到分析集羣帶來的加速能力。

 

 

通過查看執行計劃,可以直觀看出是否使用了分析集羣(下圖中的Using secondary engine RAPID)

 

 

此外,針對混合雲場景(即無法將數據部署到雲端的客戶),可以利用MySQL複製將本地MySQL數據複製到MySQL分析引擎,同樣不需要ETL。目前MAE僅在Oracle Cloud Infrastructure (OCI) Gen 2 hardware 平臺提供。

 

 

寫在最後

 

MAE的出現,很好地彌補了MySQL原生在數據分析場景的短板。相信,這一特性將更加擴大MySQL的使用範圍,爲其在更大規模、更爲重要的企業化應用鋪平道路。比較遺憾的是,MAE目前僅能在OCI中使用,目前國內的廣大線下用戶還無法使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章