Amazon dynamodb 在dynamodb中建模timeseries数据的最佳方法
我想用以下属性为表建模: 用户id 产品标识 时间戳 该表记录用户购买产品的时间。 在dynamo中建模时,我将年、月、日添加为GSIs 分区键是用户id,时间戳是排序键 这是允许基于时间的查询的正确方法吗? 我正在尝试优化两个查询:Amazon dynamodb 在dynamodb中建模timeseries数据的最佳方法,amazon-dynamodb,Amazon Dynamodb,我想用以下属性为表建模: 用户id 产品标识 时间戳 该表记录用户购买产品的时间。 在dynamo中建模时,我将年、月、日添加为GSIs 分区键是用户id,时间戳是排序键 这是允许基于时间的查询的正确方法吗? 我正在尝试优化两个查询: 获取给定日期范围的用户购买的产品 获取购买了给定日期范围的任何产品的用户 对于查询1,用户id作为主键,时间戳作为范围键就足够了。此查询不需要任何其他GSI 查询2有点棘手 您当然可以将时间分割为年、月、周或日等时段,并将其用作GSI(时间戳作为排序键,以便您可以
对于查询1,用户id作为主键,时间戳作为范围键就足够了。此查询不需要任何其他GSI 查询2有点棘手 您当然可以将时间分割为年、月、周或日等时段,并将其用作GSI(时间戳作为排序键,以便您可以调整查询以精确匹配时段)。但是,感觉这将是一个昂贵的解决方案,存在热键的风险(因为在任何给定时间,所有写入吞吐量都将进入同一年/月/日)
相反,对于查询2,我建议使用一种不同的方法:您可以创建一个GSI,将1到N之间的随机碎片数作为主键,时间戳作为排序键。根据您的吞吐量需求选择N(例如:8),以后您可以随时增加它。现在,每当您添加一条新记录时,请为其分配一个介于1和N之间的随机分片数。每当您需要获取两个时间戳之间的所有购买信息时,请进行N次并行查询,然后合并结果。请详细说明数据。还请详细说明您的查询要求。表设计应针对您的查询需求进行优化。这是您要进行的唯一查询还是有其他查询?您将拥有多少数据?@cody123已随查询更新requirments@TofigHasanov更新问题