rest - 通过 REST API 公开 Redshift 表

标签 rest odata amazon-redshift

我目前正在考虑如何通过 REST API 以有意义且一致的方式公开 Redshift 表中存在的数据。

我希望它的工作方式是调用者调用 API,然后我们对表进行某种动态查询。我担心延迟,因为查询范围从简单到非常复杂。由于 Redshift 需要作为客户端连接到数据库,我们可以采用的一些方法是:

  • 创建连接 Redshift 的 lambda 函数,通过 API 网关调用
  • 使用 OData 创建 RESTful API。但是,我认为 Redshift 不支持开箱即用的 OData。

我倾向于 OData,因为它具有高级过滤选项和分页功能。

我正在寻求建议,OData 是否足够?如果足够,如何将 OData 与 redshift 集成。 也欢迎任何其他建议/方法。

谢谢!

最佳答案

让我回顾一下不同的选项:

Redshift 数据接口(interface)

Redshift data API让我们以异步方式调用查询并获取结果。

可以直接在前端使用API​​,也可以放在API Gateway后面。

lambda

如果您信任您的用户并且可以获得适当的身份验证,您可以简单地直接从前端调用 Lambda 并向其传递一些 SQL 以根据参数运行或生成 SQL。您可以使用联合查询将其与 Athena 交换。您可以选择在 API 网关中添加一些额外的功能,例如速率限制和不同形式的身份验证。请记住,Lambda 和 API 网关在返回的数据和执行时间方面都有限制。

对于长时间运行的查询,我建议 Lambda、API 网关甚至前端本身调用 AWS Glue Python Shell 作业,该作业将使用卸载查询将结果放入 S3。前端可以在工作完成时汇集。

如果您的查询类型很少,那么您可以制作适当的 rest API。

除了 Lambda,您还可以使用 Amazon Athena Federated Query ,您实际上可以直接从前端查询。

OData 实现

Redshift 有第三方 OData 实现。只是谷歌它。使用使用 OData 的前端库(我过去使用 KendoUI),您可能会在几天内制作出功能丰富的前端。此选项的主要问题是工具成本可能会超出您的预算。当然,你制作东西所花费的时间也是一种成本,但这实际上取决于你的实际需求。

那么如何选择呢?

根据您的要求,我建议您简单地浏览选项,并根据成本、实现时间、性能、可靠性和安全性进行选择。

Redshift 性能如何?

这是关于 Redshift 和按需查询最困难的部分。在 Redshift 上你没有索引,数据可以被压缩并且数据以柱状方式存储。对于随机查询,所有这些都会使 Redshift 比普通关系数据库慢。

但是,您可以确保您的表按照与您的查询相匹配的分布方式进行排序,并且您的查询使用列式存储来发挥其优势(并非所有列都被请求),这样速度会更快。

要记住的另一件事是 Redshift 不能很好地处理并发,我相信默认情况下只能有 8 个并发查询,您可以增加它,但绝对不会超过 20 个。

如果您的用户可以等待他们的查询(我见过糟糕的查询会持续超过 2 小时。我相信您可以让他们花费更长的时间,那么 Redshift 就可以了,如果不能,那么您可以尝试将 Postgres 放在前面通过使用外部表进行 Redshift ,然后在它前面使用平均索引来加快速度。

关于rest - 通过 REST API 公开 Redshift 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62392318/

相关文章:

java - 调用 Post-Method 会导致 "405 Method not allowed"- 错误

javascript - 使用 jQuery 调用 REST 服务时未捕获的 ReferenceError

odata - 在 Microsoft Dynamics CRM (OData) 的单个请求中创建多个实体

java - OData 和 Facebook 见解

amazon-web-services - 使用查询编辑器在 Amazon Redshift 上创建数据库

api - 我的 API 设计是否违反了 RESTful 原则?

asp.net-core - ASP.NET Core 3.1 OData : Cannot Select Entity By Id

sql - 创建中间日期行

excel - 在 AWS Redshift 中禁用 OID

java - 如何使用 RestTemplate 和 JUnit 测试 RestClient?