1
一連のものから好きなものまで、どのようなものが好きなのか、どのように多くのユーザーがいるかを知りたい。Neo4j Cypherの最適化
インデックスは、userIdプロパティのUserラベル、およびStuffToLikeラベルとそのstuffIdプロパティに存在します。
{ユーザー}と{stuff}の両方のパラメータは、IDを持つ配列を受け取ります。 この段階では、{ユーザー}配列は100〜1,000,000の文字列を保持し、{stuff}配列は100文字列を保持します。
これは、この時点までのDBヒット数が最も少ない、最も単純で最速のソリューションです。
MATCH (u:User) WHERE u.userId IN {users}
MATCH (n:StuffToLike) WHERE n.stuffId IN {stuff}
OPTIONAL MATCH (n)<-[l:LIKES]-(u)
OPTIONAL MATCH (n)<-[d:DISLIKES]-(u)
RETURN {
stuffId: n.stuffId,
name: n.name,
likes: count(l),
dislikes: count(d)
} AS stuff
私はこのデータ量は(まだ)のリアルタイム使いやすさを期待していないが、私は妥当な時間でこれを実行することができれば、それは素晴らしいことです。
ありがとうございました。 dbのヒット数が大幅に減り、やや速くなります。サーバーの負荷が低いときは、より大きなセットに対して実行します。 2番目のクエリに表示されるStuffToLikeの全体的な人気はかなり速いです。そのユーザーの変化するセットの中から人気を眺めるだけでは本当に減速します。 – manonthemat