2016-04-26 147 views
5

剛接觸dynamodb我在DynamoDB中有一個表中有100多個項目。此外,此表經常刷新。在這張表上,我希望能夠在關係數據庫世界中做類似於此的事情:我如何從表中獲得最大值。如何使用亞馬遜Dynamodb中的聚合函數

回答

16

DynamoDB是NoSQL數據庫,因此在查詢數據的方式方面非常有限。通過直接調用DynamoDB API,不可能從表中執行聚合,例如最大值。你將不得不尋找不同的工具和方法來解決這個問題。

有多種可能的解決方案可以考慮:

執行表掃描

隨着你的表100K以上的項目這可能是一個非常糟糕的主意。表掃描將讀取每個項目,並且您可以讓應用程序端邏輯識別最大值。這真的不是一個可行的解決方案。

在DynamoDB

物化指標根據你的使用情況,您可以使用DynamoDB流和lambda函數保持在一個單獨的DynamoDB表的索引。如果你的表是隻寫,沒有更新,沒有刪除,你可以在最大存儲在一個單獨的表和新的記錄得到插入就可以對它們進行比較並進行必要的更新。

這種方法在某些約束條件下是可行的,但不是一個通用的解決方案。

使用Amazon紅移

DynamoDB是不是爲了做分析操作,如最大,而紅移是一個非常強大的大數據平臺,可以輕鬆地執行這些類型的計算進行分析。到DynamoDB指數類似,您可以使用DynamoDB流作爲記錄得到插入保持表的近實時副本分析目的將數據發送到紅移。

如果你正在尋找更多的離線或分析解決方案這是一個不錯的選擇。分析使用Elasticsearch

執行

雖然DynamoDB是與數據耐久性強保證了強大的NoSQL溶液,Elasticsearch提供了一種非常靈活查詢方法,其允許對查詢,如最大和這些聚集可切片切塊對任何屬性值進行實時。類似於上述解決方案,您可以使用DynamoDB流實時將記錄插入更新和刪除發送到Elasticsearch索引。

如果你想堅持DynamoDB但需要一些額外的查詢能力,這真是特別是使用AWS ES服務,將全面管理的Elasticsearch集羣支持你一個不錯的選擇。重要的是要記住,Elasticsearch不能取代DynamoDB表,它只是一個相同的數據很容易搜索索引。

只需使用一個SQL數據庫

顯而易見的解決方案是,如果你有SQL要求,那麼從基於NoSQL的系統遷移到基於SQL的系統。AWS的RDS產品提供了一個可管理的解決方案。雖然DynamoDB提供了很多好處,但如果您的用例將您引向SQL解決方案,最簡單的做法可能就是不去對抗並更改解決方案。

這並不是說基於SQL的解決方案或基於NoSQL的解決方案更好,每個方案都有優點和缺點,根據具體用例而有所不同,但它絕對是一個可供選擇的選項。