2012-03-20 35 views
2

目前,Ruby AWS SDK中的ItemCollection#query方法返回整個數據集。我查看了Ruby AWS SDK源代碼的任何分頁可能性,但最接近分頁的選項是:limit,沒有分頁。根據亞馬遜的DynamoDB API(的HTTP,而不是紅寶石)的查詢操作文檔建議有可能是分頁與響應密鑰LastEvaluatedKey分項與ItemsCollection#查詢?

其中查詢操作停止該項目的

主鍵,包括以前的結果組。在新請求中使用此值啓動一個新操作,排除此值。 當整個查詢結果集完成時(即操作處理「最後一頁」),LastEvaluatedKey爲空。

所以我可以通過添加:limit選項,然後做了一個範圍值,下一個查詢我的最後Item後做分頁,但我不知道的總數是什麼,除非我做了充分的查詢。

是否有更好/更簡單的方法實現分頁?

回答

1

根據您的需求,構建完整的尋呼機可能會需要兩個請求,見Query and Scan in Amazon DynamoDB,特別Count and ScannedCount

亞馬遜DynamoDB掃描和查詢API使用計數值兩個 不同的目的。

在請求,Count參數設置爲true,如果你想亞馬遜 DynamoDB以提供項目匹配掃描 過濾器或查詢條件的總數,,而不是匹配項目的列表

在響應,亞馬遜DynamoDB返回的在請求 匹配項目的數量的計數值。 如果掃描過濾器 或查詢條件的匹配項目大於1MB,Count包含與請求匹配的項目總數 的部分計數。要獲得與請求匹配的 項目的全部計數,請在隨後的 請求中使用LastEvaluatedKey。重複該請求,直到Amazon DynamoDB不再返回 LastEvaluatedKey。

[重點煤礦]

也就是說,爲了避免複雜的邏輯最初你可能會想查詢匹配的項目前期的數量,並要求此後,僅在需要特定頁面。

祝你好運!

+1

我很害怕這種情況。由於我使用的是Ruby SDK,你有否洞察#query方法是否可以做到這一點?我試着添加一個'count:true'選項,但它仍然返回一個'Enumerator'。 – 2012-03-20 16:53:35

+0

@ JohnK.Chow:確實很刺激 - 除了DevOps主題之外,我沒有使用Ruby,因此我自己也沒有嘗試過; [ItemCollection]的API文檔(http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/DynamoDB/ItemCollection。html)實際上並沒有爲'#query'列出一個'count'參數,而只是一個專門的'#count'方法,據推測這個方法是使用table scan_統計集合中的項目,這在給定性價比的情況下會讓我覺得奇怪[Scan]的特點(http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html) - 雖然可能是文檔錯誤? – 2012-03-20 17:10:17

+0

查詢API只能對具有相同散列鍵值的記錄進行計數,是您想要的嗎?計數「所有記錄」的唯一方法是掃描。 – 2012-03-21 02:29:32