數據庫

Nebula 架構剖析系列(二)圖數據庫的查詢引擎設計

廣告
廣告

摘要

上文(存儲篇)說到數據庫重要的兩部分為存儲和計算,本篇內容為你解讀圖數據庫 Nebula 在查詢引擎 Query Engine 方面的設計實踐。

在 Nebula 中,Query Engine 是用來處理 Nebula 查詢語言語句(nGQL)。本篇文章將帶你了解 Nebula Query Engine 的架構。

上圖為查詢引擎的架構圖,如果你對 SQL 的執行引擎比較熟悉,那么對上圖一定不會陌生。Nebula 的 Query Engine 架構圖和現代 SQL 的執行引擎類似,只是在查詢語言解析器和具體的執行計劃有所區別。

Session Manager

Nebula 權限管理采用基于角色的權限控制(Role Based Access Control)。客戶端第一次連接到 Query Engine 時需作認證,當認證成功之后 Query Engine 會創建一個新 session,并將該 session ID 返回給客戶端。所有的 session 統一由 Session Manger 管理。session 會記錄當前 graph space 信息及對該 space 的權限。此外,session 還會記錄一些會話相關的配置信息,并臨時保存同一 session 內的跨多個請求的一些信息。

客戶端連接結束之后 session 會關閉,或者如果長時間沒通信會切為空閑狀態。這個空閑時長是可以配置的。 
客戶端的每個請求都必須帶上此 session ID,否則 Query Engine 會拒絕此請求。

Storage Engine 不管理 session,Query Engine 在訪問存儲引擎時,會帶上 session 信息。

Parser

Query Engine 解析來自客戶端的 nGQL 語句,分析器(parser)主要基于著名的 flex / bison 工具集。字典文件(lexicon)和語法規則(grammar)在 Nebula 源代碼的 src/parser 目錄下。設計上,nGQL 的語法非常接近 SQL,目的是降低學習成本。 圖數據庫目前沒有統一的查詢語言國際標準,一旦 ISO/IEC 的圖查詢語言(GQL)委員會發布 GQL 國際標準,nGQL 會盡快去實現兼容。 
Parser 構建產出的抽象語法樹(Abstrac Syntax Tree,簡稱 AST)會交給下一模塊:Execution Planner。

Execution Planner

執行計劃器(Execution Planner)負責將抽象樹 AST 解析成一系列執行動作 action(可執行計劃)。action 為最小可執行單元。例如,典型的 action 可以是獲取某個節點的所有鄰節點,或者獲得某條邊的屬性,或基于特定過濾條件篩選節點或邊。當抽象樹 AST 被轉換成執行計劃時,所有 ID 信息會被抽取出來以便執行計劃的復用。這些 ID 信息會放置在當前請求 context 中,context 也會保存變量和中間結果。

Optimization

經由 Execution Planner 產生的執行計劃會交給執行優化框架 Optimization,優化框架中注冊有多個 Optimizer。Optimizer 會依次被調用對執行計劃進行優化,這樣每個 Optimizer都有機會修改(優化)執行計劃。最后,優化過的執行計劃可能和原始執行計劃完全不一樣,但是優化后的執行結果必須和原始執行計劃的結果一樣的。

Execution

Query Engine 最后一步是去執行優化后的執行計劃,這步是執行框架(Execution Framework)完成的。執行層的每個執行器一次只處理一個執行計劃,計劃中的 action 會挨個一一執行。執行器也會一些有針對性的局部優化,比如:決定是否并發執行。針對不同的 action所需數據和信息,執行器需要經由 meta service 與storage engine的客戶端與他們通信。

最后,如果你想嘗試編譯一下 Nebula 源代碼可參考如下方式:

有問題請在 GitHub(GitHub 地址: https://github.com/vesoft-inc/nebula) 或者微信公眾號上留言,也可以添加 Nebula 小助手微信號:NebulaGraphbot 為好友反饋問題~

推薦閱讀

我還沒有學會寫個人說明!

redis的常用命令

上一篇

揭秘華新水泥核心業務上云的背后故事

下一篇

你也可能喜歡

Nebula 架構剖析系列(二)圖數據庫的查詢引擎設計

長按儲存圖像,分享給朋友

ITPUB 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
双色球常规走势图 北京快乐8 顧家官方商城 北京快乐8 专炒一只股票的股民 最新一本道色电影 pk10牛牛 九鼎配资 7星彩 牛盛配资 华融配资 日本女优三级片dvd播放 重庆快乐10分