Neo4j 4.4 和 Neo4j 5 LTS 之间的重大变更

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

JDK 17 支持和 Scala 升级

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

Neo4j 数据库 5.26 LTS 是最后一个将使用 Java SE 17 平台的版本。建议迁移到 Java SE 21,Neo4j 数据库 5.14 及更高版本均支持 Java SE 21。

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

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

5.26 LTS

Java SE 17 和 Java SE 21

5.14

Java SE 17 和 Java SE 21

5.x

Java SE 17

v4.x

Java SE 11

v3.x

Java SE 8

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

Java API

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

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

Neo4j 5.x 中的集群

在 Neo4j 5 中,因果集群被新的集群实现取代。它提供了数据库的自动化放置和水平扩展。数据库管理员可以指定集群中每个数据库的副本数量,这样您可以拥有比数据库副本更多的服务器,例如 5 个数据库,每个数据库有 3 个副本分布在 6 台服务器上。Neo4j 5.x 中的集群提供了改进的编排能力。

迁移到 Neo4j 5.x 时,建议从头开始构建新集群。请务必阅读《操作手册 → 集群》中的所有详细信息。

Neo4j 5.x 中集群的关键特性

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

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

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

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

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

已弃用的术语

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

  • 只读副本 — 由辅助数据库副本取代。

  • 独立部署 — 不再是一种独特的服务器行为,它只是一个大小为一的集群。这意味着与 4.4 相比,它会打开额外的端口。

Neo4j Admin 和 Neo4j CLI

Neo4j Admin CLI

Neo4j Admin 已刷新。所有管理功能都整合到一个工具中,并按范围分组。它具有改进的功能、更多的控制,以及一套一致的管理参数。

neo4j-admin 具有以下通用概要

neo4j-admin [category] [command] [subcommand]

除了 helpversion 之外,所有管理命令都分为以下三类

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

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

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

neo4j admin 5.x

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

Neo4j CLI

neo4j 具有以下通用概要

neo4j [command]

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

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

  • 术语 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 Core 是 APOC 库的一个子集,由 Neo4j 工程团队提供全面支持。

为避免混淆,完整的 APOC 库现在被称为 APOC 扩展版。APOC 扩展版仅由 Neo4j 社区支持。

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

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 扩展版

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

源代码可在 APOC 扩展版源代码库 中找到。

Neo4j 索引

新的 RANGE 和 POINT 索引取代 BTREE 索引

BTREE 索引类型已被删除。因此,所有使用索引提供程序 native-btree-1.0lucene+native-3.0 的 BTREE 索引和索引支持的约束必须在切换到 5.x 二进制文件之前被替换或删除。最合适的方法是在迁移到 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 - URI 中没有数据库名称的特定请求,例如 db/data/transaction

  • 结果摘要中的 version / version_info

  • Java 驱动程序中的 Session #reset(已弃用很久)。

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

  • Cypher 3.5 模式。

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

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

  • 用于测试属性是否为 null 的 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 存储库中。

© . All rights reserved.