構(gòu)建Neo4J圖數(shù)據(jù)庫(kù)(三)利用neo4j-import將csv數(shù)據(jù)導(dǎo)入Neo4J

之前介紹了利用LOAD CSV語(yǔ)句導(dǎo)入導(dǎo)入Neo4J的方法车猬,但是這種方法對(duì)于百萬(wàn)級(jí)的數(shù)據(jù)是無(wú)能為力的穿肄。我親自實(shí)踐了在python中利用py2neo和LOAD CSV語(yǔ)句導(dǎo)入百萬(wàn)級(jí)數(shù)據(jù)到Neo4J中闺阱,效率奇慢無(wú)比焚辅,大約估計(jì)了一下運(yùn)行時(shí)間己儒,構(gòu)建全量的圖數(shù)據(jù)庫(kù)可能需要一個(gè)多月時(shí)間,這個(gè)時(shí)間是萬(wàn)萬(wàn)不能接受的朴艰。

聰明的我靈機(jī)一動(dòng)观蓄,就想到了利用python中的_thread實(shí)現(xiàn)多線程導(dǎo)入。發(fā)現(xiàn)多線程導(dǎo)入的方式也行不通祠墅,因?yàn)镹eo4J擁有鎖的機(jī)制,同一時(shí)間不能多次寫入歌径,即使是多線程毁嗦,也只有一個(gè)線程能正常運(yùn)行,其余的線程會(huì)報(bào)錯(cuò)回铛,無(wú)法成功導(dǎo)入狗准。

其實(shí)目前主要有以下幾種導(dǎo)入方式,如果進(jìn)行十萬(wàn)級(jí)別以上的數(shù)據(jù)導(dǎo)入時(shí)茵肃,就已經(jīng)要拋棄LOAD CSV方法了腔长,今天我來(lái)講一下Neo4j-import的導(dǎo)入實(shí)踐。

幾種Neo4J導(dǎo)入方式對(duì)比

這邊重點(diǎn)來(lái)說(shuō)一下官方最快的neo4j-import验残,使用的前提條件:

  • graph.db需要清空(首次導(dǎo)入)或者新建一個(gè)數(shù)據(jù)庫(kù)捞附;
  • neo4j需要停掉;
  • 導(dǎo)入文件格式為CSV您没;

neo4j-import參數(shù)說(shuō)明:

  • –into:數(shù)據(jù)庫(kù)名稱
  • –bad-tolerance:能容忍的錯(cuò)誤數(shù)據(jù)條數(shù)(即超過(guò)指定條數(shù)程序直接掛掉)鸟召,默認(rèn)1000
  • –multiline-fields:是否允許多行插入(即有些換行的數(shù)據(jù)也可讀取)
  • –nodes:插入節(jié)點(diǎn)
  • –relationships:插入關(guān)系

屬性

  • 數(shù)據(jù)類型 int, long, float, double, boolean, byte, short, char,string氨鹏,默認(rèn)為string
  • 并列值的默認(rèn)分隔符為; --array-delimiter用這個(gè)聲明其他的分隔符
  • 使用:IGNORE忽略字段的數(shù)據(jù)

網(wǎng)上的相關(guān)教程有很多欧募,方法各不相同(有的帶表頭有的不帶,有的還把表頭和數(shù)據(jù)分成兩個(gè)文件存儲(chǔ))仆抵,大坑也比較多跟继,我也是結(jié)合了多個(gè)教程加上自己的理解才成功導(dǎo)入了數(shù)據(jù)种冬。

我要一次性導(dǎo)入十個(gè)實(shí)體和十幾種關(guān)系。我采用表頭和數(shù)據(jù)在同一個(gè)文件中的形式舔糖,對(duì)于多個(gè)實(shí)體和多種關(guān)系碌廓,這種方式比較方便簡(jiǎn)介,文件看起來(lái)不會(huì)特別多特別亂剩盒。

首先對(duì)于實(shí)體csv文件谷婆,修改表頭:

  • :ID 有一個(gè)字段定義id,必須存在辽聊,而且唯一(后面加上實(shí)體名)
  • :LABEL 定義標(biāo)簽纪挎,用;分割多標(biāo)簽
