

# 在 DynamoDB 中处理时间序列数据的最佳实践
<a name="bp-time-series"></a>

Amazon DynamoDB 的一般设计准则建议尽可能少使用表格。对于大多数应用程序，只需单个表即可。但是，对于时间序列数据，通常最好每个时间段为每个应用程序使用一个表。

## 时间序列数据的设计模式
<a name="bp-time-series-pattern"></a>

考虑一个需要跟踪大量活动的典型时间序列场景。写入访问模式是记录的所有事件都有当天日期。读取访问模式是当天事件读取频率最高，前一天事件的读取频率小很多，更早事件的读取频率几乎为零。一种处理方式是将当前日期和时间加入主键。

下面的设计模式通常可以高效应对这种场景：
+ 每个时间段创建一个表，预置所需的读取和写入容量以及所需的索引。
+ 每个时间段结束前，为下一个时间段预生成表。当前时间段结束时，将事件流量定向至新表。可以为这些表分配名称，指定这些表记录的时间段。
+ 只要不再写入表，就将预置的写入容量降至较低值（例如 1 WCU），预置适当的读取容量。随着时间推移，减少早期表的预置读取容量。可以选择存档或删除几乎或完全不需要其内容的表。

这种做法的目的是将所需的资源分配给承受最高流量的当前时间段，同时降低使用不活跃的旧表的预置资源，从而节省成本。根据业务需求，可能考虑写入分片，将流量均匀地分布到逻辑分区键。有关更多信息，请参阅 [在 DynamoDB 表中使用写入分片来均匀分配工作负载](bp-partition-key-sharding.md)。

## 使用标准-IA 表类优化存储成本
<a name="bp-time-series-table-class"></a>

DynamoDB 提供两种表类：DynamoDB 标准和 DynamoDB 标准-不频繁访问（DynamoDB 标准-IA）。标准-IA 表类降低了存储成本，但会增加读取和写入吞吐量的成本。当存储占据了表的大部分开支并且不经常访问该表时，此表类非常适用。

这种权衡自然地非常适用于时间序列模式。在当前时间段，表接收大部分读取和写入流量，因此将其保留在吞吐量成本较低的 DynamoDB 标准表类上。随着表逐渐老化退出活跃使用状态，向其中的写入很少（或根本不写入），读取频率也很低，但您仍要继续保留其数据。对于这些较旧的表，存储通常会成为最大成本，因此将它们切换到标准-IA 表类可以降低总体成本。

对时间序列表应用表类时，请考虑以下几点：
+ 将当前（活动）时间段保留在 DynamoDB 标准表类上。对于提供大量读取和写入的表来说，标准-IA 更高的吞吐量成本将超过其节省的存储成本。
+ 在某个时间段的表不再会被活跃写入且不经常被访问之后，但您仍然需要保留其数据（例如，用于合规性或偶尔的历史查询）时，将其切换到标准-IA。
+ 您可以在创建表时设置表类，也可在以后进行更改。在切换之前，评估每个表的存储与吞吐量的成本比率，并在切换后监控成本。

有关表类以及如何在表类之间进行选择的更多信息，请参见 [DynamoDB 表类](HowItWorks.TableClasses.md)和[评估您的 DynamoDB 表类选择](CostOptimization_TableClass.md)。

## 时间序列表示例
<a name="bp-time-series-examples"></a>

下面是一个时间序列数据示例，当前表预置较高读取/写入容量，较早的表因为访问不频繁，将降低配置。

![大量时间序列数据的表架构。](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/images/TimeSeries.png)
