迁移准备

主要版本引入了重大改进,并且与之前的“主要版本”不兼容。与数据库交互的系统通常需要进行更新。此外,停机时间始终是必需的。

查看变更

首先回顾新功能、修复内容和破坏性变更。在执行此操作时,请列出需要更新的连接到 Neo4j 的外部系统。特别需要注意的是:

  • 发行说明 (Release Notes) 介绍了新版本中引入的功能或所做的变更。

  • 破坏性变更 (Breaking changes) 页面汇总了 Neo4j 4.x 和 Neo4j 5.x 之间所有的破坏性变更列表。

  • 关于 Cypher 语言的变更,请参阅 Cypher® 手册 → 弃用、添加和兼容性

  • 企业版 从 5.23 版本开始,block 格式因其卓越的性能和可扩展性,被推荐为企业版的存储格式。它利用先进的数据结构和内联技术来增强数据局部性,从而实现更好的资源利用率。因此,强烈建议企业版用户尽早将所有数据库迁移到 block 格式,以确保最佳性能。block 格式是 5.22 及更高版本中创建的新数据库的默认格式,也是 5.26 及更高版本中所有数据库的默认格式。有关更多信息,请参阅 操作手册 → 存储格式 → 更改现有数据库的存储格式

  • standardhigh_limit 格式在 5.23 版本中已被弃用,并将在未来的版本中移除。有关更多信息,请参阅 操作手册 → 存储格式 → 格式弃用

  • 从 Neo4j 5.26 LTS 开始,在以下操作系统上部署数据库的功能已被弃用,但在 5.26.x LTS 版本中仍然得到支持:

    • MacOs 11, 12

    • Windows Desktop 10

    • Amazon Linux 2022 AMI

    • Ubuntu Server 16.04, 18.04, 20.04

    • Windows Server 2016, 2019

停机时间

在不同版本的 Neo4j 之间迁移数据库始终需要停机。尽管可以让旧版本以只读模式在线,但这并非总能做到。

由于每个案例的情况不同,建议您准备一个可以测试迁移过程的环境。这将为您提供比估算更准确的时间表,并让您对该过程所需的时长有一个预期的概念。

迁移数据库所需的时间取决于数据库的大小,因为每个数据库都必须进行备份和还原。在 4.4 和 5 之间没有需要进行耗时转换操作的文件格式更改。

磁盘空间注意事项

要迁移数据库,必须创建一个备份(或社区版的转储文件)。备份/转储文件将需要与源数据库相同大小的磁盘空间。因此,在开始之前,应至少预留出相当于数据库目录大小的可用空间。

准备索引

在 Neo4j 5 中,BTREE 索引被 RANGE、POINT 和 TEXT 索引所取代。最好在迁移前在 Neo4j 4.4 中为每个 BTREE 索引和基于索引的约束创建匹配的 RANGE、POINT 或 TEXT 索引并进行填充。这有助于避免 Neo4j 5 在迁移过程中删除 BTREE 索引时可能出现的性能受损。

请勿删除旧的 BTREE 索引。它们必须与 Neo4j 4.4 中新创建的索引共存,因为新的索引无法被您的 4.4 安装版本所使用。旧索引将在迁移过程中自动删除。

选择替代索引

在大多数情况下,RANGE 索引可以替代 BTREE。但在某些情况下,其他索引类型可能更合适,例如:

  • 如果属性值类型为 point,并且该属性用于 distance(距离)或 bounding box(边界框)查询,请使用 POINT 索引。

  • 如果属性值类型为 text 且值可能大于 8Kb,请使用 TEXT 索引。

  • 如果属性值类型为 text 且查询中使用了 CONTAINSENDS WITH,请使用 TEXT 索引。

可以在同一属性上拥有多种不同类型的索引。

创建索引

您可以在 Neo4j 4.4 数据库上运行 SHOW INDEXES 来显示其索引。对于每个索引和基于索引的约束,请创建一个类型为 RANGE、POINT 或 TEXT 的额外索引或约束。

以下代码块展示了如何创建 RANGE 索引:

CREATE RANGE INDEX range_index_name FOR (n:Label) ON (n.prop1)

创建基于 RANGE 索引的约束的示例:

CREATE CONSTRAINT constraint_with_provider FOR (n:Label) REQUIRE (n.prop1) IS UNIQUE OPTIONS {indexProvider: 'range-1.0'}

在数据库迁移过程中,可以使用 neo4j-admin database migrate 命令的 --force-btree-indexes-to-range 选项强制 Neo4j 5 删除所有 BTREE 索引并将其替换为 RANGE 索引。然而,不建议这样做,因为 RANGE 索引并不总是最佳替代方案,且在启动时填充新索引会导致性能受损。

有关创建索引的更多信息,请参阅 Cypher 手册 → 创建索引

应用程序代码

根据您的应用程序与 Neo4j 交互的方式,您应该准备好审查您的应用程序代码。所有可能影响您的应用程序和 Neo4j 的破坏性变更,均可在Neo4j 4.4 和 Neo4j 5.x 之间的破坏性变更中找到。

驱动程序

Neo4j 4.4 驱动程序与 Neo4j 5 前向兼容,而 Neo4j 5 驱动程序与 Neo4j 4.4 向后兼容。这意味着您可以先使用现有的驱动程序将应用程序迁移到 Neo4j 5,然后再升级驱动程序,反之亦然。请注意,只有使用最新的 Neo4j 5 驱动程序,才能访问 Neo4j 5 的新数据库功能。

Neo4j 5.x 中的集群

Neo4j 的集群功能在 5.x 系列中得到了显著改进,旧的因果集群 (causal clusters) 不再受支持。新的集群基础设施将服务器与数据库解耦,提高了可扩展性和云就绪能力。要熟悉这些新概念,请阅读 操作手册 → 集群简介

在 Neo4j 5.23 版本中,发现服务 v1 (discovery service v1) 被弃用,并引入了发现服务 v2。在 2025.01 版本中,发现服务 v1 已被移除。因此,强烈建议从 v1 过渡到 v2,并且必须在升级到 Neo4j 2025.01 之前完成。有关更多详细信息,请参考 操作手册 → 从发现服务 v1 迁移到 v2

插件(包括自定义插件)

请注意您正在使用的插件,并确保它们与 Neo4j 5.x 兼容。如果您开发了任何自定义插件,您应该像审查应用程序代码一样对它们进行审查。

如果您正在使用 Neo4j Bloom 或 Graph Data Science,您可以在 Neo4j 部署中心找到这些产品的最新版本。

如果您正在使用 APOC,请参阅 APOC 迁移指南获取指导。

其他第三方软件和工具

请留意您在 Neo4j 之外使用的任何其他第三方软件和工具。也许您利用了操作脚本来安装、管理、备份或监控您的 Neo4j 部署。您可能还设置了警报并构建了完整的监控仪表板。由于 Neo4j 管理工具、备份和恢复、集群、配置等方面发生了变化,您需要对这些内容进行修订。因此,建议审查所有脚本/工具/第三方软件,并确保它们已准备好并与 Neo4j 5.x 兼容。

© . This site is unofficial and not affiliated with Neo4j, Inc.