Amazon DynamoDB:将整数存储为数字与字符串

时间:2017-01-31 22:28:42

标签: amazon-web-services amazon-dynamodb

我有一个使用DynamoDB的应用程序,我需要能够存储一些数字。目前,这些数字只会是正整数或偶尔为1位小数的正数。

由于DynamoDB只有一个Number数据类型,我认为它有点等同于float,将整数存储为Numbers是安全的,而不必担心精度导致返回值不正确(即1.999999999999而不是2)?或者我应该将它们保存为字符串并在需要时解析字符串中的整数。我知道DynamoDB已经在后台的某个时刻将Numbers存储为字符串,但我不确定在转换之前是否存在准确性丢失的可能性。

正如我所说,我将只使用最多1位小数的正数。

2 个答案:

答案 0 :(得分:11)

  

Number类型的属性。例如:

     

" N":" 123.45"

     

数字通过网络以字符串形式发送到DynamoDB   最大化语言和库之间的兼容性。然而,   DynamoDB将它们视为数学的数字类型属性   操作

     

类型:字符串必填:否

从文档中,如果您将数字存储为1.999999,则会将其设为1.999999。

还有进一步的文件:

  

一个数字最多可以有38位精度,可以是正数,   否定,或为零。

     

正范围:1E-130至9.9999999999999999999999999999999999999E + 125   负范围:-9.9999999999999999999999999999999999999E + 125至   -1E-130 DynamoDB使用JSON字符串表示请求和回复中的Number数据。有关更多信息,请参阅DynamoDB低级别   API。

     

如果数字精度很重要,则应将数字传递给DynamoDB   使用从数字类型转换的字符串。

答案 1 :(得分:5)

将数字存储为 DynamoDB Number data type 的另一个优势。

UpdateExpression中,您可以使用 + or - 来添加/减去值。

示例: -

添加: -

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

<强>减: -

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

如果将数字存储在DynamoDB中作为字符串数据类型,则无法进行上述操作。