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
私はこのクエリのように多くのdbの呼び出しを避けることができる方法は?
注:CREATE CONSTRAINT ON (user:User) ASSERT user.myId IS UNIQUE
は既にdbに設定されています。
編集:
this videoで説明したように@ChristopheWillemsenからの指示に従った後、私のマシン上で実行時間は100〜500レコードの40msの〜に500 +ミリから落下しました。
あなたが正しいです。それは少し負荷を下げるようです。これらのノードとリレーションシップを作成するためのよりよい方法を提案していますか?これは、1000sのレコードがある場合、時間がかかり過ぎます。 –
すべてのパラメータを使用します.1000レコードの場合、500ミリ秒未満で済みます。あなたの正確なユースケースに関する私のビデオをここで確認してください。https://dzone.com/articles/cypher-write-fast-and-furious –
@ChristopheWillemsen提案をありがとう。今は1000レコードでは、数秒かかります。パラメータの使用がどのように役立つかを見てみましょう。一度完了したら結果を投稿します。しかし、私は人々がベンチマークの間に書き込みの方法をより多く達成することができることを参照してください。 500msはまだ大きく見えます。データがここでモデル化される方法のためでしょうか? –