【问题标题】:How to query schema statistics in Neo4j如何在 Neo4j 中查询模式统计信息
【发布时间】:2015-08-11 00:40:13
【问题描述】:

我使用的是 Neo4j v2.2.3 社区版。我想按标签查询节点数和按类型查询关系数。我试过了:

MATCH (n:NODE_LABEL) RETURN COUNT(DISTINCT n)

MATCH ()-[r:REL_TYPE]-() RETURN COUNT(DISTINCT r)

虽然第一个查询相当快(2.5 秒),但第二个查询不会在几分钟后结束(某些类型的关系大约有 1 亿个)。但是,根据 [1],此类信息由 Neo4j 保存。因此,我预计这两种情况都会立即得到回应。是否可以通过其他方式获取此信息?

提前致谢!

[1]http://neo4j.com/docs/stable/query-schema-statistics.html

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我不知道查询计划器是如何使用关系类型的计数工作的,但您可以试试这个稍微简单的查询:

    MATCH ()-[r:REL_TYPE]->() RETURN COUNT(*)
    

    由于没有DISTINCT,查询规划器可能更有可能使用这些统计信息。还指定方向将确保关系不会被计算两次(这是错误的并且可能更慢)

    但是如果你PROFILE这个查询,我怀疑它会遍历数据库中的每个节点并跟随节点。 Neo4j 默认为标签保留模式索引,但不为关系类型保留模式索引。因此,如果您碰巧知道关系总是以某个标签(或多个标签)的节点开始,那么通过指定以下内容将有助于 Neo4j:

    MATCH (:SomeLabel)-[r:REL_TYPE]->() RETURN COUNT(*)
    

    MATCH (n)-[r:REL_TYPE]->()
    WHERE n:SomeLabel OR n:SomeOtherLabel
    RETURN COUNT(*)
    

    【讨论】:

    • 确实,您的建议(指定原始节点标签和关系方向)产生了加速,但对于计算许多关系(约数百万)来说仍然太慢。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2016-12-24
    • 2016-04-09
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多