偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

螞蟻 TuGraph-DB 數(shù)據(jù)庫(kù)查詢引擎技術(shù)

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
本文詳細(xì)介紹了 TuGraph-DB 數(shù)據(jù)庫(kù)查詢引擎。大致可以分為三個(gè)階段:圖數(shù)據(jù)庫(kù)起步、圖查詢語(yǔ)言起步和圖查詢語(yǔ)言迭代。

一、圖查詢語(yǔ)言介紹

首先來(lái)介紹一下圖查詢語(yǔ)言的發(fā)展歷程,大致可以分為三個(gè)階段:圖數(shù)據(jù)庫(kù)起步、圖查詢語(yǔ)言起步和圖查詢語(yǔ)言迭代。

圖片

第一個(gè)階段從 2000 年開始,當(dāng)時(shí)還沒(méi)有圖查詢語(yǔ)言。Neo4j 希望以 network 的形式,也就是圖的形式,去構(gòu)建數(shù)據(jù)。當(dāng)時(shí)圖數(shù)據(jù)庫(kù)的概念還不普遍,當(dāng)然圖的概念可以回溯到上世紀(jì) 70 年代甚至更早。在這一時(shí)期沒(méi)有查詢語(yǔ)言,因此是使用 Java API 去做,使用 2-3 個(gè)接口獲取點(diǎn),然后基于一個(gè)點(diǎn),獲取它一度的初邊,以這樣的形式描述一個(gè)圖查詢。現(xiàn)在看來(lái),無(wú)論是 TuGraph 還是 Neo4j,圖查詢的過(guò)程都是遵循最初做圖查詢的思路,就像 TuGraph 最初也是先有一個(gè) API 的層次,再在上層搭建查詢語(yǔ)言。

圖片

第二個(gè)階段是圖查詢語(yǔ)言的起步和發(fā)展階段。最早是 Gremlin,然后是 Neo4j 于 2011 年發(fā)布的第一個(gè)版本的 Cypher。2012 年 Cypher 成為聲明式語(yǔ)言,也就是大家現(xiàn)在習(xí)慣使用的通過(guò)起點(diǎn)和路徑描述查詢的方式。2015 年后圖查詢語(yǔ)言有了迅猛的發(fā)展,先是 Oracle 的 PGQL,之后 Neo4j 將 Cypher 開源為 openCypher。2017 年前后 TuGraph 開始加入進(jìn)來(lái),也是以 openCypher 的標(biāo)準(zhǔn)做了查詢語(yǔ)言。2018 年 Cypher 形式化語(yǔ)義的論文發(fā)表 Cypher2018。大部分現(xiàn)已成熟的查詢語(yǔ)言、圖數(shù)據(jù)庫(kù),都是在這十年間如雨后春筍般發(fā)展起來(lái)的。

圖片

第三階段就是我們現(xiàn)在正在經(jīng)歷的圖查詢語(yǔ)言迭代階段。2019 年開始,GQL 成為了國(guó)際標(biāo)準(zhǔn),開始致力于統(tǒng)一不同圖查詢語(yǔ)言的標(biāo)準(zhǔn)。到了 2023 年,TuGraph 也開始逐步實(shí)現(xiàn) GQL。

圖片

上圖中羅列了各種查詢語(yǔ)言及其廠商。這些查詢語(yǔ)言可以分為兩大類:聲明式(Declarative)和命令式(Imperative)。

圖片

聲明式圖查詢語(yǔ)言,包括常見的 Cypher、PGQL、G-CORE,當(dāng)然 G-CORE 沒(méi)有具體的實(shí)現(xiàn),但是它的設(shè)計(jì)是源自于 Cypher 的。這種聲明式的語(yǔ)言更加類似于 SQL,更強(qiáng)調(diào)查詢的目的,而不是查詢的過(guò)程,比較依賴于查詢優(yōu)化。

圖片

