只有天空才是你的極限,我們熱愛探索的過程並沉浸其中丨圖資料庫 TiMatch 團隊訪談

PingCAP發表於2022-01-19

只有天空才是你的極限,我們熱愛探索的過程並沉浸其中

Hackathon 本身帶給我們的是一次全新的探索,並不只是一隊人有一個明確的目標,花幾天時間寫程式碼,那其實是很無聊的。探索的本身讓我們發現,越探索越能找到更新、更好、更優雅的解決辦法,我們熱愛這個探索的過程並沉浸其中…… —— TiMatch 賽隊

戰隊成員之一柏佳辰是一個愛畫畫、愛摩托車、喜歡讀《理想國》,建築學出身的程式設計師。

在 TiDB Hackathon 2020 賽事中,[TiGraph ]()專案在 TiDB 中實現了一套新的 Key-Value 編碼來引入圖模式,處理傳統關係型資料庫難以覆蓋的圖資料分析場景,實現了 TiDB 在四度人脈的計算效能大幅提升,奪得了二等獎。

在剛剛收官的 TiDB Hackathon 2021 賽事中,TiMatch 在去年專案的基礎上做了一次進化升級,構建了基於 TiDB 和 TiKV 的語法完備的分散式圖資料庫,探索出一條在 TiDB 之上構建一個成熟且易於使用的圖資料庫的路徑。專案獲得了現場評委的一致肯定,拿下本屆賽事的二等獎。

TiMatch - 語法完備的分散式圖資料庫,去年 TiGraph 已經讓大家驚豔,今年 TiMatch 更讓人期待了。這次易用性更好,而且對於老叢集也能直接升級使用。因為 TiMatch 只是內部建立了一套 graph index,然後通過 TiDB 分散式事務機制,跟原先關係表的資料統一更新。語法上面,借鑑了 Oracle graph 的語法,所以已經是關係完備的了,不過我覺得後面的挑戰在於效能上面,希望後續這塊能給大家展示相關的資料。

                                                                    ——評委唐劉 

點評非常驚豔,藉助 TiKV 的擴充套件能力+ TiFlash 的分析能力,想象空間很大,希望能儘快 GA!

 ——評委馮光普

為什麼選擇圖資料庫這個方向?

圖技術已成為現代資料和分析能力的基礎,能夠在不同的資料資產中發現人、地點、事物、事件和位置之間的關係。依靠圖技術可以快速回答以往需要了解情況並理解多個實體之間的聯絡和優勢之後才能回答的複雜業務問題。
圖資料庫一直是業界的熱門話題。它具有用於語義查詢的圖形結構,使用頂點、邊和屬性來表示和儲存資料,支援對在關聯式資料庫系統中難以建模的複雜層次結構進行簡單快速的檢索,優雅地解決了傳統關聯式資料庫在針對複雜關係或多表 JOIN 情況執行結果時經常出現的效能或故障問題。我們身邊有很多圖應用的案例,比如 Google PageRank 演算法;LinkedIn 用圖管理社交關係,實現好友推薦;Amazon 用圖實現實時的商品推薦;銀行用圖做風控,實現反欺詐和反洗錢等等。從 DB Engine 的統計資料可以看到,在全球範圍內,從 2014 年開始,圖資料庫的受歡迎程度一直呈現迅猛的上升態勢,超越了其他各種型別的資料庫。據 Gartner 預測,到 2025 年圖技術在資料和分析創新中的佔比將從 2021 年的 10% 上升到 80%,該技術將促進整個企業機構的快速決策。

從去年的 TiGraph 到 TiMatch

專案實現了哪些提升?

去年的 TiGraph 專案留下了一些遺憾,比如圖查詢語言不完備,沒有接入 TiKV 儲存引擎等。這次 Hackathon 賽事中 TiMatch 的任務就是基於 TiDB 和 TiKV 設計語法完備的分散式圖資料庫雛形,繼續探索在 TiDB 之上構建一個成熟且易於使用的圖資料庫的路徑,TiMatch 實現了三大方面的提升。

