我正在尝试以以下方式存储数据:
他们有100种不同类型的水果,每种水果都有一个类型为"水果"的主键,所以当我查询"水果"时,所有的水果都会被返回。
但是,Dynamodb要求主键为Unique。
因此,我想知道我将如何设计我的数据库方案以实现这些结果,或者我是否应该在AWS中使用其他解决方案?
来源https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey
有两种类型的主键:
- 分区键–一个简单的主键,由一个称为分区键的属性组成
- 分区键和排序键——称为复合主键,这种类型的键由两个属性组成。第一个属性是分区键,第二个属性是排序键
不可能在一个DynamoDB表中以单个分区键的格式存储相同的主键。
为了实现您想要的,您需要在此表上创建一个复合主键。
让我们创建一个新表OganicProduct,然后在此表上创建一个复合主键。主键的属性名称为type和subType。现在,您需要将类型的值分别设为"水果"和 子类型(注意,类型和子类型的组合应该能够唯一地识别该表中的项目。( 因此,现在要列出所有水果,只需执行查询即可获得结果: 要获得具有特定水果类型的单个水果,您可以在键条件表达式中指定排序键。现在查询看起来像: 请注意,您也可以将蔬菜存储在同一个表中,因为主键的属性名称是通用的。要存储蔬菜记录,只需将类型的值设置为蔬菜。 查询列出所有蔬菜: 查询获取给定类型的单个蔬菜aws dynamodb query
--table-name OganicProduct
--key-condition-expression "type = :type"
--expression-attribute-values '{":type":{"S":"fruit"}}'
aws dynamodb query
--table-name OganicProduct
--key-condition-expression "type = :type and subType=:fruitType"
--expression-attribute-values '{":type":{"S":"fruit"}, ":fruitType":{"S":"apple"}}'
aws dynamodb query
--table-name OganicProduct
--key-condition-expression "type = :type"
--expression-attribute-values '{":type":{"S":"vegetable"}}'
aws dynamodb query
--table-name OganicProduct
--key-condition-expression "type = :type and subType=:vegeType"
--expression-attribute-values '{":type":{"S":"vegetable"}, ":vegeType":{"S":"broccoli"}}'