【问题标题】:How to implement Data pipeline with recurrent tasks?如何使用循环任务实现数据管道?
【发布时间】:2021-10-09 13:10:29
【问题描述】:

我必须为我尝试创建的应用程序设置数据管道,但我不知道该怎么做。

我在数据库中有 2 个实体:A 和 B,每个实体 B 都属于一个实体 A。

每分钟,我都会获取许多 B 实体,但缺少一个字段(在每个 B 实体上)。因此,在保存 B 实体之前,我需要在每个实体上计算该字段。给定一个 B 实体和对应的 A 实体,我需要保存属于 A 实体的最后 20 个 B 实体(在数据库中,因此没有丢失的字段)来计算丢失的字段。

每分钟的伪代码是:

  • http 请求获取要保存的新 B 实体列表。
  • 对于每个 B 实体:
    • 读取 B 实体的 A 实体(B 实体有一个字段,其 id 是它们所属的 A 实体)
    • 获取保存的 A 实体的最后 20 个 B 实体
    • 计算缺失字段并保存 B 实体

数量级:每分钟 20k A 实体,3000 万 B 实体保存和 1k 新 B 实体(这 1k B 实体属于大约 300 个 A 实体)

我认为我可以实现一个缓存系统,为每个 A 存储最后 20 个保存的 B 实体,而不是每分钟查询数据库以获取为每个 A 实体保存的最后 20 个 B 实体实体。

所以我的第一个想法是:

由于这是我第一次必须设置数据管道,我注意到我的第一个想法很好,但我有多个问题:

  • 您将如何实现它?
  • 缓存是个好主意吗?只查询数据库更好吗?
  • AWS 是一个不错的选择吗?
    • CRON 有 1 分钟的限制,所以我达到了 CRON 的限制......
    • 缓存的结构将是一个带有键的字典:实体 A id(20 个字符的字符串)值:20 个数字的列表(20k A 实体,因此 20k 键值对)。在 AWS lambda 函数上构建这样的数据缓存有意义吗?
  • 您建议我改用数据管道框架还是其他技术?

提前感谢您的反馈:)

【问题讨论】:

    标签: database amazon-web-services aws-lambda cloud data-pipeline


    【解决方案1】:

    我认为通过创建来查询具有限制和顺序的 RDS 会更容易,而且比使用 lambda 进行缓存更容易。 如果负载很大,您可以使用只读副本来处理读取。

    关于 Lambda 的 cron 工作,是的,为什么不呢。确保你知道这个 lambda 平均运行多长时间。如果您有专门的容器设置,可能会更便宜、更高效。

    不确定所有这些是否真的需要在数据管道中,因为这是一个相当简单的设置。

    【讨论】:

    • 感谢您的反馈,我没有考虑使用专用容器代替 lambda 并比较这两种解决方案之间的价格,所以我会这样做。对于缓存,我想我会按照您的建议尝试不使用它(如果我意识到它效率不高,请添加它)。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2021-07-11
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多