【问题标题】:Same Cypher Query has different performance on different DBs相同的 Cypher Query 在不同的数据库上具有不同的性能
【发布时间】:2015-03-29 05:07:51
【问题描述】:

我有一个包含所有国家/地区的完整数据库(按国家/地区聚类的图表),并且我有各种包含完全相同架构但仅针对一个给定国家/地区的单一国家/地区测试数据库。

我的查询的“开始”节点,是通过匹配某个属性的给定值来识别的,例如

match (country:Country{name:"UK"})

然后进入由变量 country 定义的主查询。因此,鉴于我们从同一个已知节点开始,并且它将遍历两个数据库中与它相关的相同数量的节点,因此我期望查询时间相似。

但是,如果我在完整数据库或仅在一个国家/地区运行查询,我的查询会获得非常不同的性能。

我立即认为我一定遇到了某种“笛卡尔关系”问题,因此我在完整数据库和单个国家/地区数据库中分析了查询,但计划中的每个步骤的配置文件完全相同。我假设配置文件会在计划的某个时间点显示 db hits 显着增加,但值是相同的。显示的个人资料有误吗?

一些尺码: fullDB 有 70k 个节点,test DB 有 672 个节点,full db 中完成查询的时间是 218764ms,而 test db 大约是 3407ms。

在撰写本文时,我意识到某些节点上的传出关系数量将会增加(供应商可以提供不同的国家/地区),我认为这可能是原因,但问题仍然是为什么我没有看到任何在配置文件中表明这一点。

欢迎任何想法。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    你用的是什么版本? 对于您的数据集大小而言,这两个查询时间都太长了。

    所以你可能会检查你的配置/磁盘。

    您是否为:Country(name) 创建了索引/约束并且该索引是否在线?

    请分享您的查询和查询计划。

    【讨论】:

    • 我正在使用最新版本 2.2.0,您能否给我一些关于如何以及如何检查我的配置的指示,是的,在 :Country(name) 上有一个索引,但我相信部分很好,我相信核心查询正在受到性能影响。我将在今天晚些时候添加计划的查询和图像。感谢您的回复。
    • 架构见console.neo4j.org/r/tn929a,我不能分享代码,但这是生产架构的抄本。控制台上查询产生的查询计划和我看到的真实代码是一样的。更多见解:我从计划中注意到正在使用的配置文件是 RULE,所以我运行强制使用 COST,这具有显着的效果,但对于我当前最大的集群来说仍然很慢:
    • 11k 报价、10k 实体、COST 配置文件,在完整数据库中需要 154270 毫秒,在单个国家数据库中下降到 33818 毫秒。
    猜你喜欢
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2019-07-29
    • 2017-12-25
    • 2018-10-24
    相关资源
    最近更新 更多