使用相同的主键Dynamodb存储数据



我正在尝试以以下方式存储数据:

他们有100种不同类型的水果,每种水果都有一个类型为"水果"的主键,所以当我查询"水果"时,所有的水果都会被返回。

但是,Dynamodb要求主键为Unique。

因此,我想知道我将如何设计我的数据库方案以实现这些结果,或者我是否应该在AWS中使用其他解决方案?

来源https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey

有两种类型的主键:

  • 分区键–一个简单的主键,由一个称为分区键的属性组成
  • 分区键和排序键——称为复合主键,这种类型的键由两个属性组成。第一个属性是分区键,第二个属性是排序键

不可能在一个DynamoDB表中以单个分区键的格式存储相同的主键。

为了实现您想要的,您需要在此表上创建一个复合主键。

让我们创建一个新表OganicProduct,然后在此表上创建一个复合主键。主键的属性名称为typesubType。现在,您需要将类型的值分别设为"水果"和

子类型(注意,类型和子类型的组合应该能够唯一地识别该表中的项目。(

因此,现在要列出所有水果,只需执行查询即可获得结果:

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"}}'

最新更新