[英]Batch Insertion with Neo4j
我從表中導入了23億的關系,導入速度不是很快,每小時需要5Million才能完成遷移需要20天。 我聽說過neo4j批量插入和批量插入實用程序 。 該實用程序通過從csv文件導入來做有趣的事情,但最新的代碼是一些破壞和不運行的。
我在neo4j中有大約100M的關系,我必須檢查是否沒有重復的關系。
我怎樣才能加快neo4j的速度
按當前代碼就好
begin transaction
for 50K relationships
create or get user node for user A
create or get user node for user B
check there is relationship KNOW between A to B if not create the relationhsip
end transaction
我還閱讀了以下內容:
在關系的情況下,並假設你有足夠的存儲空間,我會嘗試在導入階段沒有建立獨特的關系 - 現在我實際上也導入了一個約3mil記錄的SQL表,但我總是創建一個關系而不是介意它是否重復。
你可以在導入之后稍后執行一個cypher查詢,這將獲得如下所示的獨特關系:
START n=node(*) MATCH n-[:KNOW]-m
CREATE UNIQUE n-[:KNOW2]-m;
和
START r=rel(*) where type(r)='KNOW' delete r;
至少這是我現在的方法,運行后來的cypher查詢只需要幾分鍾。 問題可能是當你真的有節點的數量時,cypher查詢可能會陷入內存錯誤(取決於你為neo4j引擎設置了多少緩存)
你如何“為用戶A獲取用戶節點”,從索引中查找? 索引查找確實減慢了批量插入速度。 嘗試在索引的“前面”的簡單HashMap中盡可能地緩存用戶的大部分,或者使用BatchInserterIndex #setCacheCapacity
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.