作业估算

如果您不确定应为作业使用哪个 计算池选择器,可以使用 Neo4j_Graph_Analytics.estimate_experimental 架构中的过程来估算作业。该架构镜像了算法过程,但不是计算结果,而是估算作业所需的内存量,并根据该内存需求提供计算池选择器建议。

估算作业

假设您想在存放于 EXAMPLE_DB.DATA_SCHEMA 架构中的图上运行 弱连通分量 算法。

CALL Neo4j_Graph_Analytics.graph.wcc('CPU_X64_XS', {
    'project': {
        'nodeTables': ['EXAMPLE_DB.DATA_SCHEMA.NODES'],
        'relationshipTables': {
            'EXAMPLE_DB.DATA_SCHEMA.RELATIONSHIPS': {
                'sourceTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
                'targetTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
                'orientation': 'NATURAL'
            }
        }
    },
    'compute': { 'consecutiveIds': true },
    'write': [{
        'nodeLabel': 'NODES',
        'outputTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS'
    }]
});

示例中使用的计算池选择器是 CPU_X64_XS,它是可用的最小计算池选择器。根据图的大小,该选择器可能不足以运行作业。遗憾的是,只有在作业实际执行时才能得知这一点;即使我们能够投影图,计算仍可能因内存不足而失败。

为了更好地了解内存需求,我们可以改用 estimate 过程。

CALL Neo4j_Graph_Analytics.estimate_experimental.wcc('CPU_X64_XS', {
    'project': {
        'nodeTables': ['EXAMPLE_DB.DATA_SCHEMA.NODES'],
        'relationshipTables': {
            'EXAMPLE_DB.DATA_SCHEMA.RELATIONSHIPS': {
                'sourceTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
                'targetTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
                'orientation': 'NATURAL'
            }
        }
    },
    'compute': { 'consecutiveIds': true },
    'write': [{
        'nodeLabel': 'NODES',
        'outputTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS'
    }]
});

正如您所见,过程的配置与 wcc 过程完全相同。需要注意的是,我们同样需要提供一个计算池选择器,因为这会触发一个作业来估算内存需求。不过,该作业不会投影图或计算结果,所以使用最小的池选择器是可以的。如果同时有更多用户使用该选择器,您可能需要 更改该池的计算节点数量

运行此过程将返回与 wcc 过程相同的作业结果布局,只是 JOB_RESULT 不同。

表 1. 结果
JOB_ID JOB_STATUS JOB_START JOB_END JOB_RESULT

job_42

SUCCESS

..

..

{
  "arguments": {
    "node_count": 10000000,
    "node_label_count": 1,
    "node_property_count": 1,
    "relationship_count": 500000000,
    "relationship_property_count": 1,
    "relationship_type_count": 1
  },
  "estimation": {
    "bytes_total": 6012198024
  },
  "recommendation": {
    "pool_selector": "CPU_X64_M",
  }
}

JOB_RESULT 包含以下信息

  • arguments 包含我们从节点表和关系表推断出的计数信息。这包括行数以及用于推断属性数量的列数。

  • estimation 是估算作业的原始结果,包含运行作业所需的总字节数。

  • recommendation 包含基于估算内存需求的推荐计算池选择器。

示例显示,作业大约需要 6 GB 内存才能运行,建议使用 CPU_X64_M 计算池选择器。CPU_X64_XS 计算池仅提供 6 GB 内存,但我们还需考虑操作系统和计算节点上其他进程所占用的内存。当然,作业仍会使用较小的计算池启动,但极有可能因内存不足而失败。

一旦得到结果,您可以将架构从 estimate_experimental 更改为 graph,并使用推荐的计算池选择器再次运行作业。

估算输入

请注意,推荐是基于对节点表和关系表行数的计数。如果您的表实际上是视图,并且涉及复杂的查询执行,这可能会在消费者端产生意外的成本。