近年來(lái),圖數(shù)據(jù)庫(kù)有了大規(guī)模的發(fā)展,它們被應(yīng)用到很多領(lǐng)域并參與優(yōu)秀的解決方案。它們的靈活性使其更容易以傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)無(wú)法做到的方式利用數(shù)據(jù)之間的關(guān)系和連接。但是,你真的知道何時(shí)使用圖數(shù)據(jù)庫(kù)嗎?在這篇文章中,我們探討了在使用圖數(shù)據(jù)庫(kù)之前需要考慮什么,甚至在思考之后得出不使用圖數(shù)據(jù)庫(kù)的結(jié)論。
1、什么是圖形數(shù)據(jù)庫(kù)?
圖數(shù)據(jù)庫(kù)是一種使用圖理論作為數(shù)據(jù)模型基礎(chǔ)的數(shù)據(jù)庫(kù)。圖數(shù)據(jù)庫(kù)將連接性視為“一等公民”,使其比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)更適合表示數(shù)據(jù)之間的連接。
有兩種類型的圖技術(shù)。RDF/語(yǔ)義網(wǎng)和屬性圖。雖然語(yǔ)義網(wǎng)標(biāo)準(zhǔn)已經(jīng)存在了很長(zhǎng)時(shí)間,但屬性圖已經(jīng)成為主導(dǎo)技術(shù),其中Cypher采用了大量的圖查詢語(yǔ)言。
從本質(zhì)上講,屬性圖數(shù)據(jù)庫(kù)中的數(shù)據(jù)模型由以下屬性組成:節(jié)點(diǎn)、邊、屬性和標(biāo)簽。
節(jié)點(diǎn)有屬性。
節(jié)點(diǎn)帶有一個(gè)或多個(gè)標(biāo)簽。
邊是有方向的,連接節(jié)點(diǎn)以創(chuàng)建圖中的結(jié)構(gòu)。
邊緣可以有屬性。
圖數(shù)據(jù)庫(kù)應(yīng)用于具有相互連接的數(shù)據(jù)。幾個(gè)常見的用例包括:
推薦引擎
語(yǔ)義搜索
反洗錢
欺詐檢測(cè)
360度客戶視圖
除了這些應(yīng)用之外,對(duì)于那些不僅要管理大量數(shù)據(jù)而且需要產(chǎn)生業(yè)務(wù)見解的組織來(lái)說(shuō),圖數(shù)據(jù)庫(kù)已經(jīng)成為推薦的解決方案。圖數(shù)據(jù)庫(kù)有望成為獲得這種洞察力的最簡(jiǎn)單方法,因?yàn)樗刮覀兒苋菀桌斫鈹?shù)據(jù)中的關(guān)系和背景。
二、圖數(shù)據(jù)庫(kù)的挑戰(zhàn)
盡管有這些承諾,圖數(shù)據(jù)庫(kù)并沒(méi)有征服世界。根據(jù)DB-Engines的數(shù)據(jù),截至2022年10月,它們僅占數(shù)據(jù)庫(kù)份額的1.8%,與實(shí)現(xiàn)這些承諾相去甚遠(yuǎn)。有幾個(gè)原因可以解釋采用圖數(shù)據(jù)庫(kù)所遇到的困難。它們可以總結(jié)為以下幾點(diǎn):
1、對(duì)高度關(guān)聯(lián)的數(shù)據(jù)進(jìn)行建模
由于圖數(shù)據(jù)庫(kù)的高度表達(dá)性和相關(guān)的復(fù)雜性,在圖中建模數(shù)據(jù)并不容易。它類似于知識(shí)建模,也被稱為知識(shí)工程--一種需要高度專業(yè)化工程師的高級(jí)技能。這使得圖很難被普通開發(fā)者采用,設(shè)置了很高的進(jìn)入門檻。
2、保持?jǐn)?shù)據(jù)的連貫性
圖數(shù)據(jù)庫(kù)的另一個(gè)大問(wèn)題是缺乏一個(gè)強(qiáng)制的模式。圖形數(shù)據(jù)庫(kù)大多將模式驗(yàn)證委托給應(yīng)用層,無(wú)論是隱式的還是顯式的。這使得創(chuàng)建復(fù)雜數(shù)據(jù)的應(yīng)用變得更加困難,因?yàn)閿?shù)據(jù)一致性是至關(guān)重要的。圖數(shù)據(jù)庫(kù)中缺乏明確執(zhí)行的模式,這也是其難以被廣泛應(yīng)用的主要原因。
3、查詢數(shù)據(jù)
審問(wèn)圖也遇到了挑戰(zhàn),由于(隱含的)數(shù)據(jù)模型會(huì)制約表達(dá)的路徑,因此需要對(duì)查詢進(jìn)行設(shè)計(jì),使之與隱含的數(shù)據(jù)模型相匹配。這一點(diǎn)非常具有挑戰(zhàn)性,你需要以最理想的方式對(duì)數(shù)據(jù)進(jìn)行建模。此外,大多數(shù)圖數(shù)據(jù)庫(kù)缺乏重要的建模結(jié)構(gòu),如嵌套或n-ary關(guān)系,這導(dǎo)致了建模決策的不一致。有時(shí)可能會(huì)把關(guān)系定義為節(jié)點(diǎn),有時(shí)則定義為邊。這樣一來(lái),查詢可能就不一定能獲取到正確的數(shù)據(jù)。
三、強(qiáng)類型數(shù)據(jù)庫(kù)
克服上述挑戰(zhàn)對(duì)于幫助實(shí)現(xiàn)圖數(shù)據(jù)庫(kù)至關(guān)重要。這就是為什么要開發(fā)一種新型的數(shù)據(jù)庫(kù):強(qiáng)類型數(shù)據(jù)庫(kù):TypeDB。開源的TypeDB通過(guò)提供一個(gè)更高級(jí)別的類型系統(tǒng)來(lái)抽象出圖數(shù)據(jù)庫(kù)的低級(jí)實(shí)現(xiàn),使開發(fā)者更容易處理復(fù)雜的數(shù)據(jù)。TypeDB的類型系統(tǒng)基于以下的核心概念。
1、實(shí)體-關(guān)系模型
TypeDB使用實(shí)體-關(guān)系模型進(jìn)行數(shù)據(jù)建模。與圖數(shù)據(jù)庫(kù)不同,這意味著可以將任何ER圖直接映射到TypeQL(TypeDB的查詢語(yǔ)言)中,以避免規(guī)范化的過(guò)程。這意味著在概念上認(rèn)為模型是以人類熟悉的方式來(lái)創(chuàng)建的。
TypeDB的模型是由實(shí)體類型、關(guān)系類型和屬性類型組成,并引入了角色類型。
下面的例子顯示了TypeQL中的基本模型是如何寫的。
define
復(fù)制
person sub entity,
owns name,
plays employment:employee;
company sub entity,
owns name,
plays employment:employer;
employment sub relation,
relates employee,
relates employer;
name sub attribute,
value string;
在這個(gè)命名法中,方塊表示實(shí)體;鉆石表示關(guān)系;橢圓表示屬性。圖中概述了兩個(gè)實(shí)體的模型——人和公司,兩個(gè)實(shí)體都擁有名稱屬性。人在雇傭關(guān)系中扮演雇員的角色,而公司則扮演雇主的角色。
2、類型層次結(jié)構(gòu)
TypeDB提供了開箱即用的類型層次模型,這是圖數(shù)據(jù)庫(kù)不支持的一個(gè)特性。遵循面向?qū)ο蟮念愋拖到y(tǒng)的原則,TypeDB確保所有類型繼承他們的超類型的行為和屬性。這使得復(fù)雜的數(shù)據(jù)結(jié)構(gòu)可以重復(fù)使用,并且通過(guò)多態(tài)性使數(shù)據(jù)解釋更加豐富。
在下面的例子中,三層實(shí)體人的層次結(jié)構(gòu)被建模。它的所有子類型將繼承屬性的名字和姓氏,而不需要逐一重新聲明這些。
define
復(fù)制
person sub entity,
owns first-name,
owns last-name;
student sub person;
undergrad sub student;
postgrad sub student;
teacher sub person;
supervisor sub teacher;
professor sub teacher;
類型層次描述了由學(xué)生和教師類型組成的實(shí)體的子類型。有兩種類型的學(xué)生,本科生和研究生,有兩種類型的教師,監(jiān)督員和教授。
3、嵌套關(guān)系
關(guān)系是用來(lái)描述兩個(gè)或多個(gè)事物之間關(guān)聯(lián)的。有時(shí)事物本身就是關(guān)系,這意味著對(duì)需要指向另一個(gè)關(guān)系的關(guān)系進(jìn)行建模--嵌套。圖數(shù)據(jù)庫(kù)不允許對(duì)嵌套關(guān)系進(jìn)行建模,因?yàn)檫@樣就需要讓一個(gè)二元邊指向另一個(gè)二元邊。實(shí)現(xiàn)這一點(diǎn)的唯一可能方式是通過(guò)“reification”(具體化,將關(guān)系-邊轉(zhuǎn)化為點(diǎn)-實(shí)體節(jié)點(diǎn)),也就是將一條邊轉(zhuǎn)化為一個(gè)節(jié)點(diǎn),以便另一條邊可以指向它。
然而,TypeDB支持嵌套關(guān)系,使其以最自然的形式進(jìn)行數(shù)據(jù)建模。在下面的例子中,婚姻類型的關(guān)系被分配給變量$mar,然后通過(guò)關(guān)系將其與一個(gè)城市進(jìn)行關(guān)聯(lián)。
match
復(fù)制
$alice isa person, has name "Alice";
$bob isa person, has name "Bob";
$mar ($alice, $bob) isa marriage;
$city isa city;
($mar, $city) isa location;
圖中,"Alice "扮演妻子的角色,而 "Bob "扮演丈夫的角色。婚姻是一個(gè)嵌套關(guān)系,因?yàn)樗苍谖恢藐P(guān)系中扮演定位的角色,而城市 "倫敦 "在關(guān)系中扮演定位的角色。
4、多元關(guān)系
在現(xiàn)實(shí)世界中,關(guān)系并不只是指事物之間的二元聯(lián)系。我們經(jīng)常需要同時(shí)捕捉三個(gè)或更多相互關(guān)聯(lián)的事物。如果將它們表示二元關(guān)系會(huì)導(dǎo)致信息損失,這種情況常常會(huì)在圖數(shù)據(jù)庫(kù)中發(fā)生。另一方面,TypeDB可以很自然地將多個(gè)事物表示為一種關(guān)系。
在這個(gè)例子中,n-ary關(guān)系cast連接了三個(gè)不同的實(shí)體:人的實(shí)體,角色的實(shí)體和電影的實(shí)體。
match
復(fù)制
$person isa person, has name "Leonardo";
$character isa character, has name "Jack";
$movie isa movie, has name $movie-name;
(actor: $person, character: $character, movie: $movie) isa cast;
get $movie-name;
這是n-ary關(guān)系的例子,具體來(lái)說(shuō)是三元關(guān)系,關(guān)系類型是cast。關(guān)系與三個(gè)實(shí)體相關(guān):電影 "泰坦尼克號(hào) 扮演電影中角色“杰克”的演員是"萊昂納多 "。
5、安全問(wèn)題
與圖數(shù)據(jù)庫(kù)不同,TypeDB提供了一種方法來(lái)描述數(shù)據(jù)的邏輯結(jié)構(gòu),允許TypeDB驗(yàn)證代碼是否正確插入和數(shù)據(jù)的查詢。查詢驗(yàn)證超越了靜態(tài)類型檢查,包括對(duì)無(wú)意義的查詢進(jìn)行邏輯驗(yàn)證。通過(guò)嚴(yán)格的類型檢查錯(cuò)誤,你將獲得一個(gè)可以信任的數(shù)據(jù)集。
下面的插入查詢例子中,Charlie和DataCo之間的關(guān)系將被系統(tǒng)拒絕,因?yàn)橐粋(gè)人不能和一個(gè)公司結(jié)婚(假設(shè)模式遵循真實(shí)世界一般規(guī)律)。
insert
復(fù)制
$charlie isa person, has name "Charlie";
$dataCo isa company, has name "DataCo";
(husband: $charlie, wife: $dataCo) isa marriage; # invalid relation
commit>>
ERROR: invalid data detected during type validation
6、推理
最后,TypeDB提供了一個(gè)內(nèi)置的推理引擎,這使得TypeDB能夠推導(dǎo)出新見解,并提供對(duì)應(yīng)的解釋。另一方面,屬性圖并不提供原生的推理能力。
TypeDB的推斷是基于模式中的規(guī)則。在查詢運(yùn)行期間,如果數(shù)據(jù)集中的某個(gè)邏輯形式被滿足(如規(guī)則中定義的),系統(tǒng)將得出新的結(jié)論。就像編程中的函數(shù)一樣,規(guī)則可以相互連鎖,在數(shù)據(jù)層面創(chuàng)建行為的抽象。
通過(guò)下面的規(guī)則,TypeDB將能夠推斷出一個(gè)城市位于一個(gè)大陸,盡管兩者之間不存在明確的關(guān)系。
define
復(fù)制
rule transitive-location:
when {
(located: $city, locating: $country) isa location;
(located: $country, locating: $continent) isa location;
} then {
(located: $city, locating: $continent) isa location;
};
使用自動(dòng)推理,TypeDB可以推斷出 "卡姆登 "區(qū)和 "英國(guó) "之間的關(guān)系(虛線),盡管它們沒(méi)有直接聯(lián)系。
四、總結(jié)
回到我們的主題,什么時(shí)候使用圖數(shù)據(jù)庫(kù)呢?圖是為那些依賴復(fù)雜和相互連接的數(shù)據(jù)應(yīng)用而準(zhǔn)備。正如我們所看到的,他們?nèi)狈V泛的應(yīng)用,這也是圖數(shù)據(jù)庫(kù)失敗的原因和面臨的挑戰(zhàn)。為了面對(duì)挑戰(zhàn)并實(shí)現(xiàn)圖形數(shù)據(jù)庫(kù)的最初承諾,我們建立了TypeDB。
文章內(nèi)容僅供閱讀,不構(gòu)成投資建議,請(qǐng)謹(jǐn)慎對(duì)待。投資者據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。
2024年的Adobe MAX 2024發(fā)布會(huì)上,Adobe推出了最新版本的Adobe Creative Cloud。
奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。
“以前都要去窗口辦,一套流程下來(lái)都要半個(gè)月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關(guān)材料,僅幾秒鐘,重慶市民曾某的賬戶就打進(jìn)了21600元。
華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準(zhǔn)的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來(lái)實(shí)質(zhì)性的幫助,雙十一期間低至2799元,性價(jià)比很高,簡(jiǎn)直是創(chuàng)作者們的首選。
9月14日,2024全球工業(yè)互聯(lián)網(wǎng)大會(huì)——工業(yè)互聯(lián)網(wǎng)標(biāo)識(shí)解析專題論壇在沈陽(yáng)成功舉辦。