我有没有更好的方法来构建此批处理管道?

问题描述

因此,我有一个庞大的数据集(15亿个),我需要对其执行I / O绑定的转换任务(每个点都执行相同的任务),然后将结果放入存储库中,以便对转换字段进行模糊搜索。>

我目前拥有的是一步功能批处理作业流水线,该流水线馈入RDS。就像这样

  1. Lamba将输入数据分割为X个偶数分区
  2. 使用与X个分区匹配的X个数组元素创建一个Array Batch作业
  3. 批处理作业(1个vCPU,2048 Gb ram)在许多EC2竞价型实例上运行,转换数据并将其放入RDS。

此当前解决方案(X = 1600个工作人员)的运行时间大约为20-40分钟,这主要取决于启动竞价型实例作业所需的时间。实际作业本身平均需要大约15分钟的运行时间。至于总成本,用现货节省的工人成本约40美元,但真正的推动者是RDS postgres DB。为了能够处理1600个并发写入,您至少需要一个r5.xlarge,即每月500个!

这就是我的问题。似乎我可以说有10,000名工人,从而可以更快,更便宜地运行实际的工人(由于基于第二种定价),但是我需要一个可以某种方式处理10,000个并发数据库连接的RDS系统。

我看上去高低不平,无法为我碰到的这堵缩放墙找到好的解决方案。下面,我将详细说明我尝试过的一些事情,以及为什么它们对我不起作用或看起来不合适。

  1. RDS代理-我尝试创建2个代理,将其设置为50%的连接池,并为“偶数”编号的作业提供一个代理,为奇数编号的作业提供另一个代理,但这无济于事
  2. DynamoDb-这似乎可以立即解决我的大量并发问题,可以肯定地处理写入负载,但是它不允许像select * where field LIKE Y这样的模糊搜索,这是我的批处理作业结果工作流程中的关键部分
  3. (理论)-让作业将结果写入S3,然后在新存储桶条目上触发lambda,以将其插入数据库。 (我不确定这可能是个糟糕的主意)

无论如何,我所追求的是提高运行该批处理管道(主要是数据库)的成本,缩短运行时间(以节省现货成本)或两者!我愿意接受任何反馈或建议!

让我知道您是否需要我错过一些关键信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...