备份与恢复

此功能在 AuraDS 中不可用。

此功能处于 alpha 阶段。有关功能分级的更多信息,请参阅 API 分级

在 Neo4j 图数据科学 (GDS) 库中,图和机器学习模型存储在内存中。这主要是出于性能考虑,但缺点是数据库关闭后数据会丢失。目前已有多种方法可以规避此限制,例如以 写模式 运行算法、将图导出为 CSV存储模型。本节描述的备份和恢复程序提供了一种简单且统一的方法来保存图和模型,以便在数据库重启后将其重新加载到内存中。

请注意,同一时间只能存在一个备份。调用备份将会覆盖之前的备份。对于多用户环境,建议由管理员用户执行备份和恢复操作,因为他们拥有访问所有图和模型的权限。

必须为此功能配置 gds.export.location 参数。

语法

备份内存中的图和模型
CALL gds.backup(configuration: Map)
YIELD
  backupId: String,
  backupTime: LocalDateTime,
  exportMillis: Long
表 1. 参数
名称 类型 可选 描述

配置

Map

用于配置备份的附加参数。

表 2. 配置
名称 类型 默认 描述

concurrency

整数

4

执行备份时使用的并发线程数。

includeGraphs

布尔值

true

用于决定是仅备份模型,还是同时备份图的标志。

useLabelMapping

布尔值

true

用于决定在导出图时是否使用节点标签映射的标志。详细信息请参阅 导出图为 CSV

表 3. 结果
名称 类型 描述

graphName

字符串

持久化图的名称,如果持久化的是模型,则为空字符串。

modelName

字符串

持久化模型的名称,如果持久化的是图,则为空字符串。

exportPath

字符串

存储备份的路径。

backupTime

LocalDateTime

创建备份的时间点。

exportMillis

Long

创建备份所花费的毫秒数。

状态 (status)

字符串

持久化操作的状态。结果为 SUCCESSFUL(成功)或 FAILED(失败)。

恢复图和模型
CALL gds.restore(configuration: Map)
YIELD
  restoredGraph: String,
  restoredModel: String,
  status: String,
  restoreMillis: Long
表 4. 参数
名称 类型 可选 描述

配置

Map

用于配置恢复的附加参数。

表 5. 配置
名称 类型 默认 描述

concurrency

整数

4

执行恢复时使用的并发线程数。

表 6. 结果
名称 类型 描述

restoredGraph

字符串

已恢复图的名称,如果恢复的是模型,则为空字符串。

restoredModel

字符串

已恢复模型的名称,如果恢复的是图,则为空字符串。

状态 (status)

字符串

恢复操作的状态。结果为 SUCCESSFUL 或错误消息。

restoreMillis

Long

恢复过程所花费的时间(毫秒)。

示例

以下所有示例应在空数据库中运行。

这些示例以 Cypher 投影 为准。原生投影将在未来的版本中弃用。

首先,我们需要在相应的 Neo4j 数据库中创建一个图。

以下 Cypher 语句将在 Neo4j 数据库中创建示例图:
CREATE
  (alice:Person {name: 'Alice'}),
  (bridget:Person {name: 'Bridget'}),

  (alice)-[:KNOWS]->(bridget)

现在我们需要投影一个想要备份的内存图。

以下语句将使用原生投影来投影一个图,并将其以名称“myGraph”存储在图目录中。
MATCH (n:Person)-[r:KNOWS]->(m:Person)
RETURN gds.graph.project('myGraph', n, m)

现在我们可以运行备份程序,将内存中的图存储到磁盘上。

以下代码将运行备份程序
CALL gds.backup()
YIELD graphName, status
表 7. 结果
graphName 状态 (status)

"myGraph"

"SUCCESSFUL"

现在可以安全地删除内存中的图或关闭数据库了,因为我们可以在以后的时间点将其恢复。

以下代码将删除内存中的图
CALL gds.graph.drop('myGraph')

如果我们想恢复已备份的图,只需运行恢复程序将其重新加载到内存中即可。

以下代码将运行恢复程序
CALL gds.restore()
YIELD restoredGraph
表 8. 结果
restoredGraph

"myGraph"

正如我们所见,该程序恢复了一个名为 myGraph 的图。