gpt4 book ai didi

ruby-on-rails - Neo4j 性能 - 计算节点 - 链表性能 - 替代方案?

转载 作者:行者123 更新时间:2023-12-04 06:33:49 24 4
gpt4 key购买 nike

更新:韦斯在这里打出了本垒打!谢谢.. 我已经添加了我正在使用 neography Gem 开发的 Rails 版本.. 完成了同样的事情,但他的版本要快得多.. 参见下面的比较

我在 Neo4j(1.9、REST、Cypher)中使用链表来帮助保持评论的正确顺序(是的,我知道我可以按时间排序等)。

(object node)---[:comment]--->(comment)--->(comment)--->(comment).... etc  

目前我有 900 条评论,正在接受 7 秒浏览整个列表 - 完全 Not Acceptable .. 我只是返回节点的 ID(我知道,不要这样做,但这不是我的帖子的重点)。

我想要做的是找到发表评论的用户的 ID,这样我就可以返回一个计数..(比如“乔和其他 405 人对你的帖子发表了评论”)..现在,我什至不计算在这一点 - 我只是返回每条记录的 author_id ..(我会担心稍后计算 - 首先处理基本的性能问题)。
start object=node(15837) match object-[:COMMENTS*]->comments  return comments.author_id

7秒太长了..

而不是使用链表,我可以简单地拥有一个对象并将所有评论直接链接到节点 - 但这可能导致 super 节点陷入困境,然后找到最新的评论,即使使用跳过和限制,会不会狗慢..

关系索引在这里有帮助吗?除了确保唯一关系或查看关系是否存在之外,我从未使用过它们,但是我可以在密码查询中使用它们来帮助加快速度吗?

如果没有,我还能做些什么来减少返回 ID 所需的时间?

比较:这是使用 Neography gem 的“第二阶段”方法的 Rails 版本:
next_node_id=18233
@neo=Neography::Rest.new
start_node = Neography::Node.load(next_node_id, @neo)
all_nodes=start_node.outgoing(:COMMENTS).depth(10000)
raise all_nodes.size.to_i

结果:在 290 毫秒内找到 526 个节点。

Wes 的解决方案花了 5 ms .. :-)

最佳答案

关系索引无济于事。我建议使用非托管扩展和遍历 API——对于长列表上的这个特定查询,它会比 Cypher 快得多。这个例子应该让你接近:

https://github.com/wfreeman/linkedlistlength

我基于 Mark Needham 的例子在这里:
http://www.markhneedham.com/blog/2014/07/20/neo4j-2-1-2-finding-where-i-am-in-a-linked-list/

关于ruby-on-rails - Neo4j 性能 - 计算节点 - 链表性能 - 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com