2013-04-01 44 views
6

我正在使用DynamoDB表,其中的鍵和吞吐量已針對應用程序用例進行了優化。爲了支持其他特殊的管理和報告用例,我想在S3中保留一個完整的備份(一天的備份可以)。再次,我不能掃描整個DynamoDB表來執行備份。我擁有的鑰匙不足以找出什麼是「新」。我如何進行增量備份?是否必須修改我的DynamoDB模式,或者添加額外的表格才能執行此操作?任何最佳實踐?DynamoDB - 如何進行增量備份?

更新DynamoDB Streams解決了這個問題。

DynamoDB流捕獲項目級 修改任何DynamoDB表,並將該信息存儲在一個 日誌長達24小時的時間有序序列。應用程序可以訪問此日誌並查看 數據項,因爲它們在修改之前和之後出現,幾乎在實時 之間。

+0

你如何閱讀碎片?你如何保證碎片不會被讀取兩次? – bpavlov

回答

5

我看到兩個選項:

  1. 生成當前快照。您必須從表中讀取才能執行此操作,您可以以非常低的速率執行操作,以保持容量限制(Scan操作)。然後,保留一段時間內執行的內存更新列表。你可以把它們放在另一張桌子上,但你也必須閱讀這些,這可能會花費同樣多。這個時間間隔可能是一分鐘,十分鐘,一小時,無論你願意如果你的應用程序退出,都會丟失。然後,定期從S3獲取快照,在快照上重播這些更改,然後上傳新的快照。我不知道你的數據集有多大,所以這可能不太實際,但是我已經看到這項工作取得了巨大的成功,數據集高達1-2GB。

  2. 每天使用全面掃描增加讀取吞吐量並備份您的數據。你說你買不起,但是不清楚你的意思是支付產能,或者掃描會耗盡所有容量,應用程序將開始失敗。從DynamoDB中提取數據的唯一方法是強烈讀取或最終保持一致。如果備份是您業務需求的一部分,那麼我認爲您必須確定它是否值得。您可以通過檢查結果中的ConsumedCapacityUnits屬性來自我節制您的閱讀。掃描操作具有限制屬性,您可以使用該屬性來限制每個操作中讀取的數據量。掃描也使用最終一致的讀取,這是強一致讀取的一半價格。

+0

隨着數據持續增長,選項2(每天全面掃描)可能不可行。我寧願選擇1.我願意花費在啓用備份所需的最小額外表和容量上。現在,下一個問題是,重播快照上的更改(可能主要是CSV或JSON)的最佳方式是什麼?我是否應該將快照加載到本地數據庫中,運行重播並存儲新快照? –

+0

我的數據大小現在接近1 GB,但我希望爲顯着增長做好準備。 –

+0

我正在考慮在內存中進行處理,因此可以使用快照方法處理的數據大小受限於內存中的內容。將您的最新快照反序列化爲對象集合,應用更新和反序列化。考慮在數據增長時(或使用其他數據庫)對快照進行分區。如果因爲數據增長而必須更新分區,那麼其他報告也需要識別這些分區。 –

3

您現在可以使用dynamoDB流將數據保存到anthother表中或在另一個數據存儲中維護另一個數據副本。

https://aws.amazon.com/blogs/aws/dynamodb-streams-preview/

+1

歡迎使用堆棧溢出!雖然這可能會回答這個問題,但[最好](http://meta.stackoverflow.com/q/8259 )在這裏包括答案的基本部分,並提供參考鏈接。 –

0

在DynamoDB的掃描操作返回主鍵(散列密鑰)排序的行。因此,如果表的散列鍵是一個自動遞增的整數,那麼在執行下一次備份時,將上次備份期間保存的最後一條記錄的散列鍵設置爲掃描請求的「lastEvaluatedKey」參數,掃描將返回具有自上次備份後才創建。

3

對於增量式備份,您可以將您的DynamoDB流與lambda函數關聯自動觸發代碼每次數據更新(即:數據到另一個存儲像S3)

可以使用帶綁lambda函數DynamoDb增量備份:

https://github.com/PageUpPeopleOrg/dynamodb-replicator

我你如何使用DynamoDB流,Lambda和S3版本水桶在我的博客創建在DynamoDb您的數據增量備份,通過提供一個詳細的步行路程:

https://www.abhayachauhan.com/category/aws/dynamodb/dynamodb-backups

另外,DynamoDB剛剛實現了按需備份和恢復。它們不是增量式的,而是完全備份快照。

查看https://www.abhayachauhan.com/2017/12/dynamodb-scheduling-on-demand-backups/瞭解更多信息。

HTH

1

在2017年11月29日按需引入備份。它允許您直接在DynamoDB中直接創建備份,而不消耗任何容量。以下是blog post的幾個片段:

此功能旨在幫助您符合長期存檔和數據保留的法規要求。您可以使用點擊(或API調用)創建備份,而不消耗預置的吞吐能力或影響應用程序的響應能力。備份以高度耐用的方式存儲,可用於創建新表格。

...

備份可立即使用!它使用亞馬遜管理的密鑰進行加密,幷包含所有表格數據,配置容量設置,本地和全局二級索引設置以及流。它不包括Auto Scaling或TTL設置,標記,IAM策略,CloudWatch指標或CloudWatch警報。

鑑於我們的一些客戶的桌面接近PB級的一半,您可能想知道該操作是如何即時進行的。在幕後,DynamoDB會獲取完整快照並保存所有更改日誌。進行備份與爲表格保存時間戳和當前元數據一樣簡單。