提升語法的完備性,語言上面引入了 Oracle PGQL 語法

通過在 WHERE 子句後引入 TRAVERSE 子句來進行圖遍歷,主要是探索看看是否能進行有效整合,是否可以無縫運算元複用,語法是否足夠簡單,子查詢是否可以友好地相互巢狀。雖然最終是達到了驗證的目的,但是由於資料來源需要依賴底層的 SELECTION 運算元,所以進行圖計算時不能進行多個邊匹配,在子圖匹配和最短路徑等其他圖演算法場景中難以構造對應的查詢,本質上是語法的完備性存在問題。
好在 2021 年 Oracle 的 PGQL 也在對圖查詢語言和 SQL 語言的相容結合進行探索,並且釋出了 1.0 的規範。我們直接參考了 PGQL 語法,在 TiDB 中實現了完整的 PGQL parser 提升了查詢的完備性,在語法上支援圖遍歷、子圖匹配、TopK、最短路徑等圖演算法,演算法的具體實現除了圖遍歷,今年也實現了最短路徑查詢。

降低系統複雜度和學習成本

簡化和完備性的提升直覺上是相悖的,這次的方案在讀取路徑和寫入路徑上區別對待,讀取路徑嘗試通過 PGQL 圖查詢語言來提升查詢的完備性,需要引入新的語法規則。在寫入路徑上,探索出一個全新的方案,去年的方案我們引入了很多新的語法,比如:

  • CREATE EDGE/TAG
  • SHOW EDGES/TAGS
  • SHOW CREATE TAG/EDGE
  • DROP TAG/EDGE
  • ALTER TAG/EDGE
  • ...

這些語法對已有的應用程式和 ORM 生態都會有比較大的相容性衝擊,需要進行大量的應用修改和生態相容。
今年我們在不停的討論和嘗試中找出了一個全新的方式,儘量少地侵入使用者層介面,完全在資料庫內部完成相容,將外部相容問題轉換為資料庫內部圖模式的相容性問題,區域性看工作量變大了,但是更加符合全域性最優解。

  1. 頂點的 DDL 語法完全不變化。
  2. 變的語法加入了 SOURCE/DESTINATION KEY Column Option,寫法和 FOREIGN KEY 是一樣的,所以對於開發者和 DBA 都不會有新的學習負擔,MySQL 的 Column Option 有接近 20 個,所以新增的只有 Column Option 的 2/20,而 Column Option 的作用域及其小,相關去年的新增幾十個語句級別的語法,今年可以說是相當輕量。

是否有可能完全消除新語法?是可以的,比如使用以下的方式:

CREATE TABLE (
  a bigint /*T! SOURCE KEY REFERENCES students */,
  b bigint /*T! DESTINATION KEY REFERENCES students */
)

使用註釋的方式可以完全消除對上下游的影響,但是註釋在語法解析階段不容易很早就通過 parser 發現錯誤,並且很多人會忽略註釋,所以這裡沒有完全追求 100% 的相容性。
自動構建圖拓撲通過引入 SOURCE/DESTINATION KEY 之後,資料庫內部就有足夠的資訊自動構建圖拓撲,其實從圖資料庫的角度來說,主要是完成三部分工作:

  • 圖資料儲存
  • 圖拓撲的維護
  • 圖算 fan

圖資料(頂點)的儲存和傳統資料儲存並不需要引入過去的差異性,大多是內部儲存細節和 Key-Value 設計的差別,如何維護圖拓撲和已有資料,如何新增圖拓撲是一個新的問題,在本次 Hackathon 我們提出了一個新的方案,可以對已有資料通過 ALTER 語句和 SOURCE/DESTINATION KEY 資訊自動構建已有資料的圖拓撲,免去任何的資料遷移和業務改造過程。

從單機儲存 unistore 到 TiKV+TiFlash,提升資料集支援規模

