Jus*_*ant 4 amazon-dynamodb aws-sdk aws-sdk-nodejs aws-sdk-js
DynamoDB 的Number类型支持 38 位十进制精度。这不足以存储需要 39 位数字的 128 位整数。最大值为 340,282,366,920,938,463,463,374,607,431,768,211,455 为 unsigned 128 位整数或 170,141,183,460,469,231,731,861,730,861,730,861,730,861,861,861,873 这些都是 39 位数字。
如果我不能存储128位,那么有多少整型数据位可我在商店Number?
Jus*_*ant 11
DynamoDB 属性类型Number可以存储 126 位整数(或 127 位无符号整数,有严重警告)。
根据亚马逊的文档:
数字的精度最高可达 38 位。超过这个会导致异常。
这意味着(通过在 AWS 控制台中进行测试验证)DynamoDB 可以存储在Number属性中的最大正整数和最小负整数分别是:
99,999,999,999,999,999,999,999,999,999,999,999,999(又名 10^38-1)-99,999,999,999,999,999,999,999,99991(又名 10^38-1)
这些数字需要 126 位的存储空间,使用以下公式:
bits = floor (ln(number) / ln (2))
= floor (87.498 / 0.693)
= floor (126.259)
= 126
Run Code Online (Sandbox Code Playgroud)
因此,您可以安全地将 126 位有符号整数存储在 DynamoDB 中。
如果你想危险地生活,你也可以存储一个 127 位的unsigned int,但有一些警告:
如果是我,我不会在没有非常非常好的理由的情况下多冒一点风险。
一个合乎逻辑的问题是 126(或 127 给出上述警告)是否足以存储 UUID。答案是:视情况而定。如果您可以控制 UUID 生成,那么您始终可以从 UUID 中删除一两个并存储它。如果您从 4 个“版本”位(请参阅此处的格式)进行剃须,那么如果您始终生成具有相同版本的 UUID,则您可能根本不会丢失任何熵。
但是,如果其他人正在生成这些 UUID 并且期望无损存储,那么您可能无法使用 aNumber来存储 UUID。但是,如果您将客户端限制在 4-8 个UUID 版本的白名单中,您也许可以存储它。现在最大的版本是 0-15 范围内的 5 个,出于隐私原因不鼓励使用某些旧版本,因此此限制可能是合理的,具体取决于您的客户端以及他们是否遵守RFC 4122 中定义的版本位。
顺便说一句,我很惊讶这个位限制问题还没有在线......至少不是在一个容易使用谷歌的地方。所以贡献这个问答对,以便未来的搜索者可以找到它。
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |