在dynamodb中建模时间序列数据的最佳方法

时间:2017-08-03 04:20:59

标签: amazon-dynamodb

我想使用以下属性建模表:

USER_ID PRODUCT_ID 时间戳

用户购买产品时会记录表格。 在发电机中对其进行建模我将年,月,日添加为GSI 分区键是user_id,timestamp是sorted_key 这是允许基于时间的查询的正确方法吗? 我正在尝试优化两个查询:

  1. 获取给定日期范围的用户购买的产品
  2. 获取购买任何具有日期范围的产品的用户

1 个答案:

答案 0 :(得分:2)

对于查询1,将user_id作为主键,将timestamp作为范围键就足够了。您不需要为此查询添加任何其他GSI。

查询2有点棘手。

您当然可以将时间分为年,月,周或日等时段,并将其用作GSI(将时间戳作为排序键,以便您可以调整查询以完全匹配您的时段)。但是,感觉这将是一个昂贵的解决方案,存在热键的风险​​(因为所有写入吞吐量将在任何给定时间进入相同的年/月/日)。

相反,对于查询2,我建议使用不同的方法:您可以创建单个GSI,其中1和N之间的随机分片编号作为主键,时间戳作为排序键。根据您的吞吐量要求选择N(例如:8),您可以随后增加它。现在,无论何时添加新记录,都要为其分配1到N之间的随机分片编号。无论何时需要在两个时间戳之间进行所有购买,您都要进行N个并行查询,然后合并结果。