Bir müşteri, sabah raporunda 423 satır veri gördüğünü ancak portalda aynı filtrelerle 1.351 satır olduğunu iddia etmişti. Aradaki 928 satırın kaybolduğunu düşünmek kolaydı — oysa sorun, verinin henüz sistemde olmamasıydı.
Veri kaybı sanılan şeyler çoğunlukla veri yokluğu değildir
Öncelikle, basit bir karşılaştırma yaptım: İki dosya arasındaki farka baktım. Aynı banka, aynı tarih, aynı filtreler kullanılmıştı. E-posta raporundaki her satır, portal raporunda da mevcuttu. Yani veri yanlış değildi, zamanlaması yanlıştı. Bu durumda, kodda hata aramak yerine, sistemin veri akışını anlamak gerekiyordu.
Hipotezleri kanıtla, varsayımla değil
Üç olası neden üzerinde durdum ve her birini üretim ortamında doğruladım:
- Veriler farklı bankalara veya dosyalara bölünmüş olabilir mi? Hayır. Tüm 1.351 satır aynı banka koduna aitti.
- Önceki günün verilerinden çıkarma işlemi fazla agresif mi? Rapor, dünkü faturaları hariç tutuyordu:
$diff = array_diff(
array_column($today, 'invoice'),
array_column($yesterday, 'invoice')
);Bu işlem üretim verilerinde test edildi ve hiçbir satır çıkarmadı. Neden bu değildi.
- Tarih filtreleri farklı mıydı? Hayır. Her iki rapor da
transaction_created_atsütununu aynı tarih için filtreliyordu.
Aynı sorgu, farklı sonuçlar: Zamanlama her şeyi değiştiriyor
Sorunun kaynağını bulduğumda, e-posta raporunun çalışma zamanını inceledim. Rapor sabah 07:15’te çalışıyordu, ancak bankadan gelen ödeme dosyası 07:31’de sisteme yükleniyordu. Rapor, verilerin henüz sistemde olmadığı bir anda çalışmıştı. Aynı sorguyu, verilerin tamamen yüklendiği 08:23’te çalıştırdığımda, tüm 1.351 satırı gördüm.
Veri akışındaki kritik 16 dakika
Veriyi sistemde aramadan önce, doğum zamanı ve okunma zamanı arasındaki senkronizasyonu kontrol etmek gerekiyor. Rapor sabit bir saatte çalışıyordu, ancak verinin sisteme giriş saatiyle örtüşmüyordu. Sonuçlar şaşırtıcıydı:
- Rapor 07:15’te çalıştı → 423 satır gördü (henüz yüklenmemiş veriler)
- Rapor 08:23’te çalıştı → 1.351 satır gördü (tüm veriler yüklenmişti)
Veri kaybı değil, zamanlama hatası vardı.
Düzeltme stratejileri: Basitten en iyisine
Bu tip hataların çözümü, zamanlama bağımlılıklarını ortadan kaldırmaktan geçiyor. Önerilen yaklaşımlar:
- Raporu verilerin tamamen yüklendiği saatten sonra çalıştır: Basit bir çözüm, ancak esnek değildir.
- Veri yükleme işlemi tamamlandığında raporu tetikle: En güvenilir çözüm. Raporun sabit bir saate değil, verinin hazır olma durumuna göre çalışmasını sağlar.
- Raporun çalışmadan önce gerekli verilerin yüklenip yüklenmediğini doğrulaması: Defansif bir yaklaşım. Kritik sistemlerde otomatik hata algılama mekanizmaları olarak kullanılabilir.
Önemli ders: Veri kaybı çoğunlukla zamanlama sorunudur
"Veri eksik" uyarıları, çoğunlukla verinin henüz doğmadığı veya okunmadığı anlamına gelir. Bu durumlarda, ilk adım olarak aşağıdaki soruları sormak gerekiyor:
- Veri ne zaman sisteme giriyor?
- Raporlama sistemi veriyi ne zaman okuyor?
- İkisi arasındaki zamanlama uyumsuzluğu var mı?
Bu basit sorgular, birçok karmaşık hata senaryosunu ortadan kaldırabilir. Veri akışındaki senkronizasyonu anlamak, sistem güvenilirliğini artırmanın en etkili yoludur.
Veri yönetiminde, aslında kaybolan hiçbir şey yok — sadece yanlış zamanda bakıyoruz. Doğru zamanda bakmak, çoğu sorunu çözmeye yetiyor.
Yapay zeka özeti
Raporlama sisteminizdekilerin bazı verileri eksik mi? 16 dakikalık bir zamanlama hatası, sabah 423 satır yerine 1.351 satırın görünmemesine neden olmuş. Sisteminizin nasıl çalıştığını anlamanın yolu, verinin kaynağına ve okunma zamanına odaklanmaktan geçiyor.