我有一个NodeJS应用程序需要从RDS Postgres流式传输数据,对数据执行一些相对昂贵的CPU操作,并将其插入另一个数据库。我已将CPU密集型部分卸载到AWS Lambda中,这样Node应用程序将获得一批行并立即将它们传递给Lambda进行处理。瓶颈似乎是从Postgres接收数据的速度。
为了利用与DB的多个连接,我有一个算法可以有效地超越已排序的ID,因此可以维护许多并发连接。例如:1个连接提取ids 1-100,第二个提取ids 101-200等,然后当第一个返回时可能它取出ID 1001-1100。这是相对标准的做法吗?是否有更快的方法将数据拉出来进行处理?
只要我低于数据库的max_connections,添加更多可能是有益的,可能是作为额外的并发应用程序流数据流出来的吗?应用程序和RDS目前都在VPC中,RDS上的CPU利用率达到30%左右,内存为60%。
答案 0 :(得分:1)
将Postgres数据库转储到CSV文件或将其直接导出到平面文件,将平面文件拆分后将其转储到S3,然后让工作人员自己处理每批文件,可能会快得多。 / p>
从Postgres流式传输数据(特别是如果您为数百万项目进行数据处理)将需要大量的IO并且需要很长时间。