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)。
| 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 Admin 和 Neo4j CLI
Neo4j Admin CLI
Neo4j Admin 已刷新。所有管理功能都整合到一个工具中,并按范围分组。它具有改进的功能、更多的控制,以及一套一致的管理参数。
neo4j-admin 具有以下通用概要
neo4j-admin [category] [command] [subcommand]
除了 help 和 version 之外,所有管理命令都分为以下三类
-
dbms- DBMS 范围的(适用于单个和集群环境)管理任务 -
server- 服务器范围的管理任务 -
database- 数据库特定的管理任务

有关新管理命令的更多信息,请参阅《操作手册 → Neo4j Admin 和 Neo4j CLI》。
Neo4j CLI
neo4j 具有以下通用概要
neo4j [command]
command 是 neo4j-admin server 类别中命令的别名。
| [命令] | neo4j-admin |
|---|---|
|
|
|
|
|
|
|
|
|
|
有关更多信息,请参阅《操作手册 → Neo4j Admin 和 Neo4j CLI》。
备份和恢复 仅限企业版
Neo4j 5 的备份和恢复功能已进行重大改进。新的备份和恢复子系统现在支持差异备份、(有限的)时间点恢复和构件。它与旧子系统不兼容。
其主要功能包括但不限于
-
完整备份和差异备份。
-
备份是不可变构件(文件系统中压缩的单个项目)
-
一个用于简化操作的 API。
-
恢复到特定时间点或跨差异备份集的事务 ID。
-
可以在备份链上执行聚合,以创建新的、已恢复的完整备份。
有关更多信息,请参阅《操作手册 → 备份和恢复》。
-
自治集群的备份*
使用自治集群时,您不再能保证数据库在任何给定服务器上都可用。通过提供一组适当的 URI 和 --database 参数,操作员可以构建适当的备份命令。该命令将循环遍历 URI,尝试服务 –database= 参数中的请求。先前 URI 上已备份的数据库将被忽略。
配置设置刷新
-
在 Neo4j 5 中,所有配置设置都分为
server、dbms、db、initial、browser和client命名空间。这意味着一些设置已被重命名。例如,metrics.enabled已重命名为server.metrics.enabled。 -
由
fabric命名空间标识的现有 Fabric 配置设置已从 neo4j.conf 文件中删除。 -
术语
internal取代了先前版本中使用的unsupported和experimental术语。此命名空间专用于内部使用且可能未经通知而更改的功能。 -
默认情况下,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 查询返回的元数据得到了改进。
-
一些警告代码的严重性已移至信息级别
-
SubqueryVariableShadowingWarning→SubqueryVariableShadowing -
NoApplicableIndexWarning→NoApplicableIndex -
CartesianProductWarning→CartesianProduct -
DynamicPropertyWarning→DynamicProperty -
EagerOperatorWarning→EagerOperator -
ExhustiveShortestPathWarning→ExhaustiveShortestPath -
UnboundedVariableLengthPatternWarning→UnboundedVariableLengthPattern -
ExperimentalFeature→RuntimeExperimental
-
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 中,并且 |
APOC 扩展版
APOC 完整包(APOC 核心 + APOC 扩展版)不再可用。如果您有兴趣使用不受支持的 APOC 扩展版方法,则需要参考 https://github.com/neo4j-contrib/neo4j-apoc-procedures 存储库。
源代码可在 APOC 扩展版源代码库 中找到。
Neo4j 索引
新的 RANGE 和 POINT 索引取代 BTREE 索引
BTREE 索引类型已被删除。因此,所有使用索引提供程序 native-btree-1.0 或 lucene+native-3.0 的 BTREE 索引和索引支持的约束必须在切换到 5.x 二进制文件之前被替换或删除。最合适的方法是在迁移到 5.x 之前在 4.4 中重新创建它们。然后,在迁移过程中,5.x 将检查每个 BTREE 索引和索引支持的约束是否具有等效类型的索引和提供程序,并将它们删除。
|
如果出现以下情况,Neo4j 将无法启动
|
日志记录
从 Neo4j 5 开始,Neo4j 使用 Log4j 2 进行日志记录。
配置变更
文件管理的配置设置已移至 Log4j 配置文件,并对查询日志的内容设置进行了审查和简化。
|
有关更高级的用法,请参阅《Log4j 官方文档》。 有关默认 Neo4j 安装行为以及配置其使用 Log4j 的典型示例的更多信息,请参阅《操作手册 → 日志记录》。 |
指标
所有指标名称现在都包含 dbms 或 database 命名空间,并且用于切换此行为的设置 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.indexesSHOW INDEXES命令db.indexDetailsSHOW INDEXES YIELD *命令db.schemaStatementsSHOW INDEXES YIELD *命令和SHOW CONSTRAINTS YIELD *命令db.constraintsSHOW CONSTRAINTS命令db.createIndexCREATE INDEX命令db.createUniquePropertyConstraintCREATE CONSTRAINT … IS UNIQUE命令db.index.fulltext.createNodeIndexCREATE FULLTEXT INDEX命令db.index.fulltext.createRelationshipIndexCREATE FULLTEXT INDEX命令db.index.fulltext.dropDROP INDEX命令dbms.proceduresSHOW PROCEDURES命令dbms.functionsSHOW FUNCTIONS命令dbms.listTransactionsSHOW TRANSACTIONS命令dbms.killTransactionTERMINATE TRANSACTIONS命令dbms.killTransactionsTERMINATE TRANSACTIONS命令dbms.listQueriesSHOW TRANSACTIONS命令dbms.killQueryTERMINATE TRANSACTIONS命令dbms.killQueriesTERMINATE TRANSACTIONS命令dbms.scheduler.profile-
外部依赖项
所有 Neo4j 5 外部依赖项及其版本都列在 Neo4j Maven 存储库中。