我有一个使用DynamoDB的应用程序,我需要能够存储一些数字。目前,这些数字只会是正整数或偶尔为1位小数的正数。
由于DynamoDB只有一个Number数据类型,我认为它有点等同于float,将整数存储为Numbers是安全的,而不必担心精度导致返回值不正确(即1.999999999999而不是2)?或者我应该将它们保存为字符串并在需要时解析字符串中的整数。我知道DynamoDB已经在后台的某个时刻将Numbers存储为字符串,但我不确定在转换之前是否存在准确性丢失的可能性。
正如我所说,我将只使用最多1位小数的正数。
答案 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中作为字符串数据类型,则无法进行上述操作。