為什么需要知識圖譜,如何構建它?

從關系數據庫遷移到圖形數據庫的指南

斯坦·帕格斯利

邁向數據科學

跟隨

發表于

邁向數據科學

·
7 分鐘閱讀
·
4天前

154

4

一、說明

????????TLDR:知識圖譜在圖數據庫中組織事件、人員、資源和文檔,以進行高級分析。本文將解釋知識圖譜的用途,并向您展示如何將關系數據模型轉換為圖模型、將數據加載到圖數據庫中以及編寫一些示例圖查詢的基礎知識。

二、為什么選擇知識圖譜?

????????關系數據庫非常適合創建列表,但對于管理不同實體的網絡來說卻很糟糕。您是否曾經嘗試過使用關系數據庫執行任何這些任務?

  • 分析患者與數十人、地點和程序互動時的醫療保健護理事件
  • 通過涉及的供應商、客戶和交易類型網絡查找金融欺詐模式
  • 優化供應鏈的依賴關系和相互關聯的元素

????????這些都是事件、人員和資源網絡的例子,這些事件、人員和資源給使用關系數據庫的 SQL 分析師帶來了巨大的麻煩。隨著網絡規模的增加,關系數據庫的速度呈指數級增長,而圖形數據庫具有相對線性的關系。如果您正在管理活動和事物的網絡或 Web,圖形數據庫是正確的選擇。在未來,我們應該期待看到企業數據組采用關系數據庫的組合,對一個業務功能進行孤立的分析,以及知識圖譜的組合,用于跨功能的復雜網絡化流程。

????????基于圖形數據庫技術的知識圖譜旨在處理各種流程和實體網絡。在知識圖譜中,您具有表示人員、事件、地點、資源、文檔等的節點。并且您具有表示節點之間鏈接的關系(邊)。這些關系以名稱和方向物理存儲在數據庫中。并非每個圖形數據庫都是知識圖形。要被視為知識圖譜,設計必須將業務語義模型嵌入到跨越多個業務功能的各種節點集中,該模型反映在節點和關系的清晰業務名稱中。實質上,您是在從交互的業務的所有部分創建一個無縫的網絡,并使用業務語義將數據與它們所代表的流程緊密聯系在一起。這可以作為未來生成LLM模型使用的基礎

????????為了說明知識圖譜中的各種數據集,讓我們看一個簡單的供應鏈物流示例。業務流程可以按如下方式建模:

供應鏈圖數據庫模型。圖片由作者提供。

????????此模型可以擴展到包括業務流程的任何相關部分:客戶退貨、發票、原材料、制造流程、員工,甚至客戶評論。沒有預定義的架構,因此模型可以向任何方向或深度擴展。

三、從關系模型到維度模型再到圖模型

????????現在,讓我們了解一下使用電子商務供應商的方案將典型的關系數據庫模型轉換為圖形模型的過程。假設該供應商正在運行一系列數字營銷活動,在其網站上接收訂單,并將產品運送給客戶。關系模型可能如下所示:

電子商務關系數據庫模型。圖片由作者提供。

????????如果我們將其轉換為用于數據倉庫的維度模型,該模型可能如下所示:

電子商務維度模型(數據倉庫)。圖片由作者提供。

????????請注意,事實數據表側重于事件,維度表表示合并到一個表中的業務實體的所有屬性。這種以事件為中心的設計提供了更快的查詢時間,但會產生其他問題。每個事件都是一個不同的事實數據表,很難看到從一個事件到相關事件之間的聯系。當維度實體(如產品)與另一個維度中的實體(如運營商)共享的所有事件(在多個事實數據表之間拆分時),沒有簡單的方法可以理解這些關系。維度模型一次關注一個事件,但模糊了不同事件之間的聯系。

????????圖模型通過對過程進行建模,解決了顯示實體之間相互關聯的問題,如下所示:

電子商務圖數據庫模型。圖片由作者提供。

????????乍一看,該圖模型與關系模型比維度模型更相似,但它可以用于與數據倉庫相同的分析目的。請注意,每個關系都有名稱并具有方向。可以在任何節點之間創建關系 - 事件與事件、人與人、文檔與事件等。圖形查詢還允許您以 SQL 無法實現的方式遍歷圖形。

