本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Neptune 引擎版本 1.2.1.0.R3(2023 年 6 月 13 日)
截至 2023 年 6 月 13 日,引擎版本 1.2.1.0.R3 正在普遍部署中。请注意,新版本在每个区域的发布需要几天的时间。
重要
在某些情况下,此引擎版本中引入的更改可能会导致您观察到批量加载性能下降。因此,到此版本的升级已临时暂停,直到此问题得到解决。
注意
如果从 1.2.0.0 之前的引擎版本升级:
-
引擎版本 1.2.0.0 为自定义参数组和自定义集群参数组引入了一种新格式。因此,如果您要从 1.2.0.0 之前的引擎版本升级到引擎版本 1.2.0.0 或更高版本,则必须使用参数组系列
neptune1.2
重新创建所有现有的自定义参数组和自定义集群参数组。早期版本使用参数组系列neptune1
,而这些参数组不适用于版本 1.2.0.0 及更高版本。请参阅Amazon Neptune 参数组了解更多信息。 -
引擎版本 1.2.0.0 还引入了一种新的撤消日志格式。因此,必须清除早期引擎版本创建的所有撤消日志,并且 UndoLogsListSize CloudWatch 指标必须降至零,然后才能开始从 1.2.0.0 之前的版本进行任何升级。如果您尝试开始更新时撤消日志记录过多(200000 或更多),则在等待清除撤消日志完成时,升级尝试可能会超时。
您可以通过升级集群的写入器实例(清除发生的地方)来加快清除速率。在尝试升级之前执行此操作可能会在开始之前减少撤消日志的数量。将写入器的大小增加到 24XL 实例类型,可以将清除率提高到每小时超过一百万条记录。
如果
UndoLogsListSize
CloudWatch 指标非常大,那么提出支持案例可能会帮助您探索降低该指标的其它策略。 -
最后,1.2.0.0 版本中有一项重大变化,会影响之前使用 Bolt 协议和 IAM 身份验证的代码。从版本 1.2.0.0 开始,Bolt 需要一个用于 IAM 签名的资源路径。在 Java 中,设置资源路径可能如下所示:
request.setResourcePath("/openCypher"));
。在其它语言中,可以将/openCypher
附加到端点 URI 之后。有关示例,请参阅 使用 Bolt 协议。
此引擎版本中的新增功能
增加了对使用 IAM 角色链进行跨账户批量加载的支持。
此引擎版本中的改进
改进了 Gremlin 的
fail()
步骤,以区分它产生的异常与泛型InternalFailureException
,并确保向其提供的任何用户提供的消息都能传播回调用方。改进了 Gremlin 查询引擎对
store
、aggregate
、cap
、limit
和hasLabel
的优化。-
添加了对 openCypher 三角函数的支持:
acos()
asin()
atan()
atan2()
cos()
cot()
degrees()
pi()
radians()
sin()
tan()
-
添加了对多个 openCypher 聚合函数的支持:
percentileDisc()
stDev()
-
添加了对将
datetime
转换为epochmillis
的 openCypherepochmillis()
函数的支持。例如:MATCH (n) RETURN epochMillis(n.someDateTime) 1698972364782
添加了对 openCypher 模数 (
%
) 运算符的支持。添加了对 openCypher 静态调试解释工具的支持。
添加了对 openCypher
randomUUID()
函数的支持。-
提高了 openCypher 性能:
改进了解析器和查询计划器。
提高了 DFE 引擎中的 CPU 利用率。
-
提高了包含多个重用相同变量的更新子句的查询的性能。示例为:
MERGE (n {name: 'John'}) or MERGE (m {name: 'Jim'}) or MERGE (n)-[:knows {since: 2023}]→(m)
-
针对多跳查询模式优化了查询计划,例如:
MATCH (n)-->()-->()-->(m) RETURN n m
-
通过参数化查询提高了列表和映射注入的性能。例如:
UNWIND $idList as id MATCH (n {`~id`: id}) RETURN n.name
通过使
WITH
成为适当的屏障,改进了包含它的查询执行。经过优化,可避免在
Unfold
和聚合函数中对值进行冗余具体化。
-
提高了
VALUES
子句中包含大量静态输入的 SPARQL 查询的性能,例如:SELECT ?n WHERE { VALUES (?name) { ("John") ("Jim") ... many values ... } ?n a ?n_type . ?n ?name . }
提高了 SPARQL CBD 查询性能。
在此引擎版本中修复的缺陷
修复了一个 Gremlin 错误,即在查询计划阶段,深度嵌套的长查询会导致 CPU 使用率过高和查询超时。
修复了使用
mergeV
或mergeE
时可能引发无效NullPointerException
的 Gremlin 错误。
此版本支持的查询语言版本
在将数据库集群升级到版本 1.2.1.0.R3 之前,请确保您的项目与以下查询语言版本兼容:
支持的 Gremlin 最早版本:
3.6.2
支持的 Gremlin 最新版本:
3.6.2
openCypher 版本:
Neptune-9.0.20190305-1.0
SPARQL 版本:
1.1
引擎版本 1.2.1.0.R3 的升级路径
升级到此版本
Amazon Neptune 1.2.1.0.R3 现已正式发布。
如果数据库集群运行的引擎版本有此版本的升级路径,则可以立即对其进行升级。您可以使用控制台上的数据库集群操作或使用 SDK 升级任何符合条件的集群。以下 CLI 命令将立即升级符合条件的集群:
对于 Linux、OS X 或 Unix:
aws neptune modify-db-cluster \ --db-cluster-identifier
(your-neptune-cluster)
\ --engine-version 1.2.1.0 \ --apply-immediately
对于 Windows:
aws neptune modify-db-cluster ^ --db-cluster-identifier
(your-neptune-cluster)
^ --engine-version 1.2.1.0 ^ --apply-immediately
更新将同时应用于数据库集群中的所有实例。更新操作要求在所有这些实例上重启数据库,因此,会出现从 20-30 秒到几分钟的停机,之后您可以重新使用数据库集群。
升级前始终先测试
发布新的主要或次要 Neptune 引擎版本时,请务必先在该版本上测试您的 Neptune 应用程序,然后再升级到该版本。即使是次要版本升级,也可能引入会影响代码的新特征或行为。
首先,将当前版本的发行说明页面与目标版本的发行说明页面进行比较,以查看查询语言版本是否会发生变化或是否会发生其它重大更改。
在升级生产数据库集群之前测试新版本的最佳方法是克隆生产集群,以便克隆运行新的引擎版本。然后,您可以在不影响生产数据库集群的情况下在克隆上运行查询。
请在升级之前始终创建手动快照
在执行升级之前,我们强烈建议您始终创建数据库集群的手动快照。拥有自动快照只能提供短期保护,而手动快照在您显式删除它之前仍然可用。
在某些情况下,作为升级过程的一部分,Neptune 会为您创建手动快照,但您不应依赖此快照,无论如何都应创建自己的手动快照。
当您确定不需要将数据库集群恢复到其升级前的状态时,可以显式删除自己创建的手动快照以及 Neptune 可能已创建的手动快照。如果 Neptune 创建手动快照,则其名称将以 preupgrade
开头,后跟数据库集群的名称、源引擎版本、目标引擎版本和日期。
注意
如果您在待处理操作正在进行时尝试升级,则可能会遇到如下错误:
We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.
如果遇到此错误,请等待待处理操作完成,或者立即触发维护时段,让之前的升级完成。
有关升级引擎版本的更多信息,请参阅维护 Amazon Neptune 数据库集群。如果您有任何问题或疑问,可通过社区论坛和 AWS Premium Support