DynamoDB中的ItemSize

Mik*_*ike 43 amazon-dynamodb

我正在尝试计算dynamoDB中项目的大小,我无法理解定义.

我发现的定义:项目大小是其属性名称和值(二进制和UTF-8长度)的长度之和.因此,如果保持属性名称简短,这会有所帮助

这是否意味着如果我在数据库中放一个数字,例如:1它将占用int的大小?好久不过?一双?是否需要相同的空间量而不是100或1000000,否则它只需要相应二进制文件的大小?

String的计算是什么?

是否有人知道如何计算它?

谢谢

Ste*_*pel 39

这确实是一个非常重要的话题 - 您已经从Amazon DynamoDB数据模型中引用了一些有些草率的定义:

项目大小是其属性名称和值(二进制和UTF-8长度)的长度之和.

这在Amazon DynamoDB数据类型的页面下面进一步详细说明:

  • String - 字符串是带有UTF8二进制编码的Unicode.
  • 数字 - 数字是正或负精确值小数和整数.一个数字在小数点后最多可以有38位精度,并且可以在10 ^ -128到10 ^ + 126之间.Amazon DynamoDB中的表示具有可变长度.修剪前导零和尾随零.

亚马逊DynamoDB论坛也提出了与你的问题类似的问题(参见"数字"类型的好奇性),Stefano @ AWS答案更清楚地说明了这个问题:

  • "数字"类型有38位精度这些是实际的十进制数字.所以它可以代表相当大的数字,并且没有精确损失.
  • Number值占用多少空间?不是太多.我们的内部表示是可变长度,因此大小与值中的实际(与最大)位数相关.btw修剪了前导和尾随零.[强调我的]

克里斯托弗史密斯的后续帖子提供了更多关于存储消费及其计算结果的见解,他总结道:

现有的API对存储消耗提供了很少的洞察力,即使这是计费的一部分(当然不是那么重要).唯一的信息是聚合表大小,甚至该数据可能还会有几个小时不同步.

虽然亚马逊尚未通过API公开其账单数据,但他们希望在某些时候添加一个选项来检索有关项目大小的信息,如Christopher所建议的那样.

  • 不幸的是,这是模糊的。Postgres 还存储具有“可变”长度的小数 - 除了它使用的二进制格式仅占用 8 个字节用于开销(至少在二进制副本导出格式中)。我希望 AWS 做得更好! (2认同)

Asa*_*uru 11

我在Clazon @ AWS回答的amazon开发者论坛中找到了这个答案:

例如:-

"Item":{
"time":{"N":"300"},
"feeling":{"S":"not surprised"},
"user":{"S":"Riley"}
}
Run Code Online (Sandbox Code Playgroud)

为了计算上述对象的大小:

项大小是属性名称和值的长度之和,解释为UTF-8字符.在该示例中,项目的字节数因此是总和

Time : 4 + 3 
Feeling : 7 + 13 
User : 4 + 5          
Run Code Online (Sandbox Code Playgroud)

这是36

有关正式定义,请参阅:http: //docs.amazonwebservices.com/amazondynamodb/latest/developerguide/WorkingWithDDItems.html

  • 在这个答案中也提到了"项目大小是属性名称和值的长度之和,解释为UTF-8字符".utf-8字符可以占用1-4个字节."this"样本计算中给出的每个字符仅占用1个字节.(只需查看这里的长度:https://mothereff.in/byte-counter) (2认同)

Zac*_*les 7

项目\xe2\x80\x99s 大小是其所有属性\xe2\x80\x99 大小的总和,包括哈希和范围键属性。\n属性本身具有名称和值。名称和值都会影响属性\xe2\x80\x99 的大小。\n名称的大小与字符串值的大小相同。所有值的大小都根据其数据类型而有所不同。

\n\n

如果您对具体细节感兴趣,请阅读这篇博文

\n\n

另外,我还创建了DynamoDB 项目大小和消耗容量计算器,可以准确确定项目大小。

\n\n

数字无疑是 DynamoDB 最复杂的类型。AWS 没有公开记录如何确定数字中有多少字节。他们表示,这样他们就可以改变内部实施,而无需任何人参与。然而,他们所说的听起来很简单,但实际上却更加复杂。

\n\n

不过,非常粗略地说,该公式类似于每 2 个有效数字 1 个字节,加上 1 个额外字节(正数)或 2 个额外字节(负数)。因此,27是 2 个字节,-27是 3 个字节。如果\xe2\x80\x99s 数字数量不均匀,DynamoDB 将会四舍五入,因此461将使用 3 个字节(包括额外的字节)。在计算大小之前会修剪前导零和尾随零。

\n


Ale*_*kis 5

您可以使用 Titan DynamoDBDelegate类的 DynamoDB 存储后端中计算 DynamoDB 项目大小的算法。