在DynamoDB中查询(使用散列和范围主键)时,是否必须提供散列键,或者只需通过提供范围键进行搜索?这是我的用例:我有一个包含以下“schema”的表:Category#Domain(String) - Hash key GroupType#GroupName(String) - Range键一些其他字符串字段,如UpdatedOn,UpdatedBy等。
我必须经常做两件事:1。给定一个Category#Domain,获取所有匹配的项目。 2.给定GroupType#GroupName,获取所有匹配项。
这两个操作都很频繁,所以我不想使用扫描。在DynamoDB中有一种有效的方法吗?有没有更好的方法来设计架构(更多的表,二级索引等)?任何建议都会有所帮助。 有人建议使用全局二级索引但是我的问题是我能将主表的范围键作为我的gsi的哈希键吗?我知道所有的“密钥”都是自动复制的,但这只有在我可以将GroupType#GroupName作为gsi中的散列键以便能够对其进行查询时才有用。另外,有没有什么特殊的方法来处理DynamoDBMapper中的gsi?我需要创建一个新的POJO吗?
答案 0 :(得分:3)
在DynamoDB中有一种有效的方法吗?
听起来你正在寻找Global Secondary Indexes (GSI)。你的桌子有:
基于此表,听起来你想拥有一个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中的注释DynamoDBIndexHashKey
和DynamoDBIndexRangeKey
注释,就像您当前使用它们一样。
更新2015/1/27 :Online Indexing is now available