gpt4 book ai didi

pagination - Cypher SORT 性能

转载 作者:行者123 更新时间:2023-12-05 01:04:45 28 4
gpt4 key购买 nike

我正在尝试完成一项非常常见的任务。我在 Neo4J 数据库中有大量数据集,并且从 RESTful Web 服务中,我想以 25 个节点的块形式返回数据。我的模型很简单:

(:Tenant {Hash:''})-[:owns]->(:Asset {Hash:'', Name:''})

我对 Hash 有独特的限制两个标签上的属性。

如果我想获取第 101 个数据页,我的密码查询将如下所示:
MATCH (:Tenant {Hash:'foo'})-[:owns]->(a:Asset)
RETURN a
ORDER BY a.Hash
SKIP 2500
LIMIT 25

我的数据集由一个租户组成,拥有约 75K Assets 。上面的查询需要大约 30(!) 秒才能完成。我还注意到,我在数据中前进得越远(即 SKIP 越高),查询返回所需的时间就越长。

我很快发现我的性能问题的罪魁祸首是 ORDER BY a.Hash .当我删除它时,查询返回亚秒结果。这实际上是一个惊喜,因为我希望索引本身也被排序。

显然,为了实现合理的分页,我必须有一个一致的排序顺序。
  • 有关执行此查询的任何提示?
  • 分页的替代建议?我可以看到添加专用页面节点,但这将变得难以维护。
  • 无论如何,默认排序顺序是什么,它是否一致?
  • 最佳答案

    嘿@GeoffreyBraaf 本周找了一些时间来查看您的问题,您是对的,有一些实现问题使这不必要地变慢。

    我使用 Timmy 的建议来实现一个在 30 毫秒内完成的 Java 版本。 Cypher 版本需要 100 秒。致力于在 Cypher 中实现 top-n 选择,将其大幅提高了 600 倍。因此,Cypher 现在需要大约 150 毫秒来完成该查询。

    见:https://gist.github.com/jexp/9954509

    该工作已经在 2.0-maint 中合并,并将作为 2.0.2 的一部分发布

    见:https://github.com/neo4j/neo4j/pull/2230

    关于pagination - Cypher SORT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22557278/

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