DynamoDB 并发

问题描述 投票:0回答:1

我有一个并发调用 N 次的 AWS Lambda 函数,并且在第 N 次调用后我必须触发一个操作。

有关 DynamoDB 原子性/事务性的文档有点混乱:link

我当前的解决方案(python SDK boto3)是将计数器和条件表达式结合起来:

# Lambda content...
try:
    dynamo_table.update_item(
        Key={ 'Id' : id },
        UpdateExpression="ADD file_processing_count :inc",
        ExpressionAttributeValues={':inc': -1, ':min': 1},
        ConditionExpression='file_processing_count > :min',
        ReturnValues="UPDATED_NEW")
    all_file_processed=False
except:
    all_file_processed=True

这足以防止竞争条件吗?

amazon-web-services aws-lambda concurrency amazon-dynamodb
1个回答
0
投票

DynamoDB 中的所有单例操作都是强序列化和原子性的,因为所有写入均由领导节点处理。因此,您永远不会遇到竞争条件,所有更新都将按照 DynamoDB 收到的顺序应用。

© www.soinside.com 2019 - 2024. All rights reserved.