2016-08-03 73 views
1

我想獲取過去24小時的所有項目。我已經做了一些谷歌搜索,看起來用DynamoDB做起來並不容易。Amazon DynamoDB獲取過去24小時內的所有項目

我在想是否可以使用常用散列鍵和時間戳字段作爲排序鍵創建二級索引。因此,我可以使用條件時間戳>(DateTime.Now - 24h)查詢時間戳。有人可以評論這個,如果這是一種可能的方式或有另一個想法?

其實,我只需要我的表中不超過24小時的物品。因此,另一個想法是每小時清理一次表格並刪除24小時以前的所有項目。這可能嗎?


編輯:另一個想法是創建一個二級索引與日期作爲散列鍵和時間作爲排序鍵,然後執行兩個查詢。第一個日期='今天',第二個日期='昨天',條件準時。但是,我如何將日期和時間存儲爲字符串或整數?這會比我上面的想法更好嗎?

回答

2

你對索引的想法一般都是正確的。 Dynamo沒有辦法訂購通過掃描檢索的項目(在沒有索引的情況下,爲了獲取您想要的項目,這是必需的)。

等方面的選項:

  1. ,你可以如你所說,創建GSI與分區鍵就是我們說的日期值,這是時間戳排序關鍵字 - 然後用兩個查詢,你總是可以得到最近24小時的項目(你也可以在分區密鑰中有每小時的值,然後使24個查詢,而不是2)

  2. 另一個選項,可能會更好,然後GSIs將是每N小時旋轉一次你的表格(其中N可能是12小時,或24小時或其他一些有意義的值,你有數據)。此解決方案爲修整舊數據並優化不均勻訪問模式提供了一種很好的方式。較舊的表格可能需要非常低的寫入容量,並且在某些情況下,您甚至可以使用較低的讀取容量。此方法在讀取和寫入數據時確實需要了解多個表,但要根據您使用的數據量來考慮,這確實是有利的。

+0

您的第一個建議選項聽起來不錯。你認爲執行24個「小」查詢而不是2個「大」查詢會更高效嗎?我是否應該將這些值作爲日期格式爲yyyyMMdd和時間格式HH:ss的字符串存儲,或者考慮到性能將其存儲爲數值?第二個選項聽起來很有趣,但目前它太複雜了。 –

+1

如果您擁有足夠的預置容量來並行運行它們,那麼24個查詢可能會更快,但否則它們之間的差異不會太大 –

相關問題