本發(fā)明涉及的技術(shù)領(lǐng)域包括數(shù)據(jù)庫存儲方案、人工智能知識表達(dá)、知識庫、知識圖譜、數(shù)據(jù)庫中間件技術(shù)、本體、推理算法技術(shù),尤其涉及一種基于多元數(shù)據(jù)庫支持組件的知識圖譜異構(gòu)存儲框架中間件。
背景技術(shù):
在互聯(lián)網(wǎng)時(shí)代,搜索引擎是人們在線獲取信息和知識的重要工具。當(dāng)用戶輸入一個(gè)查詢詞,搜索引擎會返回它認(rèn)為與這個(gè)關(guān)鍵詞最相關(guān)的網(wǎng)頁。從誕生之日起,搜索引擎就是這樣的模式,直到2012年5月,搜索引擎巨頭谷歌在它的搜索頁面中首次引入“知識圖譜”:用戶除了得到搜索網(wǎng)頁鏈接外,還將看到與查詢詞有關(guān)的更加智能化的答案。例如,當(dāng)用戶輸入“Marie Curie”(瑪麗·居里)這個(gè)查詢詞,谷歌會在右側(cè)提供了居里夫人的詳細(xì)信息,如個(gè)人簡介、出生地點(diǎn)、生卒年月等,甚至還包括一些與居里夫人有關(guān)的歷史人物,例如愛因斯坦、皮埃爾·居里(居里夫人的丈夫)等。
最初知識圖譜是谷歌推出的產(chǎn)品名稱,與Facebook提出的社交圖譜(Social Graph)異曲同工。由于其表意形象,現(xiàn)在知識圖譜已經(jīng)被用來泛指各種大規(guī)模知識庫,可以認(rèn)為是人工智能領(lǐng)域中知識庫的超集。而支撐知識圖譜構(gòu)建的,自然是互聯(lián)網(wǎng)的知識。目前主流的知識表達(dá)方式是利用三元組的形式存儲。例如,(北京,是首都,中國)和(東京,是首都,日本),這兩條元組中包含三個(gè)元素,分別是主語、謂詞、賓語,表達(dá)出的含義就是主語和賓語之間存在謂詞所描述的關(guān)系。而這樣的三元組,早被已經(jīng)被證明足夠表達(dá)邏輯上絕大部分的知識。在構(gòu)建完整的知識庫后,就可以利用圖算法、關(guān)系算法和推理算法推導(dǎo)出更多的知識。例如,可以通過(謝賢,是父親,謝霆鋒)和(謝霆鋒,是父親,謝振軒)兩條三元組,以及人工制定的規(guī)則:“A是B的父親,B是C的父親,則A是B的爺爺”,推導(dǎo)出謝賢是謝振軒的爺爺。而這樣的推理應(yīng)用,在面對如今數(shù)據(jù)量不斷增長的互聯(lián)網(wǎng)數(shù)據(jù)時(shí),對搜索殷勤、輿情挖掘、人物關(guān)系推到、推薦系統(tǒng)都有十分重要的意義。
然而,雖然算法和理論不斷成熟,知識圖譜的存儲和查詢卻面臨很多挑戰(zhàn)。由于三元組的存儲方式很難用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫解決,現(xiàn)有的存儲方案多是圍繞非關(guān)系型數(shù)據(jù)庫和圖數(shù)據(jù)庫展開,但這也給性能和存儲方式(三元組以什么樣的形式在數(shù)據(jù)庫中存儲)帶來問題,現(xiàn)有的方案也都很難同時(shí)解決這兩個(gè)問題。簡言之,目前還沒有成熟的知識圖譜方案可以滿足存儲方案簡單且邏輯完備的同時(shí),提供較好的性能。同時(shí),不同用戶針對知識圖譜數(shù)據(jù)量的需求不同,所以也缺乏一款可以滿足不同用戶的不同數(shù)據(jù)量需求和支持用戶數(shù)據(jù)量增長后底層存儲方案切換的產(chǎn)品。目前,嘗試實(shí)現(xiàn)知識圖譜并應(yīng)用的技術(shù)團(tuán)隊(duì)和學(xué)術(shù)團(tuán)隊(duì)有很多,但是往往面臨了如下的幾個(gè)問題:需要自己構(gòu)建知識圖譜操作的代碼;如果項(xiàng)目后期規(guī)模擴(kuò)大,前期選擇的存儲方案切換困難;需要花費(fèi)大量人力物力實(shí)現(xiàn)分布式知識圖譜方案;如何實(shí)現(xiàn)知識圖譜的負(fù)載均衡。目前還沒有一款知識圖譜相關(guān)的中間件方案可以解決這些問題,本發(fā)明在解決這些問題的基礎(chǔ)上,擴(kuò)展了諸如支持SPARQL和推理等功能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)的不足,開發(fā)出一套知識圖譜存儲中間件方案,利用中間件和分布式技術(shù),利用現(xiàn)有的非關(guān)系型數(shù)據(jù)庫和圖數(shù)據(jù)庫,做到存儲范式簡單易用并且性能卓越,達(dá)到商業(yè)可用的水平,解決了知識圖譜領(lǐng)域缺少存儲中間件的問題;解決了知識圖譜異構(gòu)存儲框架中間件負(fù)載均衡的問題;創(chuàng)新的知識圖譜存儲架構(gòu);解決了知識圖譜數(shù)據(jù)庫切換問題;提供了標(biāo)準(zhǔn)化的統(tǒng)一編程接口。
本發(fā)明提出了一種多元數(shù)據(jù)庫支持組件,包括如下功能模塊:
數(shù)據(jù)庫驅(qū)動模塊,其功能是為不同的數(shù)據(jù)庫提供對應(yīng)的驅(qū)動程序,利用數(shù)據(jù)庫原生功能實(shí)現(xiàn)三元組操作;
知識圖譜抽象驅(qū)動模塊,其在所述數(shù)據(jù)庫驅(qū)動模塊的基礎(chǔ)上,進(jìn)一步抽象,通過組織調(diào)用驅(qū)動中的三元組操作,來提供調(diào)用接口。
本發(fā)明還提出了一種利用所述多元數(shù)據(jù)庫支持組件的多元數(shù)據(jù)庫支持方法,包括如下步驟:
步驟1:選擇支持的每款數(shù)據(jù)庫的驅(qū)動接口,對原生的功能進(jìn)行簡單抽象,實(shí)現(xiàn)對三元組的增刪改查操作,提供三元組操作應(yīng)用程序接口;
步驟2:針對每種數(shù)據(jù)庫的特性進(jìn)行調(diào)整,進(jìn)行性能調(diào)優(yōu);
步驟3:對所有的驅(qū)動接口進(jìn)一步抽象和封裝,利用所述三元組操作應(yīng)用程序接口,提供統(tǒng)一的知識圖譜操作接口,并進(jìn)一步支持對知識圖譜的SPARQL查詢和簡單的推理。
本發(fā)明還提出了一種基于所述多元數(shù)據(jù)庫支持組件的知識圖譜異構(gòu)存儲框架中間件,包括:中間件客戶端模塊、中間件服務(wù)端模塊和分布式中間件負(fù)載均衡和查詢處理模塊;
所述中間件客戶端模塊為負(fù)責(zé)以客戶端的角色和數(shù)據(jù)庫驅(qū)動模塊進(jìn)行交互,發(fā)送解析后的請求給數(shù)據(jù)庫,并接收返回的相關(guān)結(jié)果,再將結(jié)果轉(zhuǎn)交給中間件服務(wù)端模塊;
所述分布式中間件負(fù)載均衡和查詢處理模塊為對接收到的請求進(jìn)行基本的負(fù)載均衡和緩沖,并對發(fā)送過來的查詢進(jìn)行語法解析和預(yù)處理,并將中間結(jié)果轉(zhuǎn)發(fā)給中間件客戶端模塊;當(dāng)處于具有多臺后臺數(shù)據(jù)庫的分布式存儲環(huán)境時(shí),還進(jìn)行查詢的分發(fā)和結(jié)果的組包;
所述中間件服務(wù)端模塊為負(fù)責(zé)以服務(wù)端的角色和上層的用戶應(yīng)用進(jìn)行交互,接收上層應(yīng)用發(fā)來的請求,并轉(zhuǎn)發(fā)給中間件負(fù)載均衡和查詢處理模塊。
本發(fā)明還提出了一種利用所述知識圖譜異構(gòu)存儲框架中間件的負(fù)載均衡方法,包括如下步驟:
步驟a:所述中間件服務(wù)端模塊使用NIO對外部應(yīng)用發(fā)送的請求進(jìn)行異步的消息回調(diào)處理,并轉(zhuǎn)發(fā)給負(fù)載均衡和查詢處理模塊;
步驟b:所述分布式中間件負(fù)載均衡和查詢處理模塊對接收到的請求,進(jìn)行語義分析,組成原子操作事物,并根據(jù)后臺數(shù)據(jù)庫集群的負(fù)載情況,選擇合適的數(shù)據(jù)庫發(fā)送事務(wù)調(diào)用請求,保證所有的請求被均勻地分發(fā)給后端的數(shù)據(jù)庫;
步驟c:所述中間件客戶端模塊進(jìn)行消息的轉(zhuǎn)發(fā)。
本發(fā)明包含兩個(gè)部分:多源數(shù)據(jù)庫支持組件與知識圖譜異構(gòu)存儲框架中間件。多元數(shù)據(jù)庫支持組件目前針對市面主流的非關(guān)系型數(shù)據(jù)庫和圖數(shù)據(jù)庫,設(shè)計(jì)出不同的存儲方案來支持三元組和本體,讓每一種數(shù)據(jù)庫都可以作為知識圖譜的存儲底層引擎。
在此基礎(chǔ)上,抽象并開發(fā)出一套合理且邏輯較為完備的知識圖譜數(shù)據(jù)庫中間件。該中間件,將所有的邏輯進(jìn)一步抽象,將所有的功能統(tǒng)一,可以讓數(shù)據(jù)庫支持組件對用戶保持透明,用戶只需要使用中間件提供的接口來管理和控制知識圖譜中的數(shù)據(jù)。簡言之,用戶可以使用一套API接口,接入底層支持的任意一種數(shù)據(jù)庫,來存儲管理方案。發(fā)明本身使用了分布式、異步網(wǎng)絡(luò)通信、數(shù)據(jù)庫中間件等多種技術(shù)。
本發(fā)明的有益效果在于:本發(fā)明,最終面對用戶的中間件存儲接口足夠簡單且隱藏了底層的復(fù)雜邏輯,對開發(fā)人員友好,同時(shí),只需要修改底層使用的數(shù)據(jù)配置,就可以在不修改代碼的情況下切換應(yīng)用到不同的數(shù)據(jù)庫。同時(shí)天然支持分庫這樣的分布式,在數(shù)據(jù)量和性能上得到了較好的權(quán)衡。解決了主流的知識圖譜開發(fā)中的業(yè)務(wù)邏輯繁雜,數(shù)據(jù)庫方案切換難,難以維護(hù)和業(yè)務(wù)難以擴(kuò)展的難點(diǎn)和痛點(diǎn)。同時(shí),作為一款分布式的中間件,對于多源的數(shù)據(jù)庫集群,依舊提供了很好的業(yè)務(wù)支持。
附圖說明
圖1是本發(fā)明多元數(shù)據(jù)庫支持組件與知識圖譜異構(gòu)存儲框架中間件的結(jié)構(gòu)圖。
具體實(shí)施方式
結(jié)合以下具體實(shí)施例和附圖,對本發(fā)明作進(jìn)一步的詳細(xì)說明。實(shí)施本發(fā)明的過程、條件、實(shí)驗(yàn)方法等,除以下專門提及的內(nèi)容之外,均為本領(lǐng)域的普遍知識和公知常識,本發(fā)明沒有特別限制內(nèi)容。
知識圖譜異構(gòu)存儲框架中間件方案技術(shù)方案,可以參閱圖1本發(fā)明的結(jié)構(gòu)圖,可見本發(fā)明包括以下兩個(gè)模塊:
1)實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)庫知識圖譜驅(qū)動的多元數(shù)據(jù)庫支持組件
本發(fā)明為了底層存儲方案的靈活性和可擴(kuò)展性,會圍繞當(dāng)前主流的圖數(shù)據(jù)庫、費(fèi)關(guān)系型數(shù)據(jù)庫搭建底層的存儲方案。用戶可以自己選擇想要使用的數(shù)據(jù)庫來滿足在性能和業(yè)務(wù)上的需求。該多元數(shù)據(jù)庫支持組件會用統(tǒng)一的存儲方案,讓上層的應(yīng)用在使用的時(shí)候使用的功能和接口保持一致。無論使用那套數(shù)據(jù)庫方案,上層應(yīng)用都只需要關(guān)注于同一的知識圖譜操作接口。
本發(fā)明的多元數(shù)據(jù)庫支持組件包括如下功能模塊:數(shù)據(jù)庫驅(qū)動模塊,其功能是為不同的數(shù)據(jù)庫提供對應(yīng)的驅(qū)動程序,利用數(shù)據(jù)庫原生功能實(shí)現(xiàn)三元組操作;以及知識圖譜抽象驅(qū)動模塊,其在所述數(shù)據(jù)庫驅(qū)動模塊的基礎(chǔ)上,進(jìn)一步抽象,通過組織調(diào)用驅(qū)動中的三元組操作,來提供調(diào)用接口。本發(fā)明為選用的數(shù)據(jù)庫均開發(fā)了對應(yīng)的驅(qū)動程序,簡單解決了不同數(shù)據(jù)庫功能和接口的不一致,利用數(shù)據(jù)庫原生功能實(shí)現(xiàn)例如:增、刪、改、查等的基本的三元組操作,實(shí)現(xiàn)了三元組層面的操作統(tǒng)一。因?yàn)槿M操作和知識圖譜操作并不完全等價(jià),因而,在此基礎(chǔ)上,本發(fā)明開發(fā)了知識圖譜抽象驅(qū)動模塊,對已有的數(shù)據(jù)庫驅(qū)動模塊進(jìn)行二次的抽象和封裝,提供了更加高級也更加貼合知識圖譜的操作接口,例如:簡單的推理功能。
2)實(shí)現(xiàn)分布式存儲方案的知識圖譜異構(gòu)存儲框架中間件
該中間件是在保證每個(gè)存儲模塊接口一致后,本發(fā)明提供的一個(gè)中間層的模塊。由于多源異構(gòu)數(shù)據(jù)庫知識圖譜驅(qū)動模塊只能保證對每個(gè)數(shù)據(jù)庫的操作一致,但不能將每個(gè)方案融合,也沒有實(shí)現(xiàn)數(shù)據(jù)庫之間的切換,更沒有提供分庫分表和均衡負(fù)載的支持。而知識圖譜異構(gòu)存儲框架中間件的存在,不僅起到了系統(tǒng)耦合的作用,還提供了上述這些問題合適解決方案,也讓用戶在使用時(shí)脫離了上一層的邏輯,專注于自己的業(yè)務(wù)。用戶在使用本發(fā)明時(shí),只需要連接中間件模塊,配置好合適的數(shù)據(jù)庫方案,調(diào)用的統(tǒng)一接口就能夠支撐絕大多數(shù)的業(yè)務(wù),也弄隨著業(yè)務(wù)的擴(kuò)展,在不同存儲房間自由切換。本發(fā)明知識圖譜異構(gòu)存儲框架中間件包括:中間件客戶端模塊、中間件服務(wù)端模塊和分布式中間件負(fù)載均衡和查詢處理模塊;所述中間件客戶端模塊為負(fù)責(zé)以客戶端的角色和數(shù)據(jù)庫驅(qū)動模塊進(jìn)行交互,發(fā)送解析后的請求給數(shù)據(jù)庫,并接收返回的相關(guān)結(jié)果,再將結(jié)果轉(zhuǎn)交給中間件服務(wù)端模塊;所述分布式中間件負(fù)載均衡和查詢處理模塊為對接收到的請求進(jìn)行基本的負(fù)載均衡和緩沖,并對發(fā)送過來的查詢進(jìn)行語法解析和預(yù)處理,并將中間結(jié)果轉(zhuǎn)發(fā)給中間件客戶端模塊;當(dāng)處于分布式存儲環(huán)境時(shí)(即,后臺數(shù)據(jù)庫機(jī)器數(shù)量大于1臺)時(shí),還進(jìn)行查詢的分發(fā)和結(jié)果的組包;所述中間件服務(wù)端模塊為負(fù)責(zé)以服務(wù)端的角色和上層的用戶應(yīng)用進(jìn)行交互,接收上層應(yīng)用發(fā)來的請求,并轉(zhuǎn)發(fā)給中間件負(fù)載均衡和查詢處理模塊。
本發(fā)明的保護(hù)內(nèi)容不局限于以上實(shí)施例。在不背離發(fā)明構(gòu)思的精神和范圍下,本領(lǐng)域技術(shù)人員能夠想到的變化和優(yōu)點(diǎn)都被包括在本發(fā)明中,并且以所附的權(quán)利要求書為保護(hù)范圍。