首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要优化Neo4j查询

需要优化Neo4j查询
EN

Stack Overflow用户
提问于 2021-01-08 22:19:41
回答 1查看 43关注 0票数 0

我正在创建一个社交媒体应用程序,其后端是Neo4j。在这里,我想获取用户主页上的朋友活动。我设置了每个卷轴10个活动的限制。这是我当前的Neo4j查询:

代码语言:javascript
复制
MATCH (m:Person { id: '$id'})-[:FOLLOWS*1..1]->(f:Person)-[:HAS_ACTIVITY]->(la:Activity)-[:NEXT*0..]->(act:Activity)
WHERE act.verb IN ['post' ,'post_media_item' ,'watch_activity'] 
RETURN f, act ORDER BY act.published DESC LIMIT 10

在上面的查询中,用户由Person节点描述,而用户提要由Activity节点描述。"m“是当前用户,其好友"f”由关系"Follows“描述。每个用户的活动与关系"NEXT“相互链接,并与具有关系"HAS_ACTIVITY”的Person节点链接。有意将最大跳数保留为空,因为一个人可以有任意数量的活动。

对于这个查询,当一个人的朋友列表增加时,整个查询的执行时间也会增加。目前,对于一个有50个朋友的用户来说,所花的时间是3-5秒。我必须从这个查询的结果执行进一步的聚合,这需要7-10秒的查询执行时间。

请找到附件中的个人资料截图并解释:

我如何优化我的Cypher查询,使我得到最快的结果,而不管有多少朋友?

使用的Neo4j版本: 3.0.6

EN

回答 1

Stack Overflow用户

发布于 2021-01-08 23:00:09

一件简单的事情就是至少更新到Neo4j 3.5.x。

如果一个人的所有活动都与HAS_ACTIVITY关系相关联,为什么还需要进一步遍历下一个关系呢?下面的查询还不够吗?

代码语言:javascript
复制
MATCH (m:Person { id: '58c1370350b91a0005be0136'})-[:FOLLOWS*1..1]->(f:Person)-[:HAS_ACTIVITY]->(la:Activity)
WHERE la.verb IN ['post' ,'post_media_item' ,'watch_activity'] 
RETURN f, la ORDER BY la.published DESC LIMIT 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65630723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档