首页 文章

在不提供散列键的情况下查询DynamoDB(使用散列和范围主键)

提问于
浏览 440
2

在DynamoDB中查询(使用散列和范围主键)时,是否必须提供散列键,或者您只需通过提供范围键进行搜索?这是我的用例:我有一个具有以下“schema”的表:Category#Domain(String) - 哈希键GroupType#GroupName(String) - 范围键其他一些字符串字段,如UpdatedOn,UpdatedBy等 .

我必须经常做两件事:1 . 给定一个Category#Domain,获取所有匹配的项目 . 2.给定GroupType#GroupName,获取所有匹配项 .

这两个操作都很频繁,所以我不想使用扫描 . 在DynamoDB中有一种有效的方法吗?有没有更好的方法来设计架构(更多的表,二级索引等)?任何建议都会有所帮助 . 有人建议使用全局二级索引但是我的问题是我能将主表的范围键作为我的gsi的哈希键吗?我知道所有的“密钥”都是自动复制的,但这只有在我可以将GroupType#GroupName作为gsi中的散列键以便能够查询它时才有用 . 另外,有没有什么特殊的方法来处理DynamoDBMapper中的gsi?我需要创建一个新的POJO吗?

1 回答

  • 3

    在DynamoDB中有一种有效的方法吗?

    听起来你正在寻找Global Secondary Indexes (GSI) . 你的 table 有:

    • 哈希键:类别#Domain

    • 范围键:GroupType#GroupName

    • 其他属性

    根据这张表,听起来你想拥有一个GSI:

    • 哈希键:GroupType#GroupName

    • 范围键:取决于设计(GSI中不需要)

    • 需要的其他属性

    我可以将主表的范围键作为我的gsi的哈希键吗?

    是的,developer guide does just this上的示例 .

    由于表的主键属性始终投影到索引中,因此也存在Category#Domain属性 . 您还可以选择要在此索引上投影的属性 . GSI也do not need to have a range key

    另外,有没有什么特殊的方法来处理DynamoDBMapper中的gsi?我需要创建一个新的POJO吗?

    DynamoDBMapper提供了执行此操作的功能 . 我不确定它发布的AWS SDK版本(可能是1.7?) . 您不需要创建新的POJO,但如果您正在尝试处理现有的表,您将无法立即向他们添加GSI(上个月宣布支持online indexing) . 您可以使用POJO中的注释DynamoDBIndexHashKeyDynamoDBIndexRangeKey注释,就像当前使用它们一样 .

    Update 2015/1/27Online Indexing is now available

相关问题