複雜場景下圖數據庫的 OLTP 與 OLAP 融合實踐
在一些圖計算的場景下,我們會遇到同時需要處理 OLTP 和 OLAP 的問題。而本文就給了一個 OLTP 與 OLAP 融合實踐的指導思路,希望給你帶來一點啟發。
Dag Controller 介紹
Dag Controller 是 NebulaGraph 企業版的圖系統,經過反覆測試無誤後已經發布,它主要解決的是 OLTP 和 OLAP 的融合問題,以及複雜場景下的圖計算問題。
歡迎大家來詳細瞭解下:http://docs.nebula-graph.com.cn/3.2.1/graph-computing/0.deploy-controller-analytics/。
下面,我對 Dag Controller 做個簡單分享,歡迎大家留言一起探討。
相信大家對 OLTP 和 OLAP 都不陌生,我這裏再簡單介紹下:OLTP 是一種快速響應、實時在線的一種數據處理方式。與之對應的 OLAP,是一種離線的、複雜場景的數據計算方式。
對 NebulaGraph 來説,OLTP 有多種多樣的查詢語句,如:GO
、MATCH
等。OLAP 有各種各樣的圖算法,如:PageRank、Louvian、WCC、KCore、Jaccard 等算法。
OLTP 和 OLAP 並不是各自獨立存在的,舉例來説,我們可以將 MATCH
跑出來的子圖餵給 PageRank 算法,PageRank 跑出來的結果可以寫入到 NebulaGraph,繼續執行 MATCH
語句或其它算法。就像拼積木一樣,可以將各種各樣的 OLTP 和 OLAP 組裝起來,形成一種更加複雜場景的數據處理方式。
Dag Controller 就是處理這種場景的系統,它負責 OLTP、OLAP 的串聯和執行。
架構
Dag Controller 的職責:
- 向外部提供了 http 接口,用於 Job 的提交、停止、刪除等操作,以及系統環境的配置等。
- DAG 的執行:Dag Controller 在執行 DAG(有向無環圖)時,OLAP 部分會調用 NebulaGraph Analytics 系統,OLTP 部分會調用 graphd 完成 nGQL 的執行。
NebulaGraph Analytics 是 NebulaGraph 的圖計算系統,支持 PageRank、WCC、Louvain、Jaccard 等圖分析算法,支持 HDFS 和 NebulaGraph 數據源。
graphd、metad、storaged 是 NebulaGraph 中的組件,graphd 主要負責 nGQL 的解析,storaged 負責數據的存儲,metad 負責元數據的存儲。
案例
案例 1
上圖是一個對子圖跑 PageRank 算法的 DAG 模型,首先用 nGQL 語句獲取一個子圖,然後再對這個子圖跑 PageRank 算法。
當我們的圖規模特別大的情況下,且我們只想對部分圖數據跑算法,就可以使用這種方式。
案例 2
上圖是一個對兩類頂點計算最短路徑的模型。
首先,分別用 nGQL 分別獲取兩個類別的頂點 ID。然後再把這兩類頂點 ID 交給 ShortestPath 算法,ShortestPath 會在全圖中計算這兩類頂點之間的路徑。
每個算法是可以設置基於全圖跑算法,也可以基於子圖跑算法。
DAG 模型有多種多樣,可以根據不用的業務場景搭建不同的 DAG 模型。
技術實現
DAG 模型
DAG 指的是一個沒有迴路的有向圖。DAG 的一個實例看作是一個 Job,一個 Job 有多個 Task。
Dag Controller 中的 Task 可以是一個 nGQL,也可以是一個圖算法,如 PageRank、Louvain、SSSP 等。
Job 執行時候需要先對 Task 排序,網上有很多相關的代碼,這裏不再贅述。
並行執行
為了保障 DAG 的執行效率,多個 DAG 需要做到並行執行。同時,在一個 DAG 的內部,無上下游依賴關係的 Task 也需要並行執行。
如何做到多個 DAG 並行執行以及 Task 的並行執行?簡單的説,通過兩個線程池分別處理 DAG 和 Task。
具體描述如下:
- 系統啟動時,分配 Job 線程池和 Task 線程池,分別處理 Job 的執行和 Task 的執行。
- 定時地從數據庫中獲取未執行的 Job,交由 Job 線程池運行。
- Job 執行時按照上下游的依賴關係對 Task 排序,然後依次判斷每個 Task 的所有上游是否執行完成,上游執行完成後將此 Task 交給 Task 線程池執行,如果上游未執行完則等待。
- 在 Job 執行過程中,如果 Job 線程池滿了之後,定時獲取未執行 Job 時需要做等待處理。Task 線程池滿了之後,也同樣做等待處理。
類型校驗
Task 之間的數據輸入與輸出存在數據類型校驗問題,這裏需要注意。比如:Task2 是 Task1 的下游,Task2 的輸入需要的是 int 類型,而 Task1 輸出也必須是 int 類型。
DAG 停止
在停止 Job 的時候,需要對多個並行運行的 Task 進行停止。一個 Task 的有準備階段、運行階段,並且運行階段會存在跨機器、多進程的情況。停止 Job 需要避免孤兒進程的問題。
自定義算法支持
我們支持將客户的算法當作一種 Task,用於 DAG 的搭建。首先,在系統中配置算法相關的參數信息。在執行 Job 時,由系統負責運行與 Task 相對應的算法。
謝謝你讀完本文 (///▽///)
要來近距離體驗一把圖數據庫嗎?現在可以用用 NebulaGraph Cloud 來搭建自己的圖數據系統喲,快來節省大量的部署安裝時間來搞定業務吧~ NebulaGraph 阿里雲計算巢現 30 天免費使用中,點擊鏈接來用用圖數據庫吧~
想看源碼的小夥伴可以前往 GitHub 閲讀、使用、(^з^)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一起交流圖數據庫技術和應用技能,留下「你的名片」一起玩耍呢~
- 圖數據庫在中國移動金融風控的落地應用
- 記一次 rr 和硬件斷點解決內存踩踏問題
- 用圖技術搞定附近好友、時空交集等 7 個典型社交網絡應用
- 用圖技術搞定附近好友、時空交集等 7 個典型社交網絡應用
- 圖數據庫中的“分佈式”和“數據切分”(切圖)
- 揭祕可視化圖探索工具 NebulaGraph Explore 是如何實現圖計算的
- 連接微信羣、Slack 和 GitHub:社區開放溝通的基礎設施搭建
- 圖數據庫認證考試 NGCP 錯題解析 vol.02:這 10 道題竟無一人全部答對
- 如何判斷多賬號是同一個人?用圖技術搞定 ID Mapping
- 複雜場景下圖數據庫的 OLTP 與 OLAP 融合實踐
- 如何運維多集羣數據庫?58 同城 NebulaGraph Database 運維實踐
- 有了 ETL 數據神器 dbt,表數據秒變 NebulaGraph 中的圖數據
- 基於圖的下一代入侵檢測系統
- 從實測出發,掌握 NebulaGraph Exchange 性能最大化的祕密
- 讀 NebulaGraph源碼 | 查詢語句 LOOKUP 的一生
- 當雲原生網關遇上圖數據庫,NebulaGraph 的 APISIX 最佳實踐
- 從全球頂級數據庫大會 SIGMOD 看數據庫發展趨勢
- 「實操」結合圖數據庫、圖算法、機器學習、GNN 實現一個推薦系統
- 如何輕鬆做數據治理?開源技術棧告訴你答案
- 圖算法、圖數據庫在風控場景的應用