命令式的語(yǔ)言,比如 GSQL 和 Gremlin。嚴(yán)格意義上講,它們是混合式的,因?yàn)橐矔?huì)有 select from 嵌入在自己的語(yǔ)句里面。從形式上看,它們更像 Python 這樣的語(yǔ)言,因此它們會(huì)做的事情更多,這也就意味著用戶學(xué)習(xí)和使用成本會(huì)更高。其實(shí)與聲明式語(yǔ)言的區(qū)別在于,具體優(yōu)化過(guò)程是由人來(lái)做還是機(jī)器來(lái)做。比如如果對(duì)圖了解很多,能直接寫圖的存儲(chǔ)過(guò)程,那么使用 GSQL 就會(huì)更方便。命令式語(yǔ)言最大的特點(diǎn)就是能寫更復(fù)雜的圖計(jì)算能力,例如 page rank。當(dāng)然,用存儲(chǔ)過(guò)程去做,再嵌入聲明式的語(yǔ)言,也可以實(shí)現(xiàn)類似的能力。

圖片

再來(lái)講一下前面提到的國(guó)際標(biāo)準(zhǔn) GQL。GQL 在設(shè)計(jì)上參考了 openCypher、PGQL、GSQL 和 G-CORE,但其核心思想基本上都來(lái)自于 openCypher 語(yǔ)言,所以它是一個(gè)聲明式語(yǔ)言。螞蟻內(nèi)部,TuGraph 和 GeaFlow 兩個(gè)產(chǎn)品都有接入 GQL。長(zhǎng)期來(lái)看,GQL將會(huì)統(tǒng)一聲明式查詢語(yǔ)言。十年后,就像關(guān)系型數(shù)據(jù)庫(kù)只有 SQL 語(yǔ)言一樣,圖數(shù)據(jù)庫(kù)聲明式語(yǔ)言中也會(huì)只剩下 GQL 這一種語(yǔ)言。

圖片

現(xiàn)階段,GQL 還有很多問(wèn)題,語(yǔ)義方面還沒(méi)有討論得非常明確,描述能力也比較有限。比如 FINBENCH,就是看查詢語(yǔ)言或者圖數(shù)據(jù)庫(kù)有哪些瓶頸。上圖中展示了 FINBENCH 里面的 complex-read1,金融場(chǎng)景里面查資金流向是比較常見的,比如從一個(gè)起點(diǎn)查一個(gè)賬戶,訪問(wèn)出度1-3度的邊,就是一個(gè)不定跳的過(guò)程,如果是資金交易,會(huì)有時(shí)間要求,比如這筆轉(zhuǎn)賬流水是一個(gè)時(shí)間遞增的序列,現(xiàn)在的聲明式語(yǔ)言還不能很清晰地描述這種不定跳加時(shí)間遞增的情況。

考慮到 GQL 將會(huì)在圖數(shù)據(jù)庫(kù)領(lǐng)域?qū)崿F(xiàn)標(biāo)準(zhǔn)化,螞蟻現(xiàn)在對(duì) GQL 支持的力度是很大的,除了 TuGraph、GeaFlow 能支持 GQL,其它一些還沒(méi)有開源的產(chǎn)品基本上也以 GQL 為方向去做接入。

二、查詢引擎介紹

接下來(lái)介紹 TuGraph 4.0 圖查詢引擎。

圖片

其實(shí)在 4.0 版本發(fā)布之前,我們 GQL 的語(yǔ)法文件就已經(jīng)開源了,放在 TuGraph family 里面。4.0 版本實(shí)現(xiàn)了 GQL 的能力,當(dāng)然能力仍比較有限,目前支持 SNB 和 FINBENCH 所有的 SHORT 查詢。具體實(shí)現(xiàn)可能和開源的語(yǔ)法文件有一些變動(dòng),這也是我們認(rèn)為 GQL 本身不成熟的地方,現(xiàn)在是兩個(gè)分叉,未來(lái)一兩年之后,這兩個(gè)分叉再合并。

近期我們有兩項(xiàng)重要的計(jì)劃,第一是完善 GQL 語(yǔ)法的支持范圍,目前僅支持 SNB 和 FINBENCH 的一些最基礎(chǔ)的東西,之后會(huì)盡快增加比如 DDL 等更多方面的支持。另一件事是架構(gòu)上的改造,引入一套全新的 GEAX 優(yōu)化引擎,其目的是希望做一套更通用、對(duì)開源社區(qū)更友好的優(yōu)化引擎。

