如何使用循环任务实现数据管道?
How to implement Data pipeline with recurrent tasks?
我必须为我尝试创建的应用程序设置数据管道,但我不确定该怎么做。
我在数据库中有2个实体:A和B,每个实体B都属于一个实体A。
每一分钟,我都会获取许多 B 实体,但缺少一个字段(在每个 B 实体上)。因此,在保存 B 实体之前,我需要在每个实体上计算该字段。给定一个 B 实体和相应的 A 实体,我需要保存的最后 20 个属于 A 实体的 B 实体(在数据库中,因此没有丢失的字段)来计算丢失的字段。
每分钟的伪代码是:
- 获取要保存的新 B 实体列表的 http 请求。
- 对于每个 B 实体:
- 读取B实体的A实体(B实体有一个id为所属A实体的字段)
- 获取 A 实体最后保存的 20 个 B 实体
- 计算缺失字段并保存 B 实体
数量级:每分钟保存 20k 个 A 实体、3000 万个 B 实体和 1k 个新 B 实体(这 1k B 实体属于大约 300 个 A 实体)
与其每分钟查询一次数据库以获取为在已获取的 B 实体列表中找到的每个 A 实体保存的最后 20 个 B 实体,我想我可以实现一个缓存系统来存储最后 20 个保存的 B 实体每个A实体。
所以我的第一个想法是:
- 使用缓存系统 (https://dashbird.io/blog/leveraging-lambda-cache-for-serverless-cost-efficiency/) 实施 AWS lambda 函数,每分钟执行一次描述的所有逻辑。
- 添加每分钟调用 lambda 函数的 CRON。
- 数据存储在 AWS 上的 sql 数据库 (mysql) 中。
由于是第一次搭建数据流水线,所以我认为我的第一个想法是好的,我有很多问题:
- 你会如何实施它?
- 缓存是个好主意吗?只查询数据库会更好吗?
- AWS 是一个不错的选择吗?
- CRON 有 1 分钟的限制,所以我快达到 CRON 的限制了……
- 缓存的结构将是一个字典,其键:实体 A id(20 个字符的字符串)值:20 个数字的列表(20k 个实体,所以 20k 个键值对)。在 AWS lambda 函数上构建此类数据缓存是否有意义?
- 你建议我改用数据管道框架还是其他技术?
提前感谢您的反馈:)
我认为通过创建来查询具有限制和顺序的 RDS 比使用 lambda 进行缓存更容易,也更少麻烦。
如果负载很大,您可以准备一个只读副本来处理读取。
关于 Lambda 的 cron 作业,是的,为什么不呢。确保你知道这个 lambda 平均运行多长时间。如果您有专门的容器设置,可能会更便宜、更高效。
不确定所有这些是否真的需要在数据管道中,因为这是一个相当简单的设置。
我必须为我尝试创建的应用程序设置数据管道,但我不确定该怎么做。
我在数据库中有2个实体:A和B,每个实体B都属于一个实体A。
每一分钟,我都会获取许多 B 实体,但缺少一个字段(在每个 B 实体上)。因此,在保存 B 实体之前,我需要在每个实体上计算该字段。给定一个 B 实体和相应的 A 实体,我需要保存的最后 20 个属于 A 实体的 B 实体(在数据库中,因此没有丢失的字段)来计算丢失的字段。
每分钟的伪代码是:
- 获取要保存的新 B 实体列表的 http 请求。
- 对于每个 B 实体:
- 读取B实体的A实体(B实体有一个id为所属A实体的字段)
- 获取 A 实体最后保存的 20 个 B 实体
- 计算缺失字段并保存 B 实体
数量级:每分钟保存 20k 个 A 实体、3000 万个 B 实体和 1k 个新 B 实体(这 1k B 实体属于大约 300 个 A 实体)
与其每分钟查询一次数据库以获取为在已获取的 B 实体列表中找到的每个 A 实体保存的最后 20 个 B 实体,我想我可以实现一个缓存系统来存储最后 20 个保存的 B 实体每个A实体。
所以我的第一个想法是:
- 使用缓存系统 (https://dashbird.io/blog/leveraging-lambda-cache-for-serverless-cost-efficiency/) 实施 AWS lambda 函数,每分钟执行一次描述的所有逻辑。
- 添加每分钟调用 lambda 函数的 CRON。
- 数据存储在 AWS 上的 sql 数据库 (mysql) 中。
由于是第一次搭建数据流水线,所以我认为我的第一个想法是好的,我有很多问题:
- 你会如何实施它?
- 缓存是个好主意吗?只查询数据库会更好吗?
- AWS 是一个不错的选择吗?
- CRON 有 1 分钟的限制,所以我快达到 CRON 的限制了……
- 缓存的结构将是一个字典,其键:实体 A id(20 个字符的字符串)值:20 个数字的列表(20k 个实体,所以 20k 个键值对)。在 AWS lambda 函数上构建此类数据缓存是否有意义?
- 你建议我改用数据管道框架还是其他技术?
提前感谢您的反馈:)
我认为通过创建来查询具有限制和顺序的 RDS 比使用 lambda 进行缓存更容易,也更少麻烦。 如果负载很大,您可以准备一个只读副本来处理读取。
关于 Lambda 的 cron 作业,是的,为什么不呢。确保你知道这个 lambda 平均运行多长时间。如果您有专门的容器设置,可能会更便宜、更高效。
不确定所有这些是否真的需要在数据管道中,因为这是一个相当简单的设置。