Neo4j 4.4 与 Neo4j 5.x 之间的重大变更

以下是 Neo4j 4.4 与 Neo4j 5.x 之间的重大变更。

JDK 17 支持和 Scala 升级

Neo4j 5 支持 JDK 17 和 Scala 2.13 升级。

下表显示了运行 Neo4j 实例的兼容 Java 虚拟机 (JVM)。

表 1. Neo4j 版本和 JVM 要求
Neo4j 版本 Java 版本

5.x

Java SE 17

v4.x

Java SE 11

v3.x

Java SE 8

如果您的机器上运行着其他 Java 应用程序,并且这些应用程序托管着 Neo4j,请确保这些应用程序与您的 Neo4j 运行的 Java 版本兼容。或者,您应该配置在同一台机器上运行多个 JDK。

Java API

Java API 类和设置的所有重大变更都列在变更日志部分中 - Neo4j 5 中对 Java API 的更改

遍历 API 在 Neo4j 5 中重新引入,经过彻底的代码审查,增加了更多文档和示例。

自治集群 仅企业版

在 Neo4j 5 中,因果集群被一种名为自治集群新的集群实现所取代。它提供数据库的自动放置和水平扩展。DBA 可以指定每个数据库在集群中的副本数量,以便您可以拥有比数据库副本更多的服务器,例如 5 个数据库,每个数据库有 3 个副本分布在 6 台服务器上。自治集群提供改进的编排功能。

迁移到 Neo4j 5 时,建议从新的集群开始。请确保您阅读了操作手册 → 集群中的所有详细信息。

自治集群的主要功能

  • 数据库被复制到集群内的一组服务器中。

  • 所有服务器都是平等的。

  • 集群决定将哪些数据库分配给哪些服务器。

  • 数据库副本可以是主副本或从副本。

  • 随着时间的推移,随着服务器的添加和删除,分配可能会发生变化。

已弃用的术语

  • 核心 — 被主数据库副本取代。

  • 只读副本 — 被从数据库副本取代。

  • 独立 — 不再是一种独立的服务器行为,它只是一个大小为 1 的集群。但这确实意味着它会打开与 4.4 相比更多的端口。

Neo4j Admin 和 Neo4j CLI

Neo4j Admin CLI

Ne4j Admin 已刷新。所有管理功能都集中在一个工具中,并按范围分组。它具有改进的功能、更多控制权以及针对管理员的一致参数集。

neo4j-admin 的一般语法如下

neo4j-admin [类别] [命令] [子命令]

除了helpversion之外的所有管理命令都组织到以下三个类别中

  • dbms - DBMS 范围(适用于单机和集群环境)的管理任务

  • server - 服务器范围的管理任务

  • database - 数据库特定的管理任务

neo4j admin 5.x

有关新管理命令的更多信息,请参阅操作手册 → Neo4j Admin 和 Neo4j CLI

Neo4j CLI

neo4j 的一般语法如下

neo4j [命令]

commandneo4j-admin server 类别中命令的别名。

[命令] neo4j-admin

console

neo4j-admin server console

restart

neo4j-admin server restart

start

neo4j-admin server start

status

neo4j-admin server status

stop

neo4j-admin server stop

有关更多信息,请参阅操作手册 → Neo4j Admin 和 Neo4j CLI

备份和恢复 仅企业版

备份和恢复在 Neo4j 5 中经历了重大改革。新的备份和恢复子系统现在支持增量备份、(有限的)时间点恢复和工件。它与旧子系统不兼容。

它的一些主要功能包括但不限于

  • 完全备份和增量备份。

  • 备份是不变的工件(文件系统中的压缩单个项目)

  • 一个简化操作的 API。

  • 恢复到时间点或增量备份集中的事务 ID。

  • 可以在备份链上执行聚合以创建新的恢复的完全备份。

    有关更多信息,请参阅操作手册 → 备份和恢复

  • 自治集群的备份*

使用自治集群,您不再保证数据库在任何给定的服务器上可用。通过提供一组适当的 URI 和--database参数,操作员可以构建适当的备份命令。该命令将循环遍历 URI,尝试在–database=参数中服务请求。以前在 URI 上备份过的数据库将被忽略。

