oxtract
Go ile yazdığım yüksek performanslı bir Oracle unload aracı; sorgu sonuçlarını doğrudan OCI üzerinden dışa aktarır ve ≥500K satır/sn, ≥150 MB/sn hedefler.
oxtract, diğer yavaş JDBC tabanlı export araçlarının yerine geçmek için Go ile yazdığım bir komut satırı aracıdır. godror sürücüsü aracılığıyla Oracle'a doğrudan OCI üzerinden bağlanır; Java/JDBC katmanını tamamen devre dışı bırakarak geleneksel unload araçlarıyla yarışan ya da onları geçen hızlarda toplu veri çıkarımı sağlar.
Neden Geliştirdim
Büyük ölçekli veri pipeline'ları çoğu zaman Oracle'dan yüz milyonlarca satırı mümkün olan en hızlı şekilde çekmek zorundadır. Mevcut araçların büyük çoğunluğu JDBC kullandığından ciddi gecikme ve GC yüküne neden olur. oxtract bu sorunun tamamını doğrudan OCI bağlantısı, prefetch ayarı ve hem veritabanı fetch hem de format worker'larını dolu tutan paralel pipeline mimarisiyle çözer.
Çıktı Formatları
CSV (RFC 4180), TSV ve Parquet formatlarını destekler. Parquet çıktısı tam tip eşlemesi sağlar: NUMBER(p,0) → INT64, NUMBER(p,s) → DECIMAL(p,s), sınırsız NUMBER → STRING, DATE/TIMESTAMP → mikrosaniye hassasiyetli timestamp. Sıkıştırma seçenekleri: gzip, zstd ve Snappy (Parquet varsayılanı).
Pipeline Mimarisi
Satırlar yapılandırılabilir dizi boyutlu batch'ler halinde çekilir ve paralel format worker havuzuna iletilir. Paralel çalışmaya rağmen çıktı her zaman orijinal satır sıralamasıyla yazılır. --split-rows (satır sayısı) veya --split-bytes (bayt boyutu) ile dosya bölme; {seq} yer tutucusuyla numaralı dosyalar üretilir.
Incremental Extraction
Watermark tabanlı artımlı mod, seçilen kolonun gördüğü son değeri bir state dosyasına yazar. Sonraki çalışmalarda yalnızca kaydedilen watermark'tan yeni satırlar çekilir. Benzersiz olmayan öncü watermark'lar için bileşik anahtarlar desteklenir.
Gözlemlenebilirlik
İlerleme stderr'e raporlanır (satır/sn, yazılan bayt). JSON yapılandırılmış log çıktısı Loki veya Elasticsearch'e beslenebilir. İsteğe bağlı Prometheus metrik endpoint'i (--metrics-addr) çalışma süresi boyunca sayaç ve ölçer değerlerini sunar.
Dağıtım
Çok aşamalı Dockerfile, binary'yi Oracle Instant Client ile birlikte paketleyerek minimal bir debian-slim runtime imajı üretir. PowerShell paketleme betiği Windows için binary ve başlatıcı batch dosyası içeren bir zip oluşturur. Her etiketli sürümde önceden derlenmiş imajlar GHCR'a yayınlanır.
Teknolojiler
Go 1.22+, godror (CGO/OCI), Apache Parquet (parquet-go), gzip/zstd, Prometheus client, Docker, Oracle Instant Client