Amazon dynamodb DynamoDB ADD事务无明显原因地间歇性失败

Amazon dynamodb DynamoDB ADD事务无明显原因地间歇性失败,amazon-dynamodb,Amazon Dynamodb,我的DynamoDB有间歇性的问题,写了一堆条目。我看不出问题是什么,奇怪的是,问题发生在一个没有条件表达式的地方。这种异常大约10次发生1次 docClient.transactionWrite(transaction.promise() { "TransactItems": [ { "Update": { "TableName": "protect-dev-stepfunction-ScanAggregation

我的DynamoDB有间歇性的问题,写了一堆条目。我看不出问题是什么,奇怪的是,问题发生在一个没有
条件表达式的地方。这种异常大约10次发生1次

docClient.transactionWrite(transaction.promise()

{
    "TransactItems": [
        {
            "Update": {
                "TableName": "protect-dev-stepfunction-ScanAggregation",
                "Key": {
                    "pk": "#ScanCount#",
                    "sort": "#Total"
                },
                "UpdateExpression": "ADD queued :queued, runningFiles :runningFiles",
                "ExpressionAttributeValues": {
                    ":queued": 1,
                    ":runningFiles": 0
                },
                "ReturnValues": "UPDATED_NEW"
            }
        },
        {
            "Update": {
                "TableName": "protect-dev-stepfunction-ScanAggregation",
                "Key": {
                    "pk": "#ScanCount#",
                    "sort": "#Tenant#pwc"
                },
                "UpdateExpression": "SET isTenant = :isTenant ADD queued :queued, runningFiles :runningFiles",
                "ExpressionAttributeValues": {
                    ":queued": 1,
                    ":runningFiles": 0,
                    ":isTenant": true
                },
                "ReturnValues": "UPDATED_NEW"
            }
        },
        {
            "Put": {
                "TableName": "protect-dev-stepfunction-Jobs",
                "Item": {
                    "createdAt": "2020-05-11 05:25:58.770369",
                    "scanId": "1161",
                    "tenantId": "pwc",
                    "TaskToken": "AAAAKgAAAAIAAAAAAAAAAb67i0NKEMIMzPxx5gzBSG8BhJwwVpTcsItdwbbkeOzPqefqQdqUu7yL3MMKLX3BR6ATsol4d60iFoOhDbR6WKmtukG5VH0rUHbxf8NMGcnZ+xhvD1bTyJbh1z2KEAHjQixI8sP/fhH065sygK9s8PS9XyvU2L/mEWcrn0ZGBLk+HDhHE2cwscYK2GYeKdVVthzCwgZ220tyYBHZBt3BXfKmjs3/8Xru8E0lk345Ub/mbalcQMTGPIYskk24UtnJNJJ5Qw9KSDBWl4e0DD0XULfcwWqsLZhVPwXS/e4j2XGE9k6XexusItElQAyopZ4njcU9YEPcchfsynDn0WptXpEMmO1gDYqE+oDaASazGIC3Oms7PhpD0XB9oApO84NvSik1q9VtXrnO5FEcBi5wG4GhYk2216Ga9lhc+S0luUIHfQQrkHtFPsw4uCaXTjTpCjCNG3wZqBjbS3GDbDnsW0yey74pc1FeEdB46os6v1OtGhjQBBbIlBS7L8t7HqNOtDrnBsqDort2u7Td0LUyp9YEksacSs4DlxKHtQ9aysxJVpFJVTGnrAuxfXcafo63R6aU8O764+6Nbm/QBWUJOdvkSQ5IaSDevqeaeLzHgeqY4KiXfCaRt2WYXljOTNucp5N8yr6ZAYGDGRrIIRiF5DY=",
                    "priority": "3",
                    "fileId": "3179",
                    "pk": "pwc",
                    "sort": "3-1161_3179",
                    "scanStatus": "SUBMITTED",
                    "rjk": "3-1161_3179"
                },
                "ConditionExpression": "attribute_not_exists(pk) and attribute_not_exists(sort)"
            }
        }
    ]
}{
    "TransactItems": [
        {
            "Update": {
                "TableName": "protect-dev-stepfunction-ScanAggregation",
                "Key": {
                    "pk": "#ScanCount#",
                    "sort": "#Total"
                },
                "UpdateExpression": "ADD queued :queued, runningFiles :runningFiles",
                "ExpressionAttributeValues": {
                    ":queued": 1,
                    ":runningFiles": 0
                },
                "ReturnValues": "UPDATED_NEW"
            }
        },
        {
            "Update": {
                "TableName": "protect-dev-stepfunction-ScanAggregation",
                "Key": {
                    "pk": "#ScanCount#",
                    "sort": "#Tenant#pwc"
                },
                "UpdateExpression": "SET isTenant = :isTenant ADD queued :queued, runningFiles :runningFiles",
                "ExpressionAttributeValues": {
                    ":queued": 1,
                    ":runningFiles": 0,
                    ":isTenant": true
                },
                "ReturnValues": "UPDATED_NEW"
            }
        },
        {
            "Put": {
                "TableName": "protect-dev-stepfunction-Jobs",
                "Item": {
                    "createdAt": "2020-05-11 05:25:58.770369",
                    "scanId": "1161",
                    "tenantId": "pwc",
                    "TaskToken": "AAAAKgAAAAIAAAAAAAAAAb67i0NKEMIMzPxx5gzBSG8BhJwwVpTcsItdwbbkeOzPqefqQdqUu7yL3MMKLX3BR6ATsol4d60iFoOhDbR6WKmtukG5VH0rUHbxf8NMGcnZ+xhvD1bTyJbh1z2KEAHjQixI8sP/fhH065sygK9s8PS9XyvU2L/mEWcrn0ZGBLk+HDhHE2cwscYK2GYeKdVVthzCwgZ220tyYBHZBt3BXfKmjs3/8Xru8E0lk345Ub/mbalcQMTGPIYskk24UtnJNJJ5Qw9KSDBWl4e0DD0XULfcwWqsLZhVPwXS/e4j2XGE9k6XexusItElQAyopZ4njcU9YEPcchfsynDn0WptXpEMmO1gDYqE+oDaASazGIC3Oms7PhpD0XB9oApO84NvSik1q9VtXrnO5FEcBi5wG4GhYk2216Ga9lhc+S0luUIHfQQrkHtFPsw4uCaXTjTpCjCNG3wZqBjbS3GDbDnsW0yey74pc1FeEdB46os6v1OtGhjQBBbIlBS7L8t7HqNOtDrnBsqDort2u7Td0LUyp9YEksacSs4DlxKHtQ9aysxJVpFJVTGnrAuxfXcafo63R6aU8O764+6Nbm/QBWUJOdvkSQ5IaSDevqeaeLzHgeqY4KiXfCaRt2WYXljOTNucp5N8yr6ZAYGDGRrIIRiF5DY=",
                    "priority": "3",
                    "fileId": "3179",
                    "pk": "pwc",
                    "sort": "3-1161_3179",
                    "scanStatus": "SUBMITTED",
                    "rjk": "3-1161_3179"
                },
                "ConditionExpression": "attribute_not_exists(pk) and attribute_not_exists(sort)"
            }
        }
    ]
}
我得到了这个stacktrace:

TransactionCanceledException: Transaction cancelled, please refer cancellation reasons for specific reasons [TransactionConflict, TransactionConflict, None]
    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:51:27)
    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
  message:
   'Transaction cancelled, please refer cancellation reasons for specific reasons [TransactionConflict, TransactionConflict, None]',
  code: 'TransactionCanceledException',
  time: 2020-05-11T05:26:00.972Z,
  requestId: 'ABKB5RCR30SDASOL3KGS5KEBUJVV4KQNSO5AEMVJF66Q9ASUAAJG',
  statusCode: 400,
  retryable: false,
  retryDelay: 32.29530018146246 }
TransactionCanceledException:交易已取消,具体原因请参考取消原因[TransactionConflict,TransactionConflict,None]
at Request.extractError(/var/runtime/node_modules/aws sdk/lib/protocol/json.js:51:27)
at Request.callListeners(/var/runtime/node_modules/aws sdk/lib/sequential_executor.js:106:20)
at Request.emit(/var/runtime/node_modules/aws sdk/lib/sequential_executor.js:78:10)
at Request.emit(/var/runtime/node_modules/aws sdk/lib/Request.js:683:14)
at Request.transition(/var/runtime/node_modules/aws sdk/lib/Request.js:22:10)
在AcceptorStateMachine.runTo(/var/runtime/node_modules/aws sdk/lib/state_machine.js:14:12)
at/var/runtime/node_modules/aws sdk/lib/state_machine.js:26:10
应要求。(/var/runtime/node_modules/aws sdk/lib/request.js:38:9)
应要求。(/var/runtime/node_modules/aws sdk/lib/request.js:685:12)
at Request.callListeners(/var/runtime/node_modules/aws sdk/lib/sequential_executor.js:116:18)
信息:
'交易已取消,请参考具体原因的取消原因[交易冲突,交易冲突,无],
代码:“TransactionCanceledException”,
时间:2020-05-11T05:26:00.972Z,
requestId:'ABKB5RCR30SDASOL3KGS5KEBUJVV4KQNSO5AEMVJF66Q9ASUAJG',
状态代码:400,
可检索:错误,
retryDelay:32.29530018146246}
错误表示这是“交易冲突”,表示在以下情况下可能发生:

  • 项目的
    PutItem
    UpdateItem
    DeleteItem
    请求与包含相同项目的正在进行的
    TransactionWriteItems
    请求冲突
  • TransactionWriteItems
    请求中的项目是另一个正在进行的
    TransactionWriteItems
    请求的一部分
  • TransactiveItems
    请求中的项目是正在进行的
    TransactiveWriteItems
    BatchWriteItem
    PutItem
    UpdateItem
    DeleteItem
    请求的一部分

在您的情况下,它看起来像第二个场景。记录上有多少并发性?

这是正确的,有多个进程访问同一记录。如何解决这个问题?重试?@AnthonyKong是的,这将是最简单的解决方法。如果错误发生得太频繁,您可以尝试通过更改数据模型和访问模式来减轻它,从而减少受影响项的并发性,但如何实现这一点在很大程度上取决于您的用例。或者,如果可能,您可能希望避免事务,因为像
UpdateItem
这样的并发正常请求不会导致它们之间的
TransactionConflict
错误。(
UpdateItem
特别好,因为它可以在单个原子操作中读取和修改项,这对并发性非常好。)