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

时间:2016-07-24 22:38:05

标签: amazon-web-services amazon-dynamodb

来自AWS DynamoDB documentation

  

如果将主键属性定义为字符串类型属性,则   以下附加限制适用:

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

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

(每个项目大小限制一般为400 KB,但问题与此无关)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

马克是对的。分区键限制为2048字节,而不考虑主键类型(单属性或复合)。我刚从命令行测试过它。以下是我使用的命令。如果在第二个命令中将2048更改为2049,则DynamoDB将无法添加ValidationException错误的项目。

# 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 + '\"'")'}}'