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

Geo*_*nan 9 amazon-web-services amazon-dynamodb

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

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

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

小智 14

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.

  • 文档中第二个引文中的粗体线正是激发了这个问题的灵感,但再次阅读它我意识到我混淆了准确性和精确度。我的意思是数字可能无法准确存储,实际上这意味着如果我想存储一个超出系统精度限制的数字,那么最好将其存储为字符串。谢谢! (2认同)

not*_*est 6

将数字存储为的另一个优点DynamoDB Number data type.

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

例:-

加:-

UpdateExpression : "SET total_val = total_val + :value",            
    ExpressionAttributeValues: {                
            ':value': 2
    },
Run Code Online (Sandbox Code Playgroud)

减去:-

UpdateExpression : "SET total_val = total_val - :value",            
        ExpressionAttributeValues: {                
                ':value': 2
        },
Run Code Online (Sandbox Code Playgroud)

如果将数字存储为DynamoDB中的String数据类型,则无法进行上述操作.