下一個十年,我們需要一款什麼樣的分析型資料庫?

語言: CN / TW / HK

本文來自於 Doris Summit 2022 演講實錄,演講人:陳明雨

十年對於資料庫意味著什麼?

身處在日新月異的時代,我們見慣了技術的興起與繁榮、變遷與衰落,甚至是朝榮夕滅。資訊科技以前所未有的速度更迭,給週遭事物帶來了顛覆性地變化。資料庫亦是如此,無數資料庫悄然湮沒在技術更迭的浪潮裡,直到在浩渺如海的程式碼片段中都找不到些許印記。而有的則歷久而彌新,經受了時間的考驗,彰顯出強大的生命力,並以更加繁茂的姿態紮根生長。

十年對於資料庫而言,可能是一段從誕生到消逝的完整軟體生命週期,也可能是邁過里程碑之後的全新旅程。

所以從 MySQL 1.0 版本誕生,到具備顛覆性意義的 MySQL 5.7 版本正式釋出,時間跨度剛好是十年,而十年之後的故事,大家已經都知道了。

所以從 Benoit、Thierry、Marcin 聯合建立 Snowflake,到在紐交所成功上市、成為軟體行業有史以來最大規模的IPO,再到全面開啟雲資料倉庫時代,時間跨度也差不多十年。

而對於 Apache Doris,十年意味著什麼?

留個懸念,在回答這個問題之前,我們不妨來回顧下社群發展歷程。

儘管最早的歷史可以追溯到 2008 年的百度鳳巢廣告系統,但彼時非 SQL 的單機查詢引擎加 KV 儲存系統在產品形態上與 OLAP 還有著較大的差異。

正式確立 OLAP 資料庫這一形態是在 2013 年。通過自研全列式儲存引擎 OLAP Engine 並基於 Apache Impala 改造了全新的 MPP 查詢引擎,自此,Doris 真正成為了具備大資料量下高效支援資料分析能力的 OLAP 資料庫,並在百度內部大規模應用,成為了百度內部統一的 OLAP 分析平臺。

往往一個內部專案的發展會有兩種演進模式,一種是隨著需求的增加系統架構日益臃腫,當面對較為靈活的需求,常因改動成本過大而被徹底重構。另一種則是長期服務某一固定場景、需求逐漸收斂乃至停滯,最終被快速革新的外部技術徹底取代。而開源則是內部專案的一場新生,在更廣闊的應用場景、更多樣的開發者群體以及更高效的研發模式加持下開啟新的篇章。

