通过 REST API 公开 Redshift 表
Posted
技术标签:
【中文标题】通过 REST API 公开 Redshift 表【英文标题】:Expose Redshift tables through REST API 【发布时间】:2020-06-15 16:06:52 【问题描述】:我目前正在考虑如何通过 REST API 以有意义且一致的方式公开 Redshift 表中存在的数据。
我希望它的工作方式是调用者调用 API,然后我们对表进行某种动态查询。我担心延迟,因为查询的范围从简单到非常复杂。由于 Redshift 需要作为客户端连接到数据库,我们可以采用的一些方法是:
创建连接 Redshift 的 lambda 函数,通过 API 网关调用 使用 OData 创建 RESTful API。但是,我认为 Redshift 不支持开箱即用的 OData。我倾向于使用 OData,因为它具有高级过滤选项以及分页功能。
我正在寻求建议,OData 是否足够,如果可以,如何将 OData 与 redshift 集成。 也欢迎任何其他建议/方法。
谢谢!
【问题讨论】:
【参考方案1】:让我来看看不同的选项:
红移数据接口
Redshift data API 让您调用查询并以异步方式获取结果。
您可以直接从前端使用 API,也可以将其放在 API Gateway 后面。
拉姆达
如果您信任您的用户并且可以获得适当的身份验证,您可以直接从前端调用 Lambda 并传递一些 SQL 以根据参数运行或生成 SQL。您可以使用联合查询将其与 Athena 交换。您可以选择在 API Gateway 中添加一些附加功能,例如速率限制和不同形式的身份验证。请记住,Lambda 和 API Gateway 在返回的数据和执行时间方面都有限制。
对于长时间运行的查询,我建议 Lambda、API 网关甚至从前端本身调用 AWS Glue Python Shell 作业,该作业将使用卸载查询将结果删除到 S3 中。前端可以在工作完成时进行池化。
如果您的查询类型很少,那么您可以制作适当的休息 API。
除了 Lambda,您还可以使用 Amazon Athena Federated Query,实际上您可以直接从前端进行查询。
OData 实现
Redshift 有第三方 OData 实现。只是谷歌它。使用使用 OData 的前端库(我过去使用 KendoUI),您可以在几天内制作一个功能丰富的前端。此选项的主要问题是工具成本可能超出您的预算。当然,你花在制作东西上的时间也是一种成本,但这真的取决于你的实际需求。
那么如何选择呢?
根据您的要求,我建议您简单地浏览选项并根据成本、实施时间、性能、可靠性和安全性进行选择。
Redshift 性能如何?
这是关于 Redshift 和按需查询最困难的部分。在 Redshift 上,您没有索引,可以压缩数据并且数据以列方式存储。所有这些都会使 Redshift 比普通关系数据库的随机查询慢。
但是,您可以确保您的表使用与您的查询匹配的分布样式进行排序,并且您的查询使用列式存储来发挥其优势(并非所有列都被请求),那么它可以更快。
要记住的另一件事是 Redshift 不能很好地处理并发,我相信默认情况下只能有 8 个并发查询,你可以增加它,但你绝对不会超过 20 个。
如果您的用户可以等待他们的查询(我已经看到错误查询超过 2 小时。我相信您可以让它们花费更长的时间,那么 Redshift 就可以了,如果不能,那么您可以尝试将 Postgres 放在前面Redshift 通过使用外部表,然后使用它前面的平均索引来加快速度。
【讨论】:
以上是关于通过 REST API 公开 Redshift 表的主要内容,如果未能解决你的问题,请参考以下文章
读取 kafka 主题并通过 Rest API 公开数据以供 prometheus 抓取(Nodejs)
向 Web 公开 Cassandra REST API 的最佳方式是啥?
如何从自定义 REST API 将数据加载到 Redshift