【问题标题】:AWS Real time data fetchingAWS 实时数据获取
【发布时间】:2019-07-15 06:40:56
【问题描述】:

我有一个应用程序需要每 5 秒从 AWS dynamodb 表中读取数据。 目前我使用 lambda 获取数据,然后将 dynamodb 中的数据返回给用户。

每 5 秒查询一次表的问题在于它可能会影响性能,而且还有定价问题。 (大多数时候数据甚至可能根本没有改变,但是当它改变时我想立即得到通知)。

一个重要的澄清是我的应用程序位于 AWS 外部,并且仅访问 AWS dynamodb 以获取数据(使用使用 c# 构建的简单 http 请求)。

当新数据插入 dynamodb 时,有什么方法可以让我的应用收到通知?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb


    【解决方案1】:

    只是在@john-rotenstein 答案之上添加一些内容:

    正确配置 Lambda 函数以由来自 DynamoDB 流的事件触发后,您可以让 Lambda 函数通过 HTTP 请求通知您的 Web 应用程序。

    另一种选择是使用 Lambda 将此通知放入您可能在 AWS 外部使用的队列中,然后让您的 C# 代码成为此队列的使用者。通知您的应用程序有多种可能性,您只需要查看哪种方式最适合您当前的场景/最具成本效益。

    【讨论】:

    • 您能否详细说明一下 lambda 函数如何通过 HTTP 请求通知我的 Web 应用程序? (这正是我想要实现的)
    • 是的。一旦您的 Lambda 运行,您就可以使用 npmjs.com/package/request 之类的模块对您现有的应用程序进行 HTTP 调用。您真正需要做的就是将您的 Lambda 配置为由 DynamoDB Streams 触发(老实说这很简单)
    • 正是我想要的。非常感谢!
    • 很高兴我能帮上忙!
    【解决方案2】:

    DynamoDB 中的数据更新可以触发 DynamoDB Stream,后者可以触发 AWS Lambda 函数。

    Lambda 函数可以通过某种方式通知您的应用程序。

    见:DynamoDB Streams and AWS Lambda Triggers

    【讨论】:

    • 感谢您的回答,很抱歉,但我不确定我是否理解。我看到了这一点,但我需要将结果返回到位于 AWS 之外的应用程序。这如何帮助我避免池化?
    • 您希望您的应用程序如何接收通知?
    • 目前我使用 HTTP 请求从 dynamodb 表中获取信息,但如果我每 5 秒执行一次,它可能会很昂贵,而且大多数时候我根本不会得到任何数据。我想收到我的一个 c# 类的通知,当我收到通知时,我才会发出 HTTP 请求。
    • 也许这个是个好主意:docs.aws.amazon.com/sdk-for-net/v3/developer-guide/… - 你有什么想法? - 在阅读了更多关于这个的内容之后,它还不够好,因为等待事件的最长时间是 15 分钟,而我想永远等待。
    • John,非常感谢您的回复,我将学习如何使用 DynamoDB 流来实现我的目标。
    【解决方案3】:

    就工程而言,Streams 是正确的答案,但只是说您对轮询选项昂贵的担忧是没有根据的。因此,如果您有一个可行的解决方案,我会很想离开它。

    如果您每 5 秒查询一次表,则每 2 个月将花费 0.25 美元。

    这假设您的表具有按需定价,并且查询返回的数据少于 4KB。

    https://aws.amazon.com/dynamodb/pricing/on-demand/

    【讨论】:

    • 谢谢Stu,其实这点让我很困扰,因为没有一个应用程序查询数据(可能超过100个)。因此,这可能会变得非常昂贵,并且大规模可能会变得非常昂贵。但是首先,我理解您的观点,并且使用此解决方案让我感到很自在。谢谢!
    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2018-10-30
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多