共計(jì) 1879 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
行業(yè)資訊
數(shù)據(jù)庫
數(shù)據(jù)庫中怎么使用 batch-import 工具向 neo4j 中導(dǎo)入海量數(shù)據(jù)
這篇文章給大家分享的是有關(guān)數(shù)據(jù)庫中怎么使用 batch-import 工具向 neo4j 中導(dǎo)入海量數(shù)據(jù)的內(nèi)容。丸趣 TV 小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨丸趣 TV 小編過來看看吧。
1、batch-import 原始項(xiàng)目地址:https://github.com/jexp/batch-import
這個(gè)工具是 neo4j 的作者之一 Michael Hunger 所編寫,是在 neo4j 自帶批量導(dǎo)入工具基礎(chǔ)之上做的進(jìn)一步優(yōu)化,但是它在導(dǎo)入.gz 壓縮文件時(shí),會(huì)出現(xiàn)關(guān)系無法導(dǎo)入的情況,所以如果要使用.gz 壓縮包進(jìn)行導(dǎo)入,請(qǐng)使用我修改過的版本:https://github.com/mo9527/batch-import
2、環(huán)境準(zhǔn)備
jdk:7 以上
內(nèi)存:8G 以上,導(dǎo)入數(shù)據(jù)多的話會(huì)非常消耗內(nèi)存,我自己導(dǎo)入的是將近 1.5 億節(jié)點(diǎn),3 億關(guān)系,用的是 32G 內(nèi)存
3、導(dǎo)入步驟
a)從 github 上 clone 下代碼,并使用 maven 進(jìn)行打包,打完包后的 jar 文件,與項(xiàng)目本身的依賴 jar 一起放到 lib 文件夾下,batch.properties 文件和執(zhí)行導(dǎo)入的腳本放在 lib 同級(jí)目錄下,*** 的目錄結(jié)構(gòu)如下圖:
ps:file 文件夾是我自己將要導(dǎo)入的 csv 文件和.gz 壓縮包。
b)組裝 csv 文件
說起這一步,可能需要你們根據(jù)自己的實(shí)際業(yè)務(wù)需求,手動(dòng)寫代碼導(dǎo) csv 文件了,這里我只講一下 csv 文件格式一些要點(diǎn):
1)、節(jié)點(diǎn) csv 文件
節(jié)點(diǎn) csv 文件的 *** 列是固定的,列值為此節(jié)點(diǎn)的 label 名稱,第二列是 index,它的列頭是 id:string:indexName 這種格式,解釋一下,id 是這一列的 property 名字,可以根據(jù)需要自己命名,string 為字段的數(shù)據(jù)類型,indexName 是 neo4j 數(shù)據(jù)庫中將要導(dǎo)入的索引名稱,我自己的文件格式如下:
然后,后面的列就是節(jié)點(diǎn)的 property 了,沒什么特別的要求
2)、關(guān)系 csv 文件
先看下我的關(guān)系 csv 文件:
關(guān)系的 csv 文件前兩列要特別注意,*** 列是關(guān)系的起始節(jié)點(diǎn),第二列是關(guān)系的結(jié)束節(jié)點(diǎn),第三列是關(guān)系類型,后面的列是關(guān)系的 property,可以隨意了。他 github 上的說明沒有說出一些注意點(diǎn),這里要特別標(biāo)明:
*** 列的起始節(jié)點(diǎn)的列頭,也就是 id:string:buyerId 這個(gè)東西,這個(gè)玩意一定要和節(jié)點(diǎn) csv 文件 (上圖) 中定義的一模一樣,第二列也是如此,要和結(jié)束節(jié)點(diǎn)的 csv 文件里的一樣,不然他會(huì)找不到對(duì)應(yīng)的關(guān)系。
3)、修改 batch.properties 文件
主要修改兩個(gè)地方,
如果是在現(xiàn)有的 neo4j 數(shù)據(jù)庫中進(jìn)行導(dǎo)入,請(qǐng)?jiān)O(shè)置:
batch_import.keep_db=true
將節(jié)點(diǎn) csv 文件中所有的索引名稱加入到文件中,例如上面這個(gè)節(jié)點(diǎn) csv 文件中的索引名稱是 buyerId,那就在文件中加入 batch_import.node_index.buyerId=exact
以下是我本人的配置文件:
4、導(dǎo)入
linux 和 win 環(huán)境的導(dǎo)入都差不多,只不過執(zhí)行的腳本不一樣,這里以 win 環(huán)境為例。
文件都準(zhǔn)備好了,現(xiàn)在開始導(dǎo)入了。
打開 cmd,cd 到導(dǎo)入腳本的目錄,也就是 import.bat 所在目錄,執(zhí)行命令:
import.bat test.db node.csv rel.csv
解釋一下命令的幾個(gè)參數(shù):*** 個(gè)參數(shù)是數(shù)據(jù)庫的目錄,可以絕對(duì)路徑指定到任意位置,第二個(gè)參數(shù)是節(jié)點(diǎn) csv 文件,多個(gè) csv 文件用逗號(hào)分隔,如果是壓縮包,一定要注意,這里有個(gè)坑,不能把所有類型的 node 都放到一個(gè)壓縮包中,一定要每個(gè)類型的 node 分開壓縮,不然它只會(huì)導(dǎo)入 *** 個(gè)類型的 node 節(jié)點(diǎn),同理,關(guān)系的壓縮包也要分開壓縮,然后導(dǎo)入時(shí)用逗號(hào)分隔.gz 文件。
好了,如果你的 csv 文件沒有問題,內(nèi)存足夠用的話,現(xiàn)在就開始等待吧。
如果想修改導(dǎo)入工具的 Heap 大小,可以修改腳本文件中的 set HEAP=4G
溫馨提示:如果節(jié)點(diǎn)文件中有中文的話,導(dǎo)入會(huì)非常慢的,除非你內(nèi)存有 128G,我有一個(gè)節(jié)點(diǎn)文件,里面只有一列是中文,而且中文最長不超過 4 個(gè)漢字,2000 多萬記錄導(dǎo)了 2 個(gè)小時(shí),注意我是 32G 內(nèi)存,其他 4000 多萬的節(jié)點(diǎn),沒有漢字的,基本上不超過 2 分鐘。
感謝各位的閱讀!關(guān)于“數(shù)據(jù)庫中怎么使用 batch-import 工具向 neo4j 中導(dǎo)入海量數(shù)據(jù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!