

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

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

海王星数据存储在群集卷中，群集卷是一个使用 Non-Volatile 内存快速 (NVMe) 驱动器的单一虚拟卷。 SSD-based 集群卷由一组称为分段的逻辑块组成。每个分段都分配了 10GB 的存储空间。每个分段中的数据将在数据库集群所在的单个 Amazon 区域的三个可用区 (AZ) 上复制。

创建 Neptune 数据库集群时，会为其分配单个 10GB 的分段。随着数据量增加并超过当前分配的存储空间，Neptune 通过添加新的分段来自动扩展集群容量。除了中国地区和（美国）区域，海王星集群容量可以增长到所有支持的区域的最大大小为 128 太字节 Amazon GovCloud (TiB)，后者的容量限制为 64 TiB。

数据库集群卷包含您的所有用户数据、索引和字典（如[Neptune 图形数据模型](feature-overview-data-model.md)本节所述），以及内部事务日志等内部元数据。所有这些图形数据，包括索引和内部日志，不能超过集群卷的最大大小。

## I/O—优化的存储选项
<a name="storage-iops"></a>

Neptune 提供两种存储定价模式：
+ **标准存储 ** — 标准存储为中等到低 I/O 使用率的应用程序提供经济实惠的数据库存储。
+ **I/O—优化存储 ** — 使用 I/O —Optimized 存储，您只需为所使用的存储付费，其成本高于标准存储，无需为所 I/O使用的存储付费。

  使用 I/O —Optimized 存储，您可以为 I/O密集型图形工作负载获得可预测的成本、低 I/O 延迟和稳定的 I/O 吞吐量。

  有关更多信息，请参阅 [ I/O —优化存储](storage-types.md#provisioned-iops-storage)。

## Neptune 存储分配
<a name="storage-allocation"></a>

尽管 Neptune 集群容量可以增长到 128 TiB（在某些区域中为 64 TiB），但您仍需要为分配的空间付费。分配的总空间由存储*高水位*决定，这是集群卷在它存在期间的任何时候分配给集群卷的最大容量。

这意味着，即使您从集群卷中删除用户数据，例如通过运行删除查询`g.V().drop()`，总分配的空间也保持不变。Neptune 确实会自动优化未使用的分配空间，以供将来重复使用。

除用户数据外，字典数据和内部事务日志也消耗存储空间。即使您删除了字典支持的图形数据，字典数据仍然存在，但如果您重新引入数据，Neptune 可以重复使用这些条目。要清理未使用的字典条目，可以启用[字典垃圾回收](storage-gc.md)。内部日志使用具有自己高水位线的独立存储空间。过期日志仅用于其他日志，不用于图形数据。分配给日志的空间包含在该`VolumeBytesUsed`[CloudWatch指标报告的总空间中](cloudwatch.md)。

查看[存储最佳实践](#storage-best-practices)以了解如何将分配的存储空间保持在最低限度并重用空间。

## Neptune 存储账单
<a name="storage-billing"></a>

存储成本根据存储*高位线计费*，如上一节所述。Amazon Neptune 会在多个可用区复制您的数据，但您只需为一份数据副本付费。

您可以通过监控`VolumeBytesUsed` CloudWatch 指标来确定数据库集群的当前存储高位是多少（请参阅[使用亚马逊监控海王星 CloudWatch](cloudwatch.md)）。

其他可能影响您的 Neptune 存储成本的因素包括数据库快照和备份，它们作为备份存储单独计费，并以 Neptune 存储成本为基础（参见）。[CloudWatch 对管理 Neptune 备份存储非常有用的指标](backup-restore-overview-metrics.md)

但是，如果您创建数据库的[克隆](manage-console-cloning.md)，则该克隆指向的集群卷与数据库集群本身使用的集群卷相同，因此对于原始数据没有额外的存储费用。对克隆的后续更改使用[写入时复制协议](manage-console-cloning.md#manage-console-cloning-protocol)，并且确实会导致额外的存储成本。

有关海王星的更多定价信息，请参阅网站[上的亚马逊海王星定价](https://www.amazonaws.cn/neptune/pricing)。 Amazon 

## Neptune 存储最佳实践
<a name="storage-best-practices"></a>

由于某些类型的数据会消耗 Neptune 中的永久存储空间，因此请使用以下最佳做法来避免存储增长大幅激增：
+ 在设计图形数据模型时，请尽可能避免使用本质上是临时性的属性键和面向用户的值。
+ 如果您计划更改数据模型，则在使用[快速重置 API](manage-console-fast-reset.md) 清除现有数据库集群中的数据之前，不要使用新模型将数据加载到该数据库集群中。最好的办法通常是将使用新模型的数据加载到新的数据库集群上。
+ 对大量数据进行操作的事务会生成相应大量的内部日志，这可能会永久增加内部日志空间的高水位。例如，删除数据库集群中所有数据的单个事务可以生成大型内部日志。该日志需要分配大量的内部存储空间，这会永久减少图表数据的可用空间。

  为避免这种情况，请将大型事务拆分为较小的事务并在两者之间留出时间，以便关联的内部日志有机会过期并释放其内部存储以供后续日志重用。
+ 要监控 Neptune 集群数量的增长，您可以对该`VolumeBytesUsed` CloudWatch 指标设置 CloudWatch 警报。如果数据已达到集群卷的最大大小，则此功能将特别有用。有关更多信息，请参阅[使用亚马逊 CloudWatch 警报](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

如果您的数据库集群有大量未使用的分配空间，则可以缩减其存储空间。为此，请导出图表中的所有数据，然后将其重新加载到新的数据库集群中。有关从数据库集群导出数据的简便方法，请参阅 [ Neptune 数据导出服务和实用程序](machine-learning-data-export.md)；有关将数据导回 [ Neptune 的简便方法，](bulk-load.md)请参阅 Neptune 批量加载器。

**注意**  
创建和还原[快照](backup-restore-restore-snapshot.md)不会减少分配给数据库集群的存储量，因为快照会保留集群底层存储的原始映像。如果大量已分配的存储未被使用，则缩小已分配存储量的唯一方法是导出图形数据并将其重新加载到新的数据库集群中。

## Neptune 存储可靠性和高可用性
<a name="storage-reliability"></a>

Amazon Neptune 的设计具有可靠、持久和容错的特点。

由于您的 Neptune 数据的副本保存在三个可用区 (AZ) 上，因此数据的存储非常耐用，数据丢失的可能性非常低。无论可用区中是否有数据库实例，Amazon Neptune 都会自动跨可用区复制数据。复制的数量与集群中的数据库实例数量无关。

这意味着您可以快速添加只读副本，因为 Neptune 不会创建图形数据的新副本。相反，只读副本连接到已包含您的数据的集群卷。同样，移除只读副本不会移除任何底层数据。

只有在删除集群卷的所有数据库实例后，才能删除集群卷及其数据。

Neptune 还会自动检测构成集群卷的分段中的故障。当分段中的数据副本损坏时，Neptune 立即修复该分段，同时使用同一分段中的其它数据副本来确保修复的数据是最新的。因此，Neptune 避免了数据丢失，减少了执行时间点恢复以从磁盘故障中恢复的需求。