Bosh sahifa Wiki Presto

Presto

Presto — turli data source’lar ustida distributed SQL querylarni parallel bajarishga mo‘ljallangan query engine. U data’ni o‘zida asosiy storage sifatida saqlamaydi, balki connectorlar orqali warehouse, data lake, relational database va boshqa tizimlardan o‘qiydi.

Presto interaktiv analytics va katta datasetlarni pastroq latency bilan query qilish maqsadida yaratilgan.

Coordinator

Coordinator client querylarini qabul qiladi.

U:

vazifalarini bajaradi.

Coordinator katta resultni o‘zi qayta ishlashi yoki clientga uzatishi mumkin.

Worker

Worker query tasklarini bajaradi.

U:

amallarini bajaradi.

Workerlar orasida data network orqali almashadi.

Connector

Connector Presto va tashqi data source orasidagi adapter.

U:

ni ta’minlaydi.

Har connector bir xil SQL funksiyalarini qo‘llamasligi mumkin.

Catalog

Catalog connector konfiguratsiyasini ifodalaydi.

SQL obyekt nomi quyidagicha bo‘lishi mumkin:

catalog.schema.table

Masalan, bitta queryda data lake va relational database table’lari join qilinishi mumkin.

Federated query

Turli source’lar bitta SQL query ichida birlashtiriladi.

Masalan:

object storage’dagi eventlar
JOIN
relational database’dagi userlar

Bu data’ni oldindan bitta joyga ko‘chirmasdan tahlil qilishga yordam beradi.

Ammo cross-source join katta network va source load yaratishi mumkin.

Split

Connector table’ni parallel o‘qiladigan splitlarga ajratadi.

Split:

bo‘lishi mumkin.

Ko‘p split parallelismni oshiradi, juda ko‘p mayda split scheduling overhead yaratadi.

Stage va task

Query plan stage’larga bo‘linadi.

Stage ichida bir nechta task workerlarda ishlaydi.

Stage’lar exchange orqali bog‘lanadi.

Blocking aggregation yoki global sort keyingi stage boshlanishiga ta’sir qilishi mumkin.

Exchange

Workerlar orasidagi data almashuvi exchange deb ataladi.

Turlari:

  • gather;
  • repartition;
  • replicate;
  • local exchange.

Join va group by ko‘pincha key bo‘yicha repartition talab qiladi.

Network bandwidth query performance’ining muhim qismi.

Predicate pushdown

Filter connector va source’ga uzatiladi.

Masalan, object storage’da partition pruning yoki database’da WHERE bajariladi.

Bu Presto’ga keladigan data hajmini kamaytiradi.

Connector faqat qo‘llaydigan predicate’larni push qiladi.

Column pruning

Query ishlatmagan columnlar source’dan o‘qilmaydi.

Columnar file format bilan bu katta I/O tejamkorlik beradi.

SELECT * keraksiz columnlarni o‘qishi mumkin.

Join strategy

Distributed join turlari:

Partitioned join

Ikkala input join key bo‘yicha workerlar orasida taqsimlanadi.

Katta tablelar uchun.

Broadcast join

Kichik input barcha workerga yuboriladi.

Katta input local kichik nusxa bilan join qilinadi.

Kichik tomon noto‘g‘ri baholansa worker memory tugashi mumkin.

Cost-based optimizer

Optimizer statistics asosida:

tanlaydi.

Statistics yo‘q yoki eskirgan bo‘lsa reja taxminiy bo‘ladi.

Memory

Presto query execution uchun distributed memory ishlatadi.

Memory kategoriyalari:

Katta hash join va aggregation memory talab qiladi.

Limit oshsa query rad etilishi yoki diskka spill qilinishi mumkin.

Spill

Memory yetmaganda ayrim operatorlar vaqtinchalik data’ni diskka yozadi.

Bu queryni tugatishga yordam beradi, ammo latency va disk I/O oshadi.

Spill storage hajmi va encryption boshqariladi.

Resource group

Querylar jamoa yoki workload bo‘yicha resource group’larga ajratiladi.

Policy:

Dashboard querylari uzun ad-hoc querylar tomonidan to‘liq bloklanmasligi kerak.

Data type

Turli connectorlar o‘z type’larini Presto type’lariga map qiladi.

Decimal precision, timestamp timezone va nested type conversion muhim.

Bir source’dagi timestamp boshqa source bilan join qilinganda timezone farqi noto‘g‘ri natija berishi mumkin.

Result hajmi

Katta resultni clientga to‘liq qaytarish coordinator va networkni band qiladi.

Analytical query:

orqali natijani boshqaradi.

Millionlab rowni browserga yuborish foydali emas.

Failure

Worker yo‘qolsa ayrim querylar fail bo‘lishi mumkin.

Retry imkoniyati engine arxitekturasi va query turiga bog‘liq.

Source transient xatosi ham queryni to‘xtatishi mumkin.

Client idempotent queryni qayta yuborishi ehtimoli bor.

Presto va storage

Presto storage lifecycle, backup va ingestionni o‘zi to‘liq boshqarmaydi.

Data source tizimlari:

uchun javob beradi.

Query engine va storage alohida scale qilinishi mumkin.

Query monitoring

Har query uchun:

  • queued vaqt;
  • planning;
  • CPU;
  • wall time;
  • scanned byte;
  • output row;
  • peak memory;
  • blocked time

kuzatiladi.

Ko‘p scanned data, ammo kichik output partition yoki column pruning ishlamayotganini ko‘rsatishi mumkin.

Source bosimi

Federated query tashqi relational database’dan katta table scan qilsa uning production workloadiga zarar yetkazishi mumkin.

Connector concurrency, predicate pushdown va read replica orqali bosim cheklanadi.

Analytical data’ni alohida storage’ga ko‘chirish zarur bo‘lishi mumkin.

Prepared statement

Takroriy query parameterlar bilan tayyorlanishi mumkin. Bu string concatenationni kamaytiradi, ammo physical plan parameter taqsimotiga har doim optimal bo‘lmasligi mumkin.

Bog‘liq tushunchalar

Distributed SQL, Coordinator, Worker, Connector, Catalog, Federated query, Predicate pushdown, Column pruning, Broadcast join, Query engine