如何高效地儲存與檢索大規模的圖譜資料?
摘要:本文簡要介紹知識圖譜的儲存與檢索相關的知識。
本文分享自華為雲社群《》,原文作者:JuTzungKuei 。
1、概述
背景:隨著網際網路的發展與普及,一個萬物互聯的世界正在成型。與此同時,資料呈現出爆炸式的指數級增長,我們正處於一個數字洪流洶湧澎湃的新時代。
我們每天產生多少資料?據統計每天:
- 傳送5億條推文部落格;
- 傳送2940億封郵件;
- 全世界每天有50億次線上搜尋;
- 一輛聯網汽車會產生4TB的資料;
- Facebook每天產生4PB的資料,其中包含3.5億的照片以及1億小時的影片。
知識越來越多,目前常見的知識圖譜都是以三元組的資料形式構成。
- DBpedia 有近8千萬條三元組;
- YAGO 有超過1.2億三元組;
- Wikidata 有近4.1億三元組;
- Freebase有超過30億三元組;
- 中文百科有約1.4億三元組。
所以,我們該如何高效地儲存與檢索大規模的圖譜資料???
知識圖譜是一個有向圖結構,描述了現實世界中存在的實體、事件或者概念以及它們之間的關係。其中,有向圖中的節點表示實體、事件或者概念,圖中的邊表示相鄰節點之間的關係。
圖中展示了關於劉德華的知識圖譜區域性示意圖。圖中紅色字型表示概念,矩形框表示實體,藍色字型表示屬性,橢圓表示屬性值,橙色字型表示關係。
- 概念:人物、國家、電影等
- 實體:劉德華、朱麗倩、中國、天下無賊等
- 屬性:身高、體重、性別、首都、簡稱、上映時間、豆瓣評分等
- 關係:妻子、女兒、國籍、主演等
2、知識圖譜的儲存
知識圖譜中的知識是透過RDF結構進行表示的,其基本構成單元是事實。
- 每個事實是一個三元組:<主語S, 謂語P, 賓語O>,其中:
- 主語S:可以是實體、事件、概念
- 謂語P:可以是關係、屬性
- 賓語O:可以是實體、事件、概念、普通值
下面展示了知識圖譜中知識表示的三元組列表。
<S, P, O>
<劉德華, 生日, 1961年9月27日>
<劉德華, 血型, AB型>
<劉德華, 妻子, 朱麗倩>
<劉德華, 女兒, 劉向蕙>
<劉德華, 國籍, 中國>
<中國, 首都, 北京>
。。。 。。。
為了對知識圖譜資料進行高效查詢和管理,需要在儲存介質上合理地組織這些資料。按照儲存方式的不同,標準知識儲存方法可以分為基於表結構的儲存和基於圖結構的儲存。
2.1、基於表結構的儲存
基於表結構的儲存利用二維的資料表對知識圖譜中的資料進行儲存。根據不同的設計原則,知識圖譜可以具有不同的表結構,目前可以分為五類:三元組表、屬性表、水平表、垂直表和全索引。
2.1.1 三元組表
知識圖譜中的事實是一個個的三元組,一種簡單直接地儲存方式是設計一張表用於儲存知識圖譜中所有的事實,就是在關聯式資料庫中建一張具有三列的表,該表的模式為:<主語,謂語,賓語>。將知識圖譜中的每條三元組儲存為三元組表中的一行記錄。
這種儲存方式簡答直接,易於理解,但是將整個知識圖譜都儲存在一張表中,會導致單表的規模太大,在複雜查詢,或者增刪改查時會有非常大的開銷。
方案代表:RDF資料庫系統 3store、Virtuoso
2.1.2 屬性表
屬性表,又稱型別表,即為每種型別構建一張表,同一型別的例項放在相同的表中。表的每一列表示該類實體的一個屬性,每一行儲存該類實體的一個例項。
這種儲存方式雖然客服了三元組表的不足,但是也造成了新的問題,大量資料欄位重複,部分資料的屬性值存在空值,均會造成冗餘儲存。
方案代表:RDF三元組庫 Jena
人物
國家
電影
2.1.3 水平表
水平表每行記錄儲存一個知識圖譜中一個主語的所有謂語和賓語。實際上,水平表相當於知識圖譜的鄰接表。水平表的列數是知識圖譜中不同謂語的數量,行數是知識圖譜中不同主語的數量。
真實知識圖譜中,不同謂語數量可能成千上萬個,會超出資料庫上限;存在大量空值。
方案代表:早期的RDF資料庫系統 DLDB
2.1.4 垂直表
垂直表是一種以三元組的謂語作為劃分維度的方法,將RDF知識圖譜按照謂語劃分為若干張只包含主語和賓語兩列的表,表的總數量即知識圖譜中不同謂語的數量,也就是說,為每種謂語建立一張表,表中存放知識圖譜中由該謂語連線的主語和賓語值。
這種方法用不同表之間的連線代替自連線,避免了自連線操作。但是它無法很好地支援謂語是變數的查詢操作。
方案代表:SW-Store
性別
主演
首都
2.1.5 全索引
全索引,又稱六重索引,是針對知識圖譜資料和運算的特點提出的一種最佳化技術,利用知識圖譜三元組的特點來構建索引。將三元組中主語、謂語、賓語的各種排列情況都列舉出來,然後為它們一一構建索引。主語、謂語和賓語的排列情況共計六種。這些索引內容正好對應知識圖譜運算中帶變數的三元組模式的各種可能,是一種典型的“空間換時間”策略。
這種方法不僅緩解了三元組表的單表自連線問題,而且加速了圖譜的查詢效率。但是也增加了更新和維護成本。
方案代表:RDF-3X、Hexastore
六張表:SPO、SOP、PSO、POS、OSP、OPS
2.2、基於圖結構的儲存
基於圖結構的儲存是利用圖的方式對知識圖譜中的資料進行儲存。將實體看作節點,關係看作帶有標籤的邊,那麼知識圖譜的資料很自然地滿足圖模型的結構。基於圖結構的儲存方式能夠直接準確地反映知識圖譜的內部結構,目前主要有兩種圖儲存模式:鄰接表和鄰接矩陣。對應的資料庫是圖資料庫,資料模型是屬性圖。
2.2.1、鄰接表
所謂的鄰接表,就是知識圖譜中的每個節點(實體)對應一個列表,列表中儲存與該實體相關的資訊。在利用圖結構管理知識圖譜資料的時候,一個關鍵問題是如何在基於圖結構的指數候選空間中對查詢操作有效剪枝。
2.2.2、鄰接矩陣
所謂的鄰接矩陣,就是在計算機中維護多個n x n維的矩陣,其中n為知識圖譜中節點的數量。每個矩陣對應一個謂語,其中每一行或每一列都對應知識圖譜中的一個節點。若謂語p所對應的矩陣中第i行第j列為1,則表示知識圖譜中第i個節點到第j個節點有一條謂語為p的邊。
三維矩陣M:|S| x |P| x |O|,分別表示主謂賓的數量,如果 <s, p, o>存在於知識圖譜中,則M[i][j][k]=1,否則設定為0。
2.2.3、圖資料庫
圖資料庫的理論基礎是圖論,透過節點、邊和屬性對資料進行表示和儲存。具體來說,圖資料庫基於有向圖,其中節點、邊、屬性是圖資料庫的核心概念。
- 節點:表示實體、事件等物件。
- 邊:指圖中連線節點的有向線條,用於表示不同節點之間的關係。
- 屬性:描述節點或邊的特性。
- 常見圖資料庫:Neo4J、JanusGraph、OrientDB等;
3、知識圖譜的檢索
知識圖譜的知識實際上是透過資料庫系統進行儲存的,大部分資料庫系統透過形式化的查詢語言為使用者提供訪問資料的介面。
3.1 SQL
Structured Query Language 結構化查詢語言,用於管理關係型資料庫。
四種操作
- 增:insert into 表名(列1, 列2, ...) values(值1, 值2, ...)
- 刪:delete from 表名 where 條件
- 改:update 表名 set 列1=值1 where 條件
- 查:select 列1, 列2, ... from 表名 where 條件
3.2 SPARQL
SPARQL是由W3C為RDF資料開發的一種查詢語言和資料獲取協議,是被圖資料庫廣泛支援的查詢語言。
三種操作:
- 增:insert data 三元組資料
- 刪:delete data 三元組資料
- 改:無,增刪結合
- 查:select 變數1, 變數2, ... where 圖模式
select ?x, ?y where { 天下無賊 主演 ?x . 無間道 主演 ?x . ?x 生日 ?y . }
3.3 Gremlim
Gremlin是Apache Tinkerpop框架中使用的圖遍歷語言,使用Gremlin可以很方便的對圖資料進行查詢,進行圖的修改、區域性遍歷和屬性過濾等。
三種操作
- 增:g.addV('人物').property(id,'007').property('生日','1962年6月22日')、g.addE('丈夫').property('xxx', 'yyy').from(g.V('001')).to(g.V('002'))
- 刪:g.V('007').drop()
- 查:g.V().hasLabel('人物')、g.E().label()、g.V().valueMap()
3.4 Cypher
Cypher是一個描述性的圖形查詢語言,允許不必編寫圖形結構的遍歷程式碼對圖形儲存有表現力和效率的查詢。是一種被廣泛使用的宣告式圖資料庫查詢語言。
四種操作
- 增:create(n:人物 {name: '周星馳', 生日: '1962年6月22日'}) return n;
- 刪:match(s:Student{id: 1}) detach delete s;
- 改:match(n) where id(n)=7 set n.name = 'neo' return n;
- 查:match(n{name:"劉德華"}) return n、match(a:人物 {name:"劉德華"})-[b:Relation {{name:"國籍"}]->(c) return c;
參考
- 趙軍:《知識圖譜》
- 肖仰華:《知識圖譜 概念與技術》
- 王昊奮:《知識圖譜 方法、實踐與應用》
- [知識圖譜 綜述,構建,儲存與應用] ()
- [知識圖譜學習筆記(九)——知識圖譜的儲存與檢索] ()
- [知識圖譜04:知識圖譜的儲存與檢索] (https://blog.csdn.net/u013230189/article/details/108959770)
- [知識圖譜的儲存於檢索] ()
- [Gremlin查詢] (https://support.huaweicloud.com/usermanual-ges/ges_01_0024.html)
- [深入學習圖語言Gremlin | 圖資料庫入門] ()
- [Neo4j Cypher查詢語言詳解] ()
- [Neo4j系列- Cypher入門(四)] ()
- [neo4j資料庫之節點與關係的增刪改查] (https://blog.csdn.net/weixin_38927376/article/details/104806662)
- [知識圖譜(四):Neo4j查詢語法] (https://blog.csdn.net/ai_1046067944/article/details/85342567)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2796059/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大規模向量檢索與量化方法
- 大資料:快速有效地檢索大量資料大資料
- 資料密集型應用儲存與檢索設計
- 儲存新圖譜:DNA儲存的邊界與天地
- 大資料時代下的社交圖譜與興趣圖譜大資料
- 如何高效地將SQL資料對映到NoSQL儲存系統中SQL
- 【雲圖】自有資料的多邊形檢索(雲檢索)
- Vaex助力高效處理大規模資料集
- Lyft如何儲存支援其ML模型的大規模特徵資料?模型特徵
- 一種基於概率檢索模型的大資料專利檢索方法與流程模型大資料
- LLM大模型:LLaVa多模態圖片檢索原理大模型
- 尋路大資料:海量資料與大規模分析大資料
- 用Elasticsearch做大規模資料的多欄位、多型別索引檢索Elasticsearch多型型別索引
- 50億海量資料如何高效儲存和分析?
- 百度大規模時序資料儲存(一)| 監控場景的時序資料
- 萬字詳解:騰訊如何自研大規模知識圖譜 Topbase
- 如何用 Scrapy 爬取網站資料並在 Easysearch 中進行儲存檢索分析網站
- 規模化執行容器時的最佳資料儲存路徑
- 資料檢索
- 資料系統的基石:可靠性、可擴充套件性和可維護性+資料儲存與檢索的模型套件模型
- Facebook圖譜搜尋爭議 大資料存碎片化缺陷大資料
- 大規模分散式儲存系統:原理解析與架構實戰分散式架構
- 大資料的儲存和管理大資料
- Netflix實戰指南:規模化時序資料儲存
- 如何規劃一個高效的BI資料倉儲專案JI
- Graph RAG: 知識圖譜結合 LLM 的檢索增強
- 百度地圖開發(五)之公交資訊檢索 + 路線規劃地圖
- HipChat 十億級檢索和儲存架構曝光架構
- 大資料檢索技巧之演算法大資料演算法
- 傳奇玩家大資料圖譜–資訊圖大資料
- Flashtext:大規模資料清洗的利器
- 資料庫的檢索(20)資料庫
- 語義分析發現:靈玖大資料檢索與分詞大資料分詞
- 大規模資料儲存叢集資料存放的設計,分散式shardid的生成-如何指定範圍隨機數,分組隨機數分散式隨機
- PostgreSQL家譜、族譜類應用實踐-圖式關係儲存與搜尋SQL
- 大資料工程師技能圖譜大資料工程師
- 雲上大資料儲存:探究 JuiceFS 與 HDFS 的異同大資料UI
- 大資料開發的儲存技術探索與實踐大資料