ath*_*mas 13 amazon-web-services amazon-athena
计划是从 aws 数据交换中获取数据,将其移动到 s3 存储桶,然后通过 aws athena 查询数据 api。一切正常,只是感觉有点慢。
无论是数据集还是查询,我都无法在 athena 响应时间中低于 2 秒。这对于一个 API 来说非常重要。我检查了最佳实践,但似乎这些也超过了 2 秒。
所以我的问题是:2 秒是雅典娜的最短响应时间吗?
如果是这样,那么我必须切换到 postgres。
The*_*heo 31
Athena 确实不是低延迟数据存储。您很少会看到低于一秒的响应时间,而且通常会更长。在一般情况下,Athena 不适合作为 API 的后端,但这当然取决于它是哪种 API。如果它是某种分析服务,也许用户不期望亚秒响应时间?我已经构建了使用 Athena 的 API,它们工作得非常好,但这些服务的响应时间预计以秒为单位(甚至被认为是快速的),我从 Athena 团队那里得到了帮助,以根据我们的工作负载调整我们的帐户。
要了解 Athena 为什么“慢”,我们可以剖析当您向 Athena 提交查询时会发生什么:
StartQueryExecutionAPI 调用启动查询GetQueryExecutionAPI 调用检查查询是否已完成,直到它收到表明执行已成功、失败或已取消的响应GetQueryResultsAPI 调用来检索结果的第一页Presto 专家可能会提供有关步骤 4-6 的更多详细信息,即使它们在 Athena 的 Presto 版本中可能略有修改。不过,细节对于这次讨论并不是很重要。
如果您对大量数据(数十 GB 或更多)运行查询,则总执行时间将取决于第 6 步。如果结果也很大,则 7 将是一个因素。
如果您的数据集很小,和/或涉及 S3 上的数千个文件,那么 4-5 将占主导地位。
以下是 Athena 查询永远不会很快的一些原因,即使它们不会触及 S3(例如SELECT NOW()):
StartQueryExecution、 aGetQueryExecution和 a GetQueryResults,只是它们的往返时间 (RTT) 加起来会超过 100 毫秒。GetQueryExecution多次调用,并且调用之间的延迟将限制您发现查询成功的速度,例如,如果您每 100 毫秒调用一次,则平均会增加 100 毫秒 + RTT 的一半到总时间,因为平均而言,您会错过实际完成时间这么多。GetQueryResults必须从S3阅读CSV,分析它,并对其进行序列化JSON作为。后续页面必须在 CSV 中向前跳过,甚至可能更慢。如果您想知道是什么影响了查询的性能,您可以使用ListQueryExecutionsAPI 调用来列出最近的查询执行 ID(我认为您最多可以返回 90 天),然后用于GetQueryExecution获取查询统计信息(请参阅文档QueryExecution.Statistics每个属性的含义)。通过这些信息,您可以确定您的慢查询是由于排队、执行还是进行 API 调用的开销(如果不是前两个,则可能是最后一个)。
您可以采取一些措施来减少一些延迟,但这些技巧不太可能将延迟降至次秒级:
GetQueryExecution,直接从 S3 下载 CSV。该GetQueryExecution电话是方便,如果你想知道列的数据类型,但如果你已经知道,或者不关心,直接读取数据可以为您节省宝贵的一些几十毫秒。如果您需要列数据类型,您可以获得….csv.metadata与结果 CSV 一起写入的文件,它是未记录的 Protobuf 数据,请参阅此处和此处了解更多信息。| 归档时间: |
|
| 查看次数: |
4093 次 |
| 最近记录: |