問題

問題

我想使用 DynamoDB Streams + AWS Lambda 來處理聊天訊息。有關同一對話的訊息用戶idX:用戶idY(一個房間)必須依序處理。全域排序並不重要。

假設我以正確的順序提供 DynamoDB(room:msg1、room:msg2 等),如何保證 Stream 會依序提供 AWS Lambda保證單一流中相關訊息(房間)處理的順序

例如,考慮到我有 2 個分片,如何確保邏輯組進入同一個分片?

我必須完成這個:

Shard 1: 12:12:msg3 12:12:msg2 12:12:msg1 ==> consumer
Shard 2: 13:24:msg2 51:91:msg3 13:24:msg1 51:92:msg2 51:92:msg1 ==> consumer

而不是這個(訊息遵循我在資料庫中保存的順序,但它們被放置在不同的分片中,因此錯誤地並行處理同一房間的不同序列):

Shard 1: 13:24:msg2 51:92:msg2 12:12:msg2 51:92:msg2 12:12:msg1 ==> consumer
Shard 2: 51:91:msg3 12:12:msg3 13:24:msg1 51:92:msg1 ==> consumer

這位官員郵政提到了這一點,但我在文件中找不到如何實現它的任何地方:

對單一主鍵所做的一系列變更的相對順序將保留在分片中。此外,給定的密鑰將存在於在給定時間點處於活動狀態的一組同級分片中的至多一個中。因此,您的程式碼可以簡單地處理分片內的串流記錄,以便準確追蹤項目的變更。

問題

1) 如何在 DynamoDB Streams 中設定分區鍵?

2)如何建立保證分區鍵一致傳遞的Stream分片?

3)這真的可能嗎?由於官方文章提到:給定的機密將出現在給定時間點處於活動狀態的一組同級分片中的最多一個中所以看起來 msg1 可能會轉到分片 1,然後 msg2 可能會轉到分片 2,如我上面的範例?

4進問題,我發現了這個:

流擁有的分片數量取決於表格擁有的分區數量。因此,如果您有一個包含 4 個分割區的 DDB 表,那麼您的串流將有 4 個分片。每個分片對應一個特定的分區,因此假設具有相同分區鍵的所有項目應該存在於同一分區中,這也意味著這些項目將存在於同一分片中。

這是否意味著我可以自動實現我需要的東西?“具有相同分區的所有項目將出現在同一個分片中”。 Lambda 尊重這一點嗎?

5)從常問問題

不保證不同分片之間記錄的順序,並且每個分片的處理是並行發生的。

我不關心全域排序,只關心範例中的邏輯排序。不過,尚不清楚分片是否與常見問題中的答案符合邏輯。

答案1

這個答案有幫助嗎?

https://stackoverflow.com/questions/44266633/how-do-dynamodb-streams-distribute-records-to-shards

不保證不同分片之間記錄的順序,並且每個分片的處理是並行發生的。

相關內容