1
从一组喜欢的东西,我想找出有多少用户喜欢什么东西。Neo4j密码优化
UserId属性的User标签上存在索引,StuffToLike标签及其stuffId属性也存在索引。
{users}和{stuff}参数都将接收带有ID的数组。 对于这个阶段,{users}数组将保存100到1,000,000个字符串,而{stuff}数组将包含100个字符串。
这是最简单和最快的解决方案,至少有数据库点击直到这一点。
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
我不期望的实时可用性此数据量(还),但它会是巨大的,如果我能在合理时间内运行此。
谢谢。数据库命中率明显降低,速度稍快。当服务器上的负载较低时,我会针对较大的一组运行它。第二个查询中显示的StuffToLike的总体流行度相当快。如果仅仅从不断变化的用户群中观察受欢迎程度,它确实会变慢。 – manonthemat