GDS 功能开关
功能开关不被视为公共 API 的一部分,可能会在 GDS 库的小版本发布之间被删除或更改。 |
功能开关在 AuraDS 中不可用。 |
BitIdMap 功能开关
GDS 企业版使用不同的内存中图实现,与 GDS 社区版相比,它消耗的内存更少。这种内存中图实现的性能取决于底层图的大小和拓扑结构。对于较小图的写入过程和图创建,它可能会更慢。要切换到 GDS 社区版中使用的更占用内存的实现,可以使用以下过程调用来禁用此功能。
CALL gds.features.useBitIdMap(false)
Packed Adjacency List 开关
整数打包是 GDS 中的一种替代压缩策略,与默认压缩相比,它会导致至少相似但大多数情况下更好的压缩率。更好的压缩率会导致内存中图的内存消耗降低,即,我们可以在相同数量的内存中容纳更多图数据。在压缩性能方面,整数打包比默认压缩实现更好的压缩性能。虽然压缩性能更好,但图投影大多会和以前一样快,因为运行时间并不一定受压缩关系支配,而是受图投影的其他部分支配,例如 ID 映射或属性加载。由于更好的内存局部性和更少的分支,解压缩性能始终优于默认压缩策略。特别是遍历密集型算法将受益于这种性能提升。
与默认压缩策略相比,一个重要的区别是整数打包实现使用堆外内存来存储CSR数据结构。在为Neo4j和剩余操作系统内存设置JVM堆和页面缓存内存大小时,需要考虑这一点。如果启用了该功能,数据将存储在与操作系统共享的内存区域中,类似于页面缓存,但没有大小限制。如果在图形投影期间没有足够的可用内存,分配将导致未定义的行为,并且很可能导致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
重新排序邻接列表切换
用于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