Amazon dynamodb 在dynamodb中建模timeseries数据的最佳方法

Amazon dynamodb 在dynamodb中建模timeseries数据的最佳方法,amazon-dynamodb,Amazon Dynamodb,我想用以下属性为表建模: 用户id 产品标识 时间戳 该表记录用户购买产品的时间。 在dynamo中建模时,我将年、月、日添加为GSIs 分区键是用户id,时间戳是排序键 这是允许基于时间的查询的正确方法吗? 我正在尝试优化两个查询: 获取给定日期范围的用户购买的产品 获取购买了给定日期范围的任何产品的用户 对于查询1,用户id作为主键,时间戳作为范围键就足够了。此查询不需要任何其他GSI 查询2有点棘手 您当然可以将时间分割为年、月、周或日等时段,并将其用作GSI(时间戳作为排序键,以便您可以

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

用户id 产品标识 时间戳

该表记录用户购买产品的时间。 在dynamo中建模时,我将年、月、日添加为GSIs 分区键是用户id,时间戳是排序键 这是允许基于时间的查询的正确方法吗? 我正在尝试优化两个查询:

  • 获取给定日期范围的用户购买的产品
  • 获取购买了给定日期范围的任何产品的用户

  • 对于查询1,用户id作为主键,时间戳作为范围键就足够了。此查询不需要任何其他GSI

    查询2有点棘手

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


    相反,对于查询2,我建议使用一种不同的方法:您可以创建一个GSI,将1到N之间的随机碎片数作为主键,时间戳作为排序键。根据您的吞吐量需求选择N(例如:8),以后您可以随时增加它。现在,每当您添加一条新记录时,请为其分配一个介于1和N之间的随机分片数。每当您需要获取两个时间戳之间的所有购买信息时,请进行N次并行查询,然后合并结果。

    请详细说明数据。还请详细说明您的查询要求。表设计应针对您的查询需求进行优化。这是您要进行的唯一查询还是有其他查询?您将拥有多少数据?@cody123已随查询更新requirments@TofigHasanov更新问题