

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Neptune 引擎版本 1.2.0.0（2022 年 7 月 21 日）
<a name="engine-releases-1.2.0.0"></a>

截至 2022 年 7 月 21 日，引擎版本 1.2.0.0 正在普遍部署中。请注意，新版本在每个区域的发布需要几天的时间。

**注意**  
**如果从 1.2.0.0 之前的引擎版本升级：**  
[引擎版本 1.2.0.0](#engine-releases-1.2.0.0) 为自定义参数组和自定义集群参数组引入了一种新格式。因此，如果您要从 1.2.0.0 之前的引擎版本升级到引擎版本 1.2.0.0 或更高版本，则必须使用参数组系列 `neptune1.2` 重新创建所有现有的自定义参数组和自定义集群参数组。早期版本使用参数组系列 `neptune1`，而这些参数组不适用于版本 1.2.0.0 及更高版本。请参阅[Amazon Neptune 参数组](parameter-groups.md)了解更多信息。
引擎版本 1.2.0.0 还引入了一种新的撤消日志格式。因此，必须清除早期引擎版本创建的所有撤消日志，并且 [`UndoLogsListSize`](cw-metrics.md#cw-metrics-UndoLogListSize) 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 协议](access-graph-opencypher-bolt.md)。

## 此版本的后续补丁版本
<a name="engine-releases-1.2.0.0-patches"></a>
+ [版本：1.2.0.0.R2（2022 年 10 月 14 日）](engine-releases-1.2.0.0.R2.md) 
+ [版本：1.2.0.0.R3（2022 年 12 月 15 日）](engine-releases-1.2.0.0.R3.md) 
+ [版本：1.2.0.0.R4（2023 年 9 月 29 日）](engine-releases-1.2.0.0.R4.md) 

## 此引擎版本中的新增功能
<a name="engine-releases-1.2.0.0-features"></a>
+ 增加了对[全球数据库](neptune-global-database.md)的支持。一个 Neptune 全球数据库跨多个 AWS 区域，并由一个区域中的一个主数据库集群和其它区域中最多五个辅助数据库集群组成。
+ 根据数据面板操作，在 Neptune IAM policy 中增加了对比之前更精细的访问控制的支持。这是一个重大变化，因为必须调整基于已弃用的 `connect` 操作的现有 IAM policy 以使用更精细的数据面板操作。请参阅[IAM policy 的类型](security-iam-access-manage.md#iam-auth-policy)。
+ 改进了读取器实例的可用性。以前，当写入器实例重启时，Neptune 集群中的所有读取器实例也会自动重启。从引擎版本 1.2.0.0 开始，读取器实例在写入器重启后保持活动状态，这提高了读取器的可用性。读取器实例可以单独重启以获取参数组的更改。请参阅[在 Amazon Neptune 中重启数据库实例](manage-console-instances-reboot.md)。
+ 添加了一个新的 [neptune\$1streams\$1expiry\$1days](parameters.md#parameters-db-cluster-parameters-neptune_streams_expiry_days) 数据库集群参数，允许您设置在删除流记录之前在服务器上保留它们的天数。范围为 1 到 90，默认值为 7。

## 此引擎版本中的改进
<a name="engine-releases-1.2.0.0-improvements"></a>
+ 提高了字节码查询的 Gremlin 序列化性能。
+ Neptune 现在使用 DFE 引擎处理文本谓词，以提高性能。
+ Neptune 现在使用 DFE 引擎处理 Gremlin `limit()` 步骤，包括非终端和子遍历限制。
+ 更改了 DFE 对 Gremlin `union()` 步骤的处理以与其它新特征配合使用，这意味着引用节点会按预期显示在查询配置文件中。
+ 通过并行化 DFE 中一些昂贵的联接操作，将性能提高多达 5 倍。
+ 对于 Gremlin DFE 引擎，添加了对于 `OrderGlobalStep order(global)` 的 `by()` 调制支持。
+ 在 DFE 的 explain 详细信息中添加了注入的静态值的显示。
+ 提高了修剪重复模式时的性能。
+ 在 Gremlin DFE 引擎中添加了顺序保存支持。
+ 提高了带有空筛选条件的 Gremlin 查询的性能，例如：

  ```
  g.V().hasId(P.within([]))
  ```

  ```
  g.V().hasId([])
  ```
+ 改进了 SPARQL 查询使用的数值太大而使 Neptune 无法在内部表示时的错误消息。
+ 通过减少禁用流时的索引搜索，提高了删除带有关联边缘的顶点的性能。
+ 将 DFE 支持扩展到 `has()` 步骤的更多变体，特别是扩展到 `hasKey()`、`hasLabel()`，以及 `has()` 中字符串/URI 的范围谓词。这会影响如下查询：

  ```
  // hasKey() on properties
  g.V().properties().hasKey("name")
  g.V().properties().has(T.key, TextP.startingWith("a"))
  g.E().properties().hasKey("weight")
  g.E().properties().hasKey(TextP.containing("t"))
  
  // hasLabel() on vertex properties
  g.V().properties().hasLabel("name")
  
  // range predicates on ID and Label fields
  g.V().has(T.label, gt("person"))
  g.E().has(T.id, lte("(an ID value)"))
  ```
+ 添加了 Neptune 特定的 openCypher [`join()`](access-graph-opencypher-extensions.md#opencypher-compliance-join-function) 函数，该函数可将列表中的字符串串联成单个字符串。
+ 更新了 [Neptune 托管式策略](security-iam-access-managed-policies.md)，以包含数据访问权限和新的全球数据库 API 的权限。

## 在此引擎版本中修复的缺陷
<a name="engine-releases-1.2.0.0-defects"></a>
+ 修复了未指定内容类型的 HTTP 请求会自动失败的错误。
+ 修复了查询优化器中阻止在查询中使用服务调用的 SPARQL 错误。
+ 修复了 Turtle RDF 解析器中的一个 SPARQL 错误，即特定的 Unicode 数据组合会导致失败。
+ 修复了 SPARQL 错误，即 `GRAPH` 和 `SELECT` 子句的特定组合会生成错误的查询结果。
+ 修复了一个 Gremlin 错误，该错误会导致在联合步骤中使用任何筛选步骤的查询出现正确性问题，例如：

  ```
  g.V("1").union(hasLabel("person"), out())
  ```
+ 修复了一个 Gremlin 错误，即 `both().simplePath()` 的 `count()` 将导致在没有 `count()` 的情况下返回的实际结果数翻倍。
+ 修复了一个 openCypher 错误，即服务器在向启用了 IAM 身份验证的集群发出 Bolt 请求时生成了错误的签名不匹配异常。
+ 修复了一个 openCypher 错误，即如果在请求失败后提交，则使用 HTTP 保持活动状态的查询可能会被错误关闭。
+ 修复了一个 openCypher 错误，该错误可能导致在提交返回常量值的查询时引发内部错误。
+ 修复了 explain 详细信息中的一个错误，以便 DFE 子查询 `Time(ms)` 现在可以正确计算出 DFE 子查询中运算符的 CPU 时间。以下面的 explain 输出摘录为例：

  ```
  subQuery1
  ╔════╤════════╤════════╤═══════════════════════╤═══════════════════════════════════╤══════╤══════════╤═══════════╤═══════╤═══════════╗
  ║ ID │ Out #1 │ Out #2 │ Name                  │ Arguments                         │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║
  ╠════╪════════╪════════╪═══════════════════════╪═══════════════════════════════════╪══════╪══════════╪═══════════╪═══════╪═══════════╣
    ...
  ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢
  ║ 1  │ 2      │ -      │ DFEChunkLocalSubQuery │ subQuery=...graph#336e.../graph_1 │ -    │ 1        │ 1         │ 1.00  │ 0.38      ║
  ║    │        │        │                       │ coordinationTime(ms)=0.026        │      │          │           │       │           ║
  ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢
    ...
  subQuery=...graph#336e.../graph_1
  ╔════╤════════╤════════╤═══════════════════════╤═══════════════════════════════════╤══════╤══════════╤═══════════╤═══════╤═══════════╗
  ║ ID │ Out #1 │ Out #2 │ Name                  │ Arguments                         │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║
  ╠════╪════════╪════════╪═══════════════════════╪═══════════════════════════════════╪══════╪══════════╪═══════════╪═══════╪═══════════╣
  ║ 0  │ 1      │ -      │ DFESolutionInjection  │ solutions=[?100 -> [-10^^<LONG>]] │ -    │ 0        │ 1         │ 0.00  │ 0.04      ║
  ║    │        │        │                       │ outSchema=[?100]                  │      │          │           │       │           ║
  ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢
  ║ 1  │ 3      │ -      │ DFERelationalJoin     │ joinVars=[]                       │ -    │ 2        │ 1         │ 0.50  │ 0.29      ║
  ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢
  ║ 2  │ 1      │ -      │ DFESolutionInjection  │ outSchema=[]                      │ -    │ 0        │ 1         │ 0.00  │ 0.01      ║
  ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢
  ║ 3  │ -      │ -      │ DFEDrain              │ -                                 │ -    │ 1        │ 0         │ 0.00  │ 0.02      ║
  ╚════╧════════╧════════╧═══════════════════════╧═══════════════════════════════════╧══════╧══════════╧═══════════╧═══════╧═══════════╝
  ```

  下表最后一列中的子查询时间加起来为 0.36 毫秒 (`.04 + .29 + .01 + .02 = .36`)。当您将该子查询的协调时间相加 (`.36 + .026 = .386`) 时，您会得到一个结果，该结果接近于上表最后一列中记录的子查询的时间，即 `0.38` 毫秒。

## 此版本支持的查询语言版本
<a name="engine-releases-1.2.0.0-query-versions"></a>

在将数据库集群升级到版本 1.2.0.0 之前，请确保您的项目与以下查询语言版本兼容：
+ *支持的 Gremlin 最早版本：*`3.5.2`
+ *支持的 Gremlin 最新版本：*`3.5.4`
+ *openCypher 版本：*`Neptune-9.0.20190305-1.0`
+ *SPARQL 版本：*`1.1`

## 引擎版本 1.2.0.0 的升级路径
<a name="engine-releases-1.2.0.0-upgrade-paths"></a>

由于这是主要引擎版本，因此无法对其进行自动升级。

您只能从[引擎版本 1.1.1.0](engine-releases-1.1.1.0.md) 的最新补丁版本手动升级到版本 `1.2.0.0`。早期引擎版本必须先升级到 `1.1.1.0` 的最新版本，然后才能升级到 `1.2.0.0`。

因此，在尝试升级到此版本之前，请确认您当前正在运行版本 `1.1.1.0` 的最新补丁版本。否则，请先升级到 `1.1.1.0` 的最新补丁版本。

升级之前，您还必须使用参数组系列 `neptune1.2` 重新创建您在先前版本中使用的任何自定义数据库集群参数组。请参阅[Amazon Neptune 参数组](parameter-groups.md)了解更多信息。

如果您先升级到版本 `1.1.1.0`，然后立即升级到 `1.2.0.0`，则可能会遇到如下错误：

```
   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 数据库集群](cluster-maintenance.md)）。

## 升级到此版本
<a name="engine-releases-1.2.0.0-upgrading"></a>

如果数据库集群运行的引擎版本有此版本的升级路径，则可以立即对其进行升级。您可以使用控制台上的数据库集群操作或使用 SDK 升级任何符合条件的集群。以下 CLI 命令将立即升级符合条件的集群：

对于 Linux、OS X 或 Unix：

```
1. aws neptune modify-db-cluster \
2.     --db-cluster-identifier (your-neptune-cluster) \
3.     --engine-version 1.2.0.0 \
4.     --allow-major-version-upgrade \
5.     --apply-immediately
```

对于 Windows：

```
1. aws neptune modify-db-cluster ^
2.     --db-cluster-identifier (your-neptune-cluster) ^
3.     --engine-version 1.2.0.0 ^
4.     --allow-major-version-upgrade ^
5.     --apply-immediately
```

您可以指定 `--no-apply-immediately`，而不是 `--apply-immediately`。要执行主要版本升级，需要使用 allow-major-upgrade 参数。另外，请务必包括引擎版本，否则您的引擎可能会升级到其它版本。

如果集群使用自定义集群参数组，请确保包含以下参数以指定此参数组：

```
    --db-cluster-parameter-group-name (name of the custom DB cluster parameter group)
```

同样，如果集群中的任何实例使用自定义数据库参数组，请确保包含此参数以指定此参数组：

```
    --db-instance-parameter-group-name (name of the custom instance parameter group)
```

### 升级前始终先测试
<a name="engine-1.2.0.0-test-before-upgrading"></a>

发布新的主要或次要 Neptune 引擎版本时，请务必先在该版本上测试您的 Neptune 应用程序，然后再升级到该版本。即使是次要版本升级，也可能引入会影响代码的新特征或行为。

首先，将当前版本的发行说明页面与目标版本的发行说明页面进行比较，以查看查询语言版本是否会发生变化或是否会发生其它重大更改。

在升级生产数据库集群之前测试新版本的最佳方法是克隆生产集群，以便克隆运行新的引擎版本。然后，您可以在不影响生产数据库集群的情况下在克隆上运行查询。

### 请在升级之前始终创建手动快照
<a name="engine-1.2.0.0-snapshot-before-upgrading"></a>

在执行升级之前，我们强烈建议您始终创建数据库集群的手动快照。拥有自动快照只能提供短期保护，而手动快照在您显式删除它之前仍然可用。

在某些情况下，作为升级过程的一部分，Neptune 会为您创建手动快照，但您不应依赖此快照，无论如何都应创建自己的手动快照。

当您确定不需要将数据库集群恢复到其升级前的状态时，可以显式删除自己创建的手动快照以及 Neptune 可能已创建的手动快照。如果 Neptune 创建手动快照，则其名称将以 `preupgrade` 开头，后跟数据库集群的名称、源引擎版本、目标引擎版本和日期。

**注意**  
如果您在[待处理操作正在进行](manage-console-maintaining)时尝试升级，则可能会遇到如下错误：  

```
   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 数据库集群](cluster-maintenance.md)。如果您有任何问题或疑问，可通过社区论坛和 [AWS Premium Support](https://aws.amazon.com/support) 联系 AWS Support 团队。

# Amazon Neptune 引擎版本 1.2.0.0.R4（2023 年 9 月 29 日）
<a name="engine-releases-1.2.0.0.R4"></a>

截至 2023 年 9 月 29 日，引擎版本 1.2.0.0.R4 正在普遍部署中。请注意，新版本在每个区域的发布需要几天的时间。

**注意**  
**如果从 1.2.0.0 之前的引擎版本升级：**  
[引擎版本 1.2.0.0](engine-releases-1.2.0.0.md) 为自定义参数组和自定义集群参数组引入了一种新格式。因此，如果您要从 1.2.0.0 之前的引擎版本升级到引擎版本 1.2.0.0 或更高版本，则必须使用参数组系列 `neptune1.2` 重新创建所有现有的自定义参数组和自定义集群参数组。早期版本使用参数组系列 `neptune1`，而这些参数组不适用于版本 1.2.0.0 及更高版本。请参阅[Amazon Neptune 参数组](parameter-groups.md)了解更多信息。
引擎版本 1.2.0.0 还引入了一种新的撤消日志格式。因此，必须清除早期引擎版本创建的所有撤消日志，并且 [`UndoLogsListSize`](cw-metrics.md#cw-metrics-UndoLogListSize) 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 协议](access-graph-opencypher-bolt.md)。

## 此引擎版本中的改进
<a name="engine-releases-1.2.0.0.R4-improvements"></a>
+ 为所有 [Neptune ML API](machine-learning-api-reference.md) 添加了 `enableInterContainerTrafficEncryption` 参数，您可以使用该参数在训练或超参数调整任务中启用和禁用容器间流量加密。
+ 对于无服务器数据库集群，将最小容量设置更改为 1.0 NCU，并将最低有效最大容量设置更改为 2.5 NCU。请参阅[Neptune 无服务器数据库集群中的容量扩展](neptune-serverless-capacity-scaling.md)*（在发布之前，此更改也需要反映在无服务器页面中）*。

## 在此引擎版本中修复的缺陷
<a name="engine-releases-1.2.0.0.R4-defects"></a>
+ 修复了一个 openCypher 错误，即 update-and-return 查询无法正确处理 `orderBy`、`limit` 或 `skip`。
+ 修复了一个 openCypher 错误，该错误允许一个请求中包含的参数被另一个同时请求中包含的参数所覆盖。
+ 修复了 Bolt 事务处理中的一个 openCypher 错误。
+ 修复了 Gremlin 正确性问题，此类问题通过回退到 Tinkerpop 影响将 `limit` 作为非并集步骤的子遍历的 DFE 查询。例如，对于如下查询：

  ```
  g.withSideEffect('Neptune#useDFE', true)
   .V()
   .as("a")
   .select("a")
   .by(out()
   .limit(1))
  ```
+ 修复了一个 Gremlin 错误，即查询因为包含太多 TinkerPop 步骤而失败，然后无法清理。
+ 修复了一个 Gremlin 错误，即当其中一些字符串输出包含空格字符时，`order()` 无法对字符串输出正确排序。
+ 修复了一个 Gremlin 错误，即当查询以字符串形式提交并包含 `GroupCountStep` 时，可能会发生事务泄漏。
+ 修复了一个 Gremlin 错误，即在检查 Gremlin 查询状态端点以查找子遍历中具有谓词的查询是否具有未原生处理的步骤时，会发生事务泄漏。
+ 修复了一个 Gremlin 错误，即添加边缘及其属性，然后添加 `inV()` 或 `outV()` 会导致 `InternalFailureException`。
+ 修复了存储层中的并发问题。

## 此版本支持的查询语言版本
<a name="engine-releases-1.2.0.0.R4-query-versions"></a>

在将数据库集群升级到版本 1.2.0.0.R4 之前，请确保您的项目与以下查询语言版本兼容：
+ *支持的 Gremlin 最早版本：*`3.5.2`
+ *支持的 Gremlin 最新版本：*`3.5.6`
+ *openCypher 版本：*`Neptune-9.0.20190305-1.0`
+ *SPARQL 版本：*`1.1`

## 引擎版本 1.2.0.0.R4 的升级路径
<a name="engine-releases-1.2.0.0.R4-upgrade-paths"></a>

如果您正在运行引擎版本 `1.2.0.0`，您的集群将在下一个维护时段内自动升级到此补丁版本。

您只能从[引擎版本 1.1.1.0](engine-releases-1.1.1.0.md) 的最新补丁版本手动升级到版本 `1.2.0.0`。早期引擎版本必须先升级到 `1.1.1.0` 的最新版本，然后才能升级到 `1.2.0.0`。

如果您先升级到版本 `1.1.1.0`，然后立即升级到 `1.2.0.0`，则可能会遇到如下错误：

```
   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.
```

如果遇到此错误，请等待待处理操作完成，或者立即触发维护时段，让之前的升级完成。

## 升级到此版本
<a name="engine-releases-1.2.0.0.R4-upgrading"></a>

如果数据库集群运行的引擎版本有此版本的升级路径，则可以立即对其进行升级。您可以使用控制台上的数据库集群操作或使用 SDK 升级任何符合条件的集群。以下 CLI 命令将立即升级符合条件的集群：

对于 Linux、OS X 或 Unix：

```
1. aws neptune modify-db-cluster \
2.     --db-cluster-identifier (your-neptune-cluster) \
3.     --engine-version 1.2.0.0 \
4.     --allow-major-version-upgrade \
5.     --apply-immediately
```

对于 Windows：

```
1. aws neptune modify-db-cluster ^
2.     --db-cluster-identifier (your-neptune-cluster) ^
3.     --engine-version 1.2.0.0 ^
4.     --allow-major-version-upgrade ^
5.     --apply-immediately
```

您可以指定 `--no-apply-immediately`，而不是 `--apply-immediately`。要执行主要版本升级，需要使用 allow-major-upgrade 参数。另外，请务必包括引擎版本，否则您的引擎可能会升级到其它版本。

如果集群使用自定义集群参数组，请确保包含以下参数以指定此参数组：

```
    --db-cluster-parameter-group-name (name of the custom DB cluster parameter group)
```

同样，如果集群中的任何实例使用自定义数据库参数组，请确保包含此参数以指定此参数组：

```
    --db-instance-parameter-group-name (name of the custom instance parameter group)
```

### 升级前始终先测试
<a name="engine-1.2.0.0.R4-test-before-upgrading"></a>

发布新的主要或次要 Neptune 引擎版本时，请务必先在该版本上测试您的 Neptune 应用程序，然后再升级到该版本。即使是次要版本升级，也可能引入会影响代码的新特征或行为。

首先，将当前版本的发行说明页面与目标版本的发行说明页面进行比较，以查看查询语言版本是否会发生变化或是否会发生其它重大更改。

在升级生产数据库集群之前测试新版本的最佳方法是克隆生产集群，以便克隆运行新的引擎版本。然后，您可以在不影响生产数据库集群的情况下在克隆上运行查询。

### 请在升级之前始终创建手动快照
<a name="engine-1.2.0.0.R4-snapshot-before-upgrading"></a>

在执行升级之前，我们强烈建议您始终创建数据库集群的手动快照。拥有自动快照只能提供短期保护，而手动快照在您显式删除它之前仍然可用。

在某些情况下，作为升级过程的一部分，Neptune 会为您创建手动快照，但您不应依赖此快照，无论如何都应创建自己的手动快照。

当您确定不需要将数据库集群恢复到其升级前的状态时，可以显式删除自己创建的手动快照以及 Neptune 可能已创建的手动快照。如果 Neptune 创建手动快照，则其名称将以 `preupgrade` 开头，后跟数据库集群的名称、源引擎版本、目标引擎版本和日期。

**注意**  
如果您在[待处理操作正在进行](manage-console-maintaining)时尝试升级，则可能会遇到如下错误：  

```
   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 数据库集群](cluster-maintenance.md)。如果您有任何问题或疑问，可通过社区论坛和 [AWS Premium Support](https://aws.amazon.com/support) 联系 AWS Support 团队。

# Amazon Neptune 引擎版本 1.2.0.0.R3（2022 年 12 月 15 日）
<a name="engine-releases-1.2.0.0.R3"></a>

截至 2022 年 12 月 15 日，引擎版本 1.2.0.0.R3 正在普遍部署中。请注意，新版本在每个区域的发布需要几天的时间。

**注意**  
**如果从 1.2.0.0 之前的引擎版本升级：**  
[引擎版本 1.2.0.0](engine-releases-1.2.0.0.md) 为自定义参数组和自定义集群参数组引入了一种新格式。因此，如果您要从 1.2.0.0 之前的引擎版本升级到引擎版本 1.2.0.0 或更高版本，则必须使用参数组系列 `neptune1.2` 重新创建所有现有的自定义参数组和自定义集群参数组。早期版本使用参数组系列 `neptune1`，而这些参数组不适用于版本 1.2.0.0 及更高版本。请参阅[Amazon Neptune 参数组](parameter-groups.md)了解更多信息。
引擎版本 1.2.0.0 还引入了一种新的撤消日志格式。因此，必须清除早期引擎版本创建的所有撤消日志，并且 [`UndoLogsListSize`](cw-metrics.md#cw-metrics-UndoLogListSize) 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 协议](access-graph-opencypher-bolt.md)。

## 此引擎版本中的改进
<a name="engine-releases-1.2.0.0.R3-improvements"></a>
+ 提高了涉及 `MERGE` 和 `OPTIONAL MATCH` 的 openCypher 查询的性能。
+ 改进了 openCypher 查询的性能，这些查询涉及文本值映射列表上的 `UNWIND`。
+ 改进了对 `id` 具有 `IN` 筛选条件的 openCypher 查询的性能。例如：

  ```
  MATCH (n) WHERE id(n) IN ['1', '2', '3'] RETURN n
  ```
+ 各种 Gremlin 运算符的性能改进和正确性修复，包括 `repeat`、`coalesce`、`store` 和 `aggregate`。

## 在此引擎版本中修复的缺陷
<a name="engine-releases-1.2.0.0.R3-defects"></a>
+ 修复了一个 openCypher 错误，即在 Bolt 和 SPARQL-JSON 中，查询返回字符串 `"null"`，而不是 null 值。
+ 修复了一个 openCypher 错误，以便能够在值为列表或映射列表时正确地解释参数类型。
+ 修复了一个审计日志错误，该错误导致记录不必要的信息以及日志中缺少某些字段。
+ 修复了一个审计日志错误，即未记录针对启用了 IAM 的数据库集群发出的 HTTP 请求的 IAM ARN。
+ 修复了一个查找缓存错误，以限制用于写入缓存的增量内存。
+ 修复了一个查找缓存错误，该错误涉及在写入失败时为查找缓存设置只读模式。

## 此版本支持的查询语言版本
<a name="engine-releases-1.2.0.0.R3-query-versions"></a>

在将数据库集群升级到版本 1.2.0.0.R3 之前，请确保您的项目与以下查询语言版本兼容：
+ *支持的 Gremlin 最早版本：*`3.5.2`
+ *支持的 Gremlin 最新版本：*`3.5.4`
+ *openCypher 版本：*`Neptune-9.0.20190305-1.0`
+ *SPARQL 版本：*`1.1`

## 引擎版本 1.2.0.0.R3 的升级路径
<a name="engine-releases-1.2.0.0.R3-upgrade-paths"></a>

如果您正在运行引擎版本 `1.2.0.0`，您的集群将在下一个维护时段内自动升级到此补丁版本。

您只能从[引擎版本 1.1.1.0](engine-releases-1.1.1.0.md) 的最新补丁版本手动升级到版本 `1.2.0.0`。早期引擎版本必须先升级到 `1.1.1.0` 的最新版本，然后才能升级到 `1.2.0.0`。

如果您先升级到版本 `1.1.1.0`，然后立即升级到 `1.2.0.0`，则可能会遇到如下错误：

```
   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.
```

如果遇到此错误，请等待待处理操作完成，或者立即触发维护时段，让之前的升级完成。

## 升级到此版本
<a name="engine-releases-1.2.0.0.R3-upgrading"></a>

如果数据库集群运行的引擎版本有此版本的升级路径，则可以立即对其进行升级。您可以使用控制台上的数据库集群操作或使用 SDK 升级任何符合条件的集群。以下 CLI 命令将立即升级符合条件的集群：

对于 Linux、OS X 或 Unix：

```
1. aws neptune modify-db-cluster \
2.     --db-cluster-identifier (your-neptune-cluster) \
3.     --engine-version 1.2.0.0 \
4.     --allow-major-version-upgrade \
5.     --apply-immediately
```

对于 Windows：

```
1. aws neptune modify-db-cluster ^
2.     --db-cluster-identifier (your-neptune-cluster) ^
3.     --engine-version 1.2.0.0 ^
4.     --allow-major-version-upgrade ^
5.     --apply-immediately
```

您可以指定 `--no-apply-immediately`，而不是 `--apply-immediately`。要执行主要版本升级，需要使用 allow-major-upgrade 参数。另外，请务必包括引擎版本，否则您的引擎可能会升级到其它版本。

如果集群使用自定义集群参数组，请确保包含以下参数以指定此参数组：

```
    --db-cluster-parameter-group-name (name of the custom DB cluster parameter group)
```

同样，如果集群中的任何实例使用自定义数据库参数组，请确保包含此参数以指定此参数组：

```
    --db-instance-parameter-group-name (name of the custom instance parameter group)
```

### 升级前始终先测试
<a name="engine-1.2.0.0.R3-test-before-upgrading"></a>

发布新的主要或次要 Neptune 引擎版本时，请务必先在该版本上测试您的 Neptune 应用程序，然后再升级到该版本。即使是次要版本升级，也可能引入会影响代码的新特征或行为。

首先，将当前版本的发行说明页面与目标版本的发行说明页面进行比较，以查看查询语言版本是否会发生变化或是否会发生其它重大更改。

在升级生产数据库集群之前测试新版本的最佳方法是克隆生产集群，以便克隆运行新的引擎版本。然后，您可以在不影响生产数据库集群的情况下在克隆上运行查询。

### 请在升级之前始终创建手动快照
<a name="engine-1.2.0.0.R3-snapshot-before-upgrading"></a>

在执行升级之前，我们强烈建议您始终创建数据库集群的手动快照。拥有自动快照只能提供短期保护，而手动快照在您显式删除它之前仍然可用。

在某些情况下，作为升级过程的一部分，Neptune 会为您创建手动快照，但您不应依赖此快照，无论如何都应创建自己的手动快照。

当您确定不需要将数据库集群恢复到其升级前的状态时，可以显式删除自己创建的手动快照以及 Neptune 可能已创建的手动快照。如果 Neptune 创建手动快照，则其名称将以 `preupgrade` 开头，后跟数据库集群的名称、源引擎版本、目标引擎版本和日期。

**注意**  
如果您在[待处理操作正在进行](manage-console-maintaining)时尝试升级，则可能会遇到如下错误：  

```
   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 数据库集群](cluster-maintenance.md)。如果您有任何问题或疑问，可通过社区论坛和 [AWS Premium Support](https://aws.amazon.com/support) 联系 AWS Support 团队。

# Amazon Neptune 引擎版本 1.2.0.0.R2（2022 年 10 月 14 日）
<a name="engine-releases-1.2.0.0.R2"></a>

截至 2022 年 10 月 14 日，引擎版本 1.2.0.0.R2 正在普遍部署中。请注意，新版本在每个区域的发布需要几天的时间。

**注意**  
**如果从 1.2.0.0 之前的引擎版本升级：**  
[引擎版本 1.2.0.0](engine-releases-1.2.0.0.md) 为自定义参数组和自定义集群参数组引入了一种新格式。因此，如果您要从 1.2.0.0 之前的引擎版本升级到引擎版本 1.2.0.0 或更高版本，则必须使用参数组系列 `neptune1.2` 重新创建所有现有的自定义参数组和自定义集群参数组。早期版本使用参数组系列 `neptune1`，而这些参数组不适用于版本 1.2.0.0 及更高版本。请参阅[Amazon Neptune 参数组](parameter-groups.md)了解更多信息。
引擎版本 1.2.0.0 还引入了一种新的撤消日志格式。因此，必须清除早期引擎版本创建的所有撤消日志，并且 [`UndoLogsListSize`](cw-metrics.md#cw-metrics-UndoLogListSize) 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 协议](access-graph-opencypher-bolt.md)。

## 此引擎版本中的改进
<a name="engine-releases-1.2.0.0.R2-improvements"></a>
+ 改进了 Gremlin `order-by` 查询的性能。`NeptuneGraphQueryStep` 末尾带有 `order-by` 的 Gremlin 查询现在使用更大的块大小以获得更好的性能。这不适用于查询计划的内部（非根）节点上的 `order-by`。
+ 改进了 Gremlin 更新查询的性能。现在，在添加边缘或属性时，必须锁定顶点和边缘以防止删除。此更改消除了事务中的重复锁定，从而提高了性能。
+ 通过将 `dedup` 向下推送到原生执行层，改进了在 `repeat()` 子查询内使用 `dedup()` 的 Gremlin 查询的性能。
+ 添加了 Gremlin `Neptune#cardinalityEstimates` 查询提示。如果设置为 `false`，这会禁用基数估计。
+ 为 IAM 身份验证错误添加了用户友好的错误消息。这些消息现在会显示您的 IAM 用户或角色 ARN、资源 ARN 以及针对该请求的未经授权的操作列表。未经授权的操作列表可帮助您查看正在使用的 IAM policy 中可能缺少或显式拒绝的内容。

## 在此引擎版本中修复的缺陷
<a name="engine-releases-1.2.0.0.R2-defects"></a>
+ 修复了涉及 `WherePredicateStep` 翻译的 Gremlin 正确性错误，即 Neptune 的查询引擎为使用 `where(P.neq('x'))` 及其变体的查询生成了错误的结果。
+ 修复了一个 Gremlin 错误，即在升级到 TinkerPop 3.5 后错误地使用 `PartitionStrategy` 导致了一个错误，消息为“PartitionStrategy 不适用于匿名遍历”，从而阻止了遍历的执行。
+ 修复了与最终联接的 `joinTime` 以及 `Project.ASK` 子组内的统计数据相关的各种 Gremlin 错误。
+ 修复了 `MERGE` 子句中的 openCypher 错误，该错误在某些情况下会导致创建重复的节点和边缘。
+ 修复了一个事务错误，也即，即使回滚了相应的并发字典插入，会话也可以插入图形数据并提交。
+ 修复了在大量插入负载下导致性能回归的批量加载程序错误。
+ 修复了在处理 `OPTIONAL` 子句中包含 `(NOT) EXISTS` 的查询时的一个 SPARQL 错误，在某些情况下，查询结果会丢失。
+ 修复了一个错误，即在评估开始之前由于超时而导致请求被取消的情况下，驱动程序可能显示为挂起。如果在请求队列中的项目发生超时时使用了服务器上的所有查询处理线程，则可能进入此状态。由于请求队列中的超时并未立即发送消息，因此对于客户端而言，响应仍处于待处理状态。

## 此版本支持的查询语言版本
<a name="engine-releases-1.2.0.0.R2-query-versions"></a>

在将数据库集群升级到版本 1.2.0.0.R2 之前，请确保您的项目与以下查询语言版本兼容：
+ *支持的 Gremlin 最早版本：*`3.5.2`
+ *支持的 Gremlin 最新版本：*`3.5.4`
+ *openCypher 版本：*`Neptune-9.0.20190305-1.0`
+ *SPARQL 版本：*`1.1`

## 引擎版本 1.2.0.0.R2 的升级路径
<a name="engine-releases-1.2.0.0.R2-upgrade-paths"></a>

如果您正在运行引擎版本 `1.2.0.0`，您的集群将在下一个维护时段内自动升级到此补丁版本。

您只能从[引擎版本 1.1.1.0](engine-releases-1.1.1.0.md) 的最新补丁版本手动升级到版本 `1.2.0.0`。早期引擎版本必须先升级到 `1.1.1.0` 的最新版本，然后才能升级到 `1.2.0.0`。

如果您先升级到版本 `1.1.1.0`，然后立即升级到 `1.2.0.0`，则可能会遇到如下错误：

```
   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.
```

如果遇到此错误，请等待待处理操作完成，或者立即触发维护时段，让之前的升级完成。

## 升级到此版本
<a name="engine-releases-1.2.0.0.R2-upgrading"></a>

如果数据库集群运行的引擎版本有此版本的升级路径，则可以立即对其进行升级。您可以使用控制台上的数据库集群操作或使用 SDK 升级任何符合条件的集群。以下 CLI 命令将立即升级符合条件的集群：

对于 Linux、OS X 或 Unix：

```
1. aws neptune modify-db-cluster \
2.     --db-cluster-identifier (your-neptune-cluster) \
3.     --engine-version 1.2.0.0 \
4.     --allow-major-version-upgrade \
5.     --apply-immediately
```

对于 Windows：

```
1. aws neptune modify-db-cluster ^
2.     --db-cluster-identifier (your-neptune-cluster) ^
3.     --engine-version 1.2.0.0 ^
4.     --allow-major-version-upgrade ^
5.     --apply-immediately
```

您可以指定 `--no-apply-immediately`，而不是 `--apply-immediately`。要执行主要版本升级，需要使用 allow-major-upgrade 参数。另外，请务必包括引擎版本，否则您的引擎可能会升级到其它版本。

如果集群使用自定义集群参数组，请确保包含以下参数以指定此参数组：

```
    --db-cluster-parameter-group-name (name of the custom DB cluster parameter group)
```

同样，如果集群中的任何实例使用自定义数据库参数组，请确保包含此参数以指定此参数组：

```
    --db-instance-parameter-group-name (name of the custom instance parameter group)
```

### 升级前始终先测试
<a name="engine-1.2.0.0.R2-test-before-upgrading"></a>

发布新的主要或次要 Neptune 引擎版本时，请务必先在该版本上测试您的 Neptune 应用程序，然后再升级到该版本。即使是次要版本升级，也可能引入会影响代码的新特征或行为。

首先，将当前版本的发行说明页面与目标版本的发行说明页面进行比较，以查看查询语言版本是否会发生变化或是否会发生其它重大更改。

在升级生产数据库集群之前测试新版本的最佳方法是克隆生产集群，以便克隆运行新的引擎版本。然后，您可以在不影响生产数据库集群的情况下在克隆上运行查询。

### 请在升级之前始终创建手动快照
<a name="engine-1.2.0.0.R2-snapshot-before-upgrading"></a>

在执行升级之前，我们强烈建议您始终创建数据库集群的手动快照。拥有自动快照只能提供短期保护，而手动快照在您显式删除它之前仍然可用。

在某些情况下，作为升级过程的一部分，Neptune 会为您创建手动快照，但您不应依赖此快照，无论如何都应创建自己的手动快照。

当您确定不需要将数据库集群恢复到其升级前的状态时，可以显式删除自己创建的手动快照以及 Neptune 可能已创建的手动快照。如果 Neptune 创建手动快照，则其名称将以 `preupgrade` 开头，后跟数据库集群的名称、源引擎版本、目标引擎版本和日期。

**注意**  
如果您在[待处理操作正在进行](manage-console-maintaining)时尝试升级，则可能会遇到如下错误：  

```
   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 数据库集群](cluster-maintenance.md)。如果您有任何问题或疑问，可通过社区论坛和 [AWS Premium Support](https://aws.amazon.com/support) 联系 AWS Support 团队。