NebulaGraph在大規(guī)模數(shù)據(jù)量級(jí)下的實(shí)踐和定制化開發(fā)是怎么樣的-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Nebula Graph在大規(guī)模數(shù)據(jù)量級(jí)下的實(shí)踐和定制化開發(fā)是怎么樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為方正等服務(wù)建站,方正等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為方正企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

圖數(shù)據(jù)在社交推薦、多跳實(shí)時(shí)計(jì)算、風(fēng)控和安全等領(lǐng)域有可期待的前景。如何用圖數(shù)據(jù)庫高效存儲(chǔ)和查詢大規(guī)模異構(gòu)圖數(shù)據(jù),是一個(gè)重大挑戰(zhàn)。本文描述了開源分布式圖數(shù)據(jù)庫 Nebula Graph 實(shí)踐中遇到的問題,并通過深度定制,實(shí)現(xiàn):大數(shù)據(jù)集存儲(chǔ)、小時(shí)級(jí)全量導(dǎo)入、多版本控制、秒級(jí)回滾、毫秒級(jí)訪問等特性。

背景

為大眾所熟知的圖數(shù)據(jù)庫大多在大數(shù)據(jù)集合上束手無策,如:Neo4j 的社區(qū)版本,采用 Cypher語言,由單機(jī)單副本提供服務(wù),廣泛應(yīng)用于圖譜領(lǐng)域。互聯(lián)網(wǎng)公司只能在小數(shù)據(jù)集合下使用,還要解決 Neo4j 多副本一致性容災(zāi)的問題。 JanusGraph 雖然通過外置元數(shù)據(jù)管理、kv 存儲(chǔ)和索引的方式解決了大數(shù)據(jù)集合存儲(chǔ)問題,但其存在廣為詬病的性能問題。我們看到大部分圖數(shù)據(jù)庫在對(duì)比性能時(shí)都會(huì)提到和 JanusGraph 相比有幾十倍以上的性能提升。

面臨大數(shù)據(jù)量挑戰(zhàn)的互聯(lián)網(wǎng)公司,普遍走向了自研之路,為了貼合業(yè)務(wù)需求,僅支持有限的查詢語義。國(guó)內(nèi)主流互聯(lián)網(wǎng)公司如何解決圖數(shù)據(jù)庫的挑戰(zhàn)呢:

  • 螞蟻金服:

    金融級(jí)圖數(shù)據(jù)庫,通過自定義類語言為業(yè)務(wù)方提供服務(wù),全量計(jì)算下推,提供毫秒級(jí)延時(shí)。主要應(yīng)用于以下場(chǎng)景:

    • 金融風(fēng)控場(chǎng)景:萬億級(jí)邊資金網(wǎng)絡(luò),存儲(chǔ)實(shí)時(shí)交易信息,實(shí)時(shí)欺詐檢測(cè)。

    • 推薦場(chǎng)景:股票證券推薦。

    • 螞蟻森林:萬億級(jí)的圖存儲(chǔ)能力,低延時(shí)強(qiáng)一致關(guān)系數(shù)據(jù)查詢更新。

    • GNN:用于小時(shí)級(jí) GNN 訓(xùn)練。嘗試動(dòng)態(tài)圖 GNN 在線推理。


  •  iGraph 是圖索引及查詢系統(tǒng),存儲(chǔ)用戶的行為信息,是阿里數(shù)據(jù)中臺(tái)四駕馬車之一。通過 Gremlin 語言為業(yè)務(wù)方提供電商圖譜實(shí)時(shí)查詢。


  •  ByteGraph 通過在 kv 上增加統(tǒng)一 cache 層,關(guān)系數(shù)據(jù)拆分為 B+ 樹以應(yīng)對(duì)高效的邊訪問和采樣,類似 Facebook 的 TAO [6]。

架構(gòu)圖

實(shí)踐

從哪里開始呢?

我們選擇從 Nebula Graph[4] 開始我們的圖數(shù)據(jù)庫之旅,其吸引我們的有以下幾點(diǎn):

  • 數(shù)據(jù)集分片,每條邊獨(dú)立存儲(chǔ),超大規(guī)模數(shù)據(jù)集存儲(chǔ)潛力。

  • 定制強(qiáng)一致存儲(chǔ)引擎,具有計(jì)算下推和 MMP 優(yōu)化的潛力。

  • 創(chuàng)始團(tuán)隊(duì)有豐富的圖數(shù)據(jù)庫經(jīng)驗(yàn),大數(shù)據(jù)集合下模型抽象思路經(jīng)過驗(yàn)證。

實(shí)踐中的問題

內(nèi)存爆炸

