2017-01-31 5 views
3

Ich habe eine Anwendung DynamoDB verwenden, und ich muss in der Lage sein, einige Zahlen zu speichern. Im Moment werden diese Zahlen immer nur positive ganze Zahlen oder gelegentlich positive Zahlen mit 1 Dezimalstelle sein.Amazon DynamoDB: Speichern von ganzen Zahlen als Zahlen vs. Strings

Da DynamoDB nur einen Zahl-Datentyp hat, von dem ich annehme, dass er einem Gleitkomma entspricht, ist es sicher, ganze Zahlen als Zahlen zu speichern, ohne sich um Genauigkeit kümmern zu müssen (z. B. 1.999999999999 statt 2) ? Oder sollte ich sie als Strings speichern und ganze Zahlen aus den Strings analysieren, wenn ich sie brauche? Ich weiß, dass DynamoDB bereits Nummern als Zeichenfolgen an einem bestimmten Punkt im Hintergrund speichert, aber ich bin mir nicht sicher, ob es Möglichkeit Genauigkeitsverlust vor dieser Konvertierung gibt.

Wie gesagt, ich werde immer nur positive Zahlen wird mit bis zu 1 Dezimalstelle.

Antwort

6

Ein Attribut vom Typ Nummer. Zum Beispiel:

„N“: „123.45“

Zahlen werden über das Netzwerk an DynamoDB als Strings, zu Maximierungs Kompatibilität zwischen Sprachen und Bibliotheken gesendet. DynamoDB behandelt sie jedoch als Zahlentypattribute für mathematische -Operationen.

Typ: String erforderlich: Nein

Aus der Dokumentation, wenn Sie eine Zahl als 1,999999 speichern Sie werden es als 1,999999 bekommen.

Auch weitere Dokumentation:

Anzahl

Eine Zahl kann bis zu 38 Ziffern Genauigkeit hat, und kann positiv, negativ oder Null sein.

Positiver Bereich: 1E-130 bis 9.9999999999999999999999999999999999999E + 125 Negativer Bereich: -9.9999999999999999999999999999999999999E + 125 bis -1E-130 DynamoDB verwendet JSON Strings Anzahl Daten in Anfragen und Antworten zu repräsentieren. Weitere Informationen finden Sie unter DynamoDB Low-Level API.

Wenn die Zahlengenauigkeit wichtig ist, sollten Sie Zahlen an DynamoDB übergeben, indem Sie Zeichenfolgen verwenden, die Sie aus einem Zahlentyp konvertieren.

+0

Diese fett gedruckte Zeile im zweiten Zitat aus den Dokumenten ist genau das, was diese Frage inspirierte, aber wenn ich sie wieder lese, merke ich, dass ich Genauigkeit und Präzision verwechsle. Ich nahm die Zeile, um zu meinen, dass Zahlen möglicherweise nicht genau gespeichert werden, wenn es tatsächlich bedeutet, dass, wenn ich eine Zahl speichern möchte, die die Präzisionsgrenzen ihres Systems überschreitet, dann würde es besser als eine Zeichenfolge gespeichert werden. Vielen Dank! –

+0

@GeoffMcLennan Exaclty, wie ich es auch aus den Dokumentationen verstehe. Da der Typ der Zahlen Strings ist und die Zahlenumwandlung nur intern erfolgt, sollte es keine Probleme geben. Testen Sie jedoch immer alles, um sicherzustellen, dass es wie gewünscht für Ihr Setup funktioniert, sobald Sie das Setup fertig haben. –

3

Ein weiterer Vorteil der Speicherung von Zahlen als DynamoDB Number data type.

In UpdateExpression können Sie die Werte mit + or - addieren/subtrahieren.

Beispiel: -

Anzahl: -

UpdateExpression : "SET total_val = total_val + :value",    
    ExpressionAttributeValues: {     
      ':value': 2 
    }, 

subtrahieren: -

UpdateExpression : "SET total_val = total_val - :value",    
     ExpressionAttributeValues: {     
       ':value': 2 
     }, 

Die oben ist nicht möglich, wenn Sie die Nummer als String-Daten speichern Geben Sie DynamoDB ein.

+0

Das ist ein guter Punkt, aber leider nicht für meine spezifische Situation, da ich den Wert immer nur manuell einstellen werde und nicht inkrementiere. Eine gültige Antwort obwohl. –