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.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
-
外部依赖项
所有 Neo4j 5 外部依赖项及其版本都列在 Neo4j Maven 存储库中。