2017-03-09 89 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