Amazon dynamodb 根据字段值或元素数量删除dynamo db列表中的前几个条目
我在dynamoDB中有一个数据集,如下所示:Amazon dynamodb 根据字段值或元素数量删除dynamo db列表中的前几个条目,amazon-dynamodb,nosql,Amazon Dynamodb,Nosql,我在dynamoDB中有一个数据集,如下所示: { "userID" : 2323423, // Primary Key "lt" : [ { "timestamp" : epoch1, "coordinates" : "coordinate1" },
{
"userID" : 2323423, // Primary Key
"lt" : [
{
"timestamp" : epoch1,
"coordinates" : "coordinate1"
},
{
"timestamp" : epoch2,
"coordinates" : "coordinate2"
},
...
]
}
“lt”是位置跟踪列表,用于存储用户标识在不同时间的坐标值
Q1要求是:
- 每个用户最多存储1天的位置跟踪数据,只有在收到新的LT坐标数据输入时才会自动删除
- 这意味着一次可能会有过时的LT数据,所有这些数据都是24小时的。但是,一旦新的LT坐标数据出现,应立即删除过时条目,以便删除超过24小时的条目
- 将最后100个条目存储到此“lt”列表中
- 这将为用户保留可能过时的LT数据,以防他们的LT数据未被接收
我想了解实际应该如何做?您不需要将位置建模为列表。您可以将它们建模为地图,以HH:MM作为地图的键。在更新表达式中,只需使用
ExpressionAttributeNames={{hhmm:“16:05”}
和ExpressionAttributeValues={:coord:“0,0”}
设置lt.#hhmm=:coord。如果每分钟记录一次位置,这意味着lt
map中有24*60=1440个条目。如果每个坐标对长度为19个字符,则每个条目大约有30个字节,如果每分钟录制一次,则每人大约有43 KB
使用上述方案,以分钟粒度维护当前位置的成本约为每分钟43个WCU,或每用户每秒不到1个WCU。这对一个客户来说有点高。相反,您可以将用户位置项拆分为30分钟的存储桶,使用48个这样的项覆盖每人24小时的存储空间。因此,UpdateItem写入成本为每分钟1 WCU或每小时60 WCU。散列键的形式类似于\u HH: