我正在使用链接列表来跟踪用户的活动,但我想跟踪每个活动,而不仅仅是最近 20 个左右。所以随着时间的推移,用户可能在列表中有 5000 个节点。( Neo 1.9,Neography Gem,ROR 3.2...)
当我使用 cypher 遍历列表时,只要跃点数低于 40 左右,它就会很好......但是.. 有数千个节点,40 不会削减它.. 如果我使用更大的数字, Neo 基本上被捆绑了很长一段时间..
问题是这样的.. 说一个用户不久前喜欢了一张照片,说在最近的之前有 1000 次动作,出于某种奇怪的原因,他们想要不像一张照片.. 好吧,我必须从活动中剪掉那个节点链表。问题是,我必须找到埋藏在 1000 个节点深处的活动节点。因此,似乎没有冻结的 40 个跃点根本不起作用
当我运行以下密码查询时,只需几分钟,如果它完成的话..(:ACTIVITIES_FIRST_NODE 是链表的头)
START viewer_who_liked=node(2675)
MATCH viewer_who_liked-[:ACTIVITIES_FIRST_NODE|ACTIVITIES_NEXT_NODE*]-activity_list_node-[:LIKES_PHOTO]->object
RETURN id(activity_list_node)
如果我将其更改为 [:ACTIVITIES_FIRST_NODE|ACTIVITIES_NEXT_NODE*1..30] 它不会冻结,但不会找到我正在寻找的节点。而且 where 函数是无用的,因为它似乎是在评估之后活动节点的遍历..我使用 with 子句无济于事..我还尝试了步进和限制-没有骰子..它总是超时...
现在,如果我使用限制并跳过它不会爆炸,但它也不会返回我正在寻找的节点,除非我计划遍历列表的块......但我正在寻找一个结果,并且快速,并且不想遍历记录集..(这适用于分页的活动提要,但不是在大海捞针..我需要大海捞针..)
所以,我想知道,我是否应该将活动节点放在索引上(除了放在链表上 - 链表非常适合活动提要等),并搜索索引以检索正确的活动节点,然后执行删除目标节点?或者我在这里忽略了什么/做错了什么..