具有必须配对的异步输入的 AWS 事件驱动批处理
AWS Event Driven Batch w/ Asynchronous Inputs That must be paired
我有数据进入两个 DynamoDB 表。我们称它们为 Widgets 和 Kerfuffles。每个 Widget "has a" 个 Kerfuffle,但一个 Kerfuffle 可以属于多个 Widget。现在通常,我会说我可以使用 DDB Streams 启动 lambda 以将我的 Widget-Kerfuffle 对发布到 SNS。然而,Widgets 和它们的 Kerfuffles 不一定一起出现。事实上,Kerfuffle 可能会在 Widget 之前或之后 5-10 分钟到达。
所以我似乎不能只在 Widget 或正在创建的 Kerfuffle 上有一个 lambda 触发器,因为另一半可能不存在(而且我也不想发送重复的 Widgets)。
关于如何处理这个问题有什么建议吗?
打字很难。让 widget = A
和 kerfuffle = B
.
实时:您处理新 A
的 和 新 B
的通知。对于每个 A
通知,您检查是否存在 B
。如果没有停止。否则,处理 A
。对于每个 B
通知,您 收集所有存在的 A
匹配它 ,并处理它们。请注意,如果你想避免多次处理 A
,如果它们触发非常接近它们的 B
并且两个过程都成功,你需要在此处进行某种锁定。
近实时:每隔一段时间(每 t
分钟),找出所有 A
未被处理的。处理所有具有匹配 B
的那些,并将那些 A
标记为已处理。
权衡:
方法一:
- 您处理了一堆实际上无关紧要的通知,因为您无法对还没有
B
的 A
采取行动。
- 你增加了处理两个独立流的复杂性,这会相互干扰,除非你保持单线程处理。
方法二:
- 您延迟处理
t
分钟。这可能无关紧要或 极其不切实际,具体取决于您的应用程序。
我有数据进入两个 DynamoDB 表。我们称它们为 Widgets 和 Kerfuffles。每个 Widget "has a" 个 Kerfuffle,但一个 Kerfuffle 可以属于多个 Widget。现在通常,我会说我可以使用 DDB Streams 启动 lambda 以将我的 Widget-Kerfuffle 对发布到 SNS。然而,Widgets 和它们的 Kerfuffles 不一定一起出现。事实上,Kerfuffle 可能会在 Widget 之前或之后 5-10 分钟到达。
所以我似乎不能只在 Widget 或正在创建的 Kerfuffle 上有一个 lambda 触发器,因为另一半可能不存在(而且我也不想发送重复的 Widgets)。
关于如何处理这个问题有什么建议吗?
打字很难。让 widget = A
和 kerfuffle = B
.
实时:您处理新
A
的 和 新B
的通知。对于每个A
通知,您检查是否存在B
。如果没有停止。否则,处理A
。对于每个B
通知,您 收集所有存在的A
匹配它 ,并处理它们。请注意,如果你想避免多次处理A
,如果它们触发非常接近它们的B
并且两个过程都成功,你需要在此处进行某种锁定。近实时:每隔一段时间(每
t
分钟),找出所有A
未被处理的。处理所有具有匹配B
的那些,并将那些A
标记为已处理。
权衡:
方法一:
- 您处理了一堆实际上无关紧要的通知,因为您无法对还没有
B
的A
采取行动。 - 你增加了处理两个独立流的复杂性,这会相互干扰,除非你保持单线程处理。
方法二:
- 您延迟处理
t
分钟。这可能无关紧要或 极其不切实际,具体取决于您的应用程序。