[英]Read and store data from DynamoDB in variable in AWS Lambda
[英]Listing and Deleting Data from DynamoDB in parallel
我正在使用 Lambdas 和 SQS 隊列從 DynamoDB 中刪除數據。 早些時候,當我開發這個時,我發現從 DyanmoDB 中刪除數據的唯一方法是收集要刪除的數據並批量刪除它們。 在我目前的組織中,大部分基礎設施都是無服務器的。 因此,我決定讓這篇文章也遵循無服務器和事件驅動的架構。 簡而言之,我在 SQS 隊列上發布一條消息以刪除特定分區下的項目。 一旦此消息調用我的 Lambda,我對 DyanmoDB 執行 1000 個項目的列表調用並執行以下操作:
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
const dbClient = new DynamoDBClient(config);
const records = dbClient.query(...fetchFirst1000ItemsForPrimaryKey);
postMessageToFetchNextItems();
我創建了一批 20 個項目,並為另一個 lambda 發出一組消息以刪除這些項目。 一批 20 個項目被過帳刪除,直到所有 1000 個項目都被過帳刪除。
for (let i = 0; i < 1000; i += 20) { const itemsToDelete = records.slice(i, 20); postItemsForDeletion(itemsToDelete); }
dbClient.send(new BatchWriteItemCommand([itemsForDeletion]))
這一切都是並行發生的。 獲取項目,發布消息以獲取下一個 1000 個項目,發布消息以刪除項目。
雖然在紙面上看起來不錯,但這似乎並沒有從 DynamoDB 中刪除所有記錄。 沒有固定的模式,DynamoDB 中總是有一些項目。 我不完全確定會發生什么,但有一個理論認為並行刪除和列出可能是導致問題的原因? 我無法找到任何文件來驗證我的理論,因此這里的這個問題。
批量寫入項目調用將返回未處理項目的列表。 您應該檢查並重試它們。
查看https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-dynamodb/classes/batchwriteitemcommand.html的文檔和搜索UnprocessedItems
的文檔。
從根本上說,批量寫入項目調用不是事務性寫入。 某些項目寫入可能成功,而其他項目寫入失敗。 檢查失敗並重試它們是你的責任。 對不起,我沒有好的示例代碼的鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.