

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

# Amazon DocumentDB 弹性集群最佳实践
<a name="elastic-best-practices"></a>

了解使用 Amazon DocumentDB 弹性集群的最佳实践。所有[基于实例的 Amazon DocumentDB 集群的最佳实践](https://docs.aws.amazon.com/documentdb/latest/developerguide/best_practices.html)也适用于弹性集群。随着新的最佳实践的确定，此节将不断更新。

**Topics**
+ [选择分片键](#choosing-shard-keys)
+ [连接管理](#connection-management)
+ [未分片的集合](#unsharded-collections)
+ [扩展弹性集群](#scaling)
+ [监控弹性集群](#monitoring-elastic-clusters)

## 选择分片键
<a name="choosing-shard-keys"></a>

以下列表描述了创建分片键的指导原则。
+ 使用均匀分发的哈希键分发数据遍及您集群中的所有分片（避免热键）。
+ 在所有读取/更新/删除请求中使用分片键，以避免分散聚集查询。
+ 在执行读取/更新/删除操作时，请避免嵌套的分片键。
+ 进行批量操作时，请将 `ordered` 设置成虚假，从而使所有分片可以并行运行并改善延迟。

## 连接管理
<a name="connection-management"></a>

以下列表描述了管理与您数据库连接的指导原则。
+ 监控您的连接计数以及新连接开闭的频率。
+ 将您的连接分布到按您的应用程序配置的所有子网。如果您的集群配置在多个子网中，但您只使用这些子网的子集，则您可能在最大连接数上遇到瓶颈。

## 未分片的集合
<a name="unsharded-collections"></a>

以下内容描述了用于未分片集合的指导原则。
+ 在处理未分片的集合时，为了分配负载，请尝试将高度利用的未分片集合保留在不同的数据库上。Amazon DocumentDB 弹性集群跨不同分片安置数据库，并将同一数据库的未分片集合共同定位在同一个分片上。

## 扩展弹性集群
<a name="scaling"></a>

以下列表描述了扩展弹性集群的指导原则。
+ 扩展操作可能会导致短时间的间断性数据库和网络错误。如果可能，请避免在高峰时段扩展。尝试在维护窗口期间扩展。
+ 相比增加或减少分片计数，首选向上和向下扩展分片容量（更改每个分片的 vCPU 计数）以增加计算能力，因为它更快且具有更短的间断性数据库和网络错误持续时间。
+ 在预测增长时，最好增加分片计数，而非扩展分片容量。这使您能够通过增加需要快速扩展的场景的分片容量，来扩展您的集群。
+ 监控您的客户端重试策略并使用指数回退和抖动进行重试，以避免在扩展情况下出现错误时数据库过载。

## 监控弹性集群
<a name="monitoring-elastic-clusters"></a>

以下列表描述了监控弹性集群的指导原则。
+ 跟踪每个分片指标的峰值/平均值比率，以确定您是否驱动不均衡的流量（有热键/热点）。跟踪峰值/平均值比率的关键指标是：
  + `PrimaryInstanceCPUUtilization`
    + 这可以在每个分片层面监控。
    + 在集群层面，您可以监视平均到 p99 的偏差。
  + `PrimaryInstanceFreeableMemory`
    + 这可以在每个分片层面监控。
    + 在集群层面，您可以监视平均到 p99 的偏差。
  + `DatabaseCursorsMax`
    + 这应在每个分片层面监控以确定偏差。
  + `Documents-Inserted/Updated/Returned/Deleted`
    + 这应在每个分片层面监控以确定偏差。