ClickHouse'un Parquet'e Karşı Sıkıştırma Performansı: Veri Depolama Maliyetini Nasıl Düşürdü?
ClickHouse'un Parquet'e Karşı Sıkıştırma Performansı: Veri Depolama Maliyetini Nasıl Düşürdü?
Veri depolama maliyetleri, özellikle trilyonlarca satır veri işlemeyi gerektiren büyük ölçekli sistemlerde, kritik bir konudur. Özellikle IoT (Nesnelerin İnterneti) gibi alanlarda, araçlardan gelen GPS pings gibi akış verilerinin sürekli toplanması ve depolanması, uzun vadede ciddi bir maliyet oluşturabilir. Bu nedenle, verilerin daha az yer kaplaması ve daha hızlı erişimi için sıkıştırma tekniklerinin etkinliği kritik öneme sahiptir.
Bu yazıda, bir şirketin kendi IoT veri kümesini Parquet’ten ClickHouse’a geçiş sürecinden elde ettiği deneyimler üzerinden, ClickHouse’un sıkıştırma performansının neden Parquet’ten daha iyi olduğunu inceleyeceğiz. Özellikle, veri sıkıştırma algoritmalarının nasıl daha uygun bir veri depolama modeliyle birlikte veri depolama maliyetlerini düşürdüğünü göreceğiz.
Veri Modeli: Araç GPS Pings
İşte kullanılan temel veri modeli:
session_id: Araç oturumunun benzersiz kimliği (dizge)latitude: Araç konumu (ondalık sayı)longitude: Araç konumu (ondalık sayı)time_sent: Gönderilme zamanı (tarih/saat)time_received: Alınma zamanı (tarih/saat)speed: Hız (8 bitlik tam sayı)heading: Dönüş açısı (16 bitlik tam sayı)hdop: Konum doğruluğu (16 bitlik tam sayı)
Yılda trilyonlarca satır veri işlenen bu sistemde, her saniye 50.000’den fazla satır veri toplanıyor. Bu boyutta bir veri hacmi, veri sıkıştırma stratejilerinin önemini kat kat artırıyor.
Parquet: Kolayca Bulunabilir, Ama Sıkıştırma Zor
Parquet, sütun bazlı bir dosya formatıdır ve büyük veri sistemlerinde yaygın olarak kullanılır. Sütun bazlı depolama, sütunlardaki verilerin birbirine yakınlığı sayesinde sıkıştırma oranlarını artırır. Özellikle, verileri önceden sıralamak (sort order) bu işlemi çok daha etkili hale getirir.
Şu şekilde bir sütun sıralaması kullanılmıştı:
(s2_cell_id, session_id, time_sent)
Bu sıralama, geospatial sorguların hızlı yürütülmesini sağlarken, aynı zamanda veri sıkıştırma oranlarını da artırmayı hedefliyordu.
S2 Hücreleri ile Uzamsal Sıralama
S2 hücreleri, Dünya yüzeyini 1 boyutlu bir sayı doğrusuna dönüştürerek, uzamsal komşulukları koruyan bir yapı sunar. Bu sayede, bir arazideki veriler daha sıkıştırılabilir hale gelir. Ancak, s2 hücrelerinin seviyesi (level) sıkıştırma ve sorgu performansı arasında bir denge kurar:
- Daha düşük seviyeler → daha büyük hücreler → daha iyi sıkıştırma
- Daha yüksek seviyeler → daha küçük hücreler → daha hızlı sorgular
Bu nedenle, sistemde 11. seviye S2 hücreleri kullanılarak veriler önce bu hücrelere göre gruplanıyor, sonra her grup içinde (session_id, time_sent) sırasıyla sıralanıyordu.
Veri Tipi Seçimi: Double → Integer
Orijinal olarak, latitude ve longitude değerleri double (64 bit) olarak depolanıyordu. Ancak bu, verilerin sadece birkaç metrelik doğrulukta olması rağmen, bilgisayarın tamamıyla ayrıntılı bir yapıyla depolamasına neden oluyordu. Bu nedenle, mantıksal olarak nanometre düzeyinde doğruluk gereksinimi yoktu.
Bu yüzden, latitude ve longitude değerleri 1.000.000 ile çarpılıp, ardından 32 bitlik tam sayıya dönüştürüldü:
latitude_e6 = int32(latitude * 1e6)
longitude_e6 = int32(longitude * 1e6)
Bu dönüşüm, veri boyutunu yarıya indirirken, aynı zamanda sıkıştırma oranını da önemli ölçüde artırır çünkü veri daha homojen hale gelir.
ClickHouse: Daha Basit, Ama Daha Etkili
ClickHouse, sıklıkla hız ile bilinir. Ancak, bu sistemde, ClickHouse’un sıkıştırma performansı, Parquet’ten bile daha yüksek olduğu ortaya çıktı. Bu durum, sistemdeki veri sıkıştırma algoritmalarının çok daha etkili olduğunu gösteriyor.
Sıralama ve Sıkıştırma
ClickHouse’da, sadece (s2_cell_id, session_id, time_sent) sırasıyla veriler sıralanıyordu. Burada, s2 hücre seviyesi 8 olarak seçilmişti. Bu daha düşük bir seviyeye göre, 11’dan daha az ayrıntılı bir yapı sağlar.
Ancak, bu basit sıralama stratejisi, ClickHouse’un kendine özgü sıkıştırma algoritmaları sayesinde, Parquet’i geride bırakıyor. ClickHouse, özellikle delta encoding, dictionary encoding ve run-length encoding gibi teknikleri kullanarak, veri içindeki tekrarlanan değerleri çok etkili bir şekilde sıkıştırır.
Özellikle, session_id ve time_sent sütunlarında uzun süre aynı değerlerin devam ettiği durumlarda, ClickHouse çok daha etkili bir şekilde bu tekrarlanan verileri temsil edebiliyor.
Sıfır Kayıp Sıkıştırma
ClickHouse’da, veri sıkıştırma sırada gerçekleşir. Bu, verilerin önceden sıralanmasını gerektirmez, çünkü ClickHouse bu sıralamayı otomatik olarak optimize eder. Ayrıca, sıkıştırma algoritmaları, sütun bazlı olarak çalıştığı için, aynı sütundaki değerlerin benzerliklerini çok daha iyi yakalayabilir.
Bu sayede, sadece sütun bazlı sıkıştırma değil, aynı zamanda veri yapısının kendisini optimize eden bir yapıya sahip olunur.
Sıkıştırma Performansı: Parquet vs ClickHouse
Sıradan bir veri kümesi üzerinde yapılan karşılaştırmada, ClickHouse’un sıkıştırma oranının Parquet’ten daha yüksek olduğu görüldü. Bu durum, şu nedenlerden kaynaklanıyor:
- Sıralama stratejisi: ClickHouse, verileri otomatik olarak sıralarken, Parquet’te bu işlemi kullanıcı yapar.
- Sıkıştırma algoritmaları: ClickHouse, sütun bazlı sıkıştırma için daha gelişmiş algoritmalar kullanır.
- Veri tipi optimizasyonu: ClickHouse,
int32,uint8gibi sığ veri tiplerini daha etkili kullanır. - Sıfır kayıp sıkıştırma: ClickHouse, sıkıştırma sonrası veriyi tamamen geri yükleyebilir, bu da veri bütünlüğünü korurken, sıkıştırma oranını artırır.
Bu nedenle, ClickHouse’un veri depolama maliyetini düşürme potansiyeli, özellikle büyük veri sistemlerinde çok daha büyüktür.
Sonuç: Sıkıştırma, Hızdan Daha Önemli
Bu deneyimler, ClickHouse’ın yalnızca hızlı bir veri sorgulama sistemine değil, aynı zamanda veri depolama maliyetini düşürme konusunda da çok etkili bir araç olduğunu gösteriyor.
Parquet, çok iyi bir sıkıştırma formatıdır. Ancak, ClickHouse’un sıkıştırma algoritmaları, veri tipi optimizasyonu ve otomatik sıralama desteği sayesinde, Parquet’i geride bırakıyor.
Bu durum, büyük ölçekli sistemlerde, veri depolama maliyetlerini azaltmak isteyen şirketlerin ClickHouse’a geçiş yapmasında sıkıştırma performansı gibi bir faktörün çok önemli olduğunu gösteriyor.
Çıkarım
ClickHouse, sadece hızlı bir veri sorgulama sistemi değil, aynı zamanda veri depolama maliyetlerini düşürme konusunda da üst düzey bir çözüm sunar. Özellikle, IoT gibi veri yoğun sistemlerde, ClickHouse’un sıkıştırma algoritmaları, veri hacmini önemli ölçüde azaltarak, almacın hem hız hem de maliyet açısından daha etkili olmasını sağlar.
Eğer veri depolama maliyetlerinizi düşürmek istiyorsanız, ClickHouse’un sıkıştırma performansı sizi şaşırtabilir.