0

Die Situation ist, dass ich einige Informationen in einer DynamoDB-Datenbank speichern möchte, und senden Sie eine Benachrichtigung nur, wenn ich sicher bin, dass diese Informationen erfolgreich gespeichert wurden. Hier ist, was mein Code wie folgt aussieht:DynamoDB wird erfolgreich zurückgegeben, aber keine Daten speichern

const putObj = Bluebird.promisify(docClient.put, { context: docClient }) 

// ... a promise chain collecting information... 
      const params = { 
       TableName: 'my_table', 
       Item: { 
       name: itemName 
       } 
      } 
      return putObj(params) 
       .then((data) => { 
       if (Ramda.equals(data, {})) { 
        // ... send notification here 
       .catch((err) => { 
       throw err 
       }) 

Ich gehe davon aus, dass, wenn ein Fehler ist, die Daten zu speichern, wird dies in dem catch Block und die Benachrichtigung gesendet wird, nicht gefangen werden. Allerdings sehe ich in einigen Fällen, dass Benachrichtigungen gesendet werden, obwohl die entsprechenden Informationen nicht in der Datenbank gespeichert wurden. Dies geschieht nur selten - in fast allen Fällen funktioniert der Code wie gewünscht.

Irgendwelche Ideen darüber, warum/wie dies passieren könnte, und was ich tun kann, um es zu stoppen. DynamoDB gibt keine nützlichen Informationen an die .then zurück - es ist nur ein leeres Objekt im Erfolgsfall, und ich überprüfe dies bereits, bevor ich die Benachrichtigung sende.

Antwort

3

Verwenden Sie "eventuell konsistente" oder "stark konsistente" Lesevorgänge?

Wenn Sie Daten aus einer DynamoDB-Tabelle lesen, spiegelt die Antwort möglicherweise nicht die Ergebnisse einer kürzlich abgeschlossenen Schreiboperation wider. Die Antwort könnte einige veraltete Daten enthalten. Wenn Sie Ihre Anforderung nach einer kurzen Zeit wiederholen, sollte die Antwort die letzten Daten zurückgeben.

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html

Möglicherweise müssen Sie Ihre Lese- oder auch den Lesekonsistenzwert ändern wiederholen.

+0

Danke dafür. Das Problem besteht darin, dass dies bei Schreibvorgängen auftritt, die * nicht * aktuell sind. Vorgänge, die vor Stunden oder Tagen hätten stattfinden sollen, werden immer noch nicht in der Datenbank wiedergegeben. – otajor

Verwandte Themen