????????例如,您可以收集與關鍵事件相關的任何節點并研究發生的模式。與非規范化維度表不同,層次結構被保留,每個級別都可以單獨引用。最重要的是,圖表在對業務中的任何事件或實體進行建模時更加靈活,無需遵循一組嚴格的模式約束。該圖旨在匹配業務的語義模型。

四、提取、轉換和加載 (ETL)

????????現在,讓我們看一個示例關系數據庫表,并創建一些示例腳本來提取、轉換數據并將其加載到圖形數據庫中。在本文中,我將使用Cypher語言,這是最流行的商業圖形數據庫Neo4j使用的語言。但這些概念將適用于圖形查詢語言(GQL)的其他變體。我們將使用以下示例產品表:

產品表。?

????????使用此查詢,我們可以提取過去 24 小時內更新的新產品:

SELECT product_id,product_name,cost_usd,product_status
FROM Product
WHERE last_updated_date > current_date -1;

????????我們可以將這些結果拉取到名為“df”的?Python Pandas?數據幀中,打開圖形數據庫連接,然后使用此腳本將數據幀合并到圖形中。

UNWIND $df as row
MERGE INTO (p:Product {product_id: row.product_id})
SET p.product_name = row.product_name,p.cost_usd = row.cost_usd,p.product_status= row.product_status,p.last_updated_date = datetime();

????????第一行引用參數“df”,這是來自 Pandas 的數據幀。我們將合并到節點類型“產品”中,該節點類型由別名“P”引用。然后,“product_id”部分用于綁定到節點中的唯一標識符。之后,Merge 語句看起來類似于 SQL 中的合并。

????????使用上面這樣的合并語句創建每個節點后,我們創建關系。關系可以在同一腳本中創建,也可以使用如下所示的合并命令在后處理腳本中創建:

MATCH (p:Product), (o:Order)
WHERE p.product_id = o.order_id
MERGE (o)-[:CONTAINS]->(p);

????????Match 語句類似于 Oracle 中的舊版聯接用法,在 Match 之后聲明了兩種節點類型,然后在 Where 子句中聲明了聯接。

五、對圖模型的查詢

????????假設我們已經構建了圖形,現在想要查詢它。我們可以使用這樣的查詢來查看從亞利桑那州吸引訂單的廣告組。

MATCH (ag:AdGroup)<-[:BELONGS_TO]-(a:Ad)-[:DRIVES]->(o:Order)<-[:PLACES]-(c:Customer)
WHERE c.state = 'AZ'
RETURN ag.group_name,COUNT(o) as order_count

????????此查詢將返回廣告組名稱和訂單數量(按亞利桑那州過濾)。請注意,與SQL不同,Cypher中不需要Group By子句。從該查詢中,我們將收到以下示例輸出:

圖形查詢的示例結果。圖片由作者提供。

????????此示例可能看起來微不足道,因為您可以使用訂單事實數據表在關系數據庫或數據倉庫中輕松創建類似的查詢。但是,讓我們考慮一個更復雜的查詢。假設您想查看從廣告系列啟動到收到可歸因投放所花費的時間。在數據倉庫中,此查詢將跨事實數據表(不是一個簡單的任務)并占用大量資源。在關系數據庫中,此查詢將涉及一長串聯接。在圖形數據庫中,查詢如下所示:

MATCH (cp:Campaign) )<-[:BELONGS_TO]-(ag:AdGroup)<-[:BELONGS_TO]-(a:Ad)
MATCH (a)-[:DRIVES]->(o:Order)<-[:FULFILLS]-(d:Delivery)
RETURN cp.campaign_name,cp.start_date as campaign_launch_date,MAX(d.receive_date) as last_delivery_date

????????我使用了一個示例查詢路徑,但用戶可以采用多種路徑來回答不同的業務問題。在查詢中,請注意,從“營銷活動”到“投放”的路徑經過訂單和投放之間的關系。另請注意,為了便于閱讀,我將路徑分為兩部分,從第二行中的 Ad 別名開始。查詢的輸出如下所示:

????????圖形查詢的示例結果。圖片由作者提供。

