Amazon dynamodb I';每次SNS触发lambda时,我都试图在DynamoDB中增加一个计数值

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时,我都希望看到下面的模式。我还想知道我是否可以只使用一个值作为计数,并

我在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']
     }
 )