Aws lambda AWS事件驱动批处理,带有必须成对的异步输入

Aws lambda AWS事件驱动批处理,带有必须成对的异步输入,aws-lambda,amazon-dynamodb,amazon-dynamodb-streams,Aws Lambda,Amazon Dynamodb,Amazon Dynamodb Streams,我有两张DynamoDB表格中的数据。让我们称之为小部件和混乱。每个小部件“有一个”Kerfuffle,但一个Kerfuffle可能属于多个小部件。现在通常,我会说我可以使用DDB流启动lambda,将我的小部件Kerfuffle对发布到SNS。然而,小部件和它们的混乱不一定同时出现。事实上,这种混乱可能在小部件之前或之后5-10分钟出现 因此,看起来我不能在小部件或正在创建的Kerfuffle上使用lambda触发器,因为另一半可能不存在(我也不想发送重复的小部件) 关于如何处理这个问题有什么

我有两张DynamoDB表格中的数据。让我们称之为小部件和混乱。每个小部件“有一个”Kerfuffle,但一个Kerfuffle可能属于多个小部件。现在通常,我会说我可以使用DDB流启动lambda,将我的小部件Kerfuffle对发布到SNS。然而,小部件和它们的混乱不一定同时出现。事实上,这种混乱可能在小部件之前或之后5-10分钟出现

因此,看起来我不能在小部件或正在创建的Kerfuffle上使用lambda触发器,因为另一半可能不存在(我也不想发送重复的小部件)


关于如何处理这个问题有什么建议吗?

打字很难。让widget=
A
和kerfuffle=
B

  • 实时:处理新
    A
    B
    的通知。对于每个
    A
    通知,您检查
    B
    是否存在。如果它没有停止。否则,处理该
    A
    。对于每个
    B
    通知,您将收集与之匹配的所有当前
    A
    ,并对其进行处理。请注意,如果要避免多次处理
    A
    ,而它们的触发非常接近
    B
    ,并且两个进程都成功,则需要在此处进行某种锁定

  • 近实时:每隔一段时间(每隔
    t
    分钟),查找所有未处理的
    a
    。处理所有具有匹配的
    B
    ,并将那些
    A
    标记为已处理

  • 权衡: 方法1:

    • 您处理一堆实际上无关紧要的通知,因为您无法对还没有
      B
      a
      采取行动
    • 您增加了处理两个可能相互干扰的独立流的复杂性,除非您保持单线程处理
    方法2:

    • 您将处理延迟
      t
      分钟。这可能无关紧要或极不实际,具体取决于您的应用程序

    考虑到Bs可以复制(我没有提到),1仍然有效吗?A和B到达并导出。然后B的第二个副本到达,我们将第一次导出第二次。考虑到小延迟并不重要,2可能是最好的选择。一般来说,您可以消除重复通知,如果重复出现问题,这可能是一个明智的主意:SNS和(非fifo)SQS都保证至少一次交付,但我们可以也确实发送副本。另一种选择是,如果您的处理很小,并且过度写入也可以,则只处理重复项,但这是一种特定于应用程序的选择。