Modern veri mühendisliği dünyasında hız sadece bir lüks değil, bir gerekliliktir. Kurumlar S3, HDFS, Cassandra ve Elasticsearch gibi farklı kaynaklarda petabaytlarca veri biriktirdikçe, birleşik ve yüksek performanslı bir sorgu katmanına olan ihtiyaç kritik hale gelir. İşte Presto (şimdi PrestoSQL ve Trino olarak ayrışmış), gigabaytlardan exabaytlara kadar her boyuttaki veri kaynaklarına karşı etkileşimli analitik sorgular çalıştırmak üzere tasarlanmış dağıtık bir SQL sorgu motorudur.
Hadoop MapReduce veya Spark gibi geleneksel toplu işleme çerçevelerinin aksine, bunlar gecikmeye göre değil, veri işleme hızına (throughput) göre optimize edilmiştir; Presto ise düşük gecikmeli etkileşimli analitik için mühendislik açısından tasarlanmıştır. Bu da veri ekiplerinin karmaşık ad-hoc soruları dakikalar veya saatler yerine saniyeler içinde yanıtlaması gereken durumlar için ideal bir seçim yapmasını sağlar.
Mimariyi Anlamak: Koordinatör ve Çalışanlar
Presto'nun gücü istemci-sunucu mimarisinde yatar. Kendisi bir veritabanı değildir; bunun yerine Bağdaştırıcılar (Connectors) aracılığıyla çeşitli veri kaynaklarına bağlanan bir sorgu motorudur. Mimari iki ana bileşenden oluşur:
- Koordinatör (Master): Bu düğüm istemci bağlantılarını kabul eder, SQL sorgularını ayrıştırır ve analiz eder, yürütme planları oluşturur ve görevleri çalışan düğümlere atar. Operasyonun beynidir.
- Çalışan Düğümler: Bu düğümler, koordinatör tarafından atanan görevleri yürütür. Filtreleme, özetleme ve çeşitli bağdaştırıcılardan veri birleştirme dahil olmak üzere gerçek veri işlemlerini gerçekleştirirler.
Presto'nun yatay olarak ölçeklenebilir olacak şekilde tasarlandığı için, önemli performans düşüşü olmadan artan sorgu yüklerini veya veri hacimlerini yönetmek için daha fazla çalışan düğüm ekleyebilirsiniz.
Neden Diğer Motorlar Yerine Presto Seçmelisiniz?
Apache Spark ve Flink gibi araçlar veri mühendisliği manzarasında baskın olsa da, farklı birincil amaçlara hizmet ederler. Spark, ETL boru hatları ve makine öğrenimi için mükemmel olan genel amaçlı bir dağıtık hesaplama motorudur. Presto ise eş zamanlı SQL sorgulama için özelleştirilmiştir.
Temel avantajlar şunlardır:
- Düşük Gecikme: Büyük veri kümelerinde saniyenin altı veya dakikanın altı yanıt süreleri için optimize edilmiştir.
- Çoklu Veri Kaynağı Desteği: Veriyi taşımadan Hive, Kafka, Cassandra, MySQL ve bulut depolama (S3, GCS) gibi kaynaklara bağlanın.
- Veri Çoğaltması Yok: Veriyi bulunduğu yerde sorgulayarak depolama maliyetlerini ve senkronizasyon karmaşıklıklarını azaltın.
Basit Bir Sorguyla Başlangıç
Presto'nun en büyük güçlüğlerinden biri, SQL geliştiricilere tanıdık gelmesidir. SQL biliyorsanız, Presto'da sorgu çalıştırabilirsiniz. Aşağıda, Hive bağdaştırıcısı kullanılarak Amazon S3'te depolanan büyük bir tabloyu sorgulamanın bir örneği verilmiştir.
-- Hive Bağdaştırıcısı aracılığıyla S3'ten kullanıcı aktivite verilerini sorgulama
SELECT
user_id,
COUNT(event_id) AS total_events,
SUM(amount) AS total_spend
FROM
analytics_db.raw_events
WHERE
event_date BETWEEN '2023-01-01' AND '2023-12-31'
AND platform = 'mobile'
GROUP BY
user_id
HAVING
total_spend > 1000
ORDER BY
total_spend DESC
LIMIT 10;
Bu sorgu birkaç temel özelliği göstermektedir: bölüm kesme (event_date aracılığıyla), filtreleme, özetleme ve sonuçları sınırlama. Presto bu filtreleri bağdaştırıcı düzeyine itererek S3'ten okunan veri miktarını en aza indirir.
Performans İnce Ayarı İçin En İyi Uygulamalar
Presto kutudan çıktığı anda güçlü olsa da, üretim iş yükleri için ince ayar yapmak esastır. İşte üç kritik ipucu:
- Bölütleme ve Kovetleme (Bucketing): Altta yatan verinin mantıksal olarak (örneğin tarihe göre) bölümlendirildiğinden emin olun. Bu, Presto'nun ilgisiz bölümleri atlamasına olanak tanır ve G/Ç'yi (I/O) büyük ölçüde azaltır.
- Eş Zamanlılık Sınırları: Eş zamanlı sorgu sayısını kontrol etmek için oturum özelliklerini kullanın. Koordinatörü aşırı yüklemek, tüm kullanıcılar için gecikmeye neden olabilir.
- Seçici Sütun Okuma: Her zaman yalnızca ihtiyacınız olan sütunları seçin. Presto, sütun filtrelerini iterek depolamadan aktarılan veri miktarını azaltabilir.
Sonuç
Presto, büyük veri üzerinde eş zamanlı SQL analitiği ile neyin mümkün olduğunu yeniden tanımladı. Hesaplamayı depolamadan ayırarak ve dağıtık bir mimariden yararlanarak, veri mühendislerinin ve analistlerin devasa, heterojen veri göllerinden benzeri görülmemiş bir hızla içgörüler elde etmelerini sağlar. Hadoop'dan geçiş yapıyor olsanız da yeni bir veri göl evi (data lakehouse) oluşturuyor olsanız da, Presto modern veri yığınındaki temel bir teknoloji olmaya devam etmektedir.
Projenin geleceğiyle ilgilenenler için, topluluğun orijinal kod tabanını PrestoSQL (Presto Vakfı tarafından yönetilen) ve Trino (LinkedIn kurucuları tarafından liderlik edilen topluluk odaklı çatallama) olarak ikiye ayırdığını not edin. Her ikisi de aynı DNA'yı paylaşır ve dağıtık sorgu işlemedeki yeniliği sürdürmeye devam etmektedir.