

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

# 仓储服务
<a name="storage"></a>

 Neptune 支持属性图形数据的字典垃圾回收（GC），当 `neptune_streams` 处于非活动状态时，您可以通过 `neptune_lab_mode` [参数](parameters.md)启用该功能。启用后，此后台作业会清理未使用的字典条目，从而有可能降低数据增长率。该功能可以在两种模式下运行：soft\$1delete（将条目标记为已删除而不显式删除）和 enabled（显式删除条目）。GC 进程可能会与查询线程争夺 CPU 和缓冲区缓存等资源，从而影响系统性能，并且最多可以 16 个线程并发运行。

 Neptune 还支持内联服务器生成的边缘 IDs，当 neptune\$1streams 未激活时，可以通过配置[参数](parameters.md)启用边缘。启用此功能后，服务器将使用保留前缀 “neptune\$1reserved”， IDs 为没有用户定义 ID 的边生成唯一的内联内联。这些内联 IDs 不会存储在字典中，这可以提高存储效率。

**Topics**
+ [Neptune 字典垃圾回收](storage-gc.md)
+ [Neptune 服务器生成的内联边缘 ID](storage-edge-id.md)

# Neptune 字典垃圾回收
<a name="storage-gc"></a>

 Neptune 支持字典垃圾回收（GC），您可以通过属性图形数据的 `neptune_lab_mode` [参数](parameters.md)启用该功能。如果未启用 `neptune_streams`，则您可以为仅包含属性图形数据的集群启用该功能。如果已启用 `neptune_streams` 或存在任何未过期的 `neptune_streams` 数据，则该功能将自动禁用。要启用该功能，需要重启写入器实例。该功能从引擎发行版本 [1.4.3.0](https://docs.aws.amazon.com/releases/release-1.4.3.0.xml) 开始推出。

 启用后，后台作业会清理未使用的字典条目。它不会减少`VolumeBytesUsed`，而是为新的插入腾出索引中的空间。与未启用字典 GC 时相比，启用字典 GC 时的 `VolumeBytesUsed` 增长率可能会降低。

 字典垃圾回收在后台运行，并扫描所有图形和字典数据以查找未使用的词语。一旦大约 6% 的数据发生变化，则会在启动时触发新的运行。GC 与查询线程争夺服务器资源，例如 CPU、缓冲区缓存、撤消日志生成和写入 I/O 操作，这可能会降低查询吞吐量。由于 GC 会扫描未被查询主动触及的数据，因此可能会影响写入器节点上的缓冲区缓存。当 GC 执行新的删除 I/O 操作时，集群可能会看到额外的写入操作并有更多撤消日志需要清除，这也可能导致`UndoLogListSize`指标值更高。

 GC 可以在两种模式下运行，`soft_delete`和`enabled`。在该`soft_delete`模式下运行时，未使用的字典条目将被标记为已删除（soft\$1delete），但不会被显式删除。此模式还可用于了解后台操作开启后的性能功能。使用该`enabled`模式时，条目会被显式删除（“硬” 删除）。建议在切换到 `enabled` 模式之前，在 `soft_delete` 模式下运行 GC 一段时间。

 字典 GC 支持的最大并发度为 16（在具有 16 个或更多内核的计算机上）。默认情况下，它以单线程运行，但首次启用时可以更高的并发度运行。字典 GC 线程的运行优先级与查询线程相同，它们平等地争夺写入器上的资源。

 您可以通过设置 `DictionaryGCMode` 键通过 `neptune_lab_mode` [参数](parameters.md)启用字典 GC。它接受三个可能的值：`disabled`（默认）、`soft_delete` 或 `enabled`。例如，以下代码示例会将 `DictionaryGCMode` 设置为 `soft_delete`：

```
neptune_lab_mode = 'DictionaryGCMode=soft_delete'
```

 并发度[参数](parameters.md) `DictionaryGCConcurrency` 是可选的，其值可以介于 1 到 16 之间。如果设置为高于最小值 16 和内核数的值，则并发度上限为该值。

```
neptune_lab_mode = 'DictionaryGCMode=soft_delete,DictionaryGCConcurrency=2'
```

 服务器启动后，一旦有一些可用数据，字典 GC 作业将在后台启用。引擎状态显示字典 GC 的当前状态。下面显示的示例输出显示字典 GC 处于 `soft_delete` 模式并以 2 的并发度运行。如果后台作业正在运行，则它可能正在主动扫描未使用的字典条目并将其删除，或者正在等待新的删除集触发新一轮的 GC。

```
{"status":"healthy",...,"labMode":{"ObjectIndex":"disabled","DictionaryGC":"{Mode=enabled,Concurrency=2}"},...}
```

 当满足以下任一条件时，字典 GC 会暂停：
+  主动批量加载。
+  可用内存小于 15 Gb。
+  `UndoLogListSize` 高于 100 万。

# Neptune 服务器生成的内联边缘 ID
<a name="storage-edge-id"></a>

 Neptune 支持服务器生成的内联边缘。 IDs未启用 `neptune_streams` 时，您可以通过 Neptune 配置[参数](parameters.md) `neptune_enable_inline_server_generated_edge_id` 启用该功能。从引擎版本 [1.4.3.0](https://docs.aws.amazon.com/releases/release-1.4.3.0.xml) 开始，此功能可用于 Gremlin 查询，并将在未来的版本 OpenCypher 中用于查询。

 边缘 ID 是边缘的唯一标识符。插入边缘时，您可以提供边缘 ID。如果未提供 ID，则默认情况下，服务器会生成基于 UUID 的 ID 并将其分配给边缘。与用户定义的 ID 一样，基于 UUID 的服务器生成的 ID 存储在字典中。

 启用 `neptune_enable_inline_server_generated_edge_id` 功能后，如果查询中未提供 ID，则服务器会生成一个唯一的内联 ID。内联边缘 IDs 不存储在字典中，从而提高了存储效率。服务器生成的内联 IDs 以保留前缀开头。`neptune_reserved`

**警告**  
 Neptune 保留服务器生成的内联`'neptune_reserved'`前缀。 IDs如果查询尝试插入的数据具有以预留前缀开头的用户定义的 ID，则会显示错误。

 通过将集群级别的参数 `neptune_enable_inline_server_generated_edge_id` 设置为 `1`，可以启用服务器生成的内联边缘 ID 功能。该操作需要重启实例。以下示例启用服务器生成的边缘 ID 功能：

```
"ParameterName=neptune_enable_inline_server_generated_edge_id,ParameterValue=1,ApplyMethod=pending-reboot"
```

 要验证该功能是否已启用，您可以在引擎状态下检查相关功能。如果 `neptune_streams` 已启用，则该功能会自动禁用。以下示例输出显示已启用功能的引擎状态：

```
"features":{"InlineServerGeneratedEdgeId":"enabled"}
```

 服务器生成的内联边缘 ID 功能启用后，以下 Gremlin 示例会添加一个没有用户定义的 ID 的边缘：

```
curl - X POST--url https: //<neptune-cluster-endpoint>:8182/gremlin/ --data '{"gremlin":"g.withSideEffect(\"Neptune#disablePushdownOptimization\", true).addV().property(id, \"a\").addV().property(id, \"b\").addE(\"el\").to(V(\"a\"))"}'
{
    "requestId": "b6b84605-53ad-4c04-baf1-7f0f31a3aeaf",
    "status": {
        "message": "",
        "code": 200,
        "attributes": {
            "@type": "g:Map",
            "@value": []
        }
    },
    "result": {
        "data": {
            "@type": "g:List",
            "@value": [{
                "@type": "g:Edge",
                "@value": {
                    "id": "neptune_reserved_231850767",
                    "label": "el",
                    "inVLabel": "vertex",
                    "outVLabel": "vertex",
                    "inV": "a",
                    "outV": "b"
                }
            }]
        },
        "meta": {
            "@type": "g:Map",
            "@value": []
        }
    }
}
```