Hackathon 2020 由於時間所限使用了用於跑單元測試的 unistore,而今年引入 TiKV 儲存引擎,運算效能也極大的提升,在 Demo 演示中可以看到,100 萬點的單源 6 度人脈查詢只需要 200 毫秒,相比去年在 unistore 上 10 萬資料需要 6 秒來說,效能提升極為明顯。未來還可以引入 TiFlash,利用 TiFlash 的 MPP 能力進行大規模圖計算。

通過兩屆 Hackathon 的迭代

在 TiDB 上實現圖資料庫

TiMatch 探索出了一條怎樣的路徑?

  • 首先是相容 TiDB 已有的功能、已有的資料和已有的生態(DM/CDC/Lightning/ORM/ 等)
  • 考慮自適應圖 DDL 和已有資料自動相容,從而自動構建圖拓撲
  • 支援 TiKV 儲存引擎,進行完整的 Parser 實現
  • 完善圖查詢:遍歷、路徑過濾、最短路徑、謂詞下推、Coprocessor 下推等
  • 事務、索引、巢狀子查詢等方面的考量

在 Hackathon 上獲得二等獎的好成績

最主要的原因是什麼?

最主要的原因是這個專案站在了“三層”巨人的肩膀上面,才能呈現在大家的面前\
一層:思考上延續了 TiGraph,實現和語法上是一個墊付,語法上完備了許多二層:在 TiDB 和 TiKV 既有框架上進行實現,擴充套件圖資料庫,擴充 TiDB 的場景三層:引入了全新的語法,完成對圖資料庫查詢的萬備汛,從 Oracle PGQL 延伸過來,原版的語言有些地方比較囉嗦,不是很考究,對其進行了一定的修改,變得更加優雅
其次,團隊的明確分工,隊員之間的彼此信任和無縫協作

  • 龍恆、夏雨傑、劉東坡:著重實現 TiDB 側的語法分析、AST、Parser、寫入路徑等
  • 柏佳辰:負責 TiKV 側運算元下推,並承擔隊宣的角色(製作宣傳視訊 + PRC PPT 等)

作為一名北美的選手

首次參加 TiDB Hackathon 有什麼感受?

柏佳辰

GitHub ID:JeepYiheihou

哈佛碩士畢業,現就職於 AWS 溫哥華,從事 ElasticCache 快取資料庫核心研發工作,利用假期參與了此次 Hackathon。整個 Hackathon 的過程對我來說是一次開心的體驗。賽隊全情投入,競爭特別激烈,賽制給足了時間讓我們進行思考和創意,很多專案的完成度很高,也湧現了不少實用的專案。評委們提了不少犀利的問題,可以看出他們不止看到當下專案的閃光點,更會以長遠的眼光去發掘這些專案在未來的方向和價值,我覺得評委們也是非常 enjoy 這個過程。

全棧程式設計師是怎麼煉成的?

因為熱愛。賽隊的視訊以及 RFC 的 PPT 都是出自柏佳辰之手。之前學過八年的建築學,做精美的 PPT 是必修課,做視訊也是自學的。這次賽隊的宣傳視訊,借鑑了黑客帝國的主題,有一些幀用的是 processing 進行程式設計的視覺化,用了 pathon 語言呈現了圖、網格和網路。在轉行做程式設計師之前,對程式設計很感興趣,自學學程式設計,接觸過使用視覺化工具來製作視訊,剛好這次用上了。

不管做轉行前或者轉行後的任何事情,做職業決定的時候,要確定你是真的熱愛它。熱愛它,你就會對這件事情全神貫注,投入精力進去。轉行做程式設計師大家都知道怎麼去做準備,重要的不是第一步你怎麼跨入這個行業,重要的是怎麼把後面的每一步都做好。

工作之外,柏佳辰的愛好非常廣泛:喜歡畫畫,畫了一系列油畫棒的畫;喜歡摩托車;喜歡去健身房鍛鍊身體;喜歡看書,最近在看哲學的書,比如《理想國》。最大的愛好還是寫程式碼和看論文,這也是為什麼轉行做程式設計師,想要嘗試一些有挑戰的事情,去解決一些問題,並且享受解決問題的過程以及收到的反饋。

相關文章