本質(zhì)上這是一個(gè)性能 VS 資源的問題,數(shù)據(jù)規(guī)模龐大的應(yīng)用中,內(nèi)存占用是一個(gè)不容忽視的問題。RocksDB 內(nèi)存由三部分構(gòu)成:block cache、index 和 bloom filter、iter pined block。

  • block cache 優(yōu)化:采用全局 LRU cache,控制機(jī)器上所有 rocksdb 實(shí)例的 cache 占用。

  • bloom filter 優(yōu)化:一條邊被設(shè)計(jì)為一個(gè) kv 存入到 rocksdb,如果全部 key 保存 bloom filter,每個(gè) key 占用 10bit 空間,那么整個(gè) filter 內(nèi)存占用遠(yuǎn)超機(jī)器內(nèi)存。觀察到我們大部分的請(qǐng)求模式是獲取某一個(gè)點(diǎn)的邊列表,因此采用 prefix bloom filter;索引到點(diǎn)屬性這一層實(shí)際上即可以對(duì)大多數(shù)請(qǐng)求進(jìn)行加速。經(jīng)過這個(gè)優(yōu)化,單機(jī) filter 所占用內(nèi)存在 G 這個(gè)級(jí)別,大多數(shù)請(qǐng)求訪問速度并未明顯降低。

多版本控制

實(shí)踐中,圖數(shù)據(jù)需要進(jìn)行快速回滾,定期全量導(dǎo)入,自動(dòng)訪問最新版本數(shù)據(jù)。我們把數(shù)據(jù)源大致可以分為兩種類型:

  • 周期性數(shù)據(jù):比如,按天計(jì)算相似用戶列表,導(dǎo)入后數(shù)據(jù)生效。

  • 歷史數(shù)據(jù)+實(shí)時(shí)數(shù)據(jù):比如,歷史數(shù)據(jù)按天刷新,和實(shí)時(shí)寫入的數(shù)據(jù)進(jìn)行合并成為全量數(shù)據(jù)。

如下是數(shù)據(jù)在 rocksdb 的存儲(chǔ)模型:

vertex 存儲(chǔ)格式

edge 存儲(chǔ)格式

其中實(shí)時(shí)寫入的數(shù)據(jù) version 記錄為時(shí)間戳。離線導(dǎo)入的數(shù)據(jù) version 需要自己指定。我們將該字段和離線導(dǎo)入模塊聯(lián)合使用,用三個(gè)配置項(xiàng)進(jìn)行版本控制:reserve_versions(需要保留的版本列表)、active_version(用戶請(qǐng)求訪問到的版本號(hào))、max_version(保留某個(gè)版本之后數(shù)據(jù),把歷史數(shù)據(jù)和實(shí)時(shí)寫入數(shù)據(jù)進(jìn)行合并)。這樣可以高效管理離線數(shù)據(jù)和在線數(shù)據(jù),不再使用的數(shù)據(jù)在下一次 compaction 中被清除出磁盤。

通過這樣的方式,業(yè)務(wù)代碼可以無感更新數(shù)據(jù)版本,并做到了秒級(jí)回滾。

舉例:

  • 保留 3 個(gè)版本,激活其中一個(gè)版本:

    alter edge friend reserve_versions = 1 2 3 active_version = 1
  • 數(shù)據(jù)源為歷史數(shù)據(jù)+實(shí)時(shí)導(dǎo)入數(shù)據(jù)。

    alter edge friend max_version = 1592147484

快速批量導(dǎo)入

實(shí)踐中導(dǎo)入大量數(shù)據(jù)是常規(guī)操作,如果不經(jīng)任何優(yōu)化,將需要導(dǎo)入的數(shù)據(jù)轉(zhuǎn)為請(qǐng)求發(fā)給圖數(shù)據(jù)庫,不僅嚴(yán)重影響線上請(qǐng)求,而且大數(shù)據(jù)量導(dǎo)入耗時(shí)超過一天。對(duì)導(dǎo)入速度進(jìn)行優(yōu)化迫在眉睫。業(yè)界解決這個(gè)問題一般采用 SST Ingest 方式[5]。我們也是采用類似方式,通過例行調(diào)度 spark 任務(wù),離線生成磁盤文件。然后數(shù)據(jù)節(jié)點(diǎn)拉取自己所需要的數(shù)據(jù),并 ingest 到數(shù)據(jù)庫中,之后進(jìn)行版本切換控制請(qǐng)求訪問最新版本數(shù)據(jù)。

整個(gè)過程導(dǎo)入速度快,約數(shù)個(gè)小時(shí)內(nèi)完成全部過程。計(jì)算過程主要離線完成,對(duì)圖數(shù)據(jù)庫請(qǐng)求影響小。

關(guān)于Nebula Graph在大規(guī)模數(shù)據(jù)量級(jí)下的實(shí)踐和定制化開發(fā)是怎么樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站名稱:NebulaGraph在大規(guī)模數(shù)據(jù)量級(jí)下的實(shí)踐和定制化開發(fā)是怎么樣的-創(chuàng)新互聯(lián)
文章地址:http://bm7419.com/article20/cdghco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、商城網(wǎng)站網(wǎng)站設(shè)計(jì)、服務(wù)器托管ChatGPT、網(wǎng)站內(nèi)鏈

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)