İçeriğe geç
edumintsBlog
Backend2 dk okuma

JSON Kolonlarını Ayrıştırmak (Shredding) Logfire Sorgularını Nasıl 1000 Kat Hızlandırdı?

Kaynak: Hacker News

Paylaş
BackendEdumints Blog
İçindekiler 3 başlık

Önsöz#

Logfire platformunda veri sorgulama performansı devrimsel bir dönüşüm geçiriyor. Bazı senaryolarda sorguların 1.000 kattan daha hızlı çalıştığı görülüyor. Daha önce 30 saniyelik zaman aşımı (timeout) sınırına takılan karmaşık sorgular artık bir saniyenin altında tamamlanıyor. Erken erişim sürecindeki kullanıcılar, özel nitelik sorgularının neredeyse anlık sonuç verdiğini ifade ediyor. Bu teknik inceleme, yarı yapılandırılmış (semi-structured) nitelik verilerini sorgulamayı hızlandırmak için geliştirilen dinamik ayrıştırma (dynamic shredding) optimizasyonunu ele almaktadır. Söz konusu özellik, Şubat 2026 itibarıyla tüm kullanıcılara kademeli olarak sunulmaya başlayacaktır.

Logfire Veri Modeli#

Logfire sistemine aktarılan OpenTelemetry verisi yarı yapılandırılmış bir yapıya sahiptir. Bu veri modeli iki temel bileşenin birleşiminden oluşur:

  • Sabit şemalı alanlar: Zaman damgası (timestamp), span adı (span_name) ve mesaj gibi her span kaydında zorunlu olan ve kesin tiplere sahip alanlar.
  • Yarı yapılandırılmış nitelikler: HTTP durum kodları, kullanıcı kimlikleri (user_id) veya sunucu bölgeleri gibi duruma göre değişen anahtar-değer çiftleri.

Yarı yapılandırılmış veriler iki kanal üzerinden iletilir: span bazlı nitelikler (attributes) veya uygulama/servis örneğini temsil eden kaynak nitelikleri (resource attributes - Logfire'da otel_resource_attributes). Örneğin, FastAPI üzerinde logfire.span ile bir kullanıcı isteği izlendiğinde; servis adı ve bölge bilgisi kaynak niteliği olarak atanırken, user_id ve HTTP yanıt kodları span niteliği olarak dışa aktarılır. Veriler ağ üzerinde JSON veya Protobuf (gRPC) ile taşınır ve Logfire tarafında nesne depolamada sütun tabanlı Parquet dosyaları olarak depolanır.

Bu veri modelinde dikkat edilmesi gereken üç temel nokta bulunmaktadır:

  • start_timestamp, end_timestamp, span_name ve message gibi alanlar sabit şemalıdır; her span için mevcuttur ve güçlü tiplidir (strongly typed).
  • Nitelikler (attributes) yarı yapılandırılmış formdadır ve span kayıtları arasında geniş farklılıklar gösterir.
  • http.status_code ve http.method gibi alanlar OpenTelemetry standardında ortak semantik anlamlara sahipken, user_id gibi uygulamaya özel nitelikler bir noktada tamsayı, başka bir noktada metin (string) olarak iletilebilir.

Yazılım Geliştirme ve Öğrenme Çıkarımları#

Büyük ölçekli telemetri ve gözlemlenebilirlik (observability) sistemlerinde JSON bloklarını ham haliyle sorgulamak ciddi I/O darboğazlarına yol açar. Logfire'ın dinamik ayrıştırma yaklaşımı, yarı yapılandırılmış alanları Parquet içinde ayrık sütunlara bölerek yalnızca filtrelenen alanların diskten okunmasını sağlar. Geliştiriciler açısından temel çıkarım: Yüksek hacimli veri mimarilerinde esnekliği korurken analitik performansı kaybetmemek için dinamik sütun ayrıştırma ve Parquet gibi sütun odaklı depolama stratejilerini benimsemek kritik önem taşır.


Bu konuyu derinlemesine öğrenmek isterseniz: Üretim Observability Pipeline modülüne göz atın.

Kaynak ve atıf

Bu yazı, Hacker News üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:

  • pydantic.dev/articles/dynamic-shredding-2026-01-26