配置设置刷新

  • 在 Neo4j 5 中,所有配置设置都分为serverdbmsdbinitialbrowserclient命名空间。这意味着一些设置已被重命名。例如,metrics.enabled 被重命名为server.metrics.enabled

  • 从 neo4j.conf 文件中删除了由 fabric 命名空间标识的现有 Fabric 配置设置。

  • 术语 internal 代替了先前版本中使用的术语 unsupportedexperimental。此命名空间专用于内部使用的功能,可能会在未经通知的情况下更改。

  • neo4j.conf 中的设置默认情况下启用严格验证。
    旧参数 dbms.config.strict_validation=false 默认情况下被 server.config.strict_validation.enabled=true 替换。这确保配置文件不包含错误或不正确的信息,并防止 Neo4j 使用 neo4j.conf 文件中的错误设置启动。

  • 企业版独有 db.tx_state.memory_allocation 现在默认情况下为 ON_HEAP

  • Neo4j Admin 现在包含一个用于迁移配置文件的工具。将 4.4 配置迁移到 5.x 时,该工具会通知关于尚未迁移的设置,例如,因为某个概念或行为在新的 MAJOR 版本中不存在。有关更多信息,请参见 操作手册 → 迁移 Neo4j 配置文件

有关更改的设置的完整列表,请参见 Neo4j 5 中的配置设置更改

Fabric 的复合数据库

neo4j.conf 文件中 fabric 命名空间中的所有配置设置都已移至 system 数据库。这些设置现在通过 Cypher® 管理。

Fabric 用于管理具有动态组合的分片和联合数据库。复合数据库被视为任何其他数据库,并使用标识更复杂存储基础设施的名称创建,该基础设施由本地、集群和远程数据库的聚合形成。

作为此改进的一部分,Neo4j 用户现在可以使用 Cypher 配置 Fabric 以及

  • 无需重启即可更改 Fabric 配置

  • 支持多个 Fabric 数据库

  • 提供一种通用方法来管理数据库,无论它们是本地、远程还是分片。

  • 通过将 Fabric 与自治集群相结合来集成 Neo4j 数据库基础设施。

有关更多信息,请参见 操作手册 → 复合数据库

Cypher

Cypher 语法

Cypher 语言语法中的所有更改都详细记录在 Cypher 手册 → 删除、弃用、添加和扩展 中。彻底查看您要迁移到的版本中的此部分,并在您的代码中进行必要的更改。

Cypher 中的错误/警告/信息处理

Cypher 发现的许多语义错误在它们是语义错误时被报告为 Neo.ClientError.Statement.SyntaxError。在 Neo4j 5 中,Cypher 查询返回的元数据得到了改进。

  • 一些警告代码的严重程度已移至信息

    • SubqueryVariableShadowingWarningSubqueryVariableShadowing

    • NoApplicableIndexWarningNoApplicableIndex

    • CartesianProductWarningCartesianProduct

    • DynamicPropertyWarningDynamicProperty

    • EagerOperatorWarningEagerOperator

    • ExhustiveShortestPathWarningExhaustiveShortestPath

    • UnboundedVariableLengthPatternWarningUnboundedVariableLengthPattern

    • ExperimentalFeatureRuntimeExperimental

Neo4j 5 APOC 核心库

APOC 核心是 APOC 库的一个子集,由 Neo4j 工程完全支持。

完整的 APOC 库现在被称为 APOC Extended,以避免混淆。APOC Extended 由 Neo4j 社区独家支持。

Neo4j 不推荐或鼓励在生产环境中使用 APOC Extended 方法。

APOC 核心

请参见 APOC 核心文档

APOC 核心库包含在 Neo4j 安装包、docker 镜像中,大多数功能在 Aura 中可用。有关更多信息,请参见 Neo4j Aura → APOC 支持

有关源代码,请参见 APOC 核心源代码库

从 APOC 5 开始,neo4j.conf 文件不再支持 apoc.* 配置设置。所有配置设置必须在 apoc.conf 中指定或使用环境变量设置。

如果配置设置位于 neo4j.conf 中,并且 server.config.strict_validation.enabled 设置为 true,则数据库将无法启动。此外,如果 server.config.strict_validation.enabled 被禁用,则 neo4j.conf 中留下的任何 apoc.* 设置都不会被读取,因此也不会被设置。

