Amazon dynamodb I';每次SNS触发lambda时,我都试图在DynamoDB中增加一个计数值
我在DynamoDb中有一个空表,id作为主键,time作为排序键。我正试图统计通过sns发送的信息数量。我有下面的代码,但它只是在我的count列中创建每个值为1。对于每个附加值或传入的sns消息,我希望有一行统计每个传入的sns消息的总数,并相应地更新,如第一条消息为一行中的1,下一条消息为2,下一条消息为3,依此类推。这是boto3 python。我是一个初学者,但这就是我到目前为止所拥有的。每次sns触发lambda时,我都希望看到下面的模式。我还想知道我是否可以只使用一个值作为计数,并用总和进行更新Amazon dynamodb I';每次SNS触发lambda时,我都试图在DynamoDB中增加一个计数值,amazon-dynamodb,Amazon Dynamodb,我在DynamoDb中有一个空表,id作为主键,time作为排序键。我正试图统计通过sns发送的信息数量。我有下面的代码,但它只是在我的count列中创建每个值为1。对于每个附加值或传入的sns消息,我希望有一行统计每个传入的sns消息的总数,并相应地更新,如第一条消息为一行中的1,下一条消息为2,下一条消息为3,依此类推。这是boto3 python。我是一个初学者,但这就是我到目前为止所拥有的。每次sns触发lambda时,我都希望看到下面的模式。我还想知道我是否可以只使用一个值作为计数,并
id ---- time ---SNS count
4545 12:00pm 1
8569 1:00pm 2
1234 2:00pm 3
你所要求的并不是DynamoDB真正支持的东西。您可以有一个单独的记录来保存当前计数,并以上面的方式递增,但使用一个始终相同的键。这样做,您可以获得新值并将该值放入新记录中。它看起来像这样(请原谅我缺乏Python技能) 这里有继承的危险。
update\u项
可能会成功,而put\u项
可能会失败,从而导致您的计数错误。此外,如果您多次处理同一SNS记录,则会得到错误的值
所有的话,你可能想考虑一下你真正需要的是什么。您可能会发现有更好的选择,比如使用DynamoDB流更新计数
response = table.update_item(
Key={
"itemID": itemID,
"time": time
},
UpdateExpression ='ADD count :inc',
ExpressionAttributeValues={
':inc': 1
},
ReturnValues="UPDATED_NEW"
)
print(response)
```
response = table.update_item(
Key={
"itemID": 0, # this is a placeholder ID, it just needs to be some value that won't be used elsewhere
"time": 'NOT A REAL TIME' # again, a placeholder. since this is just stored as a string it can be anything
},
UpdateExpression ='ADD count :inc',
ExpressionAttributeValues={
':inc': 1
},
ReturnValues="UPDATED_NEW"
)
table.put_item(
Item={
"itemID": itemID,
"time": time,
"count": response['count']
}
)