内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯

這篇文章給大家介紹大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)的客戶來自各行各業(yè),為了共同目標,我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計、成都做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。

如何基于GES圖數(shù)據(jù)庫追溯服務(wù)的實現(xiàn)和優(yōu)化。

“一分鐘,我要這個人的全部信息”,霸道總裁拍了拍你,并提出這個要求。秘書開始發(fā)力,找到了:姓名、年齡、聯(lián)系方式、愛好,這些信息。不太夠?那就再加上親朋好友信息,近期活動信息,更完整展現(xiàn)這個人。雖然是個段子,但也給與我們一些啟示:對象本身的信息可能不夠“全”,周邊關(guān)聯(lián)的數(shù)據(jù)也是對象信息的重要組成,這些關(guān)聯(lián)數(shù)據(jù)對在進行數(shù)據(jù)分析和挖掘時十分有用。

現(xiàn)實生活中關(guān)聯(lián)關(guān)系十分普遍,比如人的社交、商品生產(chǎn)和消費行為之間都是關(guān)聯(lián)關(guān)系。數(shù)據(jù)分析時,為了更好的利用關(guān)聯(lián)關(guān)系,常使用圖作為數(shù)據(jù)結(jié)構(gòu),使用圖結(jié)構(gòu)保存數(shù)據(jù)的數(shù)據(jù)庫被稱為圖數(shù)據(jù)庫。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,以表格視角對數(shù)據(jù)進行呈現(xiàn),可以方便的對數(shù)據(jù)進行查詢管理,而圖數(shù)據(jù)庫更關(guān)注節(jié)點和周邊節(jié)點的聯(lián)系,是一種網(wǎng)狀結(jié)構(gòu),適用于追溯分析、社交網(wǎng)絡(luò)分析、異構(gòu)信息挖掘等等應(yīng)用。華為云提供的圖數(shù)據(jù)庫服務(wù)就是GES(Graph Engine Service)[1]。

基于圖數(shù)據(jù)庫可以做很多有趣的應(yīng)用,數(shù)據(jù)追溯就是一個很常見的應(yīng)用。數(shù)據(jù)追溯,就是把各環(huán)節(jié)產(chǎn)生的數(shù)據(jù)進行關(guān)聯(lián)與溯源。疫情中,查看商品的流通過程,檢查商品是否有可能有接觸傳染源。測試活動中,通過構(gòu)建測試過程網(wǎng)絡(luò),分析測試活動的完備性,用于進行質(zhì)量評估。這些都是追溯的典型使用場景。若以傳統(tǒng)關(guān)系型數(shù)據(jù)庫構(gòu)建數(shù)據(jù)追溯,需要獨立構(gòu)造和維護多個關(guān)系表,并實現(xiàn)多對多的關(guān)系網(wǎng)絡(luò),不易于理解復(fù)雜的業(yè)務(wù)邏輯,與此同時,也會伴隨著追溯查詢實現(xiàn)復(fù)雜和查詢緩慢的問題。

大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯

圖1 關(guān)系型數(shù)據(jù)庫和圖數(shù)據(jù)庫對比

用一個例子簡單說明圖數(shù)據(jù)庫在數(shù)據(jù)分析領(lǐng)域的優(yōu)勢。圖1是一個簡單的選課系統(tǒng),記錄了學(xué)生選課以及相應(yīng)的課程信息。如右圖所示,我們根據(jù)圖數(shù)據(jù)庫的表達方式把這些信息轉(zhuǎn)化為一張圖??梢钥闯?,圖可以更加直觀地表達選課和班級等關(guān)系,清楚地呈現(xiàn)實體之間的關(guān)系,更方便進行關(guān)聯(lián)分析。比如,根據(jù)圖我們可以很容易找到和小布一起上數(shù)學(xué)課的同學(xué),也可以快速找到選課興趣相同的同學(xué)。通過圖數(shù)據(jù)庫可以很方便查詢到周邊節(jié)點信息,非常適用于追溯實現(xiàn)。那如何基于圖數(shù)據(jù)庫如何實現(xiàn)追溯服務(wù)?接下來我們將以華為云GES為例,分析基于GES圖數(shù)據(jù)庫追溯服務(wù)的實現(xiàn)和優(yōu)化。

什么是圖

在圖數(shù)據(jù)庫中,圖由以下部分組成:

  1. 點:圖中的實體對象,在圖中表現(xiàn)為一個節(jié)點。例如,社會的人,流通的商品等都可以抽象為圖中的一個節(jié)點。

  2. 邊:圖中節(jié)點與節(jié)點之間的關(guān)系。如人與人的社會關(guān)系,商品的購買行為等。

  3. 屬性:用于描述圖中節(jié)點或者邊的屬性,比如編號、名稱等。聚類和分類分析中,權(quán)重是常常作為關(guān)系屬性,也就是邊的屬性。

