Amazon dynamodb DynamoDB中的项目大小

Amazon dynamodb DynamoDB中的项目大小,amazon-dynamodb,Amazon Dynamodb,我试图计算dynamoDB中一个项目的大小,但我无法理解它的定义 我找到的定义是:项目大小是其属性名称和值的长度之和(二进制和UTF-8长度)。因此,保持属性名称简短会有所帮助 这是否意味着如果我在数据库中输入一个数字,例如:1,它的大小将为int?很久了?双人房?它将占用与100或1000000相同的空间量,还是只占用相应二进制文件的大小 字符串的计算是什么 有人知道怎么计算吗 谢谢你这的确是一个不平凡的话题-你已经引用了以下有点草率的定义: 项目大小是其属性名称和值的长度之和 (二进制和UT

我试图计算dynamoDB中一个项目的大小,但我无法理解它的定义

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

这是否意味着如果我在数据库中输入一个数字,例如:1,它的大小将为int?很久了?双人房?它将占用与100或1000000相同的空间量,还是只占用相应二进制文件的大小

字符串的计算是什么

有人知道怎么计算吗


谢谢你

这的确是一个不平凡的话题-你已经引用了以下有点草率的定义:

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

这将在页面的下一部分详细介绍:

  • 字符串-字符串是Unicode,采用UTF8二进制编码
  • 数字-数字是正或负的精确值小数和整数。一个数字在小数点后最多可以有38位精度,并且可以在10^-128到10^+126之间。Amazon DynamoDB中的表示是可变长度的。将修剪前导零和尾随零
在中也提出了一个与您类似的问题(请参阅),这使问题更加清晰:

  • “数字”类型有38位精度,它们是实际的十进制数 数字。所以它可以代表相当大的数字,而且没有 精度损失
  • 一个数值需要占用多少空间?不太 很多我们的内部表示是可变长度的,因此大小为 与值中的实际(相对于最大)位数相关。 前导零和尾随零会被修剪[强调]
他总结道,对存储消耗及其计算产生的影响有了更多的见解:

现有的API在存储方面提供的信息很少 消费,尽管这是一部分(不可否认不是) 账单的重要部分。唯一的信息是聚合 表大小,甚至这些数据也可能有几个小时不同步


在Amazon上,他们希望在某个时候向DynamoDB API添加一个选项来检索有关项目大小的信息,正如Christopher所建议的。

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

我在amazon开发者论坛上找到了这个答案Clarence@AWS:

例如:-

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

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

Time : 4 + 3 
Feeling : 7 + 13 
User : 4 + 5          
哪一个是36

有关正式定义,请参阅:
最简单的方法是在表中创建一个项目,并将该项目导出到csv文件,这是DynamoDB中提供的一个选项。csv文件的大小将给出项目的大致大小。

一个项目在DynamoDB表中所占的大致大小是使用boto3库执行get请求

这不是一个元素大小的精确解,但它将帮助您产生想法。执行
batch\u get\u项目(**kwargs)
时,您会得到一个响应,其中包括
ConsumedCapacity
,格式如下:

....
'ConsumedCapacity': [
    {
        'TableName': 'string',
        'CapacityUnits': 123.0,
        'ReadCapacityUnits': 123.0,
        'WriteCapacityUnits': 123.0,
        'Table': {
            'ReadCapacityUnits': 123.0,
            'WriteCapacityUnits': 123.0,
            'CapacityUnits': 123.0
        },
        'LocalSecondaryIndexes': {
            'string': {
                'ReadCapacityUnits': 123.0,
                'WriteCapacityUnits': 123.0,
                'CapacityUnits': 123.0
            }
        },
        'GlobalSecondaryIndexes': {
            'string': {
                'ReadCapacityUnits': 123.0,
                'WriteCapacityUnits': 123.0,
                'CapacityUnits': 123.0
            }
        }
    },
]
...
从那个里你们可以看到它需要多少容量单位,你们可以提取和估算物品的大小。显然,这是基于您的系统配置,因为:

一个读请求单元表示一个强一致的读请求,或者两个最终一致的读请求,用于大小不超过4KB的项。事务性读取请求需要2个读取请求单元来对最大为4KB的项执行一次读取。如果需要读取大于4KB的项,DynamoDB需要额外的读取请求单元。所需的读取请求单元总数取决于项目大小,以及您希望最终一致还是强一致读取


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

如果你对细节感兴趣的话,不妨读一读

另外,我还创建了一个可以精确确定物品大小的

数字很容易成为DynamoDB最复杂的类型。AWS没有公开记录如何确定一个数字中有多少字节。他们说这是为了在不受任何人约束的情况下更改内部实现。然而,他们所说的听起来很简单,但实际上更复杂


但是,非常粗略地说,公式是每2个有效数字加1个字节,正数加1个额外字节,负数加2个额外字节。因此,
27
是2个字节,
-27
是3个字节。如果数字量不均匀,DynamoDB将进行取整,因此
461
将使用3个字节(包括额外的字节)。在计算大小之前,前导零和尾随零会被修剪。

以上所有答案都跳过了存储属性的长度、属性名称的长度以及每个属性的类型的问题

所述名称的长度可以为1到255个字符,这意味着1字节的名称长度开销

我们可以从400kb的最大项目限制返回,以了解二进制或字符串项目所需的长度有一个上限-它们不需要这样做
....
'ConsumedCapacity': [
    {
        'TableName': 'string',
        'CapacityUnits': 123.0,
        'ReadCapacityUnits': 123.0,
        'WriteCapacityUnits': 123.0,
        'Table': {
            'ReadCapacityUnits': 123.0,
            'WriteCapacityUnits': 123.0,
            'CapacityUnits': 123.0
        },
        'LocalSecondaryIndexes': {
            'string': {
                'ReadCapacityUnits': 123.0,
                'WriteCapacityUnits': 123.0,
                'CapacityUnits': 123.0
            }
        },
        'GlobalSecondaryIndexes': {
            'string': {
                'ReadCapacityUnits': 123.0,
                'WriteCapacityUnits': 123.0,
                'CapacityUnits': 123.0
            }
        }
    },
]
...