六、結論

????????我們已經查看了一些將電子商務業務流程從關系模型轉換為圖形模型的示例步驟,但我們無法在本文中涵蓋所有設計原則。希望您已經看到圖形數據庫需要與關系數據庫大致相同的技術技能水平,并且遷移不是一個巨大的障礙。

????????最大的挑戰是重新訓練你的大腦,遠離傳統的關系建模技術,從語義或業務建模的角度思考。如果您看到圖形技術的潛在應用,請嘗試概念驗證項目。使用知識圖譜進行分析的可能性遠遠超出了二維表格所能做到的!斯坦·帕格斯利

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36346.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP協議的發展過程

前言 HTTP協議是一種用于在網絡上傳輸信息的應用層協議&#xff0c;它為萬維網的運作提供了基礎。 最早的版本是HTTP/0.9&#xff0c;它是HTTP協議的第一個版本&#xff0c;誕生于1991年&#xff0c;其設計初衷是為了在計算機之間傳輸簡單的超文本文檔&#xff0c;即HTML。 在…

在Java中對XML的簡單應用

XML 數據傳輸格式1 XML 概述1.1 什么是 XML1.2 XML 與 HTML 的主要差異1.3 XML 不是對 HTML 的替代 2 XML 語法2.1 基本語法2.2 快速入門2.3 組成部分2.3.1 文檔聲明格式屬性 2.3.2 指令&#xff08;了解&#xff09;&#xff1a;結合CSS2.3.3 元素2.3.4 屬性**XML 元素 vs. 屬…

【Linux】Linux中獲取UUID的方法

1、從mmc塊設備獲取 在Linux下,獲取MMC的CID(Card Identification,識別ID) cat /sys/block/mmcblk0/device/cidMMC CID組成 MID: [127:120] —— 8bit(1Byte)Manufacturer ID,由MMCA分配,比如Sandisk為0x02,Kingston為0x37,Samsung為0x15。OID: [119:104] —— 16b…

windows程序基礎

一、windows程序基礎 1. Windows程序的特點 1&#xff09;用戶界面統一、友好 2&#xff09;支持多任務:允許用戶同時運行多個應用程序(窗口) 3&#xff09;獨立于設備的圖形操作 使用圖形設備接口( GDI, Graphics Device Interface )屏蔽了不同硬件設備的差異&#…

什么是視頻的編碼和解碼

這段描述中&#xff0c;視頻解碼能力和視頻編碼能力指的是不同的處理過程。視頻解碼是將壓縮過的視頻數據解開并還原為可播放的視頻流&#xff0c;而視頻編碼是將原始視頻數據壓縮成更小的尺寸&#xff0c;以減少存儲空間和傳輸帶寬。在這個上下文中&#xff0c;解碼能力和編碼…

LVGL學習筆記 30 - List(列表)

目錄 1. 添加文本 2. 添加按鈕 3. 事件 4. 修改樣式 4.1 背景色 4.2 改變項的顏色 列表是一個垂直布局的矩形&#xff0c;可以向其中添加按鈕和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

Android:換膚框架Android-Skin-Support

gihub地址&#xff1a;https://github.com/ximsfei/Android-skin-support 樣例&#xff1a; 默認&#xff1a; 更換后&#xff1a; 一、引入依賴&#xff1a; // -- 換膚依賴implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

Rust語法:變量,函數,控制流,struct

文章目錄 變量可變與不可變變量變量與常量變量的Shadowing標量類型整數 復合類型 函數控制流if elseloop & whilefor in structstruct的定義Tuple Structstruct的方法與函數 變量 可變與不可變變量 Rust中使用let來聲明變量&#xff0c;但是let聲明的是不可變變量&#x…

Golang自定義類型與類型別名

type myInt int32 與 type myInt int32&#xff0c;概念并不相同 自定義類型&#xff1a;type myInt int32 通過這種方式定義的類型是一個全新的類型&#xff0c;這個新類型與int32有相同的底層結構&#xff0c;但是卻與int32類型不兼容。 type myInt int32var a int32 5 var…

雙色球彩票系統---(java實現)

