gStore:A Graph-based SPARQL Query Engine---part1

本文由學者Lei Zou, M. Tamer Özsu, Lei Chen, Xuchuan Shen, Ruizhe Huang & Dongyan Zhao於2014/08/01在《The VLDB Journal 》聯合發表

本文解決了對RDF數據集的SPARQL查詢的高效處理,將新技術集成到gStore系統,以統一和可擴展的方式處理對動態RDF數據集進行具有通配符和聚合運算符的SPARQL查詢。方法基於圖,將RDF數據存儲爲大圖,並將SPARQL查詢表示爲查詢圖。將查詢回答問題轉換爲子圖匹配問題。爲了實現高效和可擴展的查詢處理,開發了新索引以及有效的刪除規則和高效的搜索算法,使用此基礎回答聚合查詢的技術,還提出一種有效的維護算法來處理RDF存儲庫的在線更新。

可擴展性以及遵循RDF的實際要求

  • 帶通配符的SPARQL查詢。

  • 動態RDF存儲庫。 RDF存儲庫不是靜態的,並且會定期更新。爲了支持查詢此類動態RDF數據集,查詢引擎能夠處理頻繁的更新而無需太多維護費用。

  • 聚合SPARQL查詢。

gStore是基於圖的三元存儲,可以在動態RDF數據存儲庫回答SPARQL查詢。此時,回答查詢轉換爲子圖匹配。將RDF數據集建模爲一個標記的、有向的多邊圖(RDF圖),每個頂點對應主語或賓語。通過查詢圖Q進行SPARQL查詢,查詢圖Q的子圖匹配在RDF圖G上提供查詢的答案。

RDF圖不必連接。 SPARQL查詢可表示爲有向標記的查詢圖Q,定義如下:
在這裏插入圖片描述
查詢圖Q是一個連通圖。如果不連通,則圖Q作爲單獨的查詢,一個一個執行。採用新的索引和圖匹配技術。首先,RDF圖頂點和邊的數量大於典型圖形數據庫的數量級。其次,RDF圖頂點和邊緣標籤的基數遠大於傳統圖形數據庫。最後,SPARQL查詢結合了同一實體的多個類似屬性的屬性,傾向把星查詢作爲子查詢。 星查詢:由一箇中心頂點及其鄰點形成的星形的查詢圖。

三種存儲和查詢RDF數據的方法:

  • 一個巨大三元組表:RDF三元組存儲在單個三列表中分別對應主語,屬性和賓語, 能夠統一處理所有RDF三元組,此表上還會形成大量的自聯接用於回答SPARQL查詢。
  • 兩種屬性表:
    • 羣集屬性表:同主語中的屬性分組聚合,每個屬性集羣映射到一個屬性表。
    • 屬性類表:具有相同類型屬性的對象集羣到一個屬性表。
  • 垂直分區表:對於每個屬性,此方法都構建了一個由主語排序的單個兩列(主語、賓語)表。排序優點是在查詢處理期間執行快速合併聯接。

x-RDF-3x提出的一種有效的在線維護算法,但不支持通配符或聚合SPARQL查詢。圖分區是並行執行的技術,需要更新圖重新分區,除非採用增量分區方法。給定聚合的SPARQL查詢Q,方法是將Q轉換爲沒有聚合謂詞的SPARQL查詢Q0,通過現有查詢引擎找到Q0的解決方案,然後根據共享指定值的行將解決方案集劃分爲一個或多個組,最後,計算每個組的聚合值。

RDF數據集=subject+property+object
subject:實體或類,property:實體或類的關聯屬性,object:實體、類或文字值。不區分“實體”和“類”,RDF數據建模爲RDF圖,定義如下:
在這裏插入圖片描述
無需考慮SPARQL涉及類型推理/推論的查詢,查詢匹配定義如下:
在這裏插入圖片描述
回答SPARQL查詢=在RDF中查找其對應查詢圖的所有匹配項圖形。

