Nosql DynamoDB分区密钥

Nosql DynamoDB分区密钥,nosql,amazon-dynamodb,partition,Nosql,Amazon Dynamodb,Partition,我在DynamoDb中有一个属性ObjectIdentifier,其值为 {“Id”:“testId”,“Version”:“2020-09-03t16:29:51”} 我需要使用Id+版本为GSI创建分区键。既然DynamoDb提到只有字符串、二进制和数字类型可以用作分区键,那么可以创建和使用这样的键吗?在DynamoDb的限制范围内,您可以将任何想要的数据放入分区键中。听起来您希望自动设置Id+Version,这是不可能的,但是,您可以创建一个字段作为分区键,并将值设置为这些字段。您的数据可

我在DynamoDb中有一个属性
ObjectIdentifier
,其值为

{“Id”:“testId”,“Version”:“2020-09-03t16:29:51”}


我需要使用Id+版本为GSI创建分区键。既然DynamoDb提到只有字符串、二进制和数字类型可以用作分区键,那么可以创建和使用这样的键吗?

在DynamoDb的限制范围内,您可以将任何想要的数据放入分区键中。听起来您希望自动设置
Id+Version
,这是不可能的,但是,您可以创建一个字段作为分区键,并将值设置为这些字段。您的数据可能看起来像这样(我使用管道来分隔这些值)

{
“pk”:“testId | 2020-09-03t16:29:51”,
“ObjectIdentifier”:{
“Id”:“testId”,
“版本”:“2020-09-03t16:29:51”
}
}

在本例中,
pk
将是分区键。值不是为您计算的,您必须自己计算。

如果我正确理解您的问题,听起来您有一个包含以下内容的现有表:

  • 一些分区键
  • 名为ObjectIdentifier的属性,其类型为Map
  • 可能还有其他一些属性
您询问是否可以在此表上创建一个GSI,其中ObjectIdentifier(类型为Map)将是新索引的分区键

不,这是不可能的。 正如您所提到的,分区键只能是String、Binary或Number类型。可以使用属性名ObjectIdentifier创建String类型的GSI;但是,在创建GSI之前已经在表中的项将不会插入GSI,因为它们没有名为String类型ObjectIdentifier的属性。请参见下面的测试/示例

表视图:

在字符串ObjectIdentifier上创建GSI后的GSI视图

即使我形成了分区键
pk
,我在创建索引时如何将其设置为分区键?像
ObjectIdentifier.pk
这样的东西有用吗?我想我误解了你的数据。我要修改我的答案。@zingg只是想说清楚,你是在基表中还是在创建GSI时这样做的?我不是在建议其中一个。我不知道你需要什么访问模式。我只是给你一种方法,让你有一个分区键,它是两个值的组合。如果需要表键,那么将pk设为表上的分区键。如果您需要一个将其作为分区键的GSI,那么将pk作为表上的分区键。@kirk我在创建GSI时所说的。为了清楚起见,我们更新了问题。