大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯

圖2 有向圖與無向圖

根據(jù)邊是否有方向,可以把圖分為有向圖和無向圖。對于有向圖來說,邊的起點和終點是確定的。圖2中,城市是一個節(jié)點,城市間的距離和城市之間交通方式為邊。城市交通就是一個有向圖,不同方向交通方式用不同的邊表示,而城市間距離是無向圖,因為距離和方向無關(guān)。GES使用時,需要將點和邊處理成不同的對象,點邊都需要定義需要的屬性。點主要就是包含實體的信息,而邊需要指定起點與終點。

定義GES圖

GES建立圖的步驟可以參考官方文檔[1]。主要就是對節(jié)點和邊進行定義,將數(shù)據(jù)處理為點和邊文件,最后導(dǎo)入GES中,可通過界面或API導(dǎo)入。處理無向圖時,即不區(qū)分邊的起點和終點,通常也會設(shè)定一個默認方向,即指定邊的起點和終點,這是為了處理和導(dǎo)入數(shù)據(jù)方便,在實際查詢中可以忽略這種方向設(shè)定。

在GES構(gòu)建圖的過程中,定義點和邊以及相關(guān)屬性的文件被稱為元數(shù)據(jù)。點和邊的類型被稱為label,每個label可具有多個屬性,如上文提到的名稱、權(quán)重等,都可以作為點或邊的屬性。在GES中,label一旦定義并創(chuàng)建成功將不被允許修改,如果必須要修改label定義,就需要格式化圖并重新創(chuàng)建導(dǎo)入元數(shù)據(jù)文件到圖中。

節(jié)點通常是由現(xiàn)實中的實體抽象而來,GES節(jié)點屬性常用的數(shù)據(jù)結(jié)構(gòu)包含了float、int、double、long、char、char array、date、bool、enum和string等。通常來說節(jié)點中,字符串類型的屬性較多,非字符串屬性可以根據(jù)數(shù)據(jù)類型進行選擇。字符串類型有兩個選擇:string和char array。char array有數(shù)據(jù)長度限制,通常為256,而string類型沒有長度限制。但是在GES中使用char array更有優(yōu)勢,這是因為char array數(shù)據(jù)存放在內(nèi)存中,string類型數(shù)據(jù)存放在硬盤中,因此char array查詢效率更高,這也是GES元數(shù)據(jù)定義需要注意的地方。在我們項目的場景中,節(jié)點的名稱和編號都是常用的查詢條件,綜合考慮屬性特征,如節(jié)點名稱較長而節(jié)點編號較短,最終名稱使用了string類型,而編號選擇了char array類型。

GES查詢優(yōu)化

定義好節(jié)點信息后,可以在圖中進行查詢。GES使用的是Gremlin[3]進行查詢。Gremlin是一個開源的流式查詢語言,查詢實現(xiàn)靈活,不同圖數(shù)據(jù)庫對查詢語句的分解以及優(yōu)化處理都不相同,因此,不同的寫法可能查詢效率可能不同。接下來我們就一種追溯查詢場景進行分析。

大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯

圖4 多分支查詢場景分析

如圖4所示,字母代表label,也就是一種節(jié)點類型。可以看到該場景具有較多查詢分支,按照圖中的節(jié)點要求,Gremlin查詢語句直接實現(xiàn)如下:

g.V(id).hasLabel('A').ouE().otherV().hasLabel('B').ouE().otherV().hasLabel('C').as('c').outE().otherV().hasLabel('F').outE().otherV().hasLabel('H').select('c').outE().otherV().hasLabel('D').as('d').outE().otherV().hasLabel('G').select('d').outE().otherV().hasLabel('H')

基于當前Gremlin,GES Gremlin server會將查詢分解為多個查詢原子操作,并由GES engine·執(zhí)行。對于這種多跳的復(fù)雜查詢,會解析為較多的原子操作并頻繁交互,這會導(dǎo)致的查詢效率低下。對于這種場景,考慮使用optional語句進行查詢,效率會得到提升。查詢語句如下:

g.V(id).hasLabel('A').ouE().otherV().hasLabel('B').ouE().otherV().hasLabel('C').as('c').optional(outE().otherV().hasLabel('F').outE().otherV().hasLabel('H')).optional(select('c').outE().otherV().hasLabel('D').as('d').optional(outE().otherV().hasLabel('G')).optional(select('d').outE().otherV().hasLabel('H')))

optional在一定程度上可以降低分支的查詢范圍,從而提升查詢效率。在項目實際使用中,使用optional可以提升查詢性能1倍左右。但是optional不是所有場景都適用,Gremlin實現(xiàn)需要根據(jù)查詢場景、數(shù)據(jù)規(guī)模和數(shù)據(jù)特點進行優(yōu)化處理,例如圖中節(jié)點的稀疏程度和分支的數(shù)量都是可以考慮優(yōu)化的點。

在對GES查詢優(yōu)化時,即使對Gremlin語句進行了優(yōu)化,也有可能達不到期望的查詢性能。這是因為使用Gremlin時,處理查詢過程中Gremlin server解析后的原子操作可能會和GES engine頻繁交互,反而會降低查詢性能,而且針對Gremlin查詢優(yōu)化處理范圍也有限。雖然Gremlin是圖數(shù)據(jù)庫通用的查詢腳本定義方式,但是各個廠家對于Gremlin腳本優(yōu)化處理不同,因此更推薦使用GES原生API。原生API針對固定場景做了更多的優(yōu)化,并且減少了Gremlin解析處理過程,因此性能更優(yōu),但同時也引入了通用性和效率之間的平衡問題,畢竟API沒有通用的定義實現(xiàn)。

下面我們將介紹幾種常見的追溯查詢場景。這些場景都可以通過Gremlin查詢實現(xiàn),但是如果通過使用GES系統(tǒng)API,可以獲取更好的查詢性能。

  • 場景(1) 追溯某個節(jié)點前(后)n層節(jié)點

該查詢較為常見,主要用于查詢某個節(jié)點的父子節(jié)點,對于圖1 的場景可以找到班級的所有同學(xué),該場景Gremlin實現(xiàn)如下:

g.V(id).repeat(out()).times(n).emit().path()

這種場景下,推薦使用GES算法文檔中的k-hop算法解決該問題,需要注意,這個算法接口只會返回滿足查詢條件的子圖中的所有點,但沒有節(jié)點詳情和邊信息,如果需要節(jié)點詳情可以采用batch-query批量進行節(jié)點詳情查詢。如果需要邊信息,推薦場景(2) 使用的API。

  • 場景(2) 按條件追溯某個節(jié)點之前(后)n層節(jié)點,節(jié)點篩選條件相同

g.V(id).repeat(outE().otherV().hasLabel('A')).times(n).emit().path()

這種場景下,推薦使用repeat-query方法。該方法可以快速實現(xiàn)某個起點前后n跳查詢,并且可以限定節(jié)點查詢條件,并且所有點的查詢過濾條件相同。在查詢中,如果不同的點需要使用不同的查詢條件進行過濾,可以先不指定點查詢條件,待返回查詢結(jié)果后再進行過濾。不指定點的查詢場景可以退化為場景(1),并且該API可以同時返回節(jié)點和邊的詳情。

  • 場景(3) 按條件追溯某個節(jié)點之前(后)n層節(jié)點,不同節(jié)點篩選條件不同

圖4的例子就是一個這樣的場景,每層的查詢label不同。這種情況下,推薦使用filtered-query進行查詢,該方法需要詳細指定每個節(jié)點的過濾屬性,相當于將每個查詢條件都在參數(shù)中一一指定,實現(xiàn)完全滿足條件的查詢。項目中,相對于Gremlin 查詢,filtered-query的查詢性能可以提升10倍左右。

上述三個場景中repeat-query和k-hop具有更好的泛化能力,可以隨意指定查詢跳數(shù)n,需要設(shè)定的參數(shù)簡單。而filtered-query需要詳細指定查詢中每層節(jié)點的屬性,參數(shù)較為復(fù)雜,具體使用中可以根據(jù)業(yè)務(wù)需求進行選擇。

GES還提供了很多算法,如Node2vec, subgraph3vec,GCN算法,本文只介紹了基于GES進行節(jié)點快速查詢并提供追溯服務(wù),后續(xù)也會考慮如何基于建立好的圖,進行一些數(shù)據(jù)節(jié)點融合,也可以進行相似度分析、質(zhì)量評估和流程推薦等,更好地挖掘數(shù)據(jù)的價值。

關(guān)于大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當前題目:大數(shù)據(jù)中如何實現(xiàn)數(shù)據(jù)的高效追溯
標題鏈接:http://m.rwnh.cn/article10/ipjjgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管品牌網(wǎng)站設(shè)計、云服務(wù)器面包屑導(dǎo)航、網(wǎng)站營銷虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
阳城县| 漳州市| 盈江县| 庆阳市| 榆树市| 容城县| 桦甸市| 扎兰屯市| 靖西县| 浪卡子县| 手游| 天津市| 兴海县| 元阳县| 顺平县| 遂昌县| 永顺县| 浦江县| 乳山市| 乐陵市| 榕江县| 洪江市| 罗定市| 喜德县| 玉林市| 宝应县| 日喀则市| 长宁区| 淅川县| 武宣县| 淄博市| 棋牌| 安顺市| 顺平县| 翁源县| 合川市| 郁南县| 进贤县| 靖边县| 贵港市| 凌云县|