在開發neo4j的過程當中,常常會有同窗問如何向neo4j中導入大量的歷史數據,而這些數據通常都會存在於關係型數據庫中,如今本人就根據本身的導入經歷,把導入的過程和一些挖過的坑分享給你們,以便後面的同窗少走彎路,廢話很少說,直接上乾貨。node
一、batch-import原始項目地址:https://github.com/jexp/batch-importlinux
這個工具是neo4j的做者之一Michael Hunger所編寫,是在neo4j自帶批量導入工具基礎之上作的進一步優化,可是它在導入.gz壓縮文件時,會出現關係沒法導入的狀況,因此若是要使用.gz壓縮包進行導入,請使用我修改過的版本:https://github.com/mo9527/batch-importgit
二、環境準備github
jdk:7以上數據庫
內存:8G以上,導入數據多的話會很是消耗內存,我本身導入的是將近1.5億節點,3億關係,用的是32G內存maven
三、導入步驟工具
a)從github上clone下代碼,並使用maven進行打包,打完包後的jar文件,與項目自己的依賴jar一塊兒放到lib文件夾下,batch.properties文件和執行導入的腳本放在lib同級目錄下,最後的目錄結構以下圖:優化
ps:file文件夾是我本身將要導入的csv文件和.gz壓縮包。索引
b)組裝csv文件內存
提及這一步,可能須要大家根據本身的實際業務需求,手動寫代碼導csv文件了,這裏我只講一下csv文件格式一些要點:
一、節點csv文件
節點csv文件的第一列是固定的,列值爲此節點的label名稱,第二列是index,它的列頭是id:string:indexName 這種格式,解釋一下,id是這一列的property名字,能夠根據須要本身命名,string爲字段的數據類型,indexName是neo4j數據庫中將要導入的索引名稱,我本身的文件格式以下:
而後,後面的列就是節點的property了,沒什麼特別的要求
二、關係csv文件
先看下個人關係csv文件:
關係的csv文件前兩列要特別注意,第一列是關係的起始節點,第二列是關係的結束節點,第三列是關係類型,後面的列是關係的property,能夠隨意了。他github上的說明沒有說出一些注意點,這裏要特別標明:
第一列的起始節點的列頭,也就是id:string:buyerId這個東西,這個玩意必定要和節點csv文件(上圖)中定義的如出一轍,第二列也是如此,要和結束節點的csv文件裏的同樣,否則他會找不到對應的關係。
三、修改batch.properties文件
主要修改兩個地方,一、若是是在現有的neo4j數據庫中進行導入,請設置:
batch_import.keep_db=true
二、將節點csv文件中全部的索引名稱加入到文件中,例如上面這個節點csv文件中的索引名稱是buyerId,那就在文件中加入batch_import.node_index.buyerId=exact
如下是我本人的配置文件:
三、導入
linux和win環境的導入都差很少,只不過執行的腳本不同,這裏以win環境爲例。
文件都準備好了,如今開始導入了。
打開cmd,cd到導入腳本的目錄,也就是import.bat所在目錄,執行命令:
import.bat test.db node.csv rel.csv
解釋一下命令的幾個參數:第一個參數是數據庫的目錄,能夠絕對路徑指定到任意位置,第二個參數是節點csv文件,多個csv文件用逗號分隔,若是是壓縮包,必定要注意,這裏有個坑,不能把全部類型的node都放到一個壓縮包中,必定要每一個類型的node分開壓縮,否則它只會導入第一個類型的node節點,同理,關係的壓縮包也要分開壓縮,而後導入時用逗號分隔.gz文件。
好了,若是你的csv文件沒有問題,內存足夠用的話,如今就開始等待吧。
若是想修改導入工具的Heap大小,能夠修改腳本文件中的 set HEAP=4G
若是不能正常編譯jar包,可以使用我已經編譯好的工具:
https://github.com/mo9527/batch-import-tool
舒適提示:若是節點文件中有中文的話,win環境csv文件頗有可能出現亂碼,而後就致使換行出現問題,導入程序就會出現假死的狀態,表現爲程序一直在吃內存,但是一直導不進去數據,這時候能夠用本人改動過的版本去導入,具體改動可見我github上的記錄