APOC Extended

APOC 完整包(APOC 核心 + APOC Extended)不再可用。如果您有兴趣使用不受支持的 APOC Extended 方法,则需要参考 https://github.com/neo4j-contrib/neo4j-apoc-procedures 库。

源代码在 APOC Extended 源代码库 中可用。

Neo4j 索引

新的 RANGE 和 POINT 索引替换 BTREE 索引

BTREE 索引类型已删除。因此,在切换到 5.x 二进制文件之前,必须替换或删除所有 BTREE 索引和具有索引提供程序 native-btree-1.0lucene+native-3.0 的索引支持约束。最合适的方法是在迁移到 5.x 之前在 4.4 中重新创建它们。然后,在迁移过程中,5.x 将检查每个 BTREE 索引和索引支持约束是否具有等效类型的索引和提供程序,并将删除它们。

如果存在以下情况,Neo4j 将无法启动

  • 存在任何 BTREE 索引,并且在相同模式上至少不存在一个 RANGE/POINT/TEXT 类型的索引。

  • 存在任何具有提供程序 native-btree-1.0lucene+native-3.0 的索引支持约束,除非在相同模式上存在具有 range-1.0 提供程序的相同约束类型约束。

日志记录

从 Neo4j 5 开始,Neo4j 使用 Log4j 2 进行日志记录。

配置更改

文件管理的配置设置已移至 Log4j 配置文件,并且对查询日志的内容设置进行了审查和简化。

有关更高级的用法,请参见 Log4j 官方文档

有关默认 Neo4j 安装的行为以及一些配置它以使用 Log4j 的典型示例的更多信息,请参见 操作手册 → 日志记录

指标

所有指标名称现在都包含 dbmsdatabase 命名空间,并且切换此行为的设置 metrics.namespaces.enabled 已删除。

启用和禁用指标类型的所有设置 (metrics.*.enabled) 已删除。它们被 server.metrics.filter 替换,该设置采用要启用的指标的正则表达式。

删除

产品中已删除未使用的和遗留代码

  • 遗留 HTTP 事务 API - 没有数据库名称的特定请求,例如 db/data/transaction

  • 结果摘要的 version / version_info

  • 来自 Java 驱动程序的会话 #reset(已长时间弃用)。

  • BTREE 索引 - 改用 RANGE 和 POINT 索引。

  • Cypher 3.5 模式。

  • 不允许重复的关系变量。

  • 列表到布尔值的自动强制转换。

  • exists() 函数用于测试属性是否为空。

  • 多数据中心设置,包括 causal_clustering.multi_dc_license

  • 过程

    表 2. 已删除的过程
    过程 替换

    db.indexes

    SHOW INDEXES 命令

    db.indexDetails

    SHOW INDEXES YIELD * 命令

    db.schemaStatements

    SHOW INDEXES YIELD * 命令和 SHOW CONSTRAINTS YIELD * 命令

    db.constraints

    SHOW CONSTRAINTS 命令

    db.createIndex

    CREATE INDEX 命令

    db.createUniquePropertyConstraint

    CREATE CONSTRAINT …​ IS UNIQUE 命令

    db.index.fulltext.createNodeIndex

    CREATE FULLTEXT INDEX 命令

    db.index.fulltext.createRelationshipIndex

    CREATE FULLTEXT INDEX 命令

    db.index.fulltext.drop

    DROP INDEX 命令

    dbms.procedures

    SHOW PROCEDURES 命令

    dbms.functions

    SHOW FUNCTIONS 命令

    dbms.listTransactions

    SHOW TRANSACTIONS 命令

    dbms.killTransaction

    TERMINATE TRANSACTIONS 命令

    dbms.killTransactions

    TERMINATE TRANSACTIONS 命令

    dbms.listQueries

    SHOW TRANSACTIONS 命令

    dbms.killQuery

    TERMINATE TRANSACTIONS 命令

    dbms.killQueries

    TERMINATE TRANSACTIONS 命令

    dbms.scheduler.profile

    -

弃用

  • apoc.create.uuid()apoc.create.uuids() — 已弃用,并被现有的 UUID.randomUUID() 替换。

外部依赖项

所有 Neo4j 5 外部依赖项及其版本都列在 Neo4j Maven 存储库 中。