我正在尝试以如下方式存储数据:
它们有100种不同类型的水果,每个水果的主键类型均为“水果”,因此当我查询“水果”时,将返回所有水果。
但是,Dynamodb要求主键必须是唯一的。
所以我想知道如何设计数据库方案以获得这些结果,或者我应该在AWS中使用另一种解决方案?
答案 0 :(得分:1)
主键有两种类型:
不可能在一个DynamoDB表中以单个分区键的格式存储相同的主键。
要实现所需的功能,您将需要在此表上创建一个复合主键。
让我们创建一个新表 OganicProduct ,然后在该表上创建一个复合主键。主键的属性名称为 type 和 subType 。现在,您需要分别将 type 的值设置为“水果”,将 subType 的值设置为其水果类型。
(请注意,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"}}'