:ID(機(jī)構(gòu)),:LABEL,companyname,companysname,companytypecode,companytypename,regaddress,officeaddress,orgform,founddate
10324824,機(jī)構(gòu),華夏銀行股份有限公司武漢硚口支行,華夏銀行武漢硚口支行,01,銀行,,,,
10324851,機(jī)構(gòu),國(guó)家開(kāi)發(fā)銀行股份有限公司貴州省分行,國(guó)家開(kāi)發(fā)銀行貴州省分行,01,銀行,,,,
10324871,機(jī)構(gòu),盛京銀行股份有限公司北京官園支行,盛京銀行北京官園支行,01,銀行,,,,
10324880,機(jī)構(gòu),天津津南村鎮(zhèn)銀行股份有限公司,天津津南村鎮(zhèn)銀行,01,銀行,津南區(qū)津沽大街景明花園三號(hào)樓底商2號(hào),,,2010-12-10
:ID(人物),:LABEL,personname,othername,englishname,sex,birthdate,highestdegreecode,highestdegree
20000001,人物,錢明光,,,0,1947,340002,本科
20000002,人物,譚文鋕,,,0,194802,,
20000003,人物,黃蓉芳,,,1,194410,,

之后對(duì)于關(guān)系文件,修改表頭:

  • :START_ID 起點(diǎn)id (后面加上實(shí)體名)
  • :END_ID 終點(diǎn)id (后面加上實(shí)體名)
  • :TYPE 關(guān)系類型
:TYPE,:START_ID(機(jī)構(gòu)),:END_ID(人物),relationstarttime,relationendtime
最終控制方,10007173,,2013-03-22 12:00:00,2012-12-31 12:00:00
最終控制方,10004301,,2013-03-26 12:00:00,2012-12-31 12:00:00
最終控制方,10004137,,2013-04-19 12:00:00,2012-12-31 12:00:00
最終控制方,10109782,,2014-02-26 12:00:00,2013-12-31 12:00:00

csv數(shù)據(jù)文件處理完之后,開(kāi)始編寫導(dǎo)入命令跟匆,運(yùn)行neo4j****/bin目錄下的neo4j-import异袄。

  • bad-tolerance建議設(shè)置的大一點(diǎn),如果存在關(guān)系中的START_ID 或者END_ID找不到實(shí)體的對(duì)應(yīng)ID就會(huì)被判定為錯(cuò)誤的數(shù)據(jù)玛臂,如果錯(cuò)誤數(shù)據(jù)數(shù)超過(guò)了bad-tolerance烤蜕,導(dǎo)入將直接停止,所以我在這里設(shè)置為了10000000迹冤。
  • 雖然有默認(rèn)值讽营,保險(xiǎn)起見(jiàn)--id-type再指定一下為string
  • 一個(gè)--nodes后面跟一個(gè)實(shí)體的csv文件
  • 一個(gè)--relationships后面跟一個(gè)關(guān)系的csv文件

最終在Ubuntu18.04上導(dǎo)入命令為:

bin/neo4j-import --multiline-fields=true --bad-tolerance=10000000 --into /media/brx/2d79a6a5-f419-aa4c-b391-314a73033208/neo4j-community-3.3.6/data/databases/graph.db --id-type string --nodes 行業(yè).csv --nodes 業(yè)務(wù).csv --nodes 主營(yíng)產(chǎn)品.csv --nodes 事件.csv --nodes 人物.csv --nodes 機(jī)構(gòu).csv --nodes 金 融產(chǎn)品.csv --nodes 地區(qū).csv --relationships 主營(yíng)產(chǎn)品-主營(yíng)產(chǎn)品.csv --relationships 事件-業(yè)務(wù).csv --relationships 事件-機(jī)構(gòu).csv --relationships 人物-人物.csv --relationships 機(jī)構(gòu)-主營(yíng)產(chǎn)品.csv --relationships 機(jī)構(gòu)-人物.csv --relationships 機(jī)構(gòu)-地區(qū).csv --relationships 機(jī)構(gòu)-機(jī)構(gòu).csv --relationships 機(jī)構(gòu)-行業(yè).csv --relationships 金融產(chǎn)品-機(jī)構(gòu).csv

如果服務(wù)器環(huán)境為CentOS,需要把所有的相對(duì)路徑改為絕對(duì)路徑泡徙,導(dǎo)入命令為:

