2015-09-07 54 views
3

聚集的挑戰,我使用DynamoDB來存儲我的設備事件(JSON格式)轉換成表格進行進一步的分析和使用掃描API來顯示結果的UI,這需要限價抵消,排序和DynamoDB

    設置
  • 要定義記錄的極限偏移量,比如每頁10條記錄,意味着 結果集應該分頁(例如,頁面-1有0-10條記錄,頁面-2 有11-20條記錄等等),我得到一個API像scanRequest.withLimit(10),但它具有不同的極限偏移的含義,DynamoDB API是否支持極限偏移?
  • 我還需要根據用戶輸入字段對結果集進行排序,例如對日期,序列號等進行排序,但仍未通過API獲取任何排序/排序。
  • 我可能會尋找聚合,例如設備名稱,日期等等,這在DynamoDB中似乎也不可用。

上面的情況讓我想到了其他一些noSQL數據庫解決方案,請幫我解決上面提到的問題。

回答

3

思考DynamoDB的正確方式是作爲支持索引的鍵值存儲。

「Amazon DynamoDB支持鍵值數據結構,每個項目(行)都是一個鍵值對,其中主鍵是表中項目的唯一必需屬性,並且唯一標識每個項目.DynamoDB是無模式。每個項目可以有任意數量的屬性(列)。除了查詢主鍵,您還可以使用全局二級索引和本地二級索引查詢非主鍵屬性。「 https://aws.amazon.com/dynamodb/details/

一個表可以有2 types of keys

  1. 哈希類型主鍵-的主鍵由一個屬性,一個 散列屬性。 DynamoDB在此主鍵屬性上構建無序散列索引。表中的每個項目通過其散列鍵值唯一地標識爲 。
  2. 散列和範圍類型主鍵 - 主鍵 鍵由兩個屬性組成。第一個屬性是散列 屬性,第二個屬性是範圍屬性。 DynamoDB在散列主鍵屬性上構建了 一個無序散列索引,並且在範圍主鍵屬性上構建了一個 排序範圍索引。 中的每個項目通過其散列和 範圍鍵值的組合唯一標識。兩個項目可能具有相同的散列值 鍵值,但這兩個項目必須具有不同的範圍鍵值。

您爲Device Events表設置了哪種主鍵?我建議你對數據進行非規範化處理(例如,將特定屬性從json中提取出來),並在那些你想排序和聚合的屬性上構建附加索引:日期,序列號等。如果我知道什麼樣的主鍵你已經在你的桌子上設置好了,我可以指出你正確的方向來建立這些指數,這樣你就可以通過query method得到你需要的東西。 scan method對你來說效率不高,因爲它讀取表中的每一行。

最後,關於你的「限價抵消」的問題,我認爲你正在尋找的ExclusiveStartKey,將由DynamoDB在響應您的查詢返回。

2

ExclusiveStartKey是什麼幫助你做分頁。沒有必要依靠響應中的LastEvaluatedKey。只有當您獲得超過MB值的數據時,纔會得到LastEvaluatedKey。如果LIMIT頁面大小足以使返回的數據總量小於1 MB,那麼您將無法取回LastEvaluatedKey。但是,這並不會阻止您將ExclusiveStartKey用作偏移量。