备份和恢复

AuraDS 中不提供此功能。

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

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

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

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

语法

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

configuration

映射

配置备份的其他参数。

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

concurrency

整数

4

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

includeGraphs

布尔值

true

决定是否仅备份模型或还备份图的标志。

useLabelMapping

布尔值

true

决定导出图时是否使用节点标签映射的标志。有关详细信息,请参阅 将图导出到 csv

表 3. 结果
名称 类型 描述

graphName

字符串

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

modelName

字符串

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

exportPath

字符串

备份存储的路径。

backupTime

LocalDateTime

创建备份的时间点。

exportMillis

Long

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

status

字符串

持久化操作的状态。可以是 SUCCESSFULFAILED

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

configuration

映射

配置恢复的额外参数。

表 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 的图。