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)。
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 时,建议从新的集群开始。请确保您阅读了操作手册 → 集群中的所有详细信息。 |
Neo4j Admin 和 Neo4j CLI
Neo4j Admin CLI
Ne4j Admin 已刷新。所有管理功能都集中在一个工具中,并按范围分组。它具有改进的功能、更多控制权以及针对管理员的一致参数集。
neo4j-admin
的一般语法如下
neo4j-admin [类别] [命令] [子命令]
除了help
和version
之外的所有管理命令都组织到以下三个类别中
-
dbms
- DBMS 范围(适用于单机和集群环境)的管理任务 -
server
- 服务器范围的管理任务 -
database
- 数据库特定的管理任务
有关新管理命令的更多信息,请参阅操作手册 → Neo4j Admin 和 Neo4j CLI。
Neo4j CLI
neo4j
的一般语法如下
neo4j [命令]
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
。 -
从 neo4j.conf 文件中删除了由
fabric
命名空间标识的现有 Fabric 配置设置。 -
术语
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 核心是 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 中,并且 |
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.0
或 lucene+native-3.0
的索引支持约束。最合适的方法是在迁移到 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 - 没有数据库名称的特定请求,例如
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
-
外部依赖项
所有 Neo4j 5 外部依赖项及其版本都列在 Neo4j Maven 存储库 中。