人気記事https://dzone.com/articles/tips-for-fast-batch-updates-of-graph-structures-wiに従います。バッチ更新を行っています。Java API を使用して更新していますが、クエリは次のようになります。
UNWIND $props as row MERGE (n:Entity{eid:row.eid}) ON MATCH set n += row.properties
100 万レコードのデータ セットがあり、10K のレコードをマップのリストとしてパラメータに送信するたびに、バッチ サイズを 10K として使用しています。このアプローチは最初は問題なく機能しましたが、2 つまたは 3 つのバッチを実行すると、速度が大幅に低下するか、スタックすることさえありました。
Entity と eid に Index があり、ブラウザーを使用してクエリをテストしたところ、次のようになりました: Explain UNWIND $props as row....
新しく追加されたノードについて、ラベル Entity とプロパティ eid でそれらを一致させようとすると、インデックスも使用されます。したがって、私の問題はインデックスによるものではないと思います。
小さいバッチ サイズを 1K として使用しようとしましたが、同じ問題が発生し、約 50 バッチの後、更新が非常に遅くなりました。
私は Neo4j 3.2.3 エンタープライズ版を使用しています。
この問題を解決するにはどうすればよいですか? どんなアイデアでも大歓迎です。