batchWriteItem()返回不一致的结果

时间:2017-12-11 22:23:42

标签: javascript node.js amazon-dynamodb aws-sdk dynamo-local

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

1 个答案:

答案 0 :(得分:0)

这不是dynamoDB问题。 这是我的排序键的问题,即TimeStamp。

第二个请求是从第一个请求中覆盖了2个记录。