2014-08-28 68 views
1

我正在評估使用Neo4J社區2.1.3來存儲它們之間的概念和關係的列表。我正在嘗試使用Web界面中的Cypher將我的樣本測試數據(CSV文件)加載到Neo4J中,如聯機手冊中所述。Neo4J從Cypher加載CSV拋出「未知錯誤」或DeadlockDetected

我的數據看起來是這樣的:

concepts.csv

id,concept 
1,tree 
2,apple 
3,grapes 
4,fruit salad 
5,motor vehicle 
6,internal combustion engine 

relationships.csv

sourceid,targetid 
2,1 
4,2 
4,3 
5,6 
6,5 

等等......在我的示例,我有〜17K概念和~16M的關係。按照手冊,我開始Neo4j的服務器,並進入到這個暗號:

LOAD CSV WITH HEADERS FROM "file:///data/concepts.csv" AS csvLine 
CREATE (c:Concept { id: csvLine.id, concept: csvLine.concept }) 

這工作得很好,並加載我的概念。然後我試圖加載我的關係。

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///data/relationships.csv" AS csvLine 
MATCH (c1:Concept { id: csvLine.sourceid }),(c2:Concept { id: csvLine.targetid }) 
CREATE (c1)-[:RELATED_TO]->(c2) 

這將運行一個小時左右,但總是要麼停止:(!沒有其他信息)

  • 「未知錯誤」,或
  • 「Neo.TransientError.Transaction。 (鎖定客戶端[695])不能等待資源RWLock [RELATIONSHIP(572801),hash = 267423386],因爲=> LockClient < - [:HELD_BY] - RWLock [NODE(4145) ,hash = 1224203266] < - [:WAITING_FOR] - LockClient [691] < - [:HELD_BY] - RWLock [RELATIONSHI P(572801),hash = 267423386]「

加載後可能會停止200-300K關係。我已經對relationships.csv做了「sort | uniq」,所以我很確定沒有重複。我查看了數據/日誌中的日誌文件,但未發現錯誤消息。

有沒有人見過這個?順便說一句,我不介意失去一小部分關係,所以如果我能關閉ACID事務,我會很高興。我也想在這個階段避免編寫代碼(使用Java API)。我只是想加載我的數據來嘗試一下。無論如何要做到這一點?

我的完整數據集將包含數百萬個概念和數百萬個關係。有誰知道Neo4J是否可以處理這些數據?

謝謝。

回答

0

你正確地做到了。 你使用neo4j shell還是瀏覽器?

您是否做過:create index on :Concept(id);

如果您沒有索引,搜索概念將花費指數級更長的時間,因爲它必須掃描此標籤的所有節點以獲取此id值。如果它使用兩個匹配的索引,則您應該/也可以通過在PROFILE前加查詢來檢查。

儘管導入了數​​百萬個關係,但從未見過這種僵局。 你可以分享完整的堆棧跟蹤嗎?如果你使用shell,你可能想要做export STACKTRACES=true

你能用USING PERIODIC COMMIT 1000嗎?

+0

我正在使用瀏覽器。我沒有創建索引。但是,即使沒有這些,我也可以通過id成功查詢這些概念,並遵循那些可以添加的關係。我可能會嘗試這個,並且明天也會嘗試。默認的定期提交不是1000嗎?感謝您的提示。 – alexycyap 2014-08-28 11:17:44

+0

更新了我的回答 – 2014-08-28 15:46:11

+0

我爲Concept(id)添加了一個唯一約束,它自動添加了一個索引,並使用了USING PERIODIC COMMIT 1000.結果是我所有的關係都加載得更快,沒有任何錯誤。不知道哪一位修好了,但謝謝你幫我解決這個問題。 – alexycyap 2014-09-01 01:50:58