2017-12-06 11 views
0

1つのクエリで複数のユーザーノードを作成しようとしています。また、同じクエリで友人関係にリンクされています。私はクエリをプロファイルするとき、私はそれぞれのプロパティに対して、私はリレーションに設定して、dbコールが行われることを確認します。これは、各リレーションの多くのリレーションとプロパティがある場合にクエリを高価にしています。このクエリのコストをどのように削減できますか?複数のプロパティ関係を作成する最適な方法

クエリは以下の通りです:

PROFILE MERGE (user: User {myId: "1"}) WITH user 
UNWIND [ 
{myId: "2",userLastName: "2",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "3",userLastName: "3",userAddressId: "3",hasImage: false,randomId: 0}, 
{myId: "4",userLastName: "4",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "5",userLastName: "5",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "6",userLastName: "6",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "7",userLastName: "7",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "8",userLastName: "8",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "9",userLastName: "9",userAddressId: "1",hasImage: false,randomId: 0} 
] as row 
MERGE (friend: User {myId: row.myId}) ON CREATE SET friend.name = row.userLastName 
MERGE (user)-[c:KNOWS]->(friend) ON CREATE SET c = row 

As you can see in this profile result image there are over 88 db calls in just creating the relation properties from map

私はこのクエリのように多くのdbの呼び出しを避けることができる方法は?

注:CREATE CONSTRAINT ON (user:User) ASSERT user.myId IS UNIQUEは既にdbに設定されています。

編集:

this videoで説明したように@ChristopheWillemsenからの指示に従った後、私のマシン上で実行時間は100〜500レコードの40msの〜に500 +ミリから落下しました。

答えて

0

リレーションシップにいくつかのプロパティを作成するようDBに依頼するので、DBヒットが発生するのが普通です。

あなたがDBの仕事を少し減らしたい場合、あなたはこのようなON CREATE SET c = rowにやりたい明示的にすべて設定することができます。

MERGE (user)-[c:KNOWS]->(friend) 
ON CREATE SET c.myId = row.myId, 
       c.userLastName=row.userLastName, 
       c.userAddressId=row.userAddressId, 
       c.hasImage=row.hasImage, 
       c.randomId=row.randomId 
+0

あなたが正しいです。それは少し負荷を下げるようです。これらのノードとリレーションシップを作成するためのよりよい方法を提案していますか?これは、1000sのレコードがある場合、時間がかかり過ぎます。 –

+0

すべてのパラメータを使用します.1000レコードの場合、500ミリ秒未満で済みます。あなたの正確なユースケースに関する私のビデオをここで確認してください。https://dzone.com/articles/cypher-write-fast-and-furious –

+0

@ChristopheWillemsen提案をありがとう。今は1000レコードでは、数秒かかります。パラメータの使用がどのように役立つかを見てみましょう。一度完了したら結果を投稿します。しかし、私は人々がベンチマークの間に書き込みの方法をより多く達成することができることを参照してください。 500msはまだ大きく見えます。データがここでモデル化される方法のためでしょうか? –

関連する問題