其它方面的計(jì)劃包括,加入更加完善的 Test Suite 和相應(yīng)的工具,以及使用查詢語(yǔ)言去打榜 SNB 或者 FINBENCH。

圖片

提到 SNB 和 FINBENCH,基準(zhǔn)測(cè)試對(duì)于數(shù)據(jù)庫(kù)或者查詢引擎來(lái)說(shuō)都是非常重要的,但并不是衡量一個(gè)查詢語(yǔ)言的唯一標(biāo)準(zhǔn)。查詢語(yǔ)言的評(píng)價(jià)維度包括性能、描述能力、健壯性和查詢優(yōu)化等等。

圖片

比如查詢優(yōu)化,最簡(jiǎn)單 Cypher 寫法 1 相較于寫法 2 更易優(yōu)化。如果要打一個(gè)很好的榜單,一定會(huì)用寫法 1 的形式,因?yàn)閷懛?2 不一定會(huì)優(yōu)化到,但最終用戶使用寫法1的體驗(yàn)和效果可能會(huì)很差。因此我們對(duì)于查詢語(yǔ)言的要求會(huì)比打榜更高一些。

圖片

TuGraph 的具體使用方法,可以參見以下鏈接:

三、架構(gòu)及演進(jìn)計(jì)劃

下面介紹一下現(xiàn)有的架構(gòu),以及后期在架構(gòu)層面可能會(huì)做的改動(dòng)。

圖片

上圖是 TuGraph 現(xiàn)在最原始的架構(gòu)。查詢進(jìn)來(lái),解析到 AST,然后可能有一些驗(yàn)證,到 Planner 出來(lái)一個(gè)執(zhí)行計(jì)劃,根據(jù)一些 Schema 信息或者一些統(tǒng)計(jì)信息進(jìn)行優(yōu)化,之后放入一個(gè)執(zhí)行引擎里面去執(zhí)行。

目前有兩個(gè)最大的問(wèn)題,第一是要支持多個(gè)查詢語(yǔ)言 Cypher 和 GQL。萬(wàn)幸的是,雖然 GQL 是一個(gè)全新的查詢語(yǔ)言,但其總體思想來(lái)自于 Cypher,體系上可以理解為一樣,因此我們可以做到對(duì)兩種語(yǔ)言的支持。

另一個(gè)問(wèn)題是要支持更多的存儲(chǔ)引擎,目前 TuGraph 是一個(gè)簡(jiǎn)單的單機(jī)版本,螞蟻內(nèi)部已經(jīng)有分布式的圖數(shù)據(jù)庫(kù)和一些圖計(jì)算系統(tǒng),需要將這些不同的存儲(chǔ)引擎都接到我們的查詢引擎之上。

圖片

關(guān)系型數(shù)據(jù)庫(kù)和圖數(shù)據(jù)庫(kù)的層次是比較接近的,因此我們參考了 Calcite 系統(tǒng)。Calcite 是一個(gè)完整的查詢處理系統(tǒng),能夠提供 DBMS 所需要的許多常用功能,甚至可以接近一個(gè)圖數(shù)據(jù)庫(kù)系統(tǒng),支持完整的查詢語(yǔ)言的優(yōu)化、解析、驗(yàn)證。我們參考它的架構(gòu)去做一個(gè)類似的處理系統(tǒng),實(shí)現(xiàn)更豐富的算子,在圖的優(yōu)化上能做得更多。

圖片

參考這個(gè)架構(gòu),我們會(huì)做 TuGraph 下一個(gè)版本的查詢引擎的改造,這個(gè)改造是在整個(gè)執(zhí)行引擎之上的一層改造。參見上圖,右邊是 Data Processing System,和 Calcite 的設(shè)計(jì)類似。左邊 GeaX 中有幾個(gè)核心的模塊,第一個(gè)就是圖語(yǔ)法表示(GST),Quary 解析完之后,這里加了一層抽象,這層抽象能夠保證同時(shí)支持兩個(gè)相似的語(yǔ)言,比如 Cypher 和 GQL。同時(shí)有一套獨(dú)立的邏輯算子,能夠描述整個(gè)查詢,有單獨(dú)的優(yōu)化器,這里的優(yōu)化器也支持可插拔的功能。這樣整個(gè)系統(tǒng)就分為了兩部分,前面的查詢語(yǔ)言的處理,以及后面的計(jì)算和存儲(chǔ)。

