1. 什么是圖?
圖數(shù)據(jù)庫是專門存儲龐大的圖形網(wǎng)絡(luò)并從中檢索信息的數(shù)據(jù)庫驱敲。它可以將圖中的數(shù)據(jù)高效存儲為點(diǎn)(Vertex)和邊(Edge),還可以將屬性(Property)附加到點(diǎn)和邊上宽闲。
在具體應(yīng)用上:點(diǎn)可以抽象為實(shí)體众眨,邊抽象為關(guān)系。例如:小明有一只鋼筆——小明為其中一個(gè)點(diǎn)容诬,鋼筆為另一個(gè)點(diǎn)娩梨,關(guān)系則為“有”。當(dāng)然小明也可以有很多只鋼筆放案,那么只需要有很多個(gè)鋼筆的點(diǎn)和關(guān)系就可以了姚建。
2. 適用場景
2.1 是否涉及實(shí)體之間的關(guān)系
- 推薦
- 欺詐檢測
- 重復(fù)檢測
- ...
2.2 是否涉及大量對統(tǒng)一類型實(shí)體的引用
- 組織層次結(jié)構(gòu)
- 訪問權(quán)限管理
- 社會影響力
- 朋友的朋友(N度好友)
- ...
2.3 是否探索了不同或未知深度的關(guān)系
- 供應(yīng)鏈可見性
- 材料清單
- 網(wǎng)絡(luò)管理
- ...
2.4 是否涉及到許多不同的路線或路徑
- 交通大數(shù)據(jù)(物流)
- 依賴追蹤
- 基礎(chǔ)設(shè)施管理
- ...
3. 案例
3.1 社交關(guān)系分析(朋友的朋友,好友推薦吱殉,影響力)
Neo4j 圖數(shù)據(jù)庫在社交網(wǎng)絡(luò)等領(lǐng)域的應(yīng)用
圖數(shù)據(jù)庫及應(yīng)用場景
新冠肺炎傳染圖譜建模與分析
- 人物關(guān)系如下圖(語句為nGQL):
//點(diǎn)
INSERT VERTEX user (name) VALUES "A":("A"), "B":("B"), "C":("C"), "D":("D"), "E":("E"), "F":("F"), "G":("G");
//邊
INSERT EDGE friend () VALUES "A"->"B":(), "A"->"D":(), "C"->"B":(), "E"->"B":(), "E"->"D":(), "E"->"C":(), "F"->"E":(), "E"->"G":();
<1> n度好友
//用戶E的2度好友
match (v1:user)-[e1:friend*2]-(v2:user) where id(v1)=="E" return DISTINCT(v2)
MINUS
match (v1:user)-[e1:friend*1]-(v2:user) where id(v1)=="E" return DISTINCT(v2);
<2> 兩個(gè)陌生人之間的認(rèn)識路徑
//用戶A和用戶C的認(rèn)識路徑
FIND SHORTEST PATH FROM "A" TO "C" OVER friend BIDIRECT;
<3> 用戶影響力(出度掸冤,入度)
//所有用戶影響力查詢
match (v:user)-[:friend]-(:user) return DISTINCT(v) as u, count(*) as c order by c desc;
<4> 共同好友的朋友推薦
//用戶A的共同好友推薦
match (v1:user)-[:friend]->(v2:user)<-[:friend]-(v3:user) where id(v1)=="A" return DISTINCT(v3), count(*);
- 如果我們在單純用戶的網(wǎng)絡(luò)關(guān)系圖中加入每個(gè)人讀過的書籍,我們還可以做關(guān)于書籍相關(guān)的操作了友雳,形成下圖:
//book點(diǎn)
INSERT VERTEX book (name) VALUES "book1":("book1"), "book2":("book2"), "book3":("book3"), "book4":("book4"), "book5":("book5");
//read邊
INSERT EDGE read () VALUES "A"->"book1":(), "A"->"book2":(), "E"->"book1":(), "E"->"book2":(), "E"->"book3":(), "C"->"book4":(), "A"->"book5":();
<5> 共同愛好的朋友推薦
//和用戶A讀過相同書籍的用戶
match (v1:user)-[:read]->(v2:book)<-[:read]-(v3:user) where id(v1)=="A" return DISTINCT(v3), count(v2);
<6> 共同愛好的書籍推薦
//用戶A的書籍推薦
match (v1:user)-[:read]->(v2:book)<-[:read]-(v3:user)-[:read]->(v4:book) where id(v1)=="A" return DISTINCT(v4) as book
MINUS
match (v1:user)-[:read]->(v2:book)<-[:read]-(v3:user) where id(v1)=="A" return DISTINCT(v2) as book;
<7> 基于關(guān)鍵人物的書籍推薦
//找出關(guān)鍵人物
match (v:user)-[:friend]-(:user) return DISTINCT(v) as u, count(*) as c order by c desc limit 1;
//查詢給用戶A的推薦書籍
match (v1:user)-[:read]->(v2:book) where id(v1)=="E" return DISTINCT(v2) as book
MINUS
match (v1:user)-[:read]->(v2:book) where id(v1)=="A" return DISTINCT(v2) as book;
match不支持管道符稿湿,需使用兩條語句
https://discuss.nebula-graph.com.cn/t/topic/5295/3
https://discuss.nebula-graph.com.cn/t/topic/4840
3.2 企業(yè)關(guān)系構(gòu)建(組織層次結(jié)構(gòu))
企業(yè)圖譜:
股權(quán)穿透圖:
企業(yè)關(guān)系圖譜:
3.3 欺詐檢測
圖數(shù)據(jù)庫應(yīng)用:金融反欺詐實(shí)踐
【案例】基于圖數(shù)據(jù)庫的保險(xiǎn)欺詐檢測
提升反欺詐效果 看關(guān)聯(lián)圖譜在風(fēng)控領(lǐng)域應(yīng)用
基于圖數(shù)據(jù)庫Neo4j的信用卡反欺詐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于Neo4j數(shù)據(jù)庫的個(gè)人信用評估系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
在傳統(tǒng)概念里:用戶手機(jī)號即可能為用戶的一個(gè)屬性,因此在往圖中寫入時(shí)押赊,也會寫入到節(jié)點(diǎn)的屬性中饺藤。在欺詐檢測方面,往往會把這種數(shù)據(jù)當(dāng)作圖中的一個(gè)點(diǎn)流礁,這是因?yàn)樵谄墼p特征檢測中涕俗,判斷是否為欺詐往往會用到此類數(shù)據(jù)。由此可見神帅,往往在數(shù)據(jù)建模階段再姑,需要根據(jù)業(yè)務(wù)來判斷,哪些數(shù)據(jù)需要創(chuàng)建節(jié)點(diǎn)找御,哪些需要創(chuàng)建成節(jié)點(diǎn)屬性元镀。
例如:在信用卡申請、個(gè)人信貸霎桅、小微貸栖疑、消費(fèi)貸等業(yè)務(wù)場景,欺詐者通過共用電話號碼滔驶、聯(lián)系人手機(jī)號等遇革,組合創(chuàng)建多個(gè)合成身份,由于擁有共用的信息,欺詐者通過這些信息構(gòu)成欺詐環(huán)澳淑。如下圖所示
查詢使用相同手機(jī)號的用戶語句
//當(dāng)手機(jī)號當(dāng)作節(jié)點(diǎn)時(shí)
match (用戶)-[]->(手機(jī)號) where 手機(jī)號="XXXXX" return 用戶
//當(dāng)手機(jī)號當(dāng)作節(jié)點(diǎn)屬性時(shí)
match (用戶) where 用戶.手機(jī)號="XXXXX" return 用戶
手機(jī)號當(dāng)作節(jié)點(diǎn)時(shí)明顯要比當(dāng)作屬性查詢快比原,前者只需掃描部分節(jié)點(diǎn)插佛,后者可能需要掃描全圖的節(jié)點(diǎn)杠巡。并且由于關(guān)聯(lián)關(guān)系,又可以根據(jù)手機(jī)號進(jìn)行延伸查詢
當(dāng)我不知道手機(jī)號只知道用戶時(shí):
match (用戶A)-->(手機(jī)號)<--(其他用戶) where 用戶A="XXX" return 其他用戶
當(dāng)通過特征分析出欺詐人員時(shí)雇寇,又可以根據(jù)社區(qū)發(fā)現(xiàn)算法氢拥,找出詐騙團(tuán)伙
4. 總結(jié)
數(shù)據(jù)建模階段要根據(jù)具體的業(yè)務(wù)來選擇哪些數(shù)據(jù)需要創(chuàng)建成節(jié)點(diǎn),哪些數(shù)據(jù)創(chuàng)建成節(jié)點(diǎn)屬性锨侯。以用戶手機(jī)號舉例嫩海,如果存在“查找重復(fù)手機(jī)號的用戶”需求時(shí),那么可以將手機(jī)號變成節(jié)點(diǎn)囚痴。但此行為也會將圖變得越來約復(fù)雜叁怪,點(diǎn)上的邊也會也來越多,從而導(dǎo)致性能問題深滚。
關(guān)系的定義上也可以更抽象些奕谭,例如:小明有一只鋼筆的"有"。