GDS 功能开关

功能开关不属于公共 API 的一部分,在 GDS 库的次要版本更新中可能会被移除或更改。
AuraDS 不支持使用功能开关。

BitIdMap 功能开关

GDS 企业版使用一种不同于 GDS 社区版的内存图实现,该实现消耗的内存更少。此内存图实现的性能取决于底层图的大小和拓扑结构。对于较小规模图的写入程序和图创建过程,它可能会变慢。要切换到 GDS 社区版所使用的更耗内存的实现,可以通过调用以下过程来禁用此功能。

CALL gds.features.useBitIdMap(false)

邻接表压缩 (Packed Adjacency List) 开关

GDS 的内存图基于压缩稀疏行 (CSR) 布局。默认情况下,CSR 数据结构中单个节点的邻接表是使用变长编码和增量编码组合进行压缩存储的。压缩策略可以更改为未压缩或整数打包 (Integer Packing) 方法。

整数打包是 GDS 中的一种替代压缩策略。与默认压缩相比,它至少能达到相似甚至通常更好的压缩率。更高的压缩率意味着降低了内存图的内存消耗,即我们可以在相同的内存容量下容纳更多的图数据。在压缩性能方面,整数打包比默认压缩表现更好。虽然压缩性能有所提升,但图投影的速度通常保持不变,因为运行时间不一定取决于关系压缩,而是取决于图投影的其他部分,如 ID 映射或属性加载。由于更好的内存局部性和更少的分支预测失败,解压性能始终优于默认压缩策略。特别是对于遍历密集型算法,将从这种性能提升中受益。

与默认压缩策略相比,一个重要的区别是整数打包实现使用堆外内存来存储 CSR 数据结构。在为 Neo4j 及剩余操作系统内存规划 JVM 堆和页缓存 (page cache) 大小时,需要考虑这一点。如果启用了该功能,数据将被存储在与操作系统共享的内存区域中(类似于页缓存),但没有大小限制。如果在图投影期间没有足够的可用内存,内存分配将导致未定义的行为,并极有可能导致 JVM 崩溃。

要切换到使用打包邻接表,请使用以下过程调用。

CALL gds.features.usePackedAdjacencyList(true)

要切回默认压缩或(如果已启用)未压缩的邻接表,请使用以下过程调用。

CALL gds.features.usePackedAdjacencyList(false)

要将设置重置为默认值,请使用以下过程调用。

CALL gds.features.usePackedAdjacencyList.reset() YIELD enabled

未压缩邻接表开关

GDS 的内存图基于压缩稀疏行 (CSR) 布局。默认情况下,CSR 数据结构中的单个节点邻接表以压缩格式存储。这种压缩降低了图的内存使用量,但在算法执行期间需要额外的计算时间进行解压。使用未压缩的邻接表虽然会增加内存消耗,但可以提供更快的遍历速度。由于常驻内存大小增加,它也可能产生负面的性能影响。使用更多内存需要更高的内存带宽来读取相同的邻接表。压缩与未压缩哪种更好,很大程度上取决于图的拓扑结构和算法。遍历密集型算法(如三角形计数)更有可能从未压缩的邻接表中受益。在度分布高度倾斜(“幂律分布”)的图中,非常密集的节点通常能实现更高的压缩率。在这些图上使用未压缩的邻接表,更有可能遇到内存带宽限制。

要切换到未压缩的邻接表,请使用以下过程调用。

CALL gds.features.useUncompressedAdjacencyList(true)

要切换到压缩的邻接表,请使用以下过程调用。

CALL gds.features.useUncompressedAdjacencyList(false)

要将设置重置为默认值,请使用以下过程调用。

CALL gds.features.useUncompressedAdjacencyList.reset() YIELD enabled

邻接表重排序 (Reordered Adjacency List) 开关

由于从底层存储读取数据的方式,GDS 的内存图最初写入的邻接表是无序的。此功能开关将在图创建过程中增加一个步骤,对邻接表进行重排序,使其遵循内部节点 ID 的顺序。这种重排序产生的 CSR 表示形式更接近教科书式的布局,即邻接表按节点 ID 顺序写入。对于某些图和某些算法,重排序可能带来好处,因为由同一线程遍历的邻接表更有可能在内存(缓存)中彼此靠近存储。这种排序顺序取决于在内存图中分配的 GDS 内部节点 ID,而不是从底层 Neo4j 存储中加载的节点 ID。

要启用重排序,请使用以下过程调用。

CALL gds.features.useReorderedAdjacencyList(true)

要禁用重排序,请使用以下过程调用。

CALL gds.features.useReorderedAdjacencyList(false)

要将设置重置为默认值,请使用以下过程调用。

CALL gds.features.useReorderedAdjacencyList.reset() YIELD enabled