Neo4j图数据科学库(GDS)|入门篇
  iwbGD3gmtxyT 2023年11月02日 82 0

一、简介

Neo4j图形数据科学库(Graph Data Science Library)为Neo4j提供了高效实现的并行通用图形算法版本,以Cypher过程的形式公开。当前最新版本为2.0。

许可证协议: ​Creative Commons 4.0​

本文简要介绍Neo4j图形数据科学库中的主要概念。该库的目标是:为Neo4j提供高效实现的并行通用图形算法版本,以Cypher过程的形式公开。

1、算法

图算法用于计算图、节点或关系的度量。它们可以提供关于图中相关实体(中心度、排名)或社区等固有结构(社区检测、图分区、聚类)的见解。

许多图算法都是迭代方法,使用随机遍历、广度优先或深度优先搜索或模式匹配频繁遍历图进行计算。

由于可能的路径随着距离的增加呈指数增长,许多方法也具有很高的算法复杂性。

幸运的是,存在优化的算法,这些算法利用图形的某些结构,将已经探索过的部分记忆起来,并将操作并行化。只要有可能,我们都会应用这些优化。

这个Neo4j图形数据科学库中包含大量算法,这些算法将在后面​​算法​​一文中作详细说明。

1.1 算法特性

GDS中的算法提供了特定的方法来操作输入图的各个方面,我们称这些为算法特征(Algorithm traits)。当一个算法能够支持一种算法特征时,这表明该算法已经实现——可以根据该特征生成定义良好的结果。概括来讲,目前共存在以下算法特征:

  • 直接的(Directed

该算法在有向图上定义良好。

  • 没有目标的(Undirected)

该算法在无向图上定义良好。

  • 同种类的(Homogeneous)

该算法能够类似地处理其输入图中的所有节点和关系,就像它们都是同一类型一样。如果图中存在多种类型的节点或关系,则在分析算法结果时必须考虑到这一点。

  • 由很多种类组成的(Heterogenous)

该算法能够区分不同类型的节点和/或关系。

  • 加权(Weighted)

该算法支持配置以设置要用作权重的节点和/或关系属性。这些值可以表示成本、时间、容量或其他一些特定于域的属性,这些属性是通过nodeWeightProperty、nodeProperties和relationshipWeightProperty等配置参数指定的。默认情况下,算法会将每个节点和/或关系视为同等重要。

2、图目录

为了尽可能高效地运行算法,Neo4j GDS库使用专门的图格式来表示图数据。因此,有必要将Neo4j数据库中的图数据加载到内存中的图目录中。加载的数据量可以由所谓的图投影控制,该投影还允许过滤节点标签和关系类型等选项。

有关更多信息,请参阅本系列博文中的​​图管理​​部分。

3、版本

Neo4j图数据科学库有两个版本:

[1]开源社区版包括所有算法和功能,但仅限于四个CPU核。

[2]Neo4j Graph Data Science library企业版:

  • 可以在无限数量的CPU核上运行。
  • 支持Neo4j Enterprise Edition中基于角色的访问控制系统(RBAC)。
  • 支持各种其他模型目录功能
  • 在模型目录中存储无限数量的模型
  • 发布存储模型
  • 将存储模型持久化到磁盘
  • 支持优化的图形实现


二、安装

Neo4j图形数据科学(GDS)库作为插件提供给Neo4j图形数据库。插件需要安装到数据库中,并添加到Neo4j配置中的allowlist中。实现这一点有两种主要方法,我们将在本文后面详细介绍。

支持的Neo4j版本:

​2.0​

​4.4​

​4.3​

​1.8​

​4.4​

​4.3​

​4.2​

​4.1​​​ ​[1]

​1.1​

​3.5​

Neo4j Graph Data Science版本

Neo4j版本

[提醒]Neo4j 4.1.1中有一个bug,在使用Cypher投影时可能会导致异常。如果可能,请使用最新的修补程序版本。

1、通过Neo4j桌面客户端安装

安装GDS库最方便的方法是通过名为Neo4j Graph Data Science的Neo4j桌面程序的插件。该插件可以在数据库的“插件”选项卡中找到。

Neo4j图数据科学库(GDS)|入门篇_页面缓存

安装程序将下载GDS库并将其安装在数据库的“plugins”目录中。它还会将以下条目添加到设置文件中:

dbms.security.procedures.unrestricted=gds.*

此配置条目是必需的,因为GDS库访问Neo4j的低级组件以最大限度地提高性能。

如果配置了过程允许列表,请确保还包括GDS库中的过程:

dbms.security.procedures.allowlist=gds.*

注意:在Neo4j 4.2之前,配置设置称为dbms.security.procedures.whitelist

其他安装方式在此略去介绍,更好细节请参考​​官方地址介绍​​。

2、系统要求

1、主存储器

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

Neo4j图数据科学库(GDS)|入门篇_数据科学_02

GDS库堆内存占用情况

2.1 堆大小

堆空间用于存储图形目录和算法状态中的图形投影。当将算法结果写回Neo4j时,堆空间还用于处理事务状态(请参阅​​dbms.tx_state.memory_allocation​​​)。对于纯分析性工作负载,一般建议将堆空间设置为可用主内存的90%左右。这个任务可以通过​​dbms.memory.heap.initial_size​ 和 ​dbms.memory.heap.max_size​​两个参数控制。

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

2.2 页面缓存

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

对于包括本机预测在内的纯分析工作负载,建议减小 ​dbms.memory.pagecache.size​​参数值;这样的修改将有利于增加堆大小的大小。但是,在投影图形时,设置最小页面缓存大小仍然很重要:

  • 对于本机投影,投影图形的最小页面缓存大小可以粗略估计为8KB*100*readConcurrency。
  • 对于Cypher投影,根据查询的复杂性,需要更高的页面缓存。

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

3、CPU

GDS库使用多个CPU核进行图形投影、算法计算和结果写入。为此,需要配置工作负载以充分利用系统中可用的CPU内核对于实现最大性能非常重要。用于投影、计算和写入阶段的并发性是根据算法执行进行配置的,请参见​​常见参数配置相关介绍。​

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

可使用的最大并发性受到限制,具体取决于使用库的许可证:

  • Neo4j图形数据科学图书馆-社区版(GDS CE)
  • 库中的最大并发限制为4。
  • Neo4j图形数据科学库-企业版(GDS EE)

并发限制取决于您是否拥有GDS EE许可证,或者您是否使用GDS CE。GDS库中的最大并发限制不是根据您的Neo4j数据库版本设置的。



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
iwbGD3gmtxyT