Amazon dynamodb DynamoDB ADD事务无明显原因地间歇性失败
我的DynamoDB有间歇性的问题,写了一堆条目。我看不出问题是什么,奇怪的是,问题发生在一个没有Amazon dynamodb DynamoDB ADD事务无明显原因地间歇性失败,amazon-dynamodb,Amazon Dynamodb,我的DynamoDB有间歇性的问题,写了一堆条目。我看不出问题是什么,奇怪的是,问题发生在一个没有条件表达式的地方。这种异常大约10次发生1次 docClient.transactionWrite(transaction.promise() { "TransactItems": [ { "Update": { "TableName": "protect-dev-stepfunction-ScanAggregation
条件表达式的地方。这种异常大约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
特别好,因为它可以在单个原子操作中读取和修改项,这对并发性非常好。)