2017-02-10 90 views
0

我有一個使用散列鍵和排序(範圍)鍵的表。我的範圍鍵是一個uuid。我有一個我想要查詢數據庫以使用DynamoDBMapper的任意一組範圍鍵的情況。它們絕不是連續的,不幸的是,對我而言,它們不可能是連續的,所以我不能查詢一系列的鍵(即鍵在a和b之間)。有什麼辦法可以有一個查詢條件來搜索一組潛在值中的範圍鍵?本質上是一個SQL WHERE條件,如:rangeKey IN(val1,val2,...);DynamoDB:在一系列非連續範圍鍵中查詢範圍鍵

根據DynamoDBQueryExpression的文檔,使用setKeyConditionExpression或setRangeKeyConditions似乎不可能。有沒有這樣做的有效方法?或者,我最好的辦法是迭代我的潛在值集合,並使用load方法從數據庫中單獨檢索它們?

+3

你能分享一些關於你的數據模型的更多細節嗎?使用uuids作爲範圍鍵似乎有點奇怪,因爲它們沒有自然順序。 – hellomichibye

+0

我第二hellomichibye的評論。這聽起來像你的數據模型需要一些工作。使用UUID作爲範圍鍵是沒有意義的。 –

+0

我同意這不是理想的,但它是我們想出的最佳解決方案。我們爲通過散列鍵訪問的不同客戶提供數據庫分區。在分區內,所有文檔都相互獨立,因此任何排序或排序都是任意的。此查詢是必需的,因爲我們有一個將多個文檔關聯到另一個實體的引用表。但是,對該實體的參考文檔經常變化,所以任何排序或排序都是非常隨意的。 –

回答

1

IN操作沒有Query支持作爲每文檔here

排序關鍵條件必須使用以下比較 運營商之一:

  • A = B - 如果真屬性a等於值b
  • a < b - 如果a小於b,則爲true
  • 一個< = B - 如果a小於或等於b
  • A> B - 如果A比B
  • 更高的> = B - 如果a大於等於b
  • a BETWEEN b和c - 如果a大於或等於b且小於或等於c,則爲true。

下面的函數也被支持:

BEGINS_WITH(一,SUBSTR) - 如果屬性的值與 特定串開始真。

此外,你總是需要一個確切的散列鍵來做Query。如果您的用例沒有問題,則應在應用程序層應用Query DynamoDB並應用IN過濾器。

如果您沒有確切的哈希鍵,請執行Scan,該操作確實有IN操作進行過濾。文檔here

+0

這就是我的想法。我總是有散列鍵,目前的實現正是你上面所說的,我只是希望有一個更有效的本地方法。 –