2016-05-20 35 views
0

我有一個消息應用程序,其中所有消息按創建時間安排到季節。每季可能有數十億條消息。我有一個任務是刪除舊時段的消息。我想到了一個解決方案,其中涉及DynamoDB表創建/刪除這樣的:可以在DynamoDB中定期創建/刪除表構建體系結構嗎?

  1. 每個表中只包含一個賽季
  2. 當賽季變成「老」和消息不再需要,表被刪除
  3. 的消息

這是一種很好的模式,它受亞馬遜的鼓勵嗎?

PS:我問,因爲我怕的兩兩件事,在不同的亞馬遜服務滿足 -

  1. 在亞馬遜S3你要刪除的各個項目,然後才能完全刪除桶。當你擁有數十億的物品時,它會變成真正的痛苦。
  2. 在亞馬遜SQS中,存在「不需要的行爲」的概念。在使用SQS API時,您可能會對SQS基礎架構(例如不輪詢消息)採取嚴格的行爲,因此可能會受到懲罰。

回答

1

是的,這是一個可接受的設計模式,它實際上遵循AWS團隊提出的最佳實踐,但有些事情需要考慮您的特定用例。

  • AWS對每個區域有256個表限制,但可以提高。如果你預計需要比這個多幾個數量級,你應該重新評估。
  • 您可以刪除表中仍包含記錄的DynamoDB表,如果您有大量記錄,則必須定期刪除此實際上是使用滾動表集的最佳做法
  • 創建和刪除表爲一個異步操作,所以你不想讓你的應用程序依賴於這些操作完成的時間。確保您在需要它們之前儘早創建表格。在正常情況下,表格只需幾秒到幾分鐘即可完成,但在非常非常罕見的停電情況下,我發現它需要幾個小時。

Understand Access Patterns for Time Series Data states的DynamoDB最佳實踐文檔...

您可以通過將「熱」在一個表 更高的吞吐量設置另一個表中的項目,和「冷」項目上節約資源與 較低的吞吐量設置。您可以通過簡單地刪除 表刪除舊的項目。您可以選擇將這些表備份到其他存儲 選項,如Amazon Simple Storage Service(Amazon S3)。刪除 整個表的效率比逐個刪除項目 的效率顯着更高,這實際上是寫入吞吐量的兩倍,因爲您執行的操作數與刪除操作的數量相比減少了 。

1

按照您描述的方式拆分數據是完全可以接受的。您可以刪除DynamoDB表,而不管其大小包含多少個項目。

據我所知,在刪除或創建表格所需的時間內沒有明確的SLA(意味着無法知道是要花費2秒鐘還是2分鐘或20分鐘),但只要您解決方案不依賴於這種時機你很好。

實際上,基於年齡對數據進行分片的想法有可能顯着提高應用程序的性能,並且肯定會幫助您控制成本。