当前位置: 首页 > 知识库问答 >
问题:

AWS DynamoDB中复合主键的分区部分是否有大小限制?

邵君植
2023-03-14

从AWS DynamoDB留档:

如果将主键属性定义为字符串类型属性,则会应用以下附加约束:

  • 对于简单的主键,第一个属性值(分区键)的最大长度为2048字节。
  • 对于复合主键,第二个属性值(排序键)的最大长度为1024字节。

这是否意味着在复合主键的情况下,分区键的最大长度不受限制?

(每个项目的大小通常有400 KB的限制,但问题不在于此)

共有2个答案

谷梁晟
2023-03-14

马克是对的。分区密钥限制为2048字节,不考虑主键类型(单属性或复合)。我刚刚从命令行测试了它。下面是我使用的命令。如果在第二个命令中将2048更改为2049,DynamoDB将无法添加带有验证异常错误的项。

# Create test table
aws dynamodb create-table --table-name testdb5 --attribute-definitions '[{"AttributeName": "Id", "AttributeType": "S"}, {"AttributeName": "LastName", "AttributeType": "S"}]' --key-schema '[{"AttributeName": "Id", "KeyType": "HASH"}, {"AttributeName": "LastName", "KeyType": "RANGE"}]' --provisioned-throughput '{"ReadCapacityUnits": 5, "WriteCapacityUnits": 5}' 

# Add an item
aws dynamodb put-item --table-name testdb5 --item '{ "Id": {"S": '$(python -c "print '\"' + 'A'*2048 + '\"'")'}, "LastName": {"S": '$(python -c "print '\"' + 'B'*1024 + '\"'")'}}'

# Delete an item
aws dynamodb delete-item --table-name testdb5 --key '{ "Id": {"S": '$(python -c "print '\"' + 'A'*2048 + '\"'")'}, "LastName": {"S": '$(python -c "print '\"' + 'B'*1024 + '\"'")'}}'

谷梁嘉运
2023-03-14

我很确定它只是说2048字节是所有分区键的限制,如果您碰巧有一个排序键,那么该排序键的限制为1024字节。这似乎也是他们在本页上更清楚地说的。

 类似资料:
  • 我已经阅读了很多关于设计分区键和排序键的DynamoDB文档,但我认为我一定缺少一些基本的东西。 如果分区密钥设计不好,那么当单个分区密钥值的数据超过10GB时会发生什么情况? “了解分区行为”部分指出: “单个分区可以容纳大约10 GB的数据” 它如何对单个分区键进行分区? http://docs.aws.amazon.com/amazondynamodb/latest/developergui

  • 我有以下表格,如何将它们映射到JPA实体: 事件表与会议表具有一对多的关系。我如何在JPA中映射这种双向关系?

  • 问题内容: HTML是否区分大小写? 在一个示例中,我正在使用它说: 还是会有所不同(或根本没有)? 问题答案: 否,但是将HTML标记保持小写被认为是一种好习惯。

  • 问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同

  • 问题内容: MySQL中的表名是否区分大小写? 在Windows开发机器上,我拥有的代码能够查询我的表,这些表看起来都是小写的。当我在数据中心中部署到测试服务器时,表名似乎以大写字母开头。 我们使用的服务器都在Ubuntu上。 问题答案: 一般来说: 数据库和表名在Windows中不区分大小写,在大多数Unix版本中都不区分大小写。 在MySQL中,数据库与data目录中的目录相对应。数据库中的每

  • 问题内容: 我必须与Hibernate合作,但我不确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 如何使用Hibernate进行管理? 我不知道如何声明将包含主键一部分的外键。 我的数据库架构是从Hibernate模型生成的。 问题答案: 我找到了解决此问题的两种方法。 第一个是一种解决方法,没有第二个那么整洁。 将实体的主键定义为包含,和的复合键,首先将假定为主键的内容定义为唯一约