系统要求

主内存

GDS 库在 Neo4j 实例内运行,因此受常规 Neo4j 内存配置 的约束。

memory usage
图 1. GDS 堆内存使用情况

堆大小

堆空间用于存储图目录中的图投影以及算法状态。

当将算法结果写回 Neo4j 时,堆空间也用于处理事务状态(请参阅 dbms.tx_state.memory_allocation)。对于纯分析工作负载,一般建议将堆空间设置为可用主内存的 90% 左右。这可以通过 server.memory.heap.initial_sizeserver.memory.heap.max_size 进行设置。

当将算法结果写回 Neo4j 时,堆空间也用于处理事务状态(请参阅 dbms.tx_state.memory_allocation)。对于纯分析工作负载,一般建议将堆空间设置为可用主内存的 90% 左右。这可以通过 dbms.memory.heap.initial_sizedbms.memory.heap.max_size 进行设置。

为了更好地估计投影图和运行算法所需的堆空间,请考虑使用 内存估计 功能。该功能使用来自 Neo4j 计数存储(count store)的节点和关系数量信息,来估计所有相关数据结构的内存消耗。

页缓存 (Page cache)

页缓存用于缓存 Neo4j 数据,有助于避免高昂的磁盘访问。

对于包括 原生投影 在内的纯分析工作负载,建议减少配置的页缓存大小,以增加堆空间。

要配置页缓存大小,可以使用以下 Neo4j 配置属性 server.memory.pagecache.size

要配置页缓存大小,可以使用以下 Neo4j 配置属性 dbms.memory.pagecache.size

然而,在投影图时设置最小页缓存大小仍然很重要。

然而,如果需要将算法结果写回 Neo4j,写入性能在很大程度上取决于存储碎片以及要写入的属性和关系数量。我们建议从 250MB * writeConcurrency 左右的页缓存大小开始,并评估写入性能并进行相应调整。理想情况下,如果已经使用 内存估计 功能找到了合适的堆大小,剩余的内存可以用于页缓存和操作系统。

如果 Neo4j 实例同时运行操作型和分析型工作负载,则建议为了堆空间而减小页缓存大小。有关页缓存大小调整的常规信息,请参阅 Neo4j 内存配置

原生内存

原生内存由 Apache Arrow 服务器 用于存储接收到的数据。

如果您启用了 Apache Arrow 服务器,我们也建议预留一些原生内存。所需的内存量取决于客户端使用的批处理大小。通过 Arrow 接收的数据在被转换并加载到堆内图之前,会暂时存储在直接内存(direct memory)中。

CPU

该库使用多个 CPU 核心进行图投影、算法计算和结果写入。配置工作负载以充分利用系统中可用的 CPU 核心对于实现最高性能非常重要。投影、计算和写入阶段使用的并发性是按算法执行来配置的,请参阅 常用配置参数

图数据科学库中大多数操作使用的默认并发性为 4。

可使用的最大并发性取决于使用该库所依据的许可证。

  • Neo4j 图数据科学库 - 社区版 (GDS CE)

    • 库中的最大并发性限制为 4。

  • Neo4j 图数据科学库 - 企业版 (GDS EE)

    • 库中的最大并发性不受限制。如需注册许可证,请访问 neo4j.com

并发限制是根据您是否拥有 GDS EE 许可证或是否正在使用 GDS CE 来确定的。图数据科学库中的最大并发限制并非根据您的 Neo4j 数据库版本设置。