chwire: ClickHouse için Native Formatlı Yeni JavaScript İstemcisi
chwire, ClickHouse'un Native ikili formatını HTTP ve TCP üzerinden destekleyen açık kaynak bir JS istemcisi. JSONEachRow'a göre kat kat hızlı kodlama/kod açma sunuyor.
chwire, ClickHouse'un satır bazlı JSONEachRow formatı yerine sütunsal Native ikili protokolünü konuşan yeni bir JavaScript istemcisi olarak tanıtıldı. Geliştirici, resmi ClickHouse JS istemcisinin büyük ölçekli insert işlemlerinde gzip/deflate sıkıştırmasının CPU'yu aşırı tükettiğini fark edince projeye başlamış ve bir yıl boyunca geliştirerek HockeyStack üretim ortamında kullanılabilecek olgunluğa taşımış.
Projenin performans iddiaları dikkat çekici: 1 milyon satırlık veri setlerinde kodlama JSONEachRow'a göre 2-6x, kod açma ise 2-8x daha hızlı çalışıyor. Sıkıştırma (ZSTD/LZ4) devreye girdiğinde Native format neredeyse her zaman kazanıyor, çünkü daha küçük payload'ı sıkıştırmak daha ucuza geliyor. İstemci tarayıcılarda HTTP üzerinden, Node/Bun/Deno ortamlarında ise hem HTTP hem TCP üzerinden ZSTD/LZ4 sıkıştırmasını destekliyor.
Teknik açıdan chwire, Variant, Dynamic, JSON, Nested ve Tuple gibi iç içe geçmiş konteyner tiplerini keyfi derinlikte destekliyor ve ClickHouse'un kendi generateRandom/generateRandomStructure araçlarıyla CI'da round-trip testlerinden geçiriliyor; ayrıca ayrı bir fuzzing altyapısı da mevcut. Parser senkron ve devam ettirilebilir (resumable) şekilde tasarlanmış; asenkron sarmalayıcı ise blokları tamponlayıp gerektiğinde ek veri çekiyor. External table'lar, native query parametreleri, ProfileEvents ve log/progress paket tipleri de desteklenen protokol özellikleri arasında.
Geliştirici, kodun aynı zamanda diğer dillerde benzer istemciler yazmak isteyenler için referans bir implementasyon görevi görebileceğini, hatta bir LLM'e verilip başka bir dile taşınabileceğini belirtiyor. Bu, hem ClickHouse ekosisteminde performans odaklı veri aktarımı yapan mühendisler için doğrudan bir araç, hem de protokol seviyesinde native binary format implementasyonu isteyenler için bir şablon sunuyor.