2017-05-24 18 views
0

すべてのノードを作成していない私はただのNeo4jに始める、と私は次のスクリプトでLOADのCSVを使用してのNeo4j 3.1にいくつかのデータをロードしようとしています:のNeo4j - LOAD-CSVが

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM "file:///Fake59.csv" AS line 
MERGE (person:Person {firstName: line.GivenName, middleInitial: line.MiddleInitial, lastName: line.Surname, title: line.Title, 
gender: line.Gender, birthday: line.Birthday, bloodType: line.BloodType, weight: line.Pounds, height: line.FeetInches}) 
MERGE (contact:Contact {phoneNumber: line.TelephoneNumber, email: line.EmailAddress}) 
MERGE (person)-[:CONTACTED_AT]->(contact) 
MERGE (color:Color {name: line.Color}) 
MERGE (person)-[:FAVORITE_COLOR]->(Color) 
MERGE (address:Address {streetAddress: line.StreetAddress, city: line.City, zipCode: line.ZipCode}) 
MERGE (person)-[:LIVES_AT]->(address) 
MERGE (state:State {abbr: line.State, name: line.StateFull}) 
MERGE (city)-[:STATE_OF]->(stage) 
MERGE (country:Country {name: line.CountryFull, abbr: line.Country, code: line.TelephoneCountryCode}) 
MERGE (state)-[:IN_COUNTRY]->(country) 
MERGE (credentials:Credentials {userName: line.Username, password: line.Password, GUID: line.GUID}) 
MERGE (person)-[:LOGS_in]->(credentials) 
MERGE (browser:Browser {agent: line.BrowserUserAgent}) 
MERGE (person)-[:BROWSES_WITH]->(browser) 
MERGE (creditCard:CreditCard {number: line.CCNumber, cvv2: line.CVV2, expireDate: line.CCExpires}) 
MERGE (person)-[:USES_CC]->(creditCard) 
MERGE (creditCompany:CreditCompany {name: line.CCType}) 
MERGE (creditCard)-[:MANAGED_BY]->(creditCompany) 
MERGE (occupation:Occupation {name: line.Occupation}) 
MERGE (person)-[:WORKS_AS]->(occupation) 
MERGE (company:Company {name: line.Company}) 
MERGE (person)-[:WORKDS_FOR]->(company) 
MERGE (company)-[:EMPLOYES]->(occupation) 
MERGE (vehicle:Vehicle {name: line.Vehicle}) 
MERGE (person)-[:DRIVES]->(vehicle) 

入力ファイルを持っています約50k行。プロセスが完了しないうちに数時間実行されますが、その時間が経過した後にデータベースに照会すると、ノードタイプ(Person)のみが作成されています。 3つのエントリを持つ小さなファイルを実行すると、すべての追加のノードとリレーションシップが作成されます。

私はすでにNeo4jとJVMに割り当てられたメモリ量を変更しましたが、まだ成功していません。 MERGEの実行にはCREATEより時間がかかりますが、挿入されたノードの重複を避けようとしています。

私は何を変えなければならないか、それをどのように改善するかに関するアイデアや提案はありますか?

ありがとう、

- MD。

+0

問題のノードの一意のプロパティに制約やインデックスがありますか?マージを高速化するには、Tomazの提案と合わせてこれが必要になります。 – InverseFalcon

答えて

0

複数の小さなものにクエリを分割してみてください。よりうまく動作し、管理しやすくなります。 MERGEを使用する場合は、通常、個人用のメールや一意のメールなどの単一のプロパティで行い、ON CREATE SETを使用する必要があります。クエリを固定する必要があります。あなたは、多くの組み合わせを使用しますが、あなたはMERGEに追加したすべてのプロパティは、クエリが遅くなることを知ることができる単一のユニークな特性がない人に、あなたのケースで

MERGE (contact:Contact {email: line.EmailAddress}) 
ON CREATE SET contact.phoneNumber = line.TelephoneNumber 

:次のようになります。

MERGE (person:Person {firstName: line.GivenName, middleInitial: line.MiddleInitial, lastName: line.Surname}) 
ON CREATE SET person.title = line.Title, person.gender = line.Gender, 
person.birthday = line.Birthday, person.bloodType = line.BloodType, 
person.weight = line.Pounds, person.height = line.FeetInches 
+0

TomazとInverseFalconの提案に感謝します。 1つのフォローアップの質問。 PersonとContactのケースでは、ノード変数の人と連絡先とエッジ/関係を確立できますか? – Cracoras

+0

これは正しい –