私はneo4jデータベースを使用して人々の間のつながりを追跡しています。3次接続を追跡する必要があります(リンクインがこれを行う方法に似ています)が、パフォーマンスに関するいくつかの問題に直面しました。私のテスト データベースには、最初の注文 (連絡先) の接続が 3 ~ 8 ある約 3,000 人のユーザーがいます。二次接続をフェッチするとき、すべてがパフォーマンスに優れているようです。ただし、3 次接続の取得には時間がかかります。CYPHER クエリを使用してデータをフェッチします。プロファイル ID とそれらの間の接続のみがデータベースに保存されます。
クエリ自体は次のとおりです。
THIRD_ORDER_CONNECTIONS = <<-CYPHER
START n=node:profile(id='%{id}')
MATCH n-[:contacts]-common_contact_1-[:contacts]-common_contact_2-[:contacts]-profile
WHERE common_contact.id <> %{exclude_id} AND common_contact_1.id <> common_contact_2.id
RETURN COLLECT(DISTINCT profile.id)
CYPHER
私のローカル マシンでは 48 秒かかります。問題は、パフォーマンスを改善したり、クエリを変更して適切な時間に 3 次接続を取得したりするにはどうすればよいかということです。