雙色球彩票系統&#xff1a;需求&#xff1a;投注號碼由6個紅色號碼和1個藍色球號碼組成。紅色球號碼從1-33中選擇&#xff0c;藍色球號碼從1-16當中選擇 * 紅 藍 * 一等獎 6 1 * 二等獎 6 0 * 三等獎 5 1 * 四等獎 5 0 * 4 1 * 五等獎 4 0 * …

Blazor簡單教程(1.1):Razor基礎語法

文章目錄 前言基本文件配置引入Layout組件 語法介紹pagecodeRazor 語法[ 顯式表達和隱式表達](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?viewaspnetcore-7.0#explicit-razor-expressions) 綁定簡單綁定雙向綁定帶參數的函數綁定 依賴注入 前言 Blazor…

synchronized使用

目錄 問題描述 1 鎖方法 2 鎖代碼塊 3 鎖某個類 4 靜態方法上的synchronized 當我們處理多線程處理同步問題的時候就會用到synchronized這個關鍵字&#xff0c;下面介紹下synchronized的四種用法。 問題描述 介紹之前我們先來看下&#xff0c;在java 多線程中 如果沒有線…

leetcode1. 兩數之和

題目&#xff1a;leetcode1. 兩數之和 描述&#xff1a; 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;數組中…

QT:UI控件(按設計師界面導航界面排序)

基礎部分 創建新項目&#xff1a;QWidget&#xff0c;QMainWindow&#xff0c;QDialog QMainWindow繼承自QWidget&#xff0c;多了菜單欄; QDialog繼承自QWidget&#xff0c;多了對話框 QMainWindow 菜單欄和工具欄&#xff1a; Bar: 菜單欄&#xff1a;QMenuBar&#xff0…

A Survey for In-context Learning

A Survey for In-context Learning 摘要&#xff1a; 隨著大語言模型(LLMs)能力的增長&#xff0c;上下文學習(ICL)已經成為一個NLP新的范式&#xff0c;因為LLMs僅基于幾個訓練樣本讓內容本身增強。現在已經成為一個新的趨勢去探索ICL來評價和extrapolate LLMs的能力。在這篇…

微服務06-分布式事務解決方案Seata

1、Seata 概述 Seata事務管理中有三個重要的角色: TC (Transaction Coordinator) - **事務協調者:**維護全局和分支事務的狀態,協調全局事務提交或回滾。 TM (Transaction Manager) - **事務管理器:**定義全局事務的范圍、開始全局事務、提交或回滾全局事務。 RM (Resourc…

Java地圖專題課 基本API BMapGLLib 地圖找房案例 MongoDB

本課程基于百度地圖技術&#xff0c;由基礎入門開始到應用實戰&#xff0c;適合零基礎入門學習。將企業項目中地圖相關常見應用場景的落地實戰&#xff0c;包括有地圖找房、輕騎小程序、金運物流等。同時講了基于Netty實現高性能的web服務&#xff0c;來處理高并發的問題。還講…

ttf-dejavu fontconfig字體

ttf-dejavu fontconfig是驗證碼&#xff0c;pdf&#xff0c;excel時需要用到的字體 編輯dockerfile&#xff0c;先切換國內鏡像源&#xff0c;默認alpinelinux是國外源&#xff0c;下載包會很慢 vim Dockerfile FROM alpine:latest RUN sed -i s/dl-cdn.alpinelinux.org/mirr…

【創建型設計模式】C#設計模式之原型模式

原型模式是一種創建型設計模式&#xff0c;它通過復制現有對象來創建新對象&#xff0c;而無需通過實例化的方式。它允許我們使用已經存在的對象作為藍本&#xff0c;從而創建新的對象&#xff0c;這樣可以避免重復初始化相似的對象&#xff0c;提高了對象的創建效率。 現在給…

Sentinel

1、熔斷降級限流 熔斷 A服務調用B服務的某個功能&#xff0c;由于網絡不穩定、B服務卡機等問題&#xff0c;導致功能時間超長。如果這樣子的次數太多&#xff0c;我們就可以直接將B斷路&#xff08;A不再請求B接口&#xff09;&#xff0c;凡是調用B服務的直接返回降級數據&a…