私は現在、製品推奨ツールとして neo4j (v1.9.2) を試しています。
モデルは非常に単純で、いくつかのトランザクションがあり、それぞれが「CONTAINS」関係を使用して製品に関連付けられています。
製品を指定すると、次のサイファー クエリは、他のトランザクションに含まれる推奨製品を返します。
START product=node(3)
MATCH product-[:CONTAINS]-otherTransaction-[:CONTAINS]->other_product
WHERE product <> other_product
RETURN other_product.number AS productCode,
COUNT(other_product) AS ranking
ORDER BY ranking DESC
クエリは期待どおりに機能し、他の推奨製品を返しますが、データ セットが大きい場合は非常に遅くなります。cypher の代わりに JavaAPI アプローチを使用しても、大きな違いはありません。neo4j サーバーを使用しても、メモリ不足の問題が発生しました。
パフォーマンスの問題を進める方法として、いくつかの提案をいただければ幸いです。
- グラフをトラバースするためのマルチスレッドのアプローチはありますか?
- 上記の暗号クエリを複数のサブクエリに分割し、回答を照合するにはどうすればよいですか?
- 開始プロダクトに関連付けられているすべてのノードにアクセスしようとする代わりに、トラバース アプローチを変更する必要がありますか?