於是在數個版本的迭代與優化後,2017年 Doris 的前身在 GitHub 上開源,2018 年進入 Apache 基金會孵化,並正式更名為 Apache Doris。(GitHub 地址:http://github.com/apache/doris

時至 2022 年,正是 Apache Doris 在 OLAP 領域深耕的十年之際。

# 我們該如何回顧過去的 2022 年?

2022 年,外部世界正處在前所未有的變化之中,無數魔幻時刻在現實中發生。需要慶幸的是,技術和開源的力量幫助我們穿越了許多不確定性。而這一年勢必成為 Apache Doris 發展歷程中有著濃墨重彩的一年,我們從幾個角度來回顧一下 Apache Doris 過去一年的發展:

社群重要指標

圖片

過去一年中:

  • 社群累計貢獻者的數量從 200 餘位增長至近 420 位,同比增長超過 100% ,目前仍在持續上升中。
  • 每月活躍貢獻者的數量從 50 位增長至 100 位,同樣呈現翻倍增長的趨勢。
  • GitHub Star 數量從 3.6k 增長至 6.8k,多次登上 GitHub Trengding 日/周/月度榜單前列
  • 全部 Commits 數量從 3.7k 增長至 7.6k,過去一年新提交程式碼量超越了以往多年累加總和。

圖片

從這些資料中,我們可以感受到 2022 年是 Apache Doris 全面爆發的一年,各個維度資料指標幾乎都有了 100% 的增長。這一年的努力也使 Apache Doris 成為了全球大資料和資料庫領域最為活躍的開源社群之一,上方 GitHub Contribution 增長趨勢圖更是證明了這一點。而這一切,正是由社群所有的使用者和開發者共同創造的。

另外值得紀念的是,在 2022 年 6 月, Apache Doris 迎來了開源以來最重要的里程碑之一,正式從 Apache 孵化器畢業、成為了 Apache 頂級專案

圖片

開源使用者規模

得益於社群成立的專職工程師團隊,為 Apache Doris 社群使用者提供義務的技術支援,2022 年我們在使用者連線與溝通方面變得更加順暢,可以更直面使用者、去傾聽使用者真實的聲音。

在過去的一年裡,Apache Doris 已經在網際網路、金融、電信、教育、汽車、製造、物流、能源、政務等數十個行業應用落地,尤其是在以海量資料著稱的網際網路行業。在中國市值或估值排行前 50 的網際網路公司中,有 80% 企業在長期使用 Apache Doris 來解決自身業務中的資料分析問題,其中包含了百度、美團、小米、騰訊、京東、位元組跳動、網易、新浪、360、 米哈遊、知乎等頭部知名企業。

圖片

在全球範圍內,Apache Doris 已經得到了超過 1000 家企業使用者的認可,並且這一數字仍在快速增長中。這 1000 多家企業使用者中,絕大多數與社群有著直接聯絡,並通過各種方式參與到社群建設中來。他們中的許多企業使用者也參與到本次 Doris Summit 的議題分享中,將自身基於真實業務場景的實踐經驗分享給大家。

版本更新迭代

如果說過去版本將使用和運維的簡易性作為第一追求的話,那麼 2022 年釋出版本則是在效能、穩定性、易用性等多方面特性的全面進化。

  • 4 月份社群釋出了自開源以來的首個 1 位版本—— Apache Doris 1.0,在 1.0 版本中,意義非凡的向量化執行初次與大家見面,標誌著 Apache Doris 開始邁入極速資料分析時代。
  • 6 月份釋出的 1.1 版本,我們對向量化引擎進行了進一步完善和優化,並將其作為正式功能預設開啟。與此同時,社群建立了 LTS 版本釋出機制,以每月釋出一個 3 位版本的速度,對 1.1 版本進行快速地 Bug 修復和功能優化,力求滿足更多社群使用者在穩定性方面的高要求。
  • 在綜合考慮版本迭代節奏和使用者需求後,我們決定將眾多新特性在 1.2 版本中釋出。同時期社群的穩定性和質量保障工作也取得了顯著的成效,測試 Case 得到了極大程度地豐富,並在 Master 分支上構建了流水線。通過一系列質量手段,Apache Doris 的程式碼質量和穩定性得到進一步提升,這也使得版本釋出有著更加嚴格的準出標準。
  • 12 月初 1.2 版本正式面世。這一版本的釋出不僅使查詢效能有了近十倍的提升,同時我們還推出了過去半年時間裡研發的諸多重磅功能,包括 Unique Key 模型 Merge-on-Write 的資料更新模式、支援無縫對接多種資料湖的 Multi-Catalog 多源資料目錄、Java UDF 、Array 陣列型別和 JSONB 型別等,讓 Apache Doris 在更多資料分析場景具備了更強的適應性和可能性。
  • 我們也針對系統穩定性進行了大量的工作,一方面,利用 SQL Smith 等自動化測試工具以及各個知名開源專案的測試用例,構建了數以百萬計的測試用例集;另一方面,通過社群准入流水線和完善的迴歸測試框架,保證了程式碼合入的質量。因此1.2 版本不論從功能、效能還是穩定性方面,都是一次厚積薄發後的全面進化,也是對所有開發者在 2022 年辛苦付出的最好回報。

核心特性演進

核心特性方面,社群的研發力量主要圍繞四個方面開展工作,分別是效能、實時性、半結構化資料支援與 Lakehouse

  • 查詢效能提升。從 1.0 版本面世到 1.2 版本釋出,Apache Doris 在效能方面取得了極為顯著的成績。在單表場景上,Apache Doris 榮登 Clickhouse 公司推出的 Clickbench 資料庫效能榜單,並取得了前三名的優秀成績。在多表關聯場景上,得益於向量化執行引擎及各種查詢優化技術,相對 2021 年底釋出的 0.15 版本 ,Apache Doris 在 SSB 和 TPC-H 等標準測試資料集下均取得了數倍乃至數十倍的效能提升。這一系列效能方面的優化,已經成功讓 Apache Doris 躋身全球資料庫效能最優陣列中!

圖片

  • 實時場景優化。 在 1.2 版本中,我們在原有 Unique Key 資料模型上實現了Merge-On-Write 的資料更新方式,查詢效能在高頻更新時有 5-10 倍的提升,實現了在可更新資料上的低延遲實時分析體驗。另外還實現了輕量 Schema Change 功能,對於資料的加減列不再需要轉換歷史資料,可通過 Flink CDC 等工具快速便捷地同步上游事務資料庫中的 DML 或 DDL 操作,使資料同步工作能夠更加流暢統一。
  • 半結構化資料支援。 目前 Apache Doris 支援了 Array 和 JSONB 型別,其中 Array 型別不僅能更方便地儲存複雜的資料結構,還可以通過 Array 函式滿足使用者行為分析等場景的業務需求。而 JSONB 是一種二進位制 JSON 儲存方式,它不但比純文字 Text JSON 的訪問效能快 4 倍,同時也有更低的記憶體消耗。通過 JSONB 可以方便地匯入各種 JSON 格式的日誌資料結構,並能取得優異的查詢效率。這也是 Apache Doris 在日誌分析領域所做的探索之一。

圖片

  • Lakehouse。在最新發布的 1. 2 版本中,我們引入了全新的 Catalog 概念,正式將 Apache Doris 邁入湖倉一體時代。通過簡單的命令便可以方便地連線到各自外部資料來源並自動同步元資料,實現統一的分析體驗。通過 Native Format Reader、延遲物化、非同步 IO、資料預取等多項針對外部資料來源的效能優化,並充分利用自身的高效能執行引擎和查詢優化器,在對外表訪問效能上,Apache Doris 可以達到 Trino/Presto 的 3- 5 倍、Hive 的 10-100 倍

圖片

2023 RoadMap

承前而啟後,2023 年,Apache Doris 社群在以上幾方面特性持續完善的同時,也將開啟更多有意義的工作。全年的 RoadMap 以及明年 Q1 的具體計劃,可以參考以下的全景圖:

圖片

穩定的版本釋出和迭代速度對於開源軟體至關重要。在 2023 年,我們將以每季度一個 2 位版本的節奏,開始 Apache Doris 2.x 版本的迭代。同時,針對每個 2 位版本,我們也將以每月一個 3 位版本的速度進行功能維護和優化。

從功能角度來看,後續研發工作將會圍繞以下幾個主要方向展開:

高效能

高效能是 Apache Doris 不斷追求的目標,過去一年在 Clickbench、TPC-H 等公開測試資料集上的優異表現,已經證明了其在執行層以及運算元優化方面做到了業界領先。未來我們也會不斷優化各個場景下的效能表現,回饋使用者極速的資料分析體驗,具體包括:

  • 更復雜SQL效能提升: 2022 年我們已經啟動全新查詢優化器的設計與開發,而這一成果在 2023 年一季度就將與大家見面。全新查詢優化器提供了豐富的規則模型,實現了更智慧的代價選擇,可以更高效地支撐複雜查詢,能夠完整執行 TPC-DS 全部 99 個SQL。同時全新查詢優化器還具備全查詢場景的自適應優化,便於使用者在面對不同分析負載和業務場景時都獲得一致性的使用體驗。
  • 更高的點查詢併發: 高併發一直是 Apache Doris 所擅長的場景,而 2023 年我們將會進一步加強這一能力,通過 Short-Circuit Plan、Prepare Statement、Query Cache 等一系列技術,實現單機數萬 QPS 的超高併發支援,並具備隨叢集規模的拓展進而線性提升併發的能力。
  • 更靈活的多表物化檢視: 在過去版本中,通過強一致的單表物化檢視,Apache Doris 加速了固定維度資料的分析效率。而全新的多表物化檢視將會解耦 Base 表與 MV 表的生命週期,通過非同步重新整理和靈活的增量計算方式,滿足多表關聯以及更復雜 SQL 的預計算加速需求,這一特性將在接下來的 2023 年第一季度與大家見面!

高性價比

成本和效率對企業而言是贏得市場競爭的關鍵,對資料庫而言亦是如此。過去 Apache Doris 憑藉在易用性方面的諸多設計幫助使用者大幅節約了計算與儲存資源成本,後續我們也會引入一系列雲原生能力,在不影響業務效率的同時進一步降低成本,具體包括:

  • 更低的儲存成本: 我們將探索與雲上物件儲存系統和檔案系統的結合,幫助使用者進一步降低儲存成本,包括更完善的冷熱資料分離能力,將冷資料智慧轉移至更廉價的物件儲存或檔案系統中。結合單一遠端副本、冷資料 Cache 以及冷熱智慧轉換等技術,保證業務查詢效率不受影響的同時實現儲存成本大幅降低,這一功能將於 2023 年第一季度釋出。
  • 更彈性的計算資源: 剝離儲存與計算狀態,引入僅用於計算的 Elastic Compute Node 。由於不儲存資料,彈性計算節點具備更加快速的彈性伸縮能力,便於使用者在業務高峰期進行快速擴容,進一步提升在海量資料計算場景(如資料湖分析)的分析效率,這一功能已經處於最終除錯階段,即將與大家見面。後續我們還將通過對叢集記憶體和 CPU 執行指標的監控和自動策略配置,實現自動的節點擴縮容(Auto-scaling)。

混合負載

隨著使用者規模的極速擴張,越來越多的使用者將 Apache Doris 用於構建企業內部的統一分析平臺。這一方面需要 Apache Doris 去承擔更大規模的資料處理和分析,另一方面也需要 Apache Doris 同時去應對更多分析負載的挑戰,從過去的實時報表和 Ad-hoc 等典型 OLAP 場景,擴充套件到 ELT/ETL 、日誌檢索與分析等更多場景的統一。為了能更好適配這些場景,許多工作已經進入緊鑼密鼓的研發中,並將於 2023 年陸續與大家見面,具體包括:

  • 更靈活的 Pipeline 執行引擎* *:**與傳統的火山模型相比,Pipeline 模型無需手動設定併發度,可以實現不同管道之間的平行計算,充分利用多核的計算能力,實現更靈活的執行排程,提升在混合負載場景下的綜合性能表現。
  • Workload Manager: 在效能提升的同時,也亟需完善的資源隔離和劃分的能力。我們將會基於 Pipeline 執行引擎實現更細粒度和更靈活的負載管理、資源佇列以及共享隔離等功能,兼顧多種混合負載場景下的查詢效能與穩定性。
  • 輕量級容錯: 輕量級容錯能力也是我們後續持續完善的地方,既能利用 MPP 的高效率又能對錯誤進行容忍,以更好適應使用者在 ETL/ELT 場景的挑戰。
  • 函式相容與多語言UDF: 與此同時,後續也將支援 Hive/Trino/Spark 函式的相容性以及多語言的 UDF,來幫助使用者更靈活地進行資料加工,也可以更方便地從其他資料庫系統遷移到 Apache Doris。

多模資料分析

在過去 Apache Doris 更多是是擅長於結構化資料分析,隨著對半結構化、非結構化資料分析需求的增加,從 1.2 版本起我們增加了 Array 和 JSONB 型別以實現資料的 Native 支援,後續版本仍將持續加強這一能力,為日誌分析場景提供價效比更高、效能更強的解決方案,具體包括:

  • 更豐富的複雜資料型別* *:**除 Array/JSONB 型別以外,2023 年第一季度我們將增加對 Map/Struct 型別的支援,包括高效寫入、儲存、分析函式以及型別之間的相互巢狀,以更好滿足多模態資料分析的支援。後續將支援更加豐富的資料型別,包括 IP、GEO 地理資訊等資料型別,並會探索在時序資料場景的高效資料分析。
  • 更高效的文字分析演算法: 對於文字資料,我們將引入更多的文字分析演算法,包括自適應 Like、高效能子串匹配、高效能正則匹配,Like 語句的謂詞下推、Ngram Bloomfilter 等,同時基於倒排索引實現全文檢索能力,在日誌分析場景提供比 ES 更高效能和價效比的分析能力。這些功能都已經處於就緒階段,將在 2023 年初與大家見面。
  • 動態 Schema 表: 傳統資料庫在設計之初 Schema 是靜態的,Schema 變更時需要執行 DDL ,而這一操作往往具有阻塞性。在越來越多的現代資料分析場景中,表結構會隨時間推移而變化,因此我們引入了 Dynamic Table,可以根據資料寫入自動適應 Schema ,不再需要執行 DDL,由過去的人工干預資料結構進化為資料自驅動,極大提升了靈活資料分析的便捷性。這一功能將在 2022 年第一季度正式釋出。

Lakehouse

隨著資料湖技術的發展,分析效能成為發揮資料湖效用、挖掘資料價值最大的掣肘。基於一款簡單易用和高效能的查詢分析引擎在資料湖之上構建分析服務,成為新的技術趨勢。在過去一年,通過在資料湖上的諸多效能優化、結合自身的高效能執行引擎和查詢優化器以及,Apache Doris 實現了資料湖上極速易用的分析體驗,效能較 Presto/Trino 有 3-5 倍的提升。在 2023 年,我們將會繼續完善這一能力,具體包括:

  • 更簡易的資料對接: 在 1.2 版本中我們釋出了 Multi-Catalog,支援了多種異構資料來源的元資料自動對映與同步,實現了資料湖的無縫對接,後續將對 Delta Lake 的支援以及 Iceberg、Hudi 等更多資料格式的支援。
  • 更完整的資料湖能力支援: 提供資料湖上資料的增量更新與查詢,還會支援將分析結果寫回資料湖、外表寫入內表,實現資料分析流程的全閉環。同時還將支援多版本 Snapshot 讀取和刪除,並進一步在 Apache Doris 為資料湖資料提供物化檢視。

實時性與儲存引擎優化

資料價值會隨著時間推移而降低,因此實時性對於高時效性要求的使用者而言至關重要。在 1.1 版本中我們在 Compaction 和 Flink 實時寫入方面進行了諸多優化,同時 1.2 版本的 Merge-on-Write 資料更新模式進一步使 Apache Doris 在實時更新與極速查詢得以統一。2023 年我們將會持續強化對儲存引擎的優化,具體包括:

  • 更穩定的資料寫入: 通過一系列 Compaction 操作和批量資料寫入方面的優化,節省資源開銷,降低寫放大問題,並結合全新的記憶體管理框架提升寫入過程的記憶體穩定性,進而提升系統穩定性。
  • 更完善的資料更新支援: 過去部分列更新是通過 Agg 模型上的 Replace_if_not_null 來實現的,後續我們將會增加 Unique Key 模型上的部分列更新支援,並完整實現 Delete、Update、 Merge 等資料更新的操作。
  • 更統一的資料模型: 當前 Apache Doris 的三種資料模型在各個場景均有豐富的應用,後續我們將嘗試統一現有幾種資料模型,使使用者在使用體驗上更加統一。

易用性和穩定性

除了功能方面的豐富與完善,更簡單、更易用、更穩定同樣也是 Apache Doris 一直追求的目標,2023 年我們將在以下幾方面出發,讓使用者具有更簡易和放心的使用體驗:

  • 簡化建表: 目前 Apache Doris 在建表時分割槽已經支援了時間函式,後續我們將進一步消除 Bucket 設定,幫助使用者最大程度簡化建表建模。
  • 安全性: 目前已經實現基於 RBAC 模型的許可權管理機制,使使用者許可權更安全可靠;並對 ID-federation、行列級別許可權,資料脫敏等進行了優化,後續將進一步完善。
  • 可觀測性: Profile 是定位查詢效能問題的重要手段,後續我們將加強對 Profile 的監控並提供視覺化 Profile 工具,幫助使用者更快定位問題。
  • 更好的 BI 相容性和更完善的資料整合遷移方案: 當前各 BI 工具可以通過 MySQL 協議連線到 Apache Doris,後續我們將對主流 BI 軟體進一步適配,保證更佳的查詢體驗。隨著 DBT、Airbyte 等新興資料整合和遷移工具的興起,越來越多使用者使用此類系統將資料同步至 Apache Doris ,後續我們也會提供對此些系統的官方支援。

開啟下一個十年!

或許有讀者或聽眾還記得我在開頭提的問題,對於 Apache Doris,十年意味著什麼?

有兩層含義,上一個十年和下一個十年。

上一個十年,是 Apache Doris 起源的十年。從誕生到開源、從默默無聞到被越來越多人熟知和使用,開源賦予了 Apache Doris 更加旺盛的生命力和創造力。

而下一個十年,則是一場新的旅程

正如我在本次 Doris Summit 分享的主題,New Journey of Apache Doris。如果說過去 Apache Doris 更多是服務於線上報表場景和 Ad-hoc 分析的 OLAP 引擎的話,那麼在所有社群和開發者的努力下,當前 Apache Doris 已經具備了更為廣闊的定位,即極速、易用、實時、統一的多模分析型資料庫。

這其中的統一,既包含了架構的統一、也包含了業務和資料的統一。使用者可以通過 Apache Doris 構建多種不同場景的資料分析服務、同時支撐線上與離線的業務負載、高吞吐的互動式分析與高併發的點查詢;通過一套架構實現湖和倉的統一、在資料湖和多種異構儲存之上提供無縫且極速的分析服務;也可通過對日誌/文字等半結構化乃至非結構化的多模資料進行統一管理和分析、來滿足更多樣化資料分析的需求。

這是我們希望 Apache Doris 能夠帶給使用者的價值,不再讓使用者在多套系統之間權衡,僅通過一個系統解決絕大部分問題,降低複雜技術棧帶來的開發、運維和使用成本,最大化提升生產力。

“我們已經出發了太久,以至於忘記了為什麼出發。”

希望通過這一定位的轉變迎接下一個十年的挑戰,或許技術趨勢會有變化,架構將會革新,但我們解決使用者資料分析問題的初衷不會改變。

希望繼續帶著上一個十年出發的初心,開啟下一個十年的旅程。

「其他文章」