リンクされたリストを使用してユーザーのアクティビティを追跡していますが、最後の 20 程度だけでなく、すべてのアクティビティを追跡したいと考えています..したがって、時間の経過とともに、ユーザーはリストに 5000 ノードを持つ可能性があります.. ( Neo 1.9、Neography Gem、ROR 3.2...)
cypher を使用してリストをトラバースすると、ホップ数が 40 程度以下であれば問題ありませんが、数千のノードがある場合、40 では足りません。より大きな数を使用する場合、ネオは基本的にかなりの時間拘束されます..
問題はこれです..ユーザーが少し前に写真を気に入ったとします.1000アクション前に最新の写真よりも前に、何らかの奇妙な理由で写真を取り消すことを望んでいます..まあ、アクティビティからそのノードを切り取る必要があります.リンクされたリスト。問題は、1000 ノードの深さに埋もれているアクティビティ ノードを見つけなければならないということです。したがって、フリーズしないように見える 40 ホップはまったく機能しません。
次の暗号クエリを実行すると、完了すると数分しかかかりません.. (:ACTIVITIES_FIRST_NODE はリンクされたリストの先頭です)
START viewer_who_liked=node(2675)
MATCH viewer_who_liked-[:ACTIVITIES_FIRST_NODE|ACTIVITIES_NEXT_NODE*]-activity_list_node-[:LIKES_PHOTO]->object
RETURN id(activity_list_node)
[:ACTIVITIES_FIRST_NODE|ACTIVITIES_NEXT_NODE*1..30] に変更してもフリーズしませんが、探しているノードが見つかりません..そして、後で評価されるように見えるため、 where 関数は役に立ちませんアクティビティノードのトラバーサル.. with 句を使用して無駄にしました..ステップと制限も試しました-ダイスなし..常にタイムアウトします...
今、制限を使用してスキップすると、爆弾は発生しませんが、リストのチャンクを反復処理する予定がない限り、探しているノードも返されません....しかし、1つの結果を探しています。すばやく、一連のレコードを反復処理したくありません.. (これは、ページングされたアクティビティ フィードでは問題なく機能しますが、干し草の山の中の針を探していません..干し草の山の中の針が必要です..)
したがって、アクティビティ ノードをインデックスに配置し (リンク リストに加えて、リンク リストはアクティビティ フィードなどに最適です)、インデックスを検索して適切なアクティビティ ノードを取得し、ターゲットノードの削除? それとも、私はここで何かを見落としていますか/何か間違ったことをしています..