首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含多个查询的Neo4j / Cypher分页

包含多个查询的Neo4j / Cypher分页
EN

Stack Overflow用户
提问于 2019-01-20 20:15:06
回答 1查看 348关注 0票数 1

我需要对来自多个性能密集型查询的结果进行分页(极限+偏移量)。

首先,我使用python的生成器模拟分页

代码语言:javascript
复制
first = 100
# Offset
skip = 50

cursor = 0

# Generator is returned by neo4j so we don't have a significant performance impact
q1_results = tx.run(.....)
q2_results = tx.run(.....)

for result in q1_results:
   if cursor < first:
       yield result
       cursor += 1

for result in q2_results:
   if cursor < first:
       yield result
       cursor += 1

但是,这里的问题是执行偏移量:为了以编程的方式实现它,我必须再次迭代第一个结果,并这样做:

代码语言:javascript
复制
first = 100
# Offset
skip = 50

cursor = 0
skip_cursor = 0

# Generator is returned by neo4j so we don't have a significant performance impact
q1_results = tx.run(.....)
q2_results = tx.run(.....)

for result in q1_results:
    if cursor < first & skip_cursor > skip:
        yield result
        cursor += 1
    else:
        skip_cursor += 1

for result in q2_results:
    if cursor < first & skip_cursor > skip:
        yield result
        cursor += 1
    else:
        skip_cursor += 1      

然后,我尝试将查询合并成一个大查询,但是它需要使用聚合函数(如collectdistinct),因此它对性能产生了巨大的影响,查询变得非常缓慢。

我想知道我是否遗漏了什么,在这种情况下是否有实现分页的正确方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 11:09:48

目前,正确的方法是在您的Cypher查询中使用SKIPLIMIT。底层协议没有只返回部分查询结果的机制,因此即使使用代码,仍然可以生成、发送和缓冲整个结果集。

我们的路线图上有一个项目要引入完整的流控制,以及一个反应性API。这将启用对增量传递记录的完全堆栈支持,并提供跳过和取消流的选项。但这是一个复杂的变化,所以最早要到今年年底才会到来。在此之前,你最好的选择是使用Cypher关键字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54280558

复制
相关文章

相似问题

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