2017-03-09 23 views
0

PrestoDB有多个connectors。虽然连接器确实实现了读取和写入操作,但是从我阅读的所有教程中,似乎它们通常仅用作数据源以便从中读取。例如,netflix在Amazon S3上具有“10千兆字节”数据,并且他们明确指出Presto工作节点上没有使用磁盘(并且没有使用HDFS)。 陈述的用例是“特设交互式”查询。PrestoDB缓存内部开箱即用的中间结果吗?

此外,亚马逊雅典娜本质上是S3 + Presto,并附带类似的使用案例。

我很困惑这是如何工作的。显然,你不想在每个查询中读取10 PB的数据。所以我假设,你想保留一些先前在内存中获取的数据,比如数据库索引。但是,对数据和查询没有限制,我不明白这是如何有效的。

使用案例1:我经常运行相同的查询,例如,在仪表板上显示指标。 Presto是否避免重新扫描已知的数据点?

用例2:我正在分析一个大型数据集。每个查询都稍有不同,但是有一些常见的子查询,或者我们筛选到数据的一个公共子集。 Presto是否从之前的查询中学习并带来中间结果?或者,如果不是这种情况,我是否建议在某处存储中间结果(例如CREATE TABLE AS ...)?

回答

1

据我所知,没有中间隐式缓存层。当您在群集上使用HDFS时,您肯定会受益于操作系统磁盘缓存,因此下次查询运行速度会更快,但您无法获得即时缓存结果。类似的数据块级缓存也可能适用于S3。

一般来说,没有合理大小的系统可以筛选10 PB的数据,因为读取所有数据将花费大量时间。但是,可以对数据进行分区,以便Presto知道或多或少需要扫描哪些数据。当分区符合查询条件时(例如,您通过数据对数据进行分区并查询最新数据),这可以非常有效地工作。

当您的数据未按照您查询的相同方式进行分区时,并且您不希望以不同方式重新分区时,使用create table ... as select保存临时结果非常有意义。您还可以使用一些内存中的存储来存储这些临时表,例如, raptor(目前未公开)或memory连接器,以便更快速地访问。

有关分区,调整存储和查询的一些入门提示,您可以看看https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/

+0

谢谢,您提供的链接有助于:如果数据分区是数据源配置的一部分,并且查询与此分区保持一致,那么Athena/Presto可以在只读取数据的子集。 – Jan