我想使用以下属性建模表:
USER_ID PRODUCT_ID 时间戳
用户购买产品时会记录表格。 在发电机中对其进行建模我将年,月,日添加为GSI 分区键是user_id,timestamp是sorted_key 这是允许基于时间的查询的正确方法吗? 我正在尝试优化两个查询:
答案 0 :(得分:2)
对于查询1,将user_id作为主键,将timestamp作为范围键就足够了。您不需要为此查询添加任何其他GSI。
查询2有点棘手。
您当然可以将时间分为年,月,周或日等时段,并将其用作GSI(将时间戳作为排序键,以便您可以调整查询以完全匹配您的时段)。但是,感觉这将是一个昂贵的解决方案,存在热键的风险(因为所有写入吞吐量将在任何给定时间进入相同的年/月/日)。
相反,对于查询2,我建议使用不同的方法:您可以创建单个GSI,其中1和N之间的随机分片编号作为主键,时间戳作为排序键。根据您的吞吐量要求选择N(例如:8),您可以随后增加它。现在,无论何时添加新记录,都要为其分配1到N之间的随机分片编号。无论何时需要在两个时间戳之间进行所有购买,您都要进行N个并行查询,然后合并结果。