何爲gStore?
gStore是基於圖的三元存儲系統,可在動態RDF數據存儲庫上回答不同類型SPARQL查詢-精確查詢,通配符查詢和聚合查詢。 RDF數據集表示爲RDF圖G,並存儲爲鄰接表。然後,將每個實體和類頂點編碼位字符串(稱爲頂點簽名)。根據RDF圖的結構,鏈接頂點簽名從而形成數據簽名圖G*,其中每個頂點對應RDF圖中的類或實體頂點。G由G中的所有實體和類頂點以點爲實體或類頂點的邊引起的。在G上找到Q的匹配稱爲NP-hard,類似於子圖同構。使用過濾和評估策略來減少匹配的搜索空間。首先使用假陽性刪除策略找到一組候選子圖,然後使用鄰接表驗證數據找到答案。

此框架的兩個問題及解決:

  • 編碼技術應確保RS⊆CL。一種編碼技術將G*中的每個頂點映射到一個簽名。
  • 需要有效的子圖匹配算法找到Q與G的匹配。設計新的索引結構VS*-tree。VS*-tree是G*的摘要圖,用於刪除策略減少搜索的有效處理查詢查找與G*匹配的Q*的空間。

VS*-tree用於回答聚合SPARQL查詢。首先將聚合查詢Q分解爲星聚合查詢Si,再引入T-index。通過分組與T索引中的節點相關聯的物化集來回答星查詢。一旦獲得星聚合查詢Si的結果R(Si),將使用VS*-tree加入R(Si),並找到每個星中心的所有相關節點。然後,基於這些相關節點,找到聚合查詢的最終結果。

存儲方案和編碼技術
使用基於磁盤的鄰接表存儲RDF圖G,每個(類或實體)頂點u用鄰接表[uID,uLabel,adjList]表示,其中uID是頂點ID,uLabel是相應URI,而adjList是其輸出邊和相應的相鄰頂點的列表。

根據定義3,如果頂點v(在查詢Q)可以匹配頂點u(在RDF圖G),則v的每個相鄰頂點和每個相鄰邊都與u的某個相鄰頂點和某個相鄰邊匹配。給定G中的頂點u,將其相鄰的每個邊緣標籤和對應的相鄰頂點標籤編碼爲位串。 通過簡單地檢查對應的編碼位串間的匹配驗證Q和G之間的匹配。給定頂點,將其相鄰的每個邊緣e(eLabel,nLabel)編碼爲位串,該位串稱爲邊緣簽名(即eSig(e)):
在這裏插入圖片描述
對於一個頂點擁有多條邊,可通過其邊緣簽名對每個相鄰邊緣編碼。計算頂點簽名時,使用鄰點文本值,而不是其頂點簽名。

VS*-tree
VS*-tree是G*上的索引結構,用於回答SPARQL查詢。利用定義8在G*(數據簽名圖)上找到Q*(查詢簽名圖)的匹配。
在這裏插入圖片描述
簡單方法:首先,對於每個頂點vi∈Q*,找到一個列表Ri = {ui1,ui2,…,uin};然後,對列表Ri多路聯接,找到Q*與G*的匹配;第一步(查找Ri)是子集查詢,給定一組具有集值屬性的對象,查找包含某些屬性值的所有對象。爲減少子集查詢的搜索空間,提出組織所有簽名{sj}。每個中間節點通過對S樹中的所有子簽名進行“或”運算形成。由此使用S樹找到Ri。開發VS*-tree索引大型數據簽名圖G*支持第二步,VS*-tree是基於S-tree的多分辨率彙總圖,用於減少子圖查詢處理的搜索空間。

查詢算法使用查詢圖Q的頂點簽名與VS*-tree的節點的逐級匹配。給定頂點u,對其所有相鄰邊簽名執行按位或運算獲得頂點簽名vSig(u)(定義6):
在這裏插入圖片描述
對於具有高度的頂點,vSig()可能是全部(或大部分)1的,這意味着這些頂點可以匹配任何查詢頂點簽名。對於VS
-tree的刪除功能有影響,所以需要做出優化,優化過程請自行閱讀。

未完待續,接下篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章