2014-11-21 67 views
2

在DynamoDB中(使用散列和範圍主鍵)查詢時,是必須提供散列鍵還是隻需通過提供範圍鍵?這是我的用例:我有一個表具有以下「架構」:類別#域(字符串) - 哈希鍵GroupType#GroupName(字符串) - 範圍鍵一些其他字符串字段像UpdatedOn,UpdatedBy等在不提供散列鍵的情況下在DynamoDB中查詢(使用散列和範圍主鍵)

我必須經常做兩件事:1.給定一個Category#Domain,獲取所有匹配的項目。 2.給定一個GroupType#GroupName,獲取所有匹配的項目。

這兩個操作都相當頻繁,所以我不想使用掃描。有沒有在DynamoDB中做到這一點的有效方法?有沒有更好的方式來設計模式(更多的表格,二級索引等)?任何建議都會有所幫助。 有人建議使用全局二級索引,但我的問題是我能夠將我的主表的範圍鍵作爲我的gsi的哈希鍵嗎?我知道所有「密鑰」都是自動複製的,但只有在gsi中可以將GroupType#GroupName作爲哈希鍵,才能幫助我,以便能夠查詢它。另外,有沒有什麼特殊的方法來處理來自DynamoDBMapper的gsi?我需要創建一個新的POJO嗎?

回答

3

在DynamoDB中有這樣做的有效方法嗎?

聽起來像是您在尋找Global Secondary Indexes (GSI)。你有你的表,它具有:

  • 散列關鍵字:類別#域
  • 範圍鍵:GroupType#組名
  • 其他屬性

而基於關閉此表,它聽起來就像你想有一個GSI:

  • 哈希鍵:GroupType#組名
  • [R安格鍵:依賴於設計(在GSI沒有必要)
  • 那些想

我就能讓我的主表的範圍鍵作爲哈希鍵我GSI的 其他屬性?

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

由於表的主鍵屬性始終投影到索引中,因此也存在Category#Domain屬性。您還可以選擇要將哪些屬性投影到該索引上。 GSIs也do not need to have a range key

此外,是否有任何特殊的方式來處理來自DynamoDBMapper的gsi?將 我需要創建一個新的POJO?

DynamoDBMapper提供了執行此操作的功能。我不確定它與哪個AWS SDK版本一起發佈(可能是1.7?)。你不需要創建一個新的POJO,但是如果你想要處理現有的表格,你現在不能添加GSIs(上個月支持online indexing)。您可以使用當前使用註釋的註釋DynamoDBIndexHashKeyDynamoDBIndexRangeKey註釋到您的POJO中。

更新2015年1月27日Online Indexing is now available