圖片

GeaX 為 TuGraph 提供處理和優(yōu)化圖查詢語(yǔ)言的能力,其特點(diǎn)包括,架構(gòu)與 Calcite 相似,支持查詢語(yǔ)言解析、校驗(yàn)、優(yōu)化。嚴(yán)格意義上 GeaX 不算是一個(gè)圖計(jì)算引擎,因?yàn)樗延?jì)算的部分全部剝離了,最終產(chǎn)出的是一個(gè)邏輯執(zhí)行計(jì)劃。另外,GeaX 支持多語(yǔ)言,支持不同的優(yōu)化器,這些優(yōu)化器是可插拔的,不同類型的優(yōu)化器有不同的規(guī)則。GeaX 的目標(biāo)不僅僅是作為一層查詢語(yǔ)言接在 TuGraph 上,還能夠?qū)崿F(xiàn)輕松地將 GQL 查詢語(yǔ)言接到任何一個(gè)圖相關(guān)的引擎上,比如一個(gè)人一個(gè)月就能夠?yàn)?GraphScope 提供 GQL 的能力,這樣也為 GQL 成為統(tǒng)一的圖聲明式查詢語(yǔ)言提供幫助。

圖片

通過(guò)上圖的對(duì)比可以看出,GeaX 和 Calcite 在框架設(shè)計(jì)上是比較接近的,當(dāng)然具體優(yōu)化器的能力會(huì)有不同,這也正是 GeaX 框架的優(yōu)勢(shì)之一,可以放不同的優(yōu)化器在這里。

圖片

這個(gè)架構(gòu)是我們未來(lái) 3-6 個(gè)月要去做的事情,現(xiàn)在已經(jīng)邁出了第一步,實(shí)現(xiàn)了 geax-front-end。目前 parser 這一層已經(jīng)實(shí)現(xiàn)。大概在 3-6 個(gè)月左右會(huì)有一版迭代,可能會(huì)有 GeaX 的出現(xiàn)。我們希望能做一個(gè)很簡(jiǎn)單的 play ground 給用戶用,用戶能在對(duì) TuGraph 沒(méi)有很多了解的情況下,嘗試去看 GQL 的查詢語(yǔ)言生成的邏輯執(zhí)行計(jì)劃是什么樣的,通過(guò)看邏輯執(zhí)行計(jì)劃,判斷這個(gè)查詢是不是復(fù)雜,是不是可以去增加一些優(yōu)化規(guī)則。

責(zé)任編輯:姜華 來(lái)源: DataFunTalk
相關(guān)推薦

2024-02-21 07:57:16

2011-05-19 10:29:40

數(shù)據(jù)庫(kù)查詢

2011-03-25 13:27:12

Berkeley DB

2021-05-07 09:25:34

數(shù)據(jù)庫(kù)工具技術(shù)

2021-05-13 14:34:34

數(shù)據(jù)庫(kù)PolarDB

2009-08-11 13:35:13

C# Berkeley

2011-08-02 17:06:29

Oracle遠(yuǎn)程數(shù)據(jù)庫(kù)創(chuàng)建DB Link

2011-03-04 14:13:02

MySQL數(shù)據(jù)庫(kù)

2022-06-30 17:27:28

計(jì)算研究

2023-12-18 17:40:31

2018-04-16 08:44:51

InfluxDB TS時(shí)序數(shù)據(jù)庫(kù)存儲(chǔ)

2010-08-25 10:50:48

DB2數(shù)據(jù)庫(kù)

2011-03-11 16:02:03

DB2數(shù)據(jù)庫(kù)安裝

2010-08-26 16:15:25

DB2數(shù)據(jù)庫(kù)管理

2010-11-01 11:30:41

DB2數(shù)據(jù)庫(kù)權(quán)限

2010-09-30 11:49:21

DB2數(shù)據(jù)庫(kù)權(quán)限

2010-11-03 16:21:18

DB2數(shù)據(jù)庫(kù)授權(quán)

2010-08-03 14:40:05

DB2數(shù)據(jù)庫(kù)

2019-01-16 14:20:42

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)