日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
圖數(shù)據(jù)導(dǎo)入技術(shù)性能優(yōu)化實(shí)踐

1、背景介紹

圖數(shù)據(jù)是NoSQL非關(guān)系型數(shù)據(jù)類型的一種,通過應(yīng)用圖形理論來存儲(chǔ)表示實(shí)體之間的關(guān)系信息,如社交網(wǎng)絡(luò)中人與人之間的關(guān)系、知識(shí)圖譜中實(shí)體間的連接關(guān)系等。圖數(shù)據(jù)庫的獨(dú)特設(shè)計(jì),很好的彌補(bǔ)了關(guān)系數(shù)據(jù)庫不適用于存儲(chǔ)圖形數(shù)據(jù)、查詢邏輯復(fù)雜、查詢速度緩慢的缺點(diǎn)。因此,圖數(shù)據(jù)庫已廣泛應(yīng)用于社交網(wǎng)絡(luò)、精準(zhǔn)推薦、金融風(fēng)控、知識(shí)圖譜等領(lǐng)域。

創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)龍城,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

數(shù)據(jù)導(dǎo)入功能作為大批量圖數(shù)據(jù)應(yīng)用的第一個(gè)且比較關(guān)鍵的環(huán)節(jié),在開展圖應(yīng)用過程中非常重要。經(jīng)過調(diào)研,市場(chǎng)上比較主流的圖數(shù)據(jù)庫有Neo4j,NebulaGraph,TigerGraph,JanusGraph,HugeGraph,DGraph等多個(gè)國(guó)內(nèi)外廠商。本文主要選取Neo4j,NebulaGraph,JanusGraph三種圖數(shù)據(jù)庫作為研究對(duì)象,深入對(duì)比分析各自在數(shù)據(jù)導(dǎo)入方面的特點(diǎn),最后介紹下我們?cè)跀?shù)據(jù)導(dǎo)入技術(shù)方面的解決方案。

1.1 NebulaGraph圖數(shù)據(jù)庫

NebulaGraph是一款開源的分布式原生圖數(shù)據(jù)庫,采用shared-nothing分布式架構(gòu)設(shè)計(jì),擅長(zhǎng)處理千億節(jié)點(diǎn)萬億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級(jí)查詢。它采用計(jì)算和存儲(chǔ)分離的架構(gòu)模式,基于RocksDB作為本地存儲(chǔ)引擎自研了高性能的KVStore,采用Raft協(xié)議保證分布式系統(tǒng)的多副本強(qiáng)一致性和高可用性。

NebulaGraph在數(shù)據(jù)導(dǎo)入方面提供了多種工具組件操作,如Importer、Console、Studio、Exchange等,其中Console是控制端使用命令行方式導(dǎo)入,適用于操作少量手工測(cè)試數(shù)據(jù);Studio組件可以通過瀏覽器導(dǎo)入本地機(jī)器上多個(gè)csv文件,只限制使用csv類型;Importer工具可以導(dǎo)入單機(jī)多個(gè)csv文件,一般數(shù)據(jù)量限制在億級(jí)以內(nèi)使用;Exchange組件基于Spark分布式集群,可以從csv、Hive、Neo4j、MySQL等多種數(shù)據(jù)源導(dǎo)入大批量數(shù)據(jù)集,支持十億級(jí)以上數(shù)據(jù);Spark-connector組件使用需要有一定的軟件研發(fā)能力,撰寫少量代碼。

每種工具的使用復(fù)雜度和導(dǎo)入速度可從下面的坐標(biāo)圖看出:

1.2 JanusGraph圖數(shù)據(jù)庫

JanusGraph是一款開源的分布式圖數(shù)據(jù)庫,基于Apache TinkerPop3框架開發(fā),采用Gremlin查詢語言,具備完善的工具鏈組件,助力用戶輕松構(gòu)建基于圖數(shù)據(jù)庫之上的應(yīng)用和產(chǎn)品。JanusGraph在存儲(chǔ)層設(shè)計(jì)中,支持分布式存儲(chǔ)、數(shù)據(jù)多副本、橫向擴(kuò)容,內(nèi)置多種后端存儲(chǔ)引擎,并且可通過插件方式集成第三方存儲(chǔ)來擴(kuò)展后端存儲(chǔ)引擎,如Cassandra、HBase、BerkeleyDB等數(shù)據(jù)中間件。

JanusGraph圖數(shù)據(jù)庫提供如下幾種數(shù)據(jù)導(dǎo)入方式:

Api數(shù)據(jù)導(dǎo)入:該方案通過提交java api插入數(shù)據(jù)請(qǐng)求,可用于數(shù)據(jù)量較小的情況下使用;

基于Gremlin Server的批量數(shù)據(jù)導(dǎo)入:該方案通過gremlin語句提交插入請(qǐng)求,需搭建Gremlin Server服務(wù),要有一定的研發(fā)能力;

基于Bulk Loader組件導(dǎo)入:官方提供批量導(dǎo)入方式,需要Hadoop/Spark集群環(huán)境,支持json、csv、xml、kryo等類型,可用于大批量數(shù)據(jù)導(dǎo)入。

JanusGraph數(shù)據(jù)導(dǎo)入流程如下圖所示:

1.3 Neo4jGraph圖數(shù)據(jù)庫

Neo4j是一款由Java開發(fā)的半開源圖數(shù)據(jù)庫,采用Cypher查詢語言,支持快速數(shù)據(jù)庫操作和直觀的圖數(shù)據(jù)展示,且操作速度不會(huì)隨數(shù)據(jù)量增大而明顯降低。Neo4J采用原生圖存儲(chǔ)設(shè)計(jì),在存儲(chǔ)節(jié)點(diǎn)時(shí)使用了"index-free" adjacency模型,每個(gè)節(jié)點(diǎn)都有指向其鄰居節(jié)點(diǎn)的指針,可在O(1)的時(shí)間內(nèi)找到鄰居節(jié)點(diǎn),提供快速、高效的圖遍歷。

Neo4j支持以下幾種數(shù)據(jù)導(dǎo)入方式:

基于Cypher語法中的Load-csv方式:官方提供的ETL工具,僅支持csv文件,導(dǎo)入速度慢,需掌握 Cypher 語言,適用于小批量數(shù)據(jù);

Neo4j-import導(dǎo)入工具:官方自帶的大數(shù)據(jù)量導(dǎo)入工具,支持并行可擴(kuò)展的大規(guī)模csv文件導(dǎo)入,適用于初始化數(shù)據(jù)在千萬級(jí)以上的數(shù)據(jù);

BatchInserter導(dǎo)入工具:一種API數(shù)據(jù)導(dǎo)入方案,只能在Java中使用,導(dǎo)入速度很快,適用于千萬級(jí)以上大批量數(shù)據(jù)操作。

Neo4j圖數(shù)據(jù)庫架構(gòu)設(shè)計(jì)圖如下:

綜合比較以上多種圖數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入能力情況,我們選取NebulaGraph國(guó)產(chǎn)圖數(shù)據(jù)庫的Exchange組件作為重點(diǎn)研究對(duì)象,它是一款A(yù)pache Spark應(yīng)用,基于Apache 2.0協(xié)議開放源代碼,支持多種不同格式、不同來源的數(shù)據(jù),如:csv、json、hdfs、hive、MySQL、kafka、Neo4j等,我們將從代碼架構(gòu)優(yōu)化、依賴集群調(diào)優(yōu)、存儲(chǔ)層結(jié)構(gòu)優(yōu)化等多個(gè)方面對(duì)組件的導(dǎo)入能力做優(yōu)化。

2、數(shù)據(jù)導(dǎo)入優(yōu)化技術(shù)點(diǎn)

經(jīng)過調(diào)查對(duì)比研究,當(dāng)前圖數(shù)據(jù)導(dǎo)入功能存在導(dǎo)入效率不高、數(shù)據(jù)源形式限制嚴(yán)格、工具操作復(fù)雜等問題,我們將以Exchange組件為基礎(chǔ),從導(dǎo)入流程框架優(yōu)化、Spark集群調(diào)優(yōu)策略、存儲(chǔ)層RocksDb組件優(yōu)化等不同維度研究提升數(shù)據(jù)導(dǎo)入效率,從而最大限度的縮短大批量數(shù)據(jù)導(dǎo)入時(shí)間,豐富導(dǎo)入數(shù)據(jù)源形式,節(jié)省使用人員的時(shí)間成本。

數(shù)據(jù)導(dǎo)入組件技術(shù)流程設(shè)計(jì)如下:

2.1 Exchange組件優(yōu)化

Exchange是基于Spark組件編寫的一款應(yīng)用,主要功能是將集群中多種不同格式的批式數(shù)據(jù)和流式數(shù)據(jù)批量導(dǎo)入到圖數(shù)據(jù)庫中。

我們通過設(shè)計(jì)并優(yōu)化“Reader-Processor-Writer”三層數(shù)據(jù)導(dǎo)入模型,并引入并發(fā)編程模型多線程處理不同點(diǎn)和不同邊的數(shù)據(jù)處理過程,其中Reader層讀取不同來源的批數(shù)據(jù)并生成分布式數(shù)據(jù)集 DataFrame,Processor層負(fù)責(zé)讀取DataFrame中的批數(shù)據(jù),通過提取圖數(shù)據(jù)的結(jié)構(gòu)特點(diǎn),根據(jù)配置文件中設(shè)定的映射關(guān)系按列名獲取對(duì)應(yīng)值,在讀取到指定批處理的數(shù)據(jù)后,Writer層負(fù)責(zé)將獲取到的批數(shù)據(jù)一次性寫入到圖數(shù)據(jù)庫中。在整個(gè)處理流程中,部分參數(shù)設(shè)定對(duì)處理速率影響較大,如batch(指定單批次寫入圖數(shù)據(jù)庫的最大點(diǎn)邊數(shù)量)、partition(指定 Spark分片數(shù)量)、rate.limit(指定導(dǎo)入數(shù)據(jù)時(shí)令牌桶令牌數(shù)量限制)等,如何根據(jù)機(jī)器資源環(huán)境合理的設(shè)置相應(yīng)的參數(shù)非常重要。

在數(shù)據(jù)導(dǎo)入流程中,以充分利用spark分布式引擎資源為目的,根據(jù)服務(wù)器資源使用情況、數(shù)據(jù)插入速率和響應(yīng)時(shí)間等因素,通過設(shè)計(jì)集群動(dòng)態(tài)參數(shù)自適應(yīng)策略,動(dòng)態(tài)調(diào)整batch單次批量插入數(shù)據(jù)量,以及spark集群partition分區(qū)數(shù),合理的分區(qū)數(shù)能減少任務(wù)調(diào)度時(shí)間及數(shù)據(jù)傾斜問題,快速并行處理RDD數(shù)據(jù)集,最大程度利用集群性能,提升數(shù)據(jù)轉(zhuǎn)換效率。同時(shí),設(shè)計(jì)RateLimiter限流機(jī)制,采用令牌桶算法控制圖數(shù)據(jù)庫單次gql數(shù)據(jù)插入量,保證在處理大批量數(shù)據(jù)時(shí)圖數(shù)據(jù)庫能正常平穩(wěn)運(yùn)行。另外,利用斷點(diǎn)續(xù)傳能力,把上一階段未轉(zhuǎn)換完的數(shù)據(jù)(網(wǎng)絡(luò)中斷等原因),通過保存斷點(diǎn)方式繼續(xù)轉(zhuǎn)換,提升數(shù)據(jù)轉(zhuǎn)換穩(wěn)定性。

大批量圖數(shù)據(jù)導(dǎo)入流程架構(gòu)圖設(shè)計(jì)如下:

2.2 Spark集群優(yōu)化

Spark是一種基于內(nèi)存的快速、通用、可擴(kuò)展的大數(shù)據(jù)分析計(jì)算引擎,Exchange是基于Spark編寫的一款應(yīng)用,它基于Spark的分布式環(huán)境將集群中的數(shù)據(jù)批量遷移到圖數(shù)據(jù)庫中,如何充分利用好分布式集群資源,是提高Exchange數(shù)據(jù)導(dǎo)入效率的一個(gè)關(guān)鍵點(diǎn)。

我們?cè)诰帉懞肊xchange組件代碼程序后,按照Spark約定使用spark-submit命令提交運(yùn)行,Spark支持local、standalone、mesos、yarn四種運(yùn)行模式,生產(chǎn)環(huán)境推薦使用yarn集群模式運(yùn)行,我們使用此模式進(jìn)行任務(wù)運(yùn)行及調(diào)試。

通過一系列的調(diào)優(yōu)對(duì)比測(cè)試,結(jié)合官網(wǎng)等資料說明,總體來講要充分壓榨使用集群資源,在資源限制內(nèi)盡量多的調(diào)配內(nèi)存消耗和增加并發(fā)。在應(yīng)用運(yùn)行調(diào)優(yōu)過程中,需根據(jù)當(dāng)前Spark集群配置來設(shè)置調(diào)優(yōu)各個(gè)參數(shù),以減少任務(wù)調(diào)度時(shí)間及數(shù)據(jù)傾斜問題,最大化提升數(shù)據(jù)運(yùn)行效率。

 個(gè)別重要參數(shù)簡(jiǎn)要說明如下:num-executors 根據(jù)集群服務(wù)器臺(tái)數(shù)來參考設(shè)置,executor-cores根據(jù)每臺(tái)機(jī)器CPU核數(shù)來設(shè)置,driver-memory和execute-memeory根據(jù)總的內(nèi)存來設(shè)置,其中num-executors * execute-memory不能超過集群可用內(nèi)存等。

2.3 Storage存儲(chǔ)層優(yōu)化

圖存儲(chǔ)的主要數(shù)據(jù)是點(diǎn)和邊,Nebula圖數(shù)據(jù)庫將點(diǎn)和邊的信息存儲(chǔ)為key,同時(shí)將點(diǎn)和邊的屬性信息存儲(chǔ)在value中,以便更高效地使用屬性過濾。Nebula在Storage層使用RocksDB作為存儲(chǔ)組件,RocksDB是一個(gè)可插拔式的持久化存儲(chǔ)系統(tǒng),基于LSM架構(gòu),支持高效的讀寫吞吐,具備和分布式存儲(chǔ)系統(tǒng)類似的術(shù)語操作定義,如 WAL,Compact,Transaction等。

作為分布式存儲(chǔ)引擎的一個(gè)存儲(chǔ)媒介,在方案設(shè)計(jì)時(shí)為了保證數(shù)據(jù)一致性,RocksDB整個(gè)寫入鏈路會(huì)先寫WAL,再寫memtale,其中WAL保證了數(shù)據(jù)的高可用性,在宕機(jī)時(shí)可根據(jù)WAL恢復(fù)數(shù)據(jù)。

在存儲(chǔ)層的參數(shù)配置上,RocksDB中部分比較重要的參數(shù)介紹如下:rocksdb_block_cache,設(shè)置默認(rèn)塊緩存大小,用來緩存解壓后的數(shù)據(jù),建議設(shè)置為節(jié)點(diǎn)有效負(fù)載內(nèi)存的1/3左右;max_background_jobs,設(shè)置后臺(tái)工作子線程數(shù),加快壓縮效率,建議設(shè)置為節(jié)點(diǎn)機(jī)器的有效可用核數(shù);max_subcompactions,設(shè)置壓縮線程數(shù)。

上述參數(shù)可結(jié)合數(shù)據(jù)導(dǎo)入配置中batch等參數(shù)一起調(diào)試使用,進(jìn)而選擇與當(dāng)前環(huán)境資源比較匹配的一個(gè)理想?yún)?shù)配置。

存儲(chǔ)層數(shù)據(jù)寫入流程圖如下:

3、總結(jié)

上面是我們?cè)诖笈繄D數(shù)據(jù)導(dǎo)入功能總結(jié)的一些優(yōu)化經(jīng)驗(yàn),經(jīng)過多種策略調(diào)優(yōu)設(shè)計(jì),測(cè)試報(bào)告顯示在同等資源下億級(jí)數(shù)據(jù)量?jī)?yōu)化前后導(dǎo)入性能提升了12.66%。軟件優(yōu)化是一項(xiàng)無止境的系統(tǒng)工程,除了上面我們提到的這些調(diào)優(yōu)策略之外,還有很多其它的處理手段我們沒有發(fā)現(xiàn),希望大家能繼續(xù)探索研究,多多交流。


名稱欄目:圖數(shù)據(jù)導(dǎo)入技術(shù)性能優(yōu)化實(shí)踐
文章路徑:http://www.dlmjj.cn/article/dpiiodo.html