首页 > 解决方案 > 将数据表中的大量行(大约 10000 行)传输到 AWS lambda 的优化方法

问题描述

我正在 tableau 中开发一个扩展,它以数据表中的行的形式记录用户决策(使用 JavaScript),它将修改后的行以 JSON 格式发送到 AWS lambda。在 AWS lambda 中,我们从行中读取数据。创建必要的更新 SQL 查询并使用 for 循环在 redshift 数据库上一一运行它们。

但这是一个花费太多时间的过程。有人可以提出更好的方法吗

  1. 有没有更好的方法将数据发送到 AWS lambda,例如打包/压缩数据并发送等,?
  2. 我们可以使用任何替代逻辑而不是“for 循环”来使用更改来大规模更新数据库吗?

注意:每个修改的行可能有不同的值。

标签: javascriptaws-lambdadatatablesamazon-redshifttableau-api

解决方案


你知道所有的时间都花在了哪里吗?我对可能发生的事情有一个或 2 个猜测,但数据会有所帮助。

Redshift 是一个列式数据库,专为批量上传数据而不是逐行更新而设计。它还专为大量数据(100GB 及以上)而设计。这看起来不像是匹配的用例,但您没有提供足够的信息来确定。Redshift 也没有针对将数据从 SQL 移动到计算节点进行优化,因此如果您通过 SQL 文字加载数据,那么这将不会很快。

如果您确实有大量数据,则需要在加载到 redshift 之前捆绑足够的记录(100MB+)并通过 S3 执行此操作。这意味着数据将在 Redshift 中可用之前稍等片刻。如果这不能满足您的需求,那么您可能没有选择正确的服务。在此模型中,您的 Lambda 会将记录合并到大型 S3 文件中。这些将被复制到 Redshift 和间隔中。这基本上就是 Kinesis Firehose 所做的,因此您可能想研究一下这个 AWS 服务。

Redshift 针对大量读取和少量大型写入进行了优化。如果您需要与读取相同数量的(小)写入,您可能需要一个事务数据库。如果你想保留 Postgresql 风格的界面,那么 RDS 中的 Postgresql 是一个选择。


推荐阅读