0
点赞
收藏
分享

微信扫一扫

Neo4j图数据科学库(GDS)|工作原理

一、介绍

从一种很高的角度来看,GDS通过将数据转换并加载到内存中的格式来工作,该格式针对高性能图分析进行了优化。GDS提供图形算法、特征工程和机器学习方法来执行这种内存图格式。这使得数据科学能够高效且可扩展地应用于大型图计算,包括整个图数据库或其中大部分的表示。

在本文中,我们将介绍GDS中的高级工作流,以及支持该工作流的CPU和内存配置信息。

二、通用工作流

下图显示了GDS中的一般工作流,它分为3个高级步骤。

Neo4j图数据科学库(GDS)|工作原理_内存管理

图1:GDS高级工作流


  1. 读取并加载图:GDS需要从Neo4j数据库读取数据,进行转换,然后将其加载到内存中的图中。在GDS中,我们将此过程称为投影图(graph projection,将内存中的图称为投影图。GDS可以同时保存多个图投影,它们由一个称为图目录的组件进行管理。在下文中,我们将更详细地介绍图目录和图投影相关管理工作。
  2. 执行算法:这包括经典的图算法,如中心性、社区检测、路径发现等。还包括嵌入,一种健壮的图形特征工程,以及机器学习管道。
  3. 存储结果:对于图算法的输出/结果,您可能需要做一些事情。GDS允许我们将结果写回数据库,以csv格式导出到磁盘,或将结果流式传输到另一个应用程序或下游工作流。

三、GDS配置

GDS在系统资源方面运行“如饥似渴”;这意味着,它将根据需要使用尽可能多的内存和CPU核,但不会超过用户配置的限制。

如果您在AuraDS(这是Neo4j官方的云支持平台)中运行,GDS配置是完全现成的,因此以下信息你可以忽略阅读。然而,对于其他Neo4j部署,配置工作负载和内存分配以充分利用可用的系统资源对于实现性能最大化非常重要。

CPU和并发性

GDS使用多个CPU核进行图投影、算法和结果写入。这允许GDS并行计算,并显著加快处理时间。并行化级别是通过投影、算法或其他操作方法中的并发参数在每次执行时配置的。

GDS中大多数操作使用的默认并发是4。4也是可以与社区许可证一起使用的最大并发性。在GDS企业中,并发是无限的。

内存

GDS在Neo4j实例中运行,因此受常规Neo4j内存配置的约束。下面是Neo4j内存管理的图示。Neo4j使用Java虚拟机(JVM),因此,内存管理分为堆和堆外使用。

Neo4j图数据科学库(GDS)|工作原理_数据_02

图2:Neo4j内存管理

其中,在配置文件中可以分配两种主要类型的内存:

  • 堆空间:用于存储内存图、执行GDS算法、查询执行和事务状态
  • 页面缓存:用于索引和缓存存储在磁盘上的Neo4j数据,以便提高查询数据库和投影图的性能。

内存配置建议

数据科学计算有一种内存密集型的趋势,GDS也不例外。一般来说,我们建议在配置堆大小时要慷慨,分配尽可能多的堆,同时仍然提供足够的页面缓存来加载数据并支持Cypher脚本查询。这可以通过Neo4j配置文件中的​​bms.memory.heap.initial_size​​dbms.memory.heap.max_size​​参数的设置来完成。

还可以使用内存估计(Memory Estimation)尽早衡量堆大小需求。内存估计是GDS中的一个过程,它允许我们在实际执行数据之前估计对数据运行投影、算法或其他操作所需的内存。我们将在本系列短文后面详细介绍内存估计的确切命令。

就页面缓存而言,对于纯分析性工作负载,建议减少页面缓存,以增加堆大小。但是,在投影图时,设置最小页面缓存大小仍然很重要。对于标准、本机和投影,此最小值估计约为8KB*100*readConcurrency。可以通过Neo4j配置中的参数dbms.memory.heap.initial_size和dbms.memory.heap.max_size实现

有关调整这些配置的更多信息和详细指导,请参阅​​系统需求文档​​。


四、主要引用

​​https://graphacademy.neo4j.com/courses/gds-product-introduction/1-neo4j-gds-overview/2-how-it-works/​​

举报

相关推荐

0 条评论