DynamoDB:在主键中使用时间戳字段的良好实践

Nak*_*euh 0 primary-key amazon-dynamodb

我想从 DynamoDB 表存储和检索数据。

我的数据(项目=用户对应用程序功能的评论)具有以下属性:

user        string 
feature     string
appVersion  string
timestamp   string 
rate        int   
description string 
Run Code Online (Sandbox Code Playgroud)

该应用程序的多个版本具有多种功能,并且用户可以对这些功能进行多次评论。所以我想使用 ( user, appVersion, feature, timestamp) 作为主键。

但似乎不可能在 DynamoDB 的主键中使用那么多属性。

我实现的第一个解决方案是使用useras a ,并将 ( , , )Partition Key的哈希值用作 a (在名为 的新字段中)。appVersionfeaturetimestampSort KeyreviewID

我的问题是,我想在不知道值的情况下检索给定user,的项目feature(假设我想要最新的项目,或与 3 个字段匹配的所有项目的列表)appVersiontimestamptimestamp

如果不知道timestamp,我就无法构建Sort Key检索我的物品所需的必要条件。timestamp但如果我从 中删除Sort Key,我将无法存储具有相同 ( user, appVersion, feature) 的多个项目。

处理这个用例的正确方法是什么?

我正在考虑使用 ( user,, ) 的哈希值作为 a ,并将 the作为 a ,这是一个正确的解决方案吗appVersionfeaturePartition KeytimestampSort Key

lee*_*gan 5

将时间戳放在 SK 的末尾,然后在查询数据时使用 SK 上的 begin_with 。

PK       SK
UserID   appVersion#feature#timestamp
Run Code Online (Sandbox Code Playgroud)

这将允许您动态查询数据。例如,您希望所有用户为特定应用程序版本投票

SELECT * FROM Mytable WHERE PK= 'x' AND SK BEGINS_WITH('{VERSION ID}')
Run Code Online (Sandbox Code Playgroud)

这是使用查询命令完成的。