2016-08-24 32 views
0

我們的要求非常簡單,我們希望爲傳感器存儲GPS位置,該位置應該不會超過幾天。數據的總粒度將在一分鐘左右最大。SimpleDB或DynamoDB的生存時間

由於傳感器總數可能超過10億,除非我自己編寫分區邏輯,否則SimpleDB不是一個選項。 SimpleDB通過索引每個屬性,這使得可以在一段時間內運行一次定期清理腳本,刪除大於2天的條目。

DynamoDB看起來好多了,因爲它對數據量沒有限制,我可以在sensorID +時間戳上使用分區+範圍主鍵。但是,刪除舊數據將需要掃描查詢,除非我在時間戳字段上還有全局二級索引。使用這個二級全局索引,查詢可能會更快。

難道只有我相信有更好的出路嗎?使用DynamoDB/SimpleDB更好,因爲整個部署都在AWS環境中,而且我們不想投入很多操作。我知道像Mongo DB這樣的其他NOSQL數據庫支持這些數據庫。

+0

我真的沒有看到GPS位置如何**都具有相同的格式**將更好地存儲在NOSQL數據庫中。這實際上是數據的最佳定義,可以在表格中最好地存儲,索引,檢索和分析。 –

+0

因爲我會有數十億的條目。我希望系統能夠自動共享/分區,而不用擔心。 它幾乎聽起來像任何人沒有靈活的模式使用NOSQL是做錯了,事實並非如此。 – Ouroboros

+0

「數十億同樣形成的條目」**正是爲什麼你應該使用關係數據庫,而不是無模式NOSQL。當你擁有數十億個相同的數據點,但是你將它們存儲爲鍵值對時,是的,你不明白數據庫的作用,以及爲什麼劃分鍵值存儲比分配硬要困難得多分區可排序/可索引表。 –

回答

1

您可以以日期爲基礎的表格保存條目,日期爲x(s)增量。

GPS_LOCATIONS_09052016 
GPS_LOCATIONS_09072016 
... 

然後,您可以每x天刪除舊錶格。

每個傳感器有多少個GPS位置?如果你有例如5億個獨特的傳感器,那麼在傳感器ID上分區並不是非常有效。

如果基於日期表不爲你工作了,那麼你就可以在timestampHash哈希鍵和timestamp範圍密鑰,其中timestampHash是1之間的數字yy取決於您的數據大小創建一個GSI。然後,您可以對每個timestampHashtimestamp比現在更少或無論您設置清除參數,對GSI執行一次範圍查詢。 timestampHash將幫助您對數據進行分區以提高吞吐量。

1

添加了DynamoDB中的新功能。 請檢查TTL

這將刪除特定項目的TTL過期後的項目。