在节点 js 中,我尝试使用 batchWriteItem() 将记录写入 dynamoDB 表。
在我第一次调用函数 insertTransactionDetails() 时,我发送 9 条记录以插入,而在第二次调用同一函数时,我发送 2 条记录。
每次运行时插入到表中的最终记录都不同。
测试 1: 我看到第一次调用的 4 条记录,其次是第二次调用的 2 条记录,然后是第一次函数调用的 3 条记录。 测试 2: 我看到第一次调用的 2 条记录,其次是第二次调用的 2 条记录,然后是第一次函数调用的 5 条记录。
预期结果是从第一个函数调用中看到 9 条记录,然后是从第二次函数调用中看到 2 条记录。
我还注意到,由于某种原因,每次只插入 9 条记录,而不是总共 11 条记录(9+ 2)。
我已经尝试了很多调试和在线搜索,但无法理解根本原因。我将非常感谢有人帮助我在这里找到问题。非常感谢。
函数同时被称为insertTransactionDetails(dataToInsert,0,bulkSearchParams)。dataToInsert[][] 是一个二维数组。对于这个测试数据,它的大小将分别是 2 个调用的dataToInsert[0][9]和dataToInsert[0][2]。
batchWriteItem() 返回的数据粘贴在下面,显示 UnprocessedItems为空 {},这让我相信表配置不是问题。
下面是代码。
Logs: Bulk Search - insertTransactionDetails() - Success path: **{\"UnprocessedItems\":{},\"ConsumedCapacity\":[{\"TableName\":\"RaptorBulkSearchRequestTransactionDetails\",\"CapacityUnits\":18}]}**
dataToInsert[i][j] =
{
PutRequest: {
Item: {
'RequestID' : {S: bulkSearchParams.operationId.concat('-',bulkSearchParams.sourceID)},
'TimeStamp': {N: epochTime.toString()},
'TransactionID': {S: bulkSearchParams.cardNumber.toString().concat('-',data.response.transactionRecords[j].GUID)},
'TransactionItem': {S: JSON.stringify(data.response.transactionRecords[j])}
}
}
};
function insertTransactionDetails (dataToInsert,index,bulkSearchParams){
if (index < dataToInsert.length){
// Call DynamoDB to add the item to the table
var batchRequest = {
RequestItems: {
"RaptorBulkSearchRequestTransactionDetails": dataToInsert[index]
},
"ReturnConsumedCapacity": "TOTAL"
};
dynamodb.batchWriteItem(batchRequest, function(err, data) {
if (err) {
logErrorMessage(`Bulk Search - insertTransactionDetails() - Failure path: ${err}`, "routes.bulkSearch", bulkSearchParams.operationId, "NA");
index++;
insertTransactionDetails(dataToInsert,index,bulkSearchParams); //increment index for dataToInsert and insert the next set
} else {
logInfoMessage(`Bulk Search - insertTransactionDetails() - Success path: ${JSON.stringify(data)}`, "routes.bulkSearch", bulkSearchParams.operationId, "NA");
index++;
insertTransactionDetails(dataToInsert,index,bulkSearchParams); //increment index for dataToInsert and insert the next set
}
});
}
else{
//proceed to the next card if available
bulkSearchParams.index ++; //incrementing the index for cardNumber
processBulkSearch(bulkSearchParams);
}
}