Node.js Dynamodb通过多个键进行排序和过滤
我试图存储三个主列,以保存用户的分数Node.js Dynamodb通过多个键进行排序和过滤,node.js,amazon-web-services,nosql,amazon-dynamodb,Node.js,Amazon Web Services,Nosql,Amazon Dynamodb,我试图存储三个主列,以保存用户的分数 User DateTime Score 1 2018-01-01-09-00 5 1 2015-11-24-11-32 2 2 2014-11-24-11-32 1 3 2016-11-24-11-32 3 我需要/更简单的功能:
User DateTime Score
1 2018-01-01-09-00 5
1 2015-11-24-11-32 2
2 2014-11-24-11-32 1
3 2016-11-24-11-32 3
我需要/更简单的功能:
- 用户/日期时间需要是唯一的-(所以我们打算将其用作分区/范围键)
- 分数需要使用
自动递增(他们可以在一分钟内得分5次,而不是得到5分)UpdateExpression:“ADD#C:num”
- 需要检索特定的用户/时间分数条目
- 需要检索datetime包含特定部分的所有条目(例如,可能是2018年,可能是2018-01年)-“查询”中的有效检索也是如此,但按分数排序。这让我可以按天、月、年、小时等找出用户的最高分数
User DateTime compound
(partition) (range key)
1 2018-01-01-09-00 1#2018-01-01-09-00
1 2015-11-24-11-32 1#2015-11-24-11-32
2 2018-01-01-09-00 2#2018-01-01-09-00
3 2016-11-24-11-32 3#2018-01-01-09-00
表2:
user#DateTime Score
(partition key) (range key)
1#2018-01-01-09-00 5
1#2015-11-24-11-32 2
2#2014-11-24-11-32 1
3#2016-11-24-11-32 3
在哪里做两个查询
1.获取以(2018-01*)开头的日期时间列表
2.获取返回的所有日期时间的分数
但是,这似乎太过分了,因为有多个查询
是否有一些明显的遗漏,因为它似乎是dynamodb的主要候选项,即简单查找
我不想单独保存日期的每个阶段,例如2018年、2018-01年、2018-01-01年、2018-01-09年,因为这看起来非常重复,需要may写入来更新
理想情况下,我会有一个复合范围的关键点
分数#dateTime,但我不能这样做,因为分数必须以原子方式更新