Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb 数字类型的DynamoDB属性中可以存储多少位整数数据?_Amazon Dynamodb_Aws Sdk_Aws Sdk Js_Aws Sdk Nodejs - Fatal编程技术网

Amazon dynamodb 数字类型的DynamoDB属性中可以存储多少位整数数据?

Amazon dynamodb 数字类型的DynamoDB属性中可以存储多少位整数数据?,amazon-dynamodb,aws-sdk,aws-sdk-js,aws-sdk-nodejs,Amazon Dynamodb,Aws Sdk,Aws Sdk Js,Aws Sdk Nodejs,DynamoDB的类型支持38位十进制精度。这不够大,无法存储需要39位数字的128位整数。对于无符号128位整数,最大值为340282366920938463463374607431768211455;对于有符号128位整数,最大值为170141183460469231731687303715884105727。这些都是39位数字 如果我不能存储128位,那么在一个数字中可以存储多少位整数数据?类型为Number的DynamoDB属性可以存储126位整数(或127位无符号整数,需要特别注意)。

DynamoDB的类型支持38位十进制精度。这不够大,无法存储需要39位数字的128位整数。对于无符号128位整数,最大值为340282366920938463463374607431768211455;对于有符号128位整数,最大值为170141183460469231731687303715884105727。这些都是39位数字


如果我不能存储128位,那么在一个
数字
中可以存储多少位整数数据?

类型为
Number
的DynamoDB属性可以存储126位整数(或127位无符号整数,需要特别注意)。

根据亚马逊的数据:

数字的精度可以高达38位。超过此值将导致异常

这意味着(通过在AWS控制台中进行测试验证),DynamoDB可以存储在
Number
属性中的最大正整数和最小负整数分别为:

999999999999999999999999999999999999999(又名10^38-1) -999999999999999999999999999999999999999(又名-10^38+1)

使用以下公式,这些数字需要126位存储:

bits = floor (ln(number) / ln (2))
     = floor (87.498 / 0.693)
     = floor (126.259)
     = 126
因此,您可以在DynamoDB中安全地存储126位有符号int

如果你想过上危险的生活,你也可以存储127位的无符号int,但是有一些警告:

  • 您需要避免(或至少要非常小心)使用此类数字作为排序键,因为最高有效位为1的值将作为负数排序
  • 在DynamoDB中存储或查询未签名整数时,您的应用程序需要将其转换为已签名整数,并且在从DynamoDB读取数据后还需要将其转换回未签名整数
如果是我,没有非常非常好的理由,我不会再多冒一点风险

一个合乎逻辑的问题是126(或127,考虑到上面的警告)是否足以存储UUID。答案是:视情况而定。如果您控制UUID的生成,那么您总是可以从UUID中删除一两个并存储它。如果您从4个“版本”位(参见格式)中删除,那么如果您总是使用相同的版本生成UUID,那么您可能根本不会丢失任何熵

但是,如果其他人正在生成这些UUID,并且希望使用无损存储,那么您可能无法使用
编号
来存储UUID。但是,如果您将客户端限制为4-8个白名单,则可以存储它。现在最大的版本是0-15范围中的5个,出于隐私原因,不鼓励使用一些较旧的版本,因此此限制可能是合理的,具体取决于您的客户以及他们是否遵守中定义的版本位

顺便说一句,我很惊讶这个位限制问题还没有上线。。。至少不是在一个容易用谷歌搜索的地方。因此,贡献这对问答,让未来的搜索者能够找到它