一種rdf的數(shù)據(jù)存儲方法和查詢方法
【技術領域】
[0001] 本發(fā)明屬于Web數(shù)據(jù)管理技術領域,具體設及一種降低RDF數(shù)據(jù)的存儲空間、提高 SPAR化的查詢效率的RDF的數(shù)據(jù)存儲方法和查詢方法。
【背景技術】
[0002] RDF(resou;rce description framework)是由WWW提出的對萬維網(wǎng)(World Wide Web)上信息進行描述的一個框架,它為Web上的各種應用提供信息描述規(guī)范。RDF用主語S (Subject)、謂詞P(Predicate)、賓語O(Object)的Ξ元組形式來描述Web上的資源。其中,主 語一般用統(tǒng)一資源標識符URI(Uniform Resource Identifiers)表示W(wǎng)eb上的信息實體(或 者概念),謂詞描述實體所具有的相關屬性,賓語為對應的屬性值。運樣的表述方式使得RDF 可W用來表示W(wǎng)eb上的任--何被標識的信息,并且使得它可W在應用程序之間交換而不喪 失語義信息。因此,RDF成為語義數(shù)據(jù)描述的標準,被廣泛應用于元數(shù)據(jù)的描述、本體及語義 網(wǎng)中。隨著語義網(wǎng)數(shù)據(jù)的不斷增多,構造高效的存儲和查詢運些語義網(wǎng)數(shù)據(jù)的系統(tǒng)成為語 義網(wǎng)應用得到普及的一個非常重要的方面,而RDF作為語義網(wǎng)數(shù)據(jù)的描述基礎,因此研究 RDF數(shù)據(jù)的高效存儲和查詢成為了語義網(wǎng)研究的熱點。目前RDF數(shù)據(jù)的存儲方式和優(yōu)化方式 主要有Ξ種。
[0003] 第一種,基于關系數(shù)據(jù)庫的存儲方式
[0004] 由于畑F數(shù)據(jù)可W看成〈Subject predicate,Ob ject〉S元組的集合,因此最自然 的方式是使用Ξ元組表來直接存儲運些數(shù)據(jù)。因此許多基于關系數(shù)據(jù)庫的RDF數(shù)據(jù)存儲系 統(tǒng)直接使用關系數(shù)據(jù)庫,設計Ξ元組表或者類似的方式來存儲RDF數(shù)據(jù)。該方法的步驟包 含:(1)將RDF數(shù)據(jù)解析成Ξ元組;(2)對Ξ元組中的URI通過MD5(Message Digest Algorithm 5)哈希進行編碼,并截取MD5哈希的前64位作為資源的標識符;(3)在關系型數(shù) 據(jù)庫中使用一張3列的表對數(shù)據(jù)進行存儲,并建立相關索引。但是,該方法在進行SPARQL查 詢時,需要將SPAR化查詢語言轉化為結構化查詢語言SQL進行查詢,需要多層的轉換操作。 由于RDF數(shù)據(jù)和關系數(shù)據(jù)有很大的不同,將RDF數(shù)據(jù)存儲在關系數(shù)據(jù)庫表中時,需要進行表 間的映射操作。因此降低了存儲利用率和查詢的效率。
[0005] 第二種,基于本地二進制文件的存儲方式
[0006] RDF文檔是能夠W-定的格式存儲到文件中的,在語義網(wǎng)中,大量的RDF文檔就W RDF/XML的形式存在。RDF數(shù)據(jù)和關系數(shù)據(jù)在結構上有很大的區(qū)別,其描述語法比關系數(shù)據(jù) 庫復雜的多,但是使用RDF描述資源是具有較大的靈活性?;谟脖P文件存儲RDF文檔可W 達到更好的存儲效率,同時可W保證快速的響應查詢,目前已有一些基于硬盤的存儲結構 的系統(tǒng)設計,運些系統(tǒng)往往借助于數(shù)據(jù)庫普遍采用的財對、B+樹和化sh表技術。但是,基于文 件的存儲方式開發(fā)成本相對較高,并且由于RDF只是基本的語義網(wǎng)數(shù)據(jù)描述基礎,還有如果 需要在基本存儲結構上支持對數(shù)據(jù)進行查詢推理那就還需要做大量的工作。
[0007] 第Ξ種,基于內存的存儲方式
[000引隨著硬件技術的不斷發(fā)展,內存也越來越便宜,內存容量也越來越大,構建基于內 存的RDF數(shù)據(jù)存儲系統(tǒng)也成為近年來研究的熱點。首先內存能夠提供相當快的訪問速度,可 W對數(shù)據(jù)進行實時的操作,節(jié)省磁盤的I/O開銷,如果在內存中設計一個存儲結構良好的 RDF存儲系統(tǒng),可W進一步的提高查詢和分析的效率。但是,該方式不適合大規(guī)模的RDF數(shù)據(jù) 存儲,且目前的方案BRA歷S、BitMat等都不支持SPAR化的直接查詢??梢娀趦却娴漠xF存 儲結構仍然處于不斷的研究和完善階段。
【發(fā)明內容】
[0009] 本發(fā)明的目的在于克服上述已有技術的不足,提出一種針對RDF學習資源提供一 種數(shù)據(jù)間比較速度快并且降低存儲空間的RDF數(shù)據(jù)存儲方法。
[0010] 本發(fā)明還提供了一種與上述存儲方法匹配并且能夠快速查詢的RDF數(shù)據(jù)查詢方 法,從而提高RDF學習資源的檢索效率。
[0011] 為了實現(xiàn)上述目的,本發(fā)明采用的技術方案是:
[0012] 本發(fā)明RDF數(shù)據(jù)的存儲方法由W下步驟組成:
[OOU] (1)設計面向實體的畑F數(shù)據(jù)的存儲結構
[0014] (1.1)采用面向實體的方式,將數(shù)據(jù)存到關系型數(shù)據(jù)庫η行的k列中,其中k為RDF數(shù) 據(jù)中所有主語的謂詞數(shù)量的平均值,η為所有主語需要的行數(shù)line的和,當單個主語的謂詞 數(shù)量sum非時,則所需行數(shù)line = l;當sum〉k時,則進行多行存儲,則所需行數(shù)line=(sum/ k)+l;
[0015] (1.2)確定k值W后,根據(jù)謂詞映射算法,將謂詞轉為列下標,得到一個η行k列的表 結構;
[0016] 其中步驟(1.2)的謂詞轉化為列下標的具體方法為:
[0017] (1.2.1)用謂詞映射算法計算列下標,謂詞映射算法的公式為:
[001 引知 ? /]2... ? /z/'("r/)二 /,/ e [0,足;
[0019] 式中hi,h2...h擁應為j個]lash函數(shù),i為列下標;
[0020] (1.2.2)當j個hash函數(shù)計算完成仍然沒有找到空閑的下標時,則開辟新的一行, 將該數(shù)據(jù)存到hi計算的下標中去。
[0021] (2)設計用于RDF數(shù)據(jù)的存儲映射
[0022] 采用hash算法將畑F數(shù)據(jù)的UR巧日字面量分別轉化為64位二進制數(shù)據(jù),URI取hash 算法的高64位,字面量取hash算法的低64位,將轉換的二進制數(shù)據(jù)存儲到hash索引表中并 對hash索引表中的行進行升序排列,W便查找時通過二分查找算法快速進行映射與轉化;
[0023] (3)RDF數(shù)據(jù)存儲
[0024] 將RDF數(shù)據(jù)按照步驟(2)的方法進行映射與轉換之后,第一次存儲到步驟(1)的表 結構中,對存儲到表結構中數(shù)據(jù)進行分析,創(chuàng)建分析表S,記錄每個Subject和Object包含的 Ξ元組個數(shù)W及出現(xiàn)頻率最高的20個URI和頻率最高的20個字面量對應的頻率,再按照步 驟(1)的表結構,將Object作為存儲實體,對存儲到表結構中的數(shù)據(jù)經過步驟(2)的映射與 轉換之后再進行第二次存儲,即完成RDF的數(shù)據(jù)存儲。
[0025] -種與上述的畑F數(shù)據(jù)存儲方法匹配的畑F數(shù)據(jù)查詢方法,其是由W下步驟組成:
[0026] (a. 1)變量的提取與轉化
[0027] 將SPAR化查詢語句中的Ξ元組基本圖模式進行分解,并確定查詢語句中的變量個 數(shù)為count,對查詢語句中的URI和字面量分別參照存儲方法中的步驟(2)中的映射方式將 其轉化為64位二進制數(shù)據(jù),對所包含的變量進行-1到-count的賦值;
[002引(a.2)基本查詢圖模式的轉化
[0029] 根據(jù)步驟(a. 1)中的Ξ元組基本圖模式分解結果,將每個基本圖模式轉化為Ξ元 組查詢節(jié)點結構,其中Ξ元組查詢節(jié)點結構為:
[0030] Ξ元組查詢節(jié)點結構
[0031] {
[0032] 節(jié)點的Id;
[0033] subject的Id;
[0034] predicate的Id;
[00;35] object 的 Id;
[0036] 存儲方式的標識;
[0037] }
[0038] 存儲方式的標識選擇RDF數(shù)據(jù)存儲方法中步驟(3)的第一次存儲或第二次存儲;
[0039] 對URI和字面量,sub ject、predicate、object的Id分別為64位二進制數(shù)據(jù);對變 量,subject、predicate、object 的 Id 對應為所賦的值;
[0040] (a. 3)查詢連接操作的表示
[0041] 根據(jù)步驟(a. 1)中基本圖模式中所分解的Ξ元組相互進行比較,對存在相同變量 的Ξ元組,W步驟(a. 2)結構中的節(jié)點Id為唯一標識符建立連接關系,并將連接關系轉化為 連接操作邊結構,其中連接操作邊結構為:
[0042] 連接操作邊結構
[0043] {
[0044] 起始Ξ元組的節(jié)點的Id,
[0045] 終止Ξ元組的節(jié)點的Id,
[0046] 共同變量的Id
[0047] };
[004引 (a. 4)計算每個查詢的查詢代價
[0049] 根據(jù)步驟(a. 2)中得到的Ξ元組查詢節(jié)點結構,對步驟(a.3)中得到的連接操作邊 結構按照代價算法分別進行代價分析,得到連接操作邊結構的代價值為C,代價算法的公式 為:
[0050] TMC(t,m,S)^c
[0051] 其中:t為需要查詢的Ξ元組;m為RDF數(shù)據(jù)存儲方法的步驟(3)中第一次存儲或第 二次存儲;S為分析表;
[0化2] (a. 5)查詢計劃的生成
[0053] 將步驟(a.4)中獲得的所有連接操作邊結構的代價值C進行由小到大排序,得到按 代價值排序的節(jié)點序列,選取序列中C值最小的節(jié)點為開始節(jié)點,依次選取序列中的下一個 節(jié)點,若節(jié)點中的變量未查詢,則進行連接查詢,直至所有節(jié)點中的變量都完成查詢,即實 現(xiàn)語句的查詢。
[0054] 上述步驟(a. 5)之后還包括步驟(a.6)建立緩存機制,具體為:對用戶輸入的查詢 語句根據(jù)步驟(a. 2)中得到的Ξ元組查詢節(jié)點結構的集合進行hash操作,得到hash函數(shù)的 結果值,若緩存列表中存在該值,則直