0

在节点 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);
    }
  }
4

1 回答 1

0

这不是 dynamoDB 问题。这是我的排序键(即时间戳)的问题。

第二个请求覆盖了第一个请求的 2 条记录。

于 2017-12-12T00:10:40.383 回答