特に高度なノードを参照して、neo4j の効率的な使用パターンを理解しようとしています。私が話していることのアイデアを与えるために、User
ノードとしてモデル化した属性を持つノードがあります。したがって、私のテーブルには次のような関係があります
(:User)-[:HAS_ATTRIB]->(:AgeCategory)
などなど。問題は、これらのAgeCategory
ノードの一部が 100k 程度の非常に高度であり、次のようなクエリがあることです。
MATCH (u:User)-->(:AgeCategory)<--(v:User), (u)-->(:FavoriteLanguage)<--(v)
WHERE u.uid = "AAA111" AND v.uid <> u.uid
RETURN v.uid
(同じ年齢カテゴリと好きな言語を共有するすべてのユーザーを と一致させる)は、リンクリストのすべての要素に対してリンクリストを1回実行する必要があるため(または少なくともそれが私が理解している方法ですAAA111
)、非常に遅いです。FavoriteLanguage
AgeCategory
このクエリが解決するのに数分かかるという事実から、私が何か間違ったことをしていることは明らかだと思いますが、このようなクエリを処理するための正しい手順が何であるかに興味があります. 各クエリから一致するユーザーを個別に取得し、それらをメモリ内ハッシュと比較する必要がありますか? ノードの関係にインデックスを付ける方法はありますか? これは、スキーマを始めるのに良い考えですか?