在 DynamoDB 中处理时间序列数据的最佳实践
Amazon DynamoDB 的一般设计准则建议尽可能少使用表格。对于大多数应用程序,只需单个表即可。但是,对于时间序列数据,通常最好每个时间段为每个应用程序使用一个表。
时间序列数据的设计模式
考虑一个需要跟踪大量活动的典型时间序列场景。写入访问模式是记录的所有事件都有当天日期。读取访问模式是当天事件读取频率最高,前一天事件的读取频率小很多,更早事件的读取频率几乎为零。一种处理方式是将当前日期和时间加入主键。
下面的设计模式通常可以高效应对这种场景:
-
每个时间段创建一个表,预置所需的读取和写入容量以及所需的索引。
-
每个时间段结束前,为下一个时间段预生成表。当前时间段结束时,将事件流量定向至新表。可以为这些表分配名称,指定这些表记录的时间段。
-
只要不再写入表,就将预置的写入容量降至较低值(例如 1 WCU),预置适当的读取容量。随着时间推移,减少早期表的预置读取容量。可以选择存档或删除几乎或完全不需要其内容的表。
这种做法的目的是将所需的资源分配给承受最高流量的当前时间段,同时降低使用不活跃的旧表的预置资源,从而节省成本。根据业务需求,可能考虑写入分片,将流量均匀地分布到逻辑分区键。有关更多信息,请参阅 在 DynamoDB 表中使用写入分片来均匀分配工作负载。
使用标准-IA 表类优化存储成本
DynamoDB 提供两种表类:DynamoDB 标准和 DynamoDB 标准-不频繁访问(DynamoDB 标准-IA)。标准-IA 表类降低了存储成本,但会增加读取和写入吞吐量的成本。当存储占据了表的大部分开支并且不经常访问该表时,此表类非常适用。
这种权衡自然地非常适用于时间序列模式。在当前时间段,表接收大部分读取和写入流量,因此将其保留在吞吐量成本较低的 DynamoDB 标准表类上。随着表逐渐老化退出活跃使用状态,向其中的写入很少(或根本不写入),读取频率也很低,但您仍要继续保留其数据。对于这些较旧的表,存储通常会成为最大成本,因此将它们切换到标准-IA 表类可以降低总体成本。
对时间序列表应用表类时,请考虑以下几点:
-
将当前(活动)时间段保留在 DynamoDB 标准表类上。对于提供大量读取和写入的表来说,标准-IA 更高的吞吐量成本将超过其节省的存储成本。
-
在某个时间段的表不再会被活跃写入且不经常被访问之后,但您仍然需要保留其数据(例如,用于合规性或偶尔的历史查询)时,将其切换到标准-IA。
-
您可以在创建表时设置表类,也可在以后进行更改。在切换之前,评估每个表的存储与吞吐量的成本比率,并在切换后监控成本。
有关表类以及如何在表类之间进行选择的更多信息,请参见 DynamoDB 表类和评估您的 DynamoDB 表类选择。
时间序列表示例
下面是一个时间序列数据示例,当前表预置较高读取/写入容量,较早的表因为访问不频繁,将降低配置。