私は何をする必要がありますか
クエリごとに、device_id でユーザーを見つけるか、存在しない場合は新しいノードを作成する必要があります。row
s に特定のプロパティが含まれている場合は、それぞれについて、いくつかのエッジを更新/作成する必要があります。負荷が大きく (毎秒約 20k)、neo4j の速度が低下します。各バッチ サイズは正確に 20k です。ここに私のクエリがあります:
UNWIND {batch} as row
MERGE (m:User {device_id: row.device_id})
FOREACH (ignore IN CASE WHEN row.type IS NOT NULL THEN [1] ELSE [] END |
MERGE (e:Event {type: row.type})
MERGE (m) -[r:REL]-> (e)
SET r.count = ( CASE r.count WHEN NULL THEN 1 ELSE r.count + 1 END)
)
FOREACH (ignore IN CASE WHEN row.country IS NOT NULL THEN [1] ELSE [] END |
MERGE (c:Country {id: row.country})
MERGE (m) -[:Belongs]-> (c)
)
WITH m, ( CASE row.user_id WHEN NULL THEN m.user_id ELSE row.user_id END) AS user_id
SET m.user_id = user_id
バッチ サイズを 5k に減らし、コミットする前にトランザクション内でそれらのいくつかを並行して実行することで、この問題を解決しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加