簡體   English   中英

通過多個 lambda 函數 AWS 處理流數據

[英]Processing streaming data by multiples lambda functions AWS

我有一個流數據,我必須使用至少 2 個 lambda 函數來處理每個即將到來的數據記錄。 基本上,當 lambda 函數處理即將到來的記錄時,它會驗證幾個條件,最后它會生成一個新行數據並將其保存到我的數據庫中,這個新行有一個名為“出現”的列表示這個新行在我的數據庫。我必須使用 2 個以上的 lambda 函數,因為即將到來的數據非常龐大,我想加快這個過程。 但這會導致一個問題,更具體地說,假設我有 2 個 lambda 函數 A 和 B,並且同時有 2 個記錄 x 和 y,A 處理 x,B 處理 y。 在處理完 x 和 y 之后,A 和 B 將分別生成新的行 x' 和 y'。 但有可能 x' 與 y' 相同,當 A 和 B 將 x' 和 y' 保存到我的數據庫時,x'(也是 y')的出現列僅增加 1(因為 A 和 B會先在我的數據庫中找到x'(also y')的現有數據,然后更新'occurrence'列),但是這里的增加應該是2。如果我只使用一個lambda function就不會出現這個問題。我認為解決方案應該來自我如何存儲和更新數據,或者我如何管理 2 個同時運行 lambda 函數。 但到目前為止,我無法弄清楚。 任何幫助將不勝感激。

沒錯,存儲數據時需要小心以確保沒有重復項。 並且在更新時,確保您不與另一個更新操作沖突。 然而,這通常是通過利用數據庫的一個特性來實現的。 因此,如何實現這一點也取決於您使用的數據庫。

示例 1 - DynamoDB

在 DynamoDB 中,這可以使用條件更新來處理。 請參閱此示例 思路是在更新時指定當前值,這樣只有當當前值沒有變化時,更新才會成功。

所以在你的應用程序中,首先檢索當前值。 例如,假設數據庫告訴您當前值為5 然后你告訴 DynamoDB:

update to: 6
if the current value is: 5

如果同時發生另一個更新,則當前值為6 所以當 DynamoDB 執行你上面的更新語句時,條件檢查會失敗。 然后你只需要再試一次(檢索最新值並再次嘗試更新)。

示例 2 - MySQL

在關系數據庫中,通常更新語句會自動放置一個鎖定機制。 這意味着您實際上不需要做任何事情,只要您不在更新語句中對當前值進行硬編碼即可。

意思是,這樣做很好:

UPDATE table1 SET occurrence = occurrence + 1 where ID = ${id};

數據庫將確保此語句按順序執行,即使同時提交了 2 個或更多語句。

但是,不要這樣做:

UPDATE table1 SET occurrence = ${current_value} + 1 where ID = ${id};

因為這是對值進行硬編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM