Trino — ko‘p turdagi data source’lar ustida yuqori parallel distributed SQL querylar bajaradigan query engine. U data lake, object storage, relational database, message tizimi va boshqa cataloglarni yagona SQL interfeysida birlashtiradi.
Trino asosiy data nusxasini o‘zida saqlamaydi. U connectorlar orqali ma’lumotni o‘qib, workerlar orasida parallel qayta ishlaydi.
Arxitektura
Trino cluster ikki asosiy roldan iborat:
- coordinator;
- worker.
Coordinator query lifecycle’ini boshqaradi.
Workerlar scan, filter, join va aggregationni bajaradi.
Kichik muhitda coordinator ham worker vazifasini bajarishi mumkin, ammo katta production clusterda rollar ajratiladi.
Coordinator
Coordinator:
- client connection;
- SQL parse;
- metadata;
- logical plan;
- optimization;
- task scheduling;
- worker discovery;
- result coordination
uchun javob beradi.
Coordinator yuqori availability modeli deploymentga bog‘liq.
Worker
Worker connector’dan data splitlarini o‘qiydi.
Har worker bir nechta task va driverlarni parallel bajaradi.
Worker memory, CPU va network query throughputga ta’sir qiladi.
Bir worker sekin bo‘lsa stage yakunlanishi kechikishi mumkin.
Catalog
Catalog ma’lum connector instance’ini bildiradi.
Masalan:
lake.analytics.events
postgres.public.users
Bu yerda birinchi qism catalog, ikkinchisi schema, uchinchisi table.
Bir query turli cataloglarni join qilishi mumkin.
Connector
Connector tashqi tizimning:
- metadata;
- schema;
- table;
- split;
- page;
- predicate;
- projection;
- transaction
interfeysini Trino uchun moslashtiradi.
Connector capability pushdown va write imkoniyatiga ta’sir qiladi.
Page va block
Trino data’ni row-by-row emas, columnar page va blocklar ko‘rinishida qayta ishlaydi.
Bu vectorized executionga yaqin samaradorlik beradi.
Operatorlar bir batchdagi ko‘p qiymat ustida ishlaydi.
Query plan
SQL logical operationlarga ajratiladi:
Optimizer ularni distributed physical stage’larga aylantiradi.
EXPLAIN plan va fragmentlarni ko‘rsatadi.
Dynamic filtering
Join vaqtida kichik tomondagi keylar runtime filterga aylantirilib katta source scaniga uzatilishi mumkin.
Masalan, faqat kerakli partition yoki rowlar o‘qiladi.
Bu katta fact table joinida I/Oni kamaytiradi.
Connector dynamic filterdan foydalana olishi kerak.
Pushdown
Trino ayrim operationlarni source tizimga uzatadi:
- predicate;
- projection;
- aggregation;
- join;
- limit;
- top N.
Source operationni samarali bajarsa network hajmi kamayadi.
Biroq source load oshishi mumkin.
Partition pruning
Data lake table partition key bo‘yicha filter qilinsa keraksiz directory va filelar o‘qilmaydi.
Metadata catalog partitionlarni topadi.
Juda ko‘p partition planning vaqtini oshiradi.
File format
Trino columnar formatlardan samarali foydalanadi.
Format metadata’si:
- row group;
- column statistics;
- min-max;
- compression;
- schema
orqali pruning va column selection beradi.
Ko‘p mayda file split va object storage request sonini oshiradi.
Join distribution
Partitioned
Ikkala input hash key bo‘yicha workerlarga qayta taqsimlanadi.
Broadcast
Kichik table barcha workerga yuboriladi.
Optimizer statistics va limit asosida tanlov qiladi.
Memory va network limitlari hisobga olinadi.
Join reordering
Ko‘p table joinida optimizer qaysi join avval bajarilishini o‘zgartirishi mumkin.
Kuchli filterlangan yoki kichik resultni oldin join qilish intermediate data’ni kamaytiradi.
Statistics yo‘q bo‘lsa original order yoki taxminiy reja ishlatilishi mumkin.
Spill
Hash join, sort va aggregation memory limitga yetganda diskka spill qilishi mumkin.
Spill query failure’ni kamaytiradi, ammo disk I/O va encryption xarajati bor.
Temporary storage tez va yetarli hajmda bo‘lishi kerak.
Fault-tolerant execution
Ayrim execution rejimlari task outputini oraliq storage’da saqlab, worker failure’dan keyin faqat zarur tasklarni qayta bajarishi mumkin.
Bu uzun batch querylar uchun foydali.
Evaziga ko‘proq disk va latency talab qilinadi.
Workload management
Resource group orqali:
boshqariladi.
BI dashboard va data engineering workloadlari alohida guruhga ajratilishi mumkin.
Security
Trino:
- authentication;
- TLS;
- catalog access;
- schema va table permission;
- column masking;
- row filtering;
- audit
bilan himoyalanishi mumkin.
Connector credentiallari serverda himoyalanadi.
User source database parolini bevosita olmasligi mumkin.
Session property
Query uchun ayrim optimizer va execution parametrlari session darajasida o‘zgartirilishi mumkin.
Bu debug va workload tuning uchun.
Userga xavfli yoki clusterga katta ta’sir qiladigan propertylarni o‘zgartirish huquqi cheklanadi.
Trino va data lake
Trino data lake’da SQL query qatlamini beradi.
Ammo quyidagilar alohida tizimlar tomonidan boshqariladi:
- table format;
- catalog;
- compaction;
- ingestion;
- retention;
- file lifecycle.
Yaxshi file layout query performance uchun muhim.
Query retry
Transient object storage yoki worker xatosida fault-tolerant rejim taskni qayta bajarishi mumkin.
Source va sink operationlari idempotent bo‘lishi kerak.
Write query qisman bajarilgan bo‘lsa connector transaction modeli natijani belgilaydi.
Result cache
Trino’ning o‘zida yoki tashqi gateway’da bir xil query natijasi cache qilinishi mumkin.
ni hisobga oladi.
Stale analytics qabul qilinadigan workloadlarda foydali.
Table function
Connector yoki engine tablega o‘xshash natija qaytaradigan parametrli function taqdim etishi mumkin. Bu tashqi tizimning maxsus scan yoki metadata operationini SQL ichida ifodalaydi.
Bog‘liq tushunchalar
Distributed SQL, Coordinator, Worker, Catalog, Connector, Dynamic filtering, Predicate pushdown, Data lake, Columnar processing, Federated query