Performance 在neo4j中检索时如何避免最近更新的节点?

Performance 在neo4j中检索时如何避免最近更新的节点?,performance,sorting,neo4j,Performance,Sorting,Neo4j,这可能是一个与数据库的核心功能相关的奇怪问题,但由于性能问题,我一直在思考这个问题 考虑以下场景: PROFILE MATCH (n:Label1) WHERE n.prop1<1484850600 OR (n.prop1=1484850600 AND n.prop2<2) WITH n LIMIT 10 RETURN n PROFILE 匹配(n:Label1) 其中n.prop1我认为您需要有一个属性来存储已更新的标志。大概是这样的: MATCH (n:Label1)

这可能是一个与数据库的核心功能相关的奇怪问题,但由于性能问题,我一直在思考这个问题

考虑以下场景:

PROFILE 
MATCH (n:Label1) 
WHERE n.prop1<1484850600 
OR (n.prop1=1484850600 AND n.prop2<2)
WITH n 
LIMIT 10 
RETURN n
PROFILE
匹配(n:Label1)

其中n.prop1我认为您需要有一个属性来存储已更新的标志
。大概是这样的:

MATCH (n:Label1) 
  WHERE n.hasUpdated = FALSE AND
        (n.prop1<1484850600 OR (n.prop1=1484850600 AND n.prop2<2))
WITH n LIMIT 10 
  SET n.hasUpdated=TRUE,
      n.prop1=1484850600,
      n.prop2=n.prop2+1
RETURN n
匹配(n:Label1)
其中n.hasUpdated=FALSE,且

(n.prop1将查询拆分为两个。处理prop1=1484850600和prop2<2的节点。然后执行第二个查询以处理prop1<1484850600的节点。

stdob--的想法的变体,也许您可以在此处使用另一个标签

或者,您可以运行单独的查询,向要处理的所有节点添加:Unprocessed标签,在匹配要处理的节点时检查:Unprocessed标签,并在处理节点时删除标签

您可以改为使用反向方法,从没有任何新标签开始,在节点没有:Processed标签的位置进行匹配,并在处理节点时设置:Processed标签


使用APOC过程批处理可能也很有用。请参阅和。

n.prop1
设置为
1484850600
时,
n.prop2
的值是多少?prop2的值是0或1,在将prop1设置为1484850600的同时,我还将prop2设置为1,我已经更新了关于这一点的问题,但我需要在上面添加额外的属性1cr的节点和索引。在此之前,我想我会错过第二个条件(n.prop1=1484850600和n.prop2实际上我将查询分为两部分,但在此之前,我希望得到那些未更新的节点。使用COLLECT(n)作为行[a IN rows,其中a.sOn<1484850600]作为小于行,[b在b.sOn=1484850600和b.setC<2的行中]与其他_行一样;我的问题是通过避免最近更新的节点来旋转节点。
MATCH (n:Label1) 
  WHERE n.hasUpdated = FALSE AND
        (n.prop1<1484850600 OR (n.prop1=1484850600 AND n.prop2<2))
WITH n LIMIT 10 
  SET n.hasUpdated=TRUE,
      n.prop1=1484850600,
      n.prop2=n.prop2+1
RETURN n