本申請涉及圖處理技術(shù)領(lǐng)域,尤其涉及一種圖數(shù)據(jù)處理方法、裝置和系統(tǒng)。
背景技術(shù):
目前業(yè)界內(nèi)針對圖計(jì)算的產(chǎn)品和解決方案有很多,但是絕大部分都停留在對靜態(tài)圖數(shù)據(jù)的分析,或者單一圖數(shù)據(jù)的更新和處理方面;缺少一種完整的圖的實(shí)時(shí)更新和實(shí)時(shí)分析的解決方案。
在傳統(tǒng)的數(shù)據(jù)庫領(lǐng)域:OLTP(On-Line Transaction Processing,聯(lián)機(jī)事務(wù)處理)和OLAP(On-Line analytical processing,聯(lián)機(jī)分析處理)通常是分離的,由于數(shù)據(jù)的產(chǎn)生比較緩慢、針對數(shù)據(jù)的分析需要花費(fèi)較多的資源,所有對數(shù)據(jù)的處理時(shí)延方面往往只能夠等待一天以上輸出分析結(jié)果。而且數(shù)據(jù)模型本身的關(guān)系模型可以通過關(guān)系數(shù)據(jù)庫設(shè)計(jì)思路,在分析階段才關(guān)注數(shù)據(jù)的依賴型。
而在圖數(shù)據(jù)領(lǐng)域,本身就是為了處理數(shù)據(jù)的依賴模型,即數(shù)據(jù)天生就是存在強(qiáng)關(guān)系的;G=(V,E),一個(gè)Graph(圖)包含Vertex(頂點(diǎn))和Edge(邊)兩類基本模型,頂點(diǎn)之間通過邊作為關(guān)系物理的聯(lián)系在一起。而針對圖數(shù)據(jù)的實(shí)時(shí)更新和實(shí)時(shí)分析,在業(yè)務(wù)的場景下,要求數(shù)據(jù)更新就立刻對依賴關(guān)系產(chǎn)生影響,而產(chǎn)生的影響可以馬上觸發(fā)對應(yīng)的業(yè)務(wù)分析操作;從而延伸出圖實(shí)時(shí)更新、實(shí)時(shí)分析的業(yè)務(wù)需求。
對此:圖的實(shí)時(shí)更新,要求在自然圖領(lǐng)域具有關(guān)系的實(shí)體(頂點(diǎn))在發(fā)生關(guān)系時(shí),能夠及時(shí)的完成關(guān)系的更新操作;然后根據(jù)業(yè)務(wù)的場景,能夠快速完成圖的分析處理任務(wù)。
目前業(yè)界內(nèi)的多數(shù)圖數(shù)據(jù)庫系統(tǒng)、圖存儲和圖計(jì)算框架,大多都是借鑒MapReduce或者BSP的計(jì)算框架而在類似GFS或者HDFS這些分布式文件系統(tǒng)之上,構(gòu)建一套非實(shí)時(shí)的圖分析體系;支持的應(yīng)用場景很單一,數(shù)據(jù)依賴每日的全量數(shù)據(jù),啟動(dòng)多個(gè)任務(wù)(Job)并行分析,分析內(nèi)容往往在小時(shí)級以上的時(shí)間延遲。
另外一些圖數(shù)據(jù)庫系統(tǒng),更多只是解決傳統(tǒng)關(guān)系數(shù)據(jù)庫的設(shè)計(jì)理念,只是支持圖特性而已,雖然能夠比較快的支持圖更新,類似OLTP的特性,但是針對OLAP的特性基本沒有對應(yīng)的特性,更難以將兩類應(yīng)用特征提供融合的解決方案。
現(xiàn)有技術(shù)的缺點(diǎn):
由于關(guān)系數(shù)據(jù)庫發(fā)展了很多年,基本是根深蒂固對很多應(yīng)用場景來說;導(dǎo)致OLTP和OLAP的應(yīng)用場景往往是分離的,從而導(dǎo)致很多技術(shù)框架無法直接將兩者結(jié)合起來應(yīng)用。而近幾年的NOSQL(非關(guān)系型的數(shù)據(jù)庫)模式的興起,新型圖數(shù)據(jù)庫嘗試打破這種局面,但是由于該領(lǐng)域上屬于新型領(lǐng)域,尚沒有一個(gè)成熟的技術(shù)框架能夠完美的兼容兩種應(yīng)用場景。
技術(shù)實(shí)現(xiàn)要素:
本申請實(shí)施例提出了一種圖數(shù)據(jù)處理方法、裝置和系統(tǒng),利用一套系統(tǒng)兼容圖更新和圖分析處理,解決二者無法兼容的技術(shù)問題。
在一個(gè)方面,本申請實(shí)施例提供了一種圖數(shù)據(jù)處理方法,包括:
根據(jù)待處理請求的類型,將所述待處理請求寫入圖更新任務(wù)隊(duì)列或圖分析任務(wù)隊(duì)列,所述待處理的請求的類型包括圖更新請求和圖分析請求;
根據(jù)所述圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定所述各任務(wù)的運(yùn)行順序;
根據(jù)所述運(yùn)行順序運(yùn)行所述各任務(wù)。
在另一個(gè)方面,本申請實(shí)施例提供了一種圖數(shù)據(jù)處理裝置,包括:
更新任務(wù)隊(duì)列,用于寫入圖更新任務(wù);
圖分析任務(wù)隊(duì)列,用于寫入圖分析任務(wù);
調(diào)度器,用于根據(jù)所述圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定所述各任務(wù)的運(yùn)行順序,將當(dāng)前待運(yùn)行任務(wù)分配到對應(yīng)的計(jì)算資源運(yùn)行。
再一方面,本申請實(shí)施例提供了一種圖數(shù)據(jù)處理系統(tǒng),包括:
服務(wù)接口層,包括更新接口和分析接口,所述更新接口用于接收數(shù)據(jù)更新任務(wù)寫入更新任務(wù)隊(duì)列;所述分析接口用于接收數(shù)據(jù)分析任務(wù)寫入分析任務(wù)隊(duì)列;
任務(wù)調(diào)度層,包括圖更新任務(wù)隊(duì)列、圖分析任務(wù)隊(duì)列、調(diào)度器、圖計(jì)算引擎、圖存儲引擎,其中:
圖更新任務(wù)隊(duì)列,用于寫入圖更新任務(wù);
圖分析任務(wù)隊(duì)列,用于寫入圖分析任務(wù);
調(diào)度器,用于根據(jù)所述圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定所述各任務(wù)的運(yùn)行順序,將當(dāng)前待運(yùn)行任務(wù)分配到對應(yīng)的計(jì)算資源運(yùn)行;
圖計(jì)算引擎,用于進(jìn)行任務(wù)的圖更新操作和/或圖分析操作;
圖存儲引擎,用于存儲圖。
有益效果如下:
本申請實(shí)施例提出了一種圖數(shù)據(jù)處理方法、裝置和系統(tǒng),能夠分別接收圖更新請求和圖分析請求,將他們放入圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列,并將各個(gè)任務(wù)進(jìn)行管理,為其確定運(yùn)行順序,從而能夠利用一套系統(tǒng)兼容圖更新和圖分析處理,解決了目前圖更新和圖分析處理應(yīng)用場景分離的情況,能夠使得圖分析不再存在數(shù)據(jù)依賴每日的全量數(shù)據(jù),分析內(nèi)容往往在小時(shí)級以上的時(shí)間延遲的情況。
附圖說明
下面將參照附圖描述本申請的具體實(shí)施例,其中:
圖1示出了本申請實(shí)施例中圖數(shù)據(jù)處理方法的流程示意圖;
圖2示出了實(shí)施例一中的圖數(shù)據(jù)處理方法的流程示意圖;
圖3示出了實(shí)施例二中的圖數(shù)據(jù)處理方法的流程示意圖;
圖4示出了實(shí)施例二中兩個(gè)接口的內(nèi)部抽象實(shí)現(xiàn)分解示意圖;
圖5示出了實(shí)施例三中進(jìn)行圖存儲時(shí)的流程示意圖;
圖6示出了本申請實(shí)施例中圖數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖7示出了本申請實(shí)施例中一個(gè)實(shí)例的圖數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖8示出了本申請實(shí)施例中一個(gè)實(shí)例的圖數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖9示出了本申請實(shí)施例中圖數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖10示出了本申請實(shí)施例中一個(gè)實(shí)例的圖數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本申請的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對本申請的示例性實(shí)施例進(jìn)行進(jìn)一步詳細(xì)的說明,顯然,所描述的實(shí)施例僅是本申請的一部分實(shí)施例,而不是所有實(shí)施例的窮舉。并且在不沖突的情況下,本說明中的實(shí)施例及實(shí)施例中的特征可以互相結(jié)合。
發(fā)明人發(fā)現(xiàn),在目前對圖業(yè)務(wù)的數(shù)據(jù)存儲和計(jì)算需求很大,比如網(wǎng)購平臺的交易、購物、轉(zhuǎn)賬等,每秒都在萬級以上;每天的數(shù)超過了億記錄。數(shù)據(jù)的實(shí)時(shí)寫入、更新非常頻繁,數(shù)據(jù)寫入后,需要快速的更新到圖數(shù)據(jù)模型中。基于圖的業(yè)務(wù)場景:交易風(fēng)險(xiǎn)識別、精準(zhǔn)推薦服務(wù),要求能夠快速的對增量的圖數(shù)據(jù)進(jìn)行全量分析計(jì)算,輸出計(jì)算結(jié)果,圖的更新和寫入快速的更新到圖的存儲引擎中,圖的分析計(jì)算能夠盡可能的覆蓋到最新的數(shù)據(jù),分析所依賴的數(shù)據(jù)快照跟最新的數(shù)據(jù)更新之間容忍秒級延遲?;趯@些實(shí)際需求的考慮,本申請實(shí)施例提出了一種圖數(shù)據(jù)處理方法、裝置和系統(tǒng),下面進(jìn)行說明。
圖更新是指外部的業(yè)務(wù)應(yīng)用發(fā)送指令更新圖中的頂點(diǎn)屬性、增加新的頂點(diǎn)、或者建立新的頂點(diǎn)A到頂點(diǎn)B直接的邊,修改邊的屬性等。
圖分析是指在業(yè)務(wù)的分析指令下,對特定的子圖、全圖進(jìn)行分析計(jì)算,分析過程通過對圖的遍歷、統(tǒng)計(jì)、過濾特定頂點(diǎn)、邊的屬性的查詢只讀類操作。
圖1示出了本申請實(shí)施例中的圖數(shù)據(jù)處理方法,如圖所示,包括:
步驟101,根據(jù)待處理請求的類型,將待處理請求寫入圖更新任務(wù)隊(duì)列或圖分析任務(wù)隊(duì)列,待處理的請求的類型包括圖更新請求和圖分析請求;
步驟102,根據(jù)圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定各任務(wù)的運(yùn)行順序;
步驟103,根據(jù)運(yùn)行順序運(yùn)行各任務(wù)。
有益效果:本申請實(shí)施例中的圖更新和圖分析處理方法能夠分別接收圖更新請求和圖分析請求,將他們放入圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列,并將各個(gè)任務(wù)進(jìn)行管理,為其確定運(yùn)行順序,從而能夠利用一套系統(tǒng)兼容圖更新和圖分析處理,解決了目前圖更新和圖分析處理應(yīng)用場景分離的情況,能夠使得圖分析不再存在數(shù)據(jù)依賴每日的全量數(shù)據(jù),分析內(nèi)容往往在小時(shí)級以上的時(shí)間延遲的情況。
進(jìn)一步地,為了提升處理效率,還可以按以下方式實(shí)施。
實(shí)施中,確定各任務(wù)的運(yùn)行順序之后,根據(jù)讀寫鎖的狀態(tài)確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù);
讀寫鎖的狀態(tài)在任務(wù)運(yùn)行時(shí)被修改為已占用,在任務(wù)運(yùn)行結(jié)束或暫停時(shí)被修改為未占用。
根據(jù)讀寫鎖的狀態(tài)確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù)的方法可以包括以下任意一個(gè)或組合:
在讀寫鎖的狀態(tài)為未占用時(shí),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù);
在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為純讀圖分析任務(wù),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù);
在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為非純讀圖分析任務(wù)或圖更新任務(wù),暫停第一順位任務(wù),待下一個(gè)周期,重新判斷讀寫鎖的狀態(tài)。
有益效果:
實(shí)施中,增加讀寫鎖,根據(jù)讀寫鎖的狀態(tài)來確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù)。這樣,可以在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為純讀圖分析任務(wù),仍然確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù),從而可以使得任務(wù)并行,提升處理效率。
此外,實(shí)施中還可以確定各任務(wù)的運(yùn)行順序之后,判斷第一順位任務(wù)是否為對時(shí)間和/或資源消耗大于設(shè)定閾值的圖分析任務(wù),若是,則將第一順位任務(wù)拆分為多個(gè)任務(wù),間隔運(yùn)行多個(gè)任務(wù),待多個(gè)任務(wù)運(yùn)行結(jié)束,合并圖分析結(jié)果,完成第一順位任務(wù)。
也可以在運(yùn)行任務(wù)之后,監(jiān)測任務(wù)是否運(yùn)行超時(shí),若是,暫停任務(wù),待下一個(gè)周期,重新啟動(dòng)任務(wù)。
有益效果:通過上述兩種方式,對圖分析任務(wù)進(jìn)行拆分,以及監(jiān)測任務(wù)是否運(yùn)行超時(shí),在超時(shí)是進(jìn)入等待,可以避免一個(gè)任務(wù)占據(jù)太長時(shí)間和/或太多資源,從而使得任務(wù)的進(jìn)行更加合理,特別是在圖分析任務(wù)為對時(shí)間和/或資源消耗較大時(shí),可以保障圖更新任務(wù)進(jìn)行得更有效率。
進(jìn)一步地,在運(yùn)行圖更新任務(wù)之后,可以將內(nèi)存映射對象同時(shí)存儲到緩存區(qū)和磁盤;
在運(yùn)行圖分析任務(wù)時(shí),從緩存區(qū)獲取數(shù)據(jù);
若圖分析任務(wù)涉及的數(shù)據(jù)不在緩存區(qū),從磁盤獲取數(shù)據(jù)。
由于磁盤數(shù)據(jù)是冷數(shù)據(jù),從緩存區(qū)獲取數(shù)據(jù)更有效率,且緩存區(qū)的數(shù)據(jù)是最近更新的數(shù)據(jù),更能夠反映最近的圖更新情況,某一些應(yīng)用場景在使用緩存區(qū)數(shù)據(jù)時(shí),效率能夠得到很大的提升。
進(jìn)一步地,在進(jìn)行圖存儲時(shí)可以包括:
根據(jù)圖的數(shù)據(jù)特征確定圖為稀疏圖或稠密圖;
根據(jù)圖的計(jì)算特征確定圖為頂點(diǎn)為主或邊為主;
根據(jù)圖的數(shù)據(jù)特征和計(jì)算特征確定圖的分割算法,對圖的數(shù)據(jù)進(jìn)行分割存儲。
由于根據(jù)圖的數(shù)據(jù)特征和計(jì)算特征確定圖的分割算法,可以使得采用的圖的分割算法更加合理,增強(qiáng)數(shù)據(jù)存儲的合理性,使得整個(gè)方案更有效率。
為了便于本申請的實(shí)施,下面以實(shí)例進(jìn)行說明。
實(shí)施例一:
實(shí)施例一中的圖數(shù)據(jù)處理方法,如圖2所示,包括:
步驟201,監(jiān)聽是否接收到圖更新請求或圖分析請求,若是,進(jìn)行步驟202;否則返回步驟201;
通常在系統(tǒng)啟動(dòng),完成系統(tǒng)初始化后即可開始監(jiān)聽是否接收到圖更新請求或圖分析請求,在本步驟中不對具體開始監(jiān)聽的時(shí)間做限制。
本實(shí)施例的方法中只對接收到的圖更新請求或圖分析請求進(jìn)行后續(xù)處理。
步驟202,根據(jù)待處理請求的類型,將待處理請求寫入圖更新任務(wù)隊(duì)列或圖分析任務(wù)隊(duì)列;
即,將圖更新請求寫入圖更新任務(wù)隊(duì)列,將圖分析請求寫入圖分析任務(wù)隊(duì)列。
步驟203,根據(jù)圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定各任務(wù)的運(yùn)行順序;
第一特性包括以下任意一個(gè)或組合:時(shí)間戳、時(shí)效性、優(yōu)先級、數(shù)據(jù)依賴特征。例如,可以單獨(dú)根據(jù)兩個(gè)任務(wù)隊(duì)列中各任務(wù)的時(shí)間戳來確定各任務(wù)運(yùn)行順序,也就是先進(jìn)入兩個(gè)隊(duì)列的任務(wù)先處理;也可以綜合各個(gè)任務(wù)的時(shí)效性、優(yōu)先級、數(shù)據(jù)依賴特征來確定各任務(wù)運(yùn)行順序,具體的第一特性,可以根據(jù)實(shí)際需要來確定。
在本步驟中確定各任務(wù)的運(yùn)行順序之后,可以進(jìn)一步判斷第一順位任務(wù)是否為對時(shí)間和/或資源消耗大于設(shè)定閾值的圖分析任務(wù),若是,則將第一順位任 務(wù)拆分為多個(gè)任務(wù),間隔運(yùn)行多個(gè)任務(wù),待多個(gè)任務(wù)運(yùn)行結(jié)束,合并圖分析結(jié)果,完成第一順位任務(wù)。這樣處理可以避免一個(gè)任務(wù)占據(jù)太長時(shí)間和/或太多資源,從而使得任務(wù)的進(jìn)行更加合理,特別是在圖分析任務(wù)為對時(shí)間和/或資源消耗較大時(shí),可以保障圖更新任務(wù)進(jìn)行得更有效率。
步驟204,根據(jù)讀寫鎖的狀態(tài)確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù),若是,進(jìn)行步驟205,否則,暫停第一順位任務(wù),待下一個(gè)周期,返回步驟204;
采用讀寫鎖是根據(jù)本申請?jiān)谕粋€(gè)系統(tǒng)中處理圖更新任務(wù)和圖分析任務(wù)的情況,為保證更新任務(wù)和分析任務(wù)的事務(wù)最終一致性而引入的,引入讀寫鎖之后,可以并行完成一些互不影響的任務(wù),例如純讀分析任務(wù)和更新任務(wù),從而提升效率,在具體實(shí)現(xiàn)時(shí),也可以不采用讀寫鎖,在這種情況下,為保證更新任務(wù)和分析任務(wù)的事務(wù)最終一致性則不允許并行任務(wù),僅在確定任務(wù)完成之后進(jìn)行下一個(gè)任務(wù)。讀寫鎖的狀態(tài)在任務(wù)運(yùn)行時(shí)被修改為已占用,在任務(wù)運(yùn)行結(jié)束或暫停時(shí)被修改為未占用。本步驟可以理解為,根據(jù)讀寫鎖的狀態(tài)判斷第一順位任務(wù)是否被允許運(yùn)行。
本步驟的具體操作可以包括以下任意一個(gè)或組合:
在讀寫鎖的狀態(tài)為未占用時(shí),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù);
在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為純讀圖分析任務(wù),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù);
在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為非純讀圖分析任務(wù)或圖更新任務(wù),暫停第一順位任務(wù),待下一個(gè)周期,重新判斷讀寫鎖的狀態(tài)。
其中,在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為純讀圖分析任務(wù),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù),這樣可以在當(dāng)前運(yùn)行任務(wù)為純讀圖分析任務(wù)時(shí),并行其他任務(wù),提升處理效率。
在實(shí)際實(shí)現(xiàn)中,也可以不選擇這樣處理,在讀寫鎖的狀態(tài)為已占用時(shí),就暫停第一順位任務(wù),待下一個(gè)周期,重新判斷讀寫鎖的狀態(tài),也就是說,采用這種方案,則不允許并行任務(wù)。
步驟205,根據(jù)當(dāng)前待運(yùn)行任務(wù)涉及數(shù)據(jù)的分布式分區(qū)信息,將當(dāng)前待運(yùn)行任務(wù)分配到對應(yīng)的計(jì)算資源運(yùn)行。
業(yè)界內(nèi)圖的存儲和計(jì)算分為單點(diǎn)和分布式兩種模式;單點(diǎn)圖是所有的圖的存儲在單一計(jì)算機(jī)上,圖的計(jì)算也集中在單一計(jì)算節(jié)點(diǎn)上;分布式圖模型,針對的是圖的存儲為分布在多臺機(jī)器上的,由于圖的量大,物理的不能夠在單一機(jī)器存儲,同時(shí)圖的計(jì)算也是分布式的在多臺機(jī)器上并行執(zhí)行的。本實(shí)施例以分布式為例進(jìn)行說明,因此需要根據(jù)當(dāng)前待運(yùn)行任務(wù)涉及數(shù)據(jù)的分布式分區(qū)信息,將當(dāng)前待運(yùn)行任務(wù)分配到對應(yīng)的計(jì)算資源運(yùn)行,在實(shí)際實(shí)現(xiàn)中,也可以采用單點(diǎn)圖,則可直接運(yùn)行待運(yùn)行任務(wù)。
在運(yùn)行任務(wù)之后,可以監(jiān)測任務(wù)是否運(yùn)行超時(shí),若是,暫停任務(wù),待下一個(gè)周期,重新啟動(dòng)任務(wù)。這樣處理可以避免一個(gè)任務(wù)占據(jù)太長時(shí)間和/或太多資源,從而使得任務(wù)的進(jìn)行更加合理,特別是在圖分析任務(wù)為對時(shí)間和/或資源消耗較大時(shí),可以保障圖更新任務(wù)進(jìn)行得更有效率。
實(shí)施例二:
實(shí)施例二中的圖數(shù)據(jù)處理方法,如圖3所示,包括:
步驟301,監(jiān)聽是否接收到圖更新請求或圖分析請求,若是,進(jìn)行步驟302;否則返回步驟301;
步驟302,根據(jù)待處理請求的類型,將待處理請求寫入圖更新任務(wù)隊(duì)列或圖分析任務(wù)隊(duì)列;
步驟303,根據(jù)圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定各任務(wù)的運(yùn)行順序;
步驟304,根據(jù)讀寫鎖的狀態(tài)確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù),若是,進(jìn)行步驟305,否則,暫停第一順位任務(wù),待下一個(gè)周期,返回步驟304;
步驟305,判斷第一順位任務(wù)是否圖更新任務(wù),若是,進(jìn)行步驟306,否則,進(jìn)行步驟307;
由于本流程僅處理圖更新請求和圖分析請求,因此,本步驟中判斷出不是 圖更新的情況說明該任務(wù)是圖分析任務(wù)。
步驟306,運(yùn)行圖更新任務(wù),并將內(nèi)存映射對象同時(shí)存儲到緩存區(qū)和磁盤;
在實(shí)現(xiàn)時(shí),將內(nèi)存映射對象存儲到緩存區(qū)時(shí)可以直接存儲Delta(增量)更新對象,也可以對內(nèi)存映射對象進(jìn)行處理,分為Delta更新對象以及熱點(diǎn)對象。具體的熱點(diǎn)對象可以根據(jù)現(xiàn)有的規(guī)則生成,例如在一小時(shí)內(nèi)操作次數(shù)超過100次的Delta更新對象被認(rèn)為是熱點(diǎn)對象,本申請中對熱點(diǎn)對象的具體生成不做具體限定,在生成熱點(diǎn)對象后,圖分析任務(wù)可以針對熱點(diǎn)對象進(jìn)行。
步驟307,從緩存區(qū)獲取數(shù)據(jù)運(yùn)行圖分析任務(wù);
步驟308,若圖分析任務(wù)涉及的數(shù)據(jù)不在緩存區(qū),從磁盤獲取數(shù)據(jù)。
在具體實(shí)施時(shí),圖數(shù)據(jù)庫系統(tǒng)中的圖計(jì)算引擎中包含兩類特征的計(jì)算操作:更新操作、分析操作,該兩類操作以BSP并行任務(wù)特征異步共享內(nèi)存模型為技術(shù)參考,結(jié)合圖結(jié)構(gòu)數(shù)據(jù)運(yùn)算的特征,抽象公用計(jì)算接口如下:
圖更新接口定義:UpdateResult updateGraph(GraphData)
圖分析接口定義:StatsResult statsGraph(StatsParam)
針對該兩個(gè)接口的內(nèi)部抽象實(shí)現(xiàn)分解如圖4所示:
a)updateGraph的內(nèi)部步驟如下:
a1)查詢準(zhǔn)備更新的頂點(diǎn)gatherReadyUpdateVertex()
a2)更新圖的頂點(diǎn)信息applyUpdateGraph()
a3)將頂點(diǎn)更新信息傳達(dá)到每個(gè)相鄰頂點(diǎn)scatterUpdateVertexs()
a4)將更新頂點(diǎn)的狀態(tài)匯總到緩存區(qū)的更新成功隊(duì)列中,該步驟為異步消息機(jī)制處理,該步驟不會影響前面步驟的處理耗時(shí)summaryUpdateResult()。
b)statsGraph的內(nèi)部步驟如下:
b1)搜集準(zhǔn)備分析的源頂點(diǎn)信息gatherReadyStatsSourceVertex()
本步驟可從緩存區(qū)的更新成功隊(duì)列中搜集準(zhǔn)備分析的源頂點(diǎn)信息
b2)執(zhí)行分析任務(wù)applyStatsGraph()
b3)合并分析統(tǒng)計(jì)任務(wù)結(jié)果summaryStatsSourceVertexs()
本實(shí)施例中的圖計(jì)算框架分為幾個(gè)階段:
搜集、實(shí)施、發(fā)散[匯總]Gather,Apply,Scatter[Summary]
本實(shí)施例中增加匯總(summary)步驟,該步驟在更新任務(wù)中用于搜集更新操作的結(jié)果,并用于返回給更新隊(duì)列上下文中;針對分析任務(wù),用于匯總分析任務(wù)的結(jié)果;匯集信息以標(biāo)準(zhǔn)規(guī)則數(shù)據(jù)寫入計(jì)算框架的上下文(Context)中,供內(nèi)部計(jì)算框架使用。
本實(shí)施例的一個(gè)特征點(diǎn):針對更新圖接口updateGraph中的收集更新結(jié)果操作summaryUpdateResult將當(dāng)前實(shí)時(shí)更新的圖頂點(diǎn)數(shù)據(jù),根據(jù)規(guī)則可以自動(dòng)在任務(wù)完成后,將數(shù)據(jù)寫入到更新子圖緩存隊(duì)列中,在對應(yīng)的分析任務(wù),能夠自動(dòng)從該緩存隊(duì)列中獲取數(shù)據(jù),即自動(dòng)的在statsGraph接口的gatherReadyStatsSourceVertex中自動(dòng)完成。
實(shí)施例三
本申請中的圖存儲采用分布式圖存儲引擎,分布式圖存儲引擎作為支撐高效圖更新、圖分析的底層支撐引擎,負(fù)責(zé)解決兩大類問題:
一:有效的將稠密圖、稀疏圖進(jìn)行分布式存儲,而作為分布式圖的核心就是圖的分割(partitions);
對真實(shí)世界的圖結(jié)構(gòu),大致有兩類;第一類:圖的頂點(diǎn)(Vertex)具有少量的鄰接邊(Edge),即稀疏圖;第二類:少量的頂點(diǎn)(Vertex)具有大量的鄰接邊,即局部稠密圖(本申請中稱稠密圖)。
二:提供簡潔統(tǒng)一的訪問API(Application Programming Interface,應(yīng)用程序編程接口),供上層圖計(jì)算引擎調(diào)用。
關(guān)于第一類問題,在圖的分割設(shè)計(jì)領(lǐng)域有3類基本可參考的分割算法:
A1)平衡式邊切割:根據(jù)頂點(diǎn)的ID,進(jìn)行哈希(Hash)計(jì)算,根據(jù)機(jī)器個(gè)數(shù),將頂點(diǎn)唯一的分割到不同的機(jī)器上,然后根據(jù)邊冗余的存儲到不同的機(jī)器上;該算法為了保持圖計(jì)算的高效性,需要在不同機(jī)器上冗余對鄰接頂點(diǎn)和邊信息;所以任何對邊、頂點(diǎn)的更新,就會涉及比較多的網(wǎng)絡(luò)傳輸交互。
A2)平衡式頂點(diǎn)切割:根據(jù)邊的ID,進(jìn)行Hash計(jì)算,將邊唯一的劃分到不同的機(jī)器上,針對邊連接的頂點(diǎn),在不同機(jī)器上進(jìn)行冗余;由于邊的唯一性,所以只有對頂點(diǎn)的更新,才涉及較多的網(wǎng)絡(luò)傳輸交互。
A3)貪婪式頂點(diǎn)切割:是在A2算法的基礎(chǔ)上,針對任意一條邊E所連接的兩個(gè)頂點(diǎn)V(a),V(b),考慮預(yù)存儲該對應(yīng)頂點(diǎn)的機(jī)器的集合情況,比如a頂點(diǎn)所分配的機(jī)器集合為M(a),b頂點(diǎn)所分配的機(jī)器集合為M(b),會進(jìn)一步評估如下幾種情況后,再確定邊的分配原則:
如果M(a)跟M(b)具有交集,將E分配到交集的機(jī)器上。
如果M(a)跟M(b)沒有交集,但是都有內(nèi)容,并集不為空,則將E分配到M(a)和M(b)上的并集中分配邊最小的機(jī)器上。
如果M(a)已經(jīng)分配,但是M(b)沒有分配,則將E分配到M(a)上,反之亦然。
如果M(a)和M(b)沒有分配,則將E分配到負(fù)載最小的一臺機(jī)器上。
針對算法A3在設(shè)計(jì)上比較追求邊的臨近存儲,由于圖的算法較為負(fù)載,針對圖的存儲部分會相對消耗部分性能;但是針對圖的后續(xù)計(jì)算部分會顯著提升對應(yīng)的性能。
本實(shí)施例針對本申請?jiān)谶M(jìn)行圖存儲時(shí)的優(yōu)化,會根據(jù)圖的數(shù)據(jù)特征、計(jì)算特征特征,綜合上述的集中算法,具體如圖5所示,包括如下步驟:
步驟501,根據(jù)圖的數(shù)據(jù)特征確定圖為稀疏圖或稠密圖;
步驟502,根據(jù)圖的計(jì)算特征確定圖為頂點(diǎn)為主或邊為主;
步驟503,根據(jù)圖的數(shù)據(jù)特征和計(jì)算特征確定圖的分割算法,對圖的數(shù)據(jù)進(jìn)行分割存儲。
具體的算法可以是邊分割、點(diǎn)分割、優(yōu)化點(diǎn)分割等。
由于根據(jù)圖的數(shù)據(jù)特征和計(jì)算特征確定圖的分割算法,可以使得采用的圖的分割算法更加合理,增強(qiáng)數(shù)據(jù)存儲的合理性,使得整個(gè)方案更有效率。
關(guān)于第二類問題,針對圖存儲的API,根據(jù)圖更新、圖分析的業(yè)務(wù)場景, 統(tǒng)一封裝對應(yīng)的接口API如下:
創(chuàng)建頂點(diǎn)Vertex createVertex(Key)
創(chuàng)建邊Edge createEdge(Key,SourceVertex,TargetVertex)
更新頂點(diǎn)Result updateVertex(Vertex,Property)
更新邊Result updateEdge(Vertex,Property)
查找頂點(diǎn)FindVertex(Key)
查找頂點(diǎn)的邊FindEdgesOfVertex(Key)
查詢指定標(biāo)簽的邊FindEdgesByLabel(Label)
批量場景頂點(diǎn)BulkCreateVertexs(List(Key))
批量創(chuàng)建邊BulkCreateEdges(Key,List<SourceVertex>,List<TargetVertex>)
查找鄰接頂點(diǎn)FindAdjacentVertxs(Vertex)
查找鄰接邊FindAdjacentEdges(Edge)
刪除頂點(diǎn)Boolean dropVertex(Vertex)
刪除邊Boolean dropEdge(Edge)
如此,提供了簡潔統(tǒng)一的訪問API,供上層圖計(jì)算引擎方便調(diào)用。
基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了一種圖數(shù)據(jù)處理裝置,由于這些設(shè)備解決問題的原理與一種圖數(shù)據(jù)處理方法相似,因此這些設(shè)備的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。
如圖6所示,裝置可以包括:
圖更新任務(wù)隊(duì)列601,用于寫入圖更新任務(wù);
圖分析任務(wù)隊(duì)列602,用于寫入圖分析任務(wù);
調(diào)度器603,用于根據(jù)圖更新任務(wù)隊(duì)列和圖分析任務(wù)隊(duì)列中各任務(wù)的第一特性確定各任務(wù)的運(yùn)行順序,將當(dāng)前待運(yùn)行任務(wù)分配到對應(yīng)的計(jì)算資源運(yùn)行。
在具體實(shí)現(xiàn)中,圖更新任務(wù)隊(duì)列601可負(fù)責(zé)維持更新任務(wù)的時(shí)效性以及冪等律控制;圖分析任務(wù)隊(duì)列602可維持分析任務(wù)的優(yōu)先級、時(shí)效性、失敗重試特征。
進(jìn)一步地,在應(yīng)用在分布式系統(tǒng)的時(shí)候,還要如圖7所示,包括分區(qū)識別器701,用于將當(dāng)前待運(yùn)行任務(wù)涉及數(shù)據(jù)的分布式分區(qū)信息提供給調(diào)度器603。在非分布式系統(tǒng)時(shí),則不需要包括分區(qū)識別器。
進(jìn)一步地,該裝置還可以如圖8所示,包括讀寫鎖模塊801,用于保存讀寫鎖的狀態(tài),讀寫鎖的狀態(tài)在任務(wù)運(yùn)行時(shí)被修改為已占用,在任務(wù)運(yùn)行結(jié)束或暫停時(shí)被修改為未占用;
調(diào)度器603在確定各任務(wù)的運(yùn)行順序之后,根據(jù)讀寫鎖的狀態(tài)確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù);
進(jìn)一步地,調(diào)度器603根據(jù)讀寫鎖的狀態(tài)確定第一順位任務(wù)是否為當(dāng)前待運(yùn)行任務(wù)包括以下任意一個(gè)或組合:
在讀寫鎖的狀態(tài)為未占用時(shí),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù);
在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為純讀圖分析任務(wù),確定第一順位任務(wù)為當(dāng)前待運(yùn)行任務(wù);
在讀寫鎖的狀態(tài)為已占用時(shí),若當(dāng)前運(yùn)行任務(wù)為非純讀圖分析任務(wù)或圖更新任務(wù),暫停第一順位任務(wù),待下一個(gè)周期,重新判斷讀寫鎖的狀態(tài)。
進(jìn)一步地,調(diào)度器603在確定各任務(wù)的運(yùn)行順序之后,還可以判斷第一順位任務(wù)是否為對時(shí)間和/或資源消耗大于設(shè)定閾值的圖分析任務(wù),若是,則將第一順位任務(wù)拆分為多個(gè)任務(wù),間隔運(yùn)行多個(gè)任務(wù),待多個(gè)任務(wù)運(yùn)行結(jié)束,合并圖分析結(jié)果,完成第一順位任務(wù)。
進(jìn)一步地,調(diào)度器603在運(yùn)行任務(wù)之后,還可以監(jiān)測任務(wù)是否運(yùn)行超時(shí),若是,暫停任務(wù),待下一個(gè)周期,重新啟動(dòng)任務(wù)。
讀寫鎖模塊801和分區(qū)識別器701可以分別單獨(dú)與圖6的模塊結(jié)合。
本申請實(shí)施例中還提供了一種圖數(shù)據(jù)處理系統(tǒng),如圖9所示,包括:
服務(wù)接口層,包括圖更新接口和圖分析接口,圖更新接口用于接收圖更新任務(wù)寫入圖更新任務(wù)隊(duì)列;圖分析接口用于接收圖分析任務(wù)寫入圖分析任務(wù)隊(duì)列;
任務(wù)調(diào)度層,包括上述圖數(shù)據(jù)處理裝置;
圖計(jì)算引擎,用于進(jìn)行任務(wù)的圖更新操作和/或圖分析操作;
圖存儲引擎,用于存儲圖。
在具體實(shí)現(xiàn)中,服務(wù)接口層中的更新接口屬于針對業(yè)務(wù)層次的接口,包含對應(yīng)的業(yè)務(wù)語義,基本的設(shè)計(jì)規(guī)則為:將業(yè)務(wù)的非圖的數(shù)據(jù)模型轉(zhuǎn)換為標(biāo)準(zhǔn)的圖數(shù)據(jù)模型,通過Vertex,Edge,Relationship,Property來標(biāo)準(zhǔn)化所有的接口規(guī)則。
服務(wù)接口層中的分析接口:接受業(yè)務(wù)驅(qū)動(dòng)的分析任務(wù),或者定時(shí)任務(wù),或者依賴更新數(shù)據(jù)對象的分析任務(wù);該類接口通常接受兩類規(guī)則:分析源、分析規(guī)則指標(biāo)。
進(jìn)一步地,圖存儲引擎包括緩存區(qū)和磁盤;
圖計(jì)算引擎在運(yùn)行圖更新任務(wù)之后,將內(nèi)存映射對象同時(shí)存儲到緩存區(qū)和磁盤,并且,在任務(wù)為圖分析任務(wù)時(shí),從緩存區(qū)獲取數(shù)據(jù),若圖分析任務(wù)涉及的數(shù)據(jù)不在緩存區(qū),從磁盤獲取數(shù)據(jù)。
進(jìn)一步地,圖存儲引擎將內(nèi)存映射對象存儲到緩存區(qū)時(shí),對內(nèi)存映射對象進(jìn)行處理,分為Delta更新對象以及熱點(diǎn)對象。
進(jìn)一步地,圖存儲引擎包括:
圖數(shù)據(jù)特征分析器,用于根據(jù)圖的數(shù)據(jù)特征確定圖為稀疏圖或稠密圖;
圖計(jì)算特征分析器,用于根據(jù)圖的計(jì)算特征確定圖為頂點(diǎn)為主或邊為主;
圖存儲分割管理器,用于根據(jù)圖的數(shù)據(jù)特征和計(jì)算特征確定圖的分割算法,對圖的數(shù)據(jù)進(jìn)行分割存儲。
進(jìn)一步地,該系統(tǒng)還可以如圖10所示,包括監(jiān)控核心,用于實(shí)時(shí)搜集圖計(jì)算引擎和圖存儲引擎的資源負(fù)載情況,實(shí)時(shí)將監(jiān)控信息轉(zhuǎn)換為可度量的圖計(jì)算調(diào)度評估因子,提供給任務(wù)調(diào)度層的調(diào)度器603;
調(diào)度器603,還根據(jù)圖計(jì)算調(diào)度評估因子評估調(diào)度任務(wù)分配。
在具體實(shí)現(xiàn)時(shí),圖計(jì)算調(diào)度評估因子可包括:
圖新增更新任務(wù)數(shù)、分析任務(wù)數(shù)【一分鐘內(nèi)】
在運(yùn)行圖更新任務(wù)、圖分析任務(wù)數(shù)
任務(wù)隊(duì)列中排隊(duì)的更新任務(wù)、分析任務(wù)數(shù)
圖的分區(qū)數(shù)、物理切割狀況
整體圖的節(jié)點(diǎn)、邊個(gè)數(shù)
當(dāng)前的系統(tǒng)讀、寫鎖狀況
存儲引擎中緩存的新增邊、頂點(diǎn)個(gè)數(shù)
存儲引擎中待合并的邊、頂點(diǎn)個(gè)數(shù)
存儲引擎中刪除、修改的邊、頂點(diǎn)數(shù)
存儲引擎中待分裂的子圖塊數(shù)
計(jì)算引擎的Memory(內(nèi)存)、IO開銷
存儲引擎的Memory Size(內(nèi)存大小),Cache Size(緩存大小),Disk file Size(磁盤文件大小)
調(diào)度器603根據(jù)圖計(jì)算調(diào)度評估因子可以更加有效的分配計(jì)算任務(wù),最大化單機(jī)內(nèi)的并行和多機(jī)圖服務(wù)間的并發(fā)性。
此外,該監(jiān)控核心還可以將計(jì)算調(diào)度評估因子提供給圖監(jiān)控展示系統(tǒng),將系統(tǒng)運(yùn)行的情況進(jìn)行展示。
為了描述的方便,以上所述裝置的各部分以功能分為各種模塊或單元分別描述。當(dāng)然,在實(shí)施本申請時(shí)可以把各模決或單元的功能在同一個(gè)或多個(gè)軟件或硬件中實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和 /或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本申請的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請范圍的所有變更和修改。