当前位置: 首页 > 知识库问答 >
问题:

使用单表设计的Dynamodb流-仅处理特定的项目类型

通博实
2023-03-14

我一直在使用Dynamodb作为数据库构建一个无服务器应用程序,并且一直遵循单表设计模式(例如https://www.alexdebrie.com/posts/dynamodb-single-table/)。我开始遇到的问题是使用Dynamodb流——我希望能够使用Dynamodb流来保持Elasticsearch实例的最新状态。

在单个dynamodb表容纳大约10种不同类型的项目(将继续扩展)的那一刻,其中一种项目类型“事件”(如在体育赛事中)将被发送到弹性搜索实例,以进行复杂的查询/搜索。因此,需要通过流触发的lambda函数在Elasticsearch中更新对“事件”项的任何更改。

我正在努力的是,我将有一个lambda在任何表项的“更新”上被触发,但这也可能是其他9种项目类型之一的更新,我在lambda中可以检查已更新的项目并检查其类型等,但似乎浪费了任何项目类型的任何更新都会触发lambda,这可能比需要的次数要多得多。

有没有更好的方法来处理这一问题,以减少浪费,并且只针对一种项目类型?我认为,随着应用程序的增长,需要更多的流触发器,至少会有一个“更新”lambda已经被触发,我可以运行一些逻辑,看看什么类型的项目被更新,但我只是担心我错过了一点东西。

共有2个答案

孙永嘉
2023-03-14

不幸的是,您描述的方法是处理DynamoDb流的唯一方法。我自己也走了同样的路,认为这可能不是正确的用法,但这是处理流的唯一方法。

葛航
2023-03-14

可以使用Lambda事件过滤。这将允许您防止特定事件调用您的函数。在单表DynamoDB设计模式中,只能过滤出类型为:EVENT的记录。

如果您碰巧使用了无服务器框架,下面的yaml代码片段将展示如何轻松实现此功能。

functionName:
  handler: src/functionName/function.handler
  # other properties
  events:
  - stream:
      type: dynamodb
      arn: !GetAtt DynamoDbTable.StreamArn
      maximumRetryAttempts: 1
      batchSize: 1
      filterPatterns:
        - eventName: [MODIFY]
          dynamodb:
             MyTableName:
               type:
                 S: [EVENT]

注意存在多个比较运算符,例如开头,即[{"prefix":"EVENT"}]~有关更多信息,请参阅过滤器规则语法。

  • 来源Pawel Zubkiewicz在Dev.to
 类似资料:
  • 我目前正在做一个项目,我使用DynamoDB作为我的nosql数据库。在开始之前,我试图学习如何建模nosql数据库,因为它与我们已知的关系数据库确实不同。我学到了我必须坚持单表模式 我使用DynamoDB流来聚合一些数据,例如产品的客户数量(还有一些更复杂的情况)。因为我只有一个表,所以我的lambda函数写在流来自的同一个表中

  • 我试图捕获DynamoDB表更改使用DynamoDB流和AWS提供JavaDynamoDB流Kinesis适配器。我正在Scala应用程序中使用AWSJavaSDK。 我从遵循AWS指南和通过AWS发布的代码示例开始。然而,我在让亚马逊自己发布的代码在我的环境中工作方面遇到了问题。我的问题在于对象。 在示例代码中,使用DynamoDB提供的流ARN配置了。 我在Scala应用程序中遵循了类似的模式

  • 我正在尝试实现一个Spring批处理作业,为了处理记录,它需要2-3个db调用,这会减慢记录的处理速度(大小为100万)。如果我使用基于块的处理,它会单独处理每条记录,性能会很慢。因此,我需要一次性处理1000条记录,作为批量处理,这将减少数据库调用,并提高性能。但我的问题是,如果我实现Tasklet,那么我也会失去可重启性和重试/跳过功能,如果使用AggregateInputReader实现,我

  • 我有一个类<code>SimpleHistogram 以下是我到目前为止所拥有的: 我正在努力实现函数<code>setCount(DT item,int count)</code>,该函数应该将<code>item</code>的计数设置为<code>count</code>。 另外,如果< code>item在列表中不存在,那么我们应该添加该项,然后将该项的计数设置为< code>count。

  • 我不确定这是否是问这个问题的正确地方。 我是dynamodb的新手,正在尝试创建一个小型web应用程序。我已经阅读了这里的最佳实践http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html 我的桌子将是: 建筑物 租户(一栋建筑可以有尽可能多的租户,由楼层编号确定) 收件人(每个

  • 我创建了两个面板..第一个面板添加了所有3个按钮,布局设置为边框布局,第二个面板包含网格。然后将两个面板添加到具有布局边框布局的框架中 但是没有添加按钮,网格看起来很小...当我点击那个网格按钮时,它就会膨胀... 有谁能帮助我创建这个UI吗?我是刚到爪哇的。请帮帮忙。