bin/neo4j-import --multiline-fields=true --bad-tolerance=10000000 --into /data/program/neo4j-community-3.5.3/data/databases/yuqing.db --id-type string --nodes /data/program/neo4j-community-3.5.3/行業(yè).csv --nodes /data/program/neo4j-community-3.5.3/業(yè)務(wù).csv --nodes /data/program/neo4j-community-3.5.3/主營(yíng)產(chǎn)品.csv --nodes /data/program/neo4j-community-3.5.3/事件.csv --nodes /data/program/neo4j-community-3.5.3/人物.csv --nodes /data/program/neo4j-community-3.5.3/機(jī)構(gòu).csv --nodes /data/program/neo4j-community-3.5.3/金融產(chǎn)品.csv --nodes /data/program/neo4j-community-3.5.3/地區(qū).csv --relationships /data/program/neo4j-community-3.5.3/主營(yíng)產(chǎn)品-主營(yíng)產(chǎn)品.csv --relationships /data/program/neo4j-community-3.5.3/事件-業(yè)務(wù).csv --relationships /data/program/neo4j-community-3.5.3/事件-機(jī)構(gòu).csv --relationships /data/program/neo4j-community-3.5.3/人物-人物.csv --relationships /data/program/neo4j-community-3.5.3/機(jī)構(gòu)-主營(yíng)產(chǎn)品.csv --relationships /data/program/neo4j-community-3.5.3/機(jī)構(gòu)-人物.csv --relationships /data/program/neo4j-community-3.5.3/機(jī)構(gòu)-地區(qū).csv --relationships /data/program/neo4j-community-3.5.3/機(jī)構(gòu)-機(jī)構(gòu).csv --relationships /data/program/neo4j-community-3.5.3/機(jī)構(gòu)-行業(yè).csv --relationships /data/program/neo4j-community-3.5.3/金融產(chǎn)品-機(jī)構(gòu).csv

如果沒(méi)有報(bào)錯(cuò)的話橱鹏,就是導(dǎo)入成功了,會(huì)提示你有多少個(gè)實(shí)體堪藐,多少個(gè)關(guān)系莉兰,導(dǎo)入失敗的數(shù)據(jù)也會(huì)存儲(chǔ)到一個(gè)文件大功告成,導(dǎo)入成功礁竞,bin/neo4j console應(yīng)該就可以看到數(shù)據(jù)已經(jīng)被成功導(dǎo)入啦

\color{red}{(涉及公司機(jī)密,完整代碼和數(shù)據(jù)無(wú)法提供,請(qǐng)見(jiàn)諒,轉(zhuǎn)載請(qǐng)注明來(lái)源)}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糖荒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子模捂,更是在濱河造成了極大的恐慌捶朵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枫绅,死亡現(xiàn)場(chǎng)離奇詭異泉孩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)并淋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門寓搬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泽疆,“玉大人旨别,你說(shuō)我怎么就攤上這事。” “怎么了苗胀?”我有些...
    開(kāi)封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵洽洁,是天一觀的道長(zhǎng)团秽。 經(jīng)常有香客問(wèn)我疯趟,道長(zhǎng),這世上最難降的妖魔是什么锡溯? 我笑而不...
    開(kāi)封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任赶舆,我火速辦了婚禮,結(jié)果婚禮上祭饭,老公的妹妹穿的比我還像新娘芜茵。我一直安慰自己,他們只是感情好倡蝙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布九串。 她就那樣靜靜地躺著,像睡著了一般寺鸥。 火紅的嫁衣襯著肌膚如雪猪钮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天胆建,我揣著相機(jī)與錄音烤低,去河邊找鬼。 笑死眼坏,一個(gè)胖子當(dāng)著我的面吹牛拂玻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宰译,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼魄懂!你這毒婦竟也來(lái)了沿侈?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤市栗,失蹤者是張志新(化名)和其女友劉穎缀拭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體填帽,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛛淋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篡腌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褐荷。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘹悼,靈堂內(nèi)的尸體忽然破棺而出叛甫,到底是詐尸還是另有隱情层宫,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布其监,位于F島的核電站萌腿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抖苦。R本人自食惡果不足惜毁菱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锌历。 院中可真熱鬧贮庞,春花似錦、人聲如沸辩涝。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怔揩。三九已至捉邢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間商膊,已是汗流浹背伏伐。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晕拆,地道東北人藐翎。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像实幕,于是被迫代替她去往敵國(guó)和親吝镣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容