javascript - 将数据表中的大量行(大约 10000 行)传输到 AWS lambda 的优化方法
问题描述
我正在 tableau 中开发一个扩展,它以数据表中的行的形式记录用户决策(使用 JavaScript),它将修改后的行以 JSON 格式发送到 AWS lambda。在 AWS lambda 中,我们从行中读取数据。创建必要的更新 SQL 查询并使用 for 循环在 redshift 数据库上一一运行它们。
但这是一个花费太多时间的过程。有人可以提出更好的方法吗
- 有没有更好的方法将数据发送到 AWS lambda,例如打包/压缩数据并发送等,?
- 我们可以使用任何替代逻辑而不是“for 循环”来使用更改来大规模更新数据库吗?
注意:每个修改的行可能有不同的值。
解决方案
你知道所有的时间都花在了哪里吗?我对可能发生的事情有一个或 2 个猜测,但数据会有所帮助。
Redshift 是一个列式数据库,专为批量上传数据而不是逐行更新而设计。它还专为大量数据(100GB 及以上)而设计。这看起来不像是匹配的用例,但您没有提供足够的信息来确定。Redshift 也没有针对将数据从 SQL 移动到计算节点进行优化,因此如果您通过 SQL 文字加载数据,那么这将不会很快。
如果您确实有大量数据,则需要在加载到 redshift 之前捆绑足够的记录(100MB+)并通过 S3 执行此操作。这意味着数据将在 Redshift 中可用之前稍等片刻。如果这不能满足您的需求,那么您可能没有选择正确的服务。在此模型中,您的 Lambda 会将记录合并到大型 S3 文件中。这些将被复制到 Redshift 和间隔中。这基本上就是 Kinesis Firehose 所做的,因此您可能想研究一下这个 AWS 服务。
Redshift 针对大量读取和少量大型写入进行了优化。如果您需要与读取相同数量的(小)写入,您可能需要一个事务数据库。如果你想保留 Postgresql 风格的界面,那么 RDS 中的 Postgresql 是一个选择。
推荐阅读
- spring - 在 Websphere 上部署 SpringWS 应用程序而没有任何数据库组件抛出错误创建名称为 defaultValidator 的 bean
- python - 如何在 Django 中从 postgresql 迁移到 sqlite3?
- url - 本地 jekyll 无法加载 unicode url
- angular - Angular 2+ 的缩放滑块
- powershell - PowerShell Try Catch 错误处理函数不显示我的自定义警告消息
- c# - 根据您在 .Net 中使用的 Visual Studio 版本编译代码
- python - 在python中按复杂计划运行命令
- google-api - 根据组织单位更改 Google 日历的可见性
- gradle - 使用“应用”在 Gradle 中添加特定的插件版本
- vb.net - 将图像添加到数据集中 - VB.Net SOAP Web 服务