本發(fā)明屬于數(shù)據(jù)庫技術(shù)領(lǐng)域,涉及一種為關(guān)系型數(shù)據(jù)庫擴(kuò)展圖計算功能的系統(tǒng)。
背景技術(shù):
“圖計算”是以“圖論”為基礎(chǔ)的對現(xiàn)實世界的一種“圖”結(jié)構(gòu)的抽象表達(dá),即將客觀事物實體抽象成“節(jié)點(diǎn)”,將事物之間的關(guān)系抽象成“邊”的表達(dá)方式,以及在這種數(shù)據(jù)結(jié)構(gòu)上的計算模式。大數(shù)據(jù)時代,圖計算在關(guān)聯(lián)分析、聚集分析、路徑分析等應(yīng)用中是必不可少的工具。
在此大背景下,“圖數(shù)據(jù)庫”或“多模式數(shù)據(jù)庫”產(chǎn)品就應(yīng)運(yùn)而生,用于解決“圖”的存儲、查詢和計算,如neo4j、orientdb等產(chǎn)品。而在此之前,廣泛使用的數(shù)據(jù)庫被稱作“關(guān)系型數(shù)據(jù)庫”,如mysql、postgresql等產(chǎn)品。這兩種數(shù)據(jù)庫產(chǎn)品在數(shù)據(jù)的組織形式上是完全不同的。關(guān)系型數(shù)據(jù)庫不具備“圖數(shù)據(jù)庫”節(jié)點(diǎn)和邊的邏輯,不具備圖計算的路徑查找、圖遍歷、聚類等算法。因此傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù),需要重新定義成“節(jié)點(diǎn)”和“邊”的關(guān)系后,導(dǎo)入“圖數(shù)據(jù)庫”,才能實現(xiàn)“圖”算法。
現(xiàn)有的“圖數(shù)據(jù)庫”通常是獨(dú)立的數(shù)據(jù)庫產(chǎn)品,與“關(guān)系型數(shù)據(jù)庫”是“替代”關(guān)系。數(shù)據(jù)需要導(dǎo)出并保存到圖數(shù)據(jù)庫里,即用戶要想使用圖數(shù)據(jù)庫就需要進(jìn)行一次數(shù)據(jù)的拷貝或者遷移,增加了用戶的成本,過程也很耗費(fèi)時間。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提出一種無需數(shù)據(jù)的拷貝或者遷移,就可以實現(xiàn)圖數(shù)據(jù)的抽象和計算功能的系統(tǒng)。本發(fā)明的系統(tǒng)中,數(shù)據(jù)仍然保存在“關(guān)系型數(shù)據(jù)庫”中,然后采用一個額外的系統(tǒng)來擴(kuò)充關(guān)系型數(shù)據(jù)庫的功能,不需要數(shù)據(jù)庫的導(dǎo)入導(dǎo)出。
為實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案為一種為關(guān)系型數(shù)據(jù)庫擴(kuò)展圖計算功能的系統(tǒng),包含關(guān)系型數(shù)據(jù)庫及關(guān)系型數(shù)據(jù)庫的接口,用戶可通過關(guān)系型數(shù)據(jù)庫的接口訪問關(guān)系型數(shù)據(jù)庫,還包括一個擴(kuò)展系統(tǒng),該系統(tǒng)包含數(shù)據(jù)轉(zhuǎn)換模塊、主控模塊、圖計算引擎和圖數(shù)據(jù)操作接口,所述數(shù)據(jù)轉(zhuǎn)換模塊與關(guān)系型數(shù)據(jù)庫通信,將用戶的圖數(shù)據(jù)操作翻譯成關(guān)系型數(shù)據(jù)庫的相關(guān)操作,所述主控模塊接受圖數(shù)據(jù)操作接口關(guān)于圖數(shù)據(jù)相關(guān)的操作,將數(shù)據(jù)準(zhǔn)備好以后傳遞給圖計算引擎,完成圖計算相關(guān)的操作,最后提交給數(shù)據(jù)轉(zhuǎn)換模塊。
進(jìn)一步,上述數(shù)據(jù)轉(zhuǎn)換模塊的數(shù)據(jù)轉(zhuǎn)換包括將圖數(shù)據(jù)的“節(jié)點(diǎn)”和關(guān)系型數(shù)據(jù)庫的“表”對應(yīng),將圖數(shù)據(jù)的“邊”和關(guān)系型數(shù)據(jù)庫的“表”對應(yīng)。
又進(jìn)一步,上述與“節(jié)點(diǎn)”對應(yīng)的表包含唯一標(biāo)識字段。
與“邊”對應(yīng)的表包含兩個關(guān)鍵字段。
進(jìn)一步,數(shù)據(jù)轉(zhuǎn)換模塊進(jìn)行數(shù)據(jù)轉(zhuǎn)換時,如果關(guān)系型數(shù)據(jù)庫中沒有“邊”能夠?qū)?yīng)的表,則生成“邊”的數(shù)據(jù)。
上述生成“邊”的數(shù)據(jù)可以是生成新的表或新的視圖。
上述圖計算引擎接受主控模塊的數(shù)據(jù)后可以實現(xiàn)圖的遍歷、路徑查找和連通性計算。
上述圖計算引擎可以通過gpu實現(xiàn)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
(1)通過本發(fā)明關(guān)系型數(shù)據(jù)庫的用戶不需要進(jìn)行數(shù)據(jù)庫的導(dǎo)出,不需要增加一份數(shù)據(jù),或者放棄現(xiàn)有的數(shù)據(jù)庫就可以支持圖計算相關(guān)功能。
(2)用戶現(xiàn)有的應(yīng)用不受任何影響,仍然通過原接口訪問數(shù)據(jù)庫。
(2)本系統(tǒng)完成關(guān)系型數(shù)據(jù)庫到圖數(shù)據(jù)庫的節(jié)點(diǎn)和邊的抽象,定義新的圖數(shù)據(jù)訪問接口,按照圖數(shù)據(jù)的方式操作原有數(shù)據(jù)和新增的圖數(shù)據(jù)。
(3)支持靈活的圖計算引擎。
附圖說明
圖1為本發(fā)明的系統(tǒng)示意圖。
圖2為關(guān)系型數(shù)據(jù)與圖數(shù)據(jù)的轉(zhuǎn)換示意圖。
具體實施方式
現(xiàn)結(jié)合附圖對本發(fā)明做進(jìn)一步詳盡的說明。
如圖1所示,本發(fā)明的系統(tǒng)包含關(guān)系型數(shù)據(jù)庫及關(guān)系型數(shù)據(jù)庫的接口,用戶可通過關(guān)系型數(shù)據(jù)庫的接口訪問關(guān)系型數(shù)據(jù)庫,還包括一個擴(kuò)展系統(tǒng),該系統(tǒng)包含數(shù)據(jù)轉(zhuǎn)換模塊、主控模塊、圖計算引擎和圖數(shù)據(jù)操作接口,所述數(shù)據(jù)轉(zhuǎn)換模塊與關(guān)系型數(shù)據(jù)庫通信,將用戶的圖數(shù)據(jù)操作翻譯成關(guān)系型數(shù)據(jù)庫的相關(guān)操作,所述主控模塊接受圖數(shù)據(jù)操作接口關(guān)于圖數(shù)據(jù)相關(guān)的操作,將數(shù)據(jù)準(zhǔn)備好以后傳遞給圖計算引擎,完成圖計算相關(guān)的操作,最后提交給數(shù)據(jù)轉(zhuǎn)換模塊。
用戶在使用時保持原數(shù)據(jù)庫數(shù)據(jù)不變,用戶原有的應(yīng)用程序、客戶端,仍然可以使用原有的方式訪問關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)。圖數(shù)據(jù)操作接口模塊為用戶提供“圖數(shù)據(jù)”的操作接口,操作可分為幾部分:
1.對于“圖”中指定某類“節(jié)點(diǎn)”和“邊”的查詢、插入、修改、查詢,仍然可以使用關(guān)系數(shù)據(jù)庫的sql語句,也可以使用“圖數(shù)據(jù)”特有的模式查詢接口。
2.對于“圖數(shù)據(jù)”特有的“模式”查詢,使用特有的模式查詢接口。如某兩個節(jié)點(diǎn)的路徑的查詢,限定條件的關(guān)聯(lián)關(guān)系查詢等等。
數(shù)據(jù)轉(zhuǎn)換模塊。將用戶圖數(shù)據(jù)操作,翻譯成“關(guān)系數(shù)據(jù)庫”相關(guān)的操作。與關(guān)系數(shù)據(jù)庫通信,完成數(shù)據(jù)庫的插入、刪除、修改、查詢。數(shù)據(jù)轉(zhuǎn)換主要包括幾個方面:
1.“節(jié)點(diǎn)”和關(guān)系數(shù)據(jù)庫“表”的對應(yīng)。生成節(jié)點(diǎn)的表,應(yīng)該具備唯一標(biāo)識字段。一般的,應(yīng)該有幾個字段表名“節(jié)點(diǎn)”的屬性。比如關(guān)系型數(shù)據(jù)庫的學(xué)生信息表,將學(xué)號作為節(jié)點(diǎn)id,性別、年紀(jì)、班級……作為節(jié)點(diǎn)屬性。
2.“邊”與關(guān)系數(shù)據(jù)庫“表”的對應(yīng)?!斑叀睂?yīng)的表,應(yīng)該包含兩個關(guān)鍵字段,指明“邊”連接的兩個“節(jié)點(diǎn)”的類型和id。
3.原數(shù)據(jù)庫中沒有“邊”能夠?qū)?yīng)的表,應(yīng)該采用生成新的表、新的視圖等方式產(chǎn)生“邊”的數(shù)據(jù)。
圖2是數(shù)據(jù)轉(zhuǎn)換的示例,原數(shù)據(jù)庫中的表a、表b分別保存實體a、實體b的信息,有id字段唯一標(biāo)識表項。經(jīng)過數(shù)據(jù)轉(zhuǎn)換模塊可直接抽象成“節(jié)點(diǎn)”類型a和b,原表中一個節(jié)點(diǎn)對應(yīng)圖數(shù)據(jù)中的一個“節(jié)點(diǎn)”,無需增加新的存儲,圖數(shù)據(jù)庫操作接口,可以直接查詢到兩類節(jié)點(diǎn)。
同時,表ab保存某個實體a和某個實體b之間的關(guān)系。這張表如果在原數(shù)據(jù)庫中存在,則可以直接使用。如果不存在,可以通過生成視圖、生成表的方式產(chǎn)生。圖數(shù)據(jù)操作接口根據(jù)這個表,可找到實體a和實體b節(jié)點(diǎn)間的所有“邊”,并可根據(jù)指定的模式,進(jìn)行任意的實體a、實體b、邊ab的查詢。
主控模塊接受接口模塊圖數(shù)據(jù)相關(guān)的操作;提交給數(shù)據(jù)轉(zhuǎn)換模塊,數(shù)據(jù)轉(zhuǎn)換任務(wù);將數(shù)據(jù)準(zhǔn)備好以后,傳遞給圖計算引擎,完成圖計算相關(guān)的操作。
圖計算引擎接受主控模塊的數(shù)據(jù),實現(xiàn)圖的遍歷、路徑查找、連通性計算等功能。圖計算引擎還可以通過gpu實現(xiàn)。
用戶使用時,原有的應(yīng)用使用原有的接口,新的圖計算相關(guān)的應(yīng)用使用新接口。除此之外,還具備以下特點(diǎn):
(1)本系統(tǒng)是與關(guān)系型數(shù)據(jù)庫共同運(yùn)行的系統(tǒng),使關(guān)系型數(shù)據(jù)庫具備圖數(shù)據(jù)庫的功能。
(2)用戶的數(shù)據(jù)不需要導(dǎo)出,不需要重新組織,仍然存放在關(guān)系型數(shù)據(jù)庫中。使本系統(tǒng)來完成圖數(shù)據(jù)庫的建模后,數(shù)據(jù)仍然存放在關(guān)系型數(shù)據(jù)庫中。
(3)用戶原有的應(yīng)用系統(tǒng),使用原有的方式訪問數(shù)據(jù)庫。需要使用圖數(shù)據(jù)的方式訪問數(shù)據(jù)則通過本系統(tǒng)的圖數(shù)據(jù)訪問接口。
(4)圖計算引擎作為本系統(tǒng)圖計算的核心單元,決定系統(tǒng)圖計算的性能。本系統(tǒng)的圖計算引擎支持gpu加速,將圖數(shù)據(jù)轉(zhuǎn)換成鄰接矩陣,實現(xiàn)圖的路徑查找、聯(lián)通性計算、聚合、pagerank等算法。