在节点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 [] []是一个二维数组。对于此测试数据,它的大小将分别为 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);
}
}
答案 0 :(得分:0)
这不是dynamoDB问题。 这是我的排序键的问题,即TimeStamp。
第二个请求是从第一个请求中覆盖了2个记录。