2017-12-11 4 views
0

In Knoten js Ich versuche, Datensätze in eine DynamoDB-Tabelle mit BatchWriteItem() zu schreiben.batchWriteItem() gibt inkonsistente Ergebnisse zurück

Bei meinem ersten Aufruf der Funktion insertTransactionDetails() sende ich 9 Datensätze zum Einfügen, während beim zweiten Aufruf derselben Funktion ich 2 Datensätze sende.

Die letzten Datensätze, die in die Tabelle eingefügt werden, unterscheiden sich bei jedem Lauf.

Test 1: Ich sehe 4 Datensätze aus ersten Anruf, gefolgt von zwei Datensätze aus dem zweiten Anruf, gefolgt von 3 Datensätze aus dem ersten Funktionsaufruf. Test 2: Ich sehe 2 Datensätze aus dem ersten Anruf, gefolgt von 2 Datensätze aus dem zweiten Anruf, gefolgt von 5 Datensätze aus dem ersten Funktionsaufruf.

Erwartetes Ergebnis betrug 9 Datensätze aus dem 1. Funktionsaufruf durch zwei Datensätze aus dem zweiten Funktionsaufruf gefolgt, um zu sehen.

Ich bemerkte auch, dass aus irgendeinem Grund nur 9 Datensätze jedes Mal anstelle von insgesamt 11 Datensätze eingefügt werden (9 + 2).

Ich habe versucht, viel zu debuggen und online zu suchen, aber nicht in der Lage, die Ursache zu verstehen. Ich werde wirklich jemanden schätzen, der mir hilft, das Problem hier zu finden. Danke vielmals.

Funktion heißt sowohl die Zeit als insertTransactionDetails (dataToInsert, 0, bulkSearchParams). dataToInsert [] [] ist ein zweidimensionales Array. Für diese Testdaten wäre die Größe dataToInsert [0] [9] und dataToInsert [0] [2] für jeweils 2 Aufrufe.

Die von batchWriteItem() zurückgegebenen Daten werden unten eingefügt und zeigen, dass UnprocessedItems leer {} ist, was mich glauben macht, dass die Tabellenbereitstellung kein Problem darstellt.

Unten ist der Code.

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); 
    } 
    } 

Antwort

0

Es war nicht DynamoDB Problem. Es war Problem mit meinem Sortierschlüssel, z. B. TimeStamp.

Die zweite Anforderung überschrieb 2 Datensätze von der ersten Anforderung.

Verwandte Themen