2017-12-11 9 views
0

ノードjsで、batchWriteItem()を使用してdynamoDBテーブルにレコードを書き込もうとしています。batchWriteItem()が矛盾した結果を返す

insertTransactionDetails()関数への最初の呼び出しで、2つのレコードを送信している同じ関数への2回目の呼び出し中に9個のレコードを挿入して送信しています。

テーブルに挿入される最終レコードは、実行ごとに異なります。

試験1: Iは、第1の機能呼び出しから3つのレコードに続く2回目の呼び出しから2つの記録、続いて第1のコールから4つのレコードを参照。 テスト2: 第1コールの2レコード、第2コールの2レコード、第1ファンクションコールの5レコードが続きます。

期待される結果は、第二の関数呼び出しからの2つのレコードに続く第一の関数呼び出しから9つのレコードを表示することでした。

何らかの理由で、計11レコード(9+ 2)の代わりに9レコードしか挿入されないことに気付きました。

私は多くのデバッグやオンライン検索を試みましたが、根本原因を理解できませんでした。ここで問題を見つけるのを助けてくれる人に本当に感謝します。どうもありがとう。

機能は、と呼ばれ、insertTransactionDetails(dataToInsert、0、bulkSearchParams)の両方の時間と呼ばれます。 dataToInsert [] []は2次元配列です。このテストデータのサイズは、それぞれ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); 
    } 
    } 

答えて

0

これは、DynamoDBの問題ではなかったです。 ソートキー、つまりタイムスタンプで問題が発生しました。

2番目の要求は、1番目の要求から2つのレコードを上書きしていました。

関連する問題