Optimizasyon: Fiyat Değişmediğinde JSON Logunu Şişirmeme (Delta Loglama Yöntemi)
#1

Optimizasyon: Fiyat Değişmediğinde JSON Logunu Şişirmeme (Delta Loglama Yöntemi)

Fiyat takip botları 7/24 çalışırken (örneğin 30 dakikada bir kontrol yaparken), fiyat haftalarca aynı kalabilir. Her kontrolde JSON dosyasına aynı fiyatı yazmak iki büyük soruna yol açar:
  1. Gereksiz Dosya Boyutu: 10 ürün için günde yüzlerce tekrarlanan satır oluşur ve JSON dosyası megabaytlarca şişer.
  2. Grafik ve Analiz Kirliliği: İleride fiyat grafiği çizdirmek istediğinizde aynı fiyatın binlerce kopyası grafiği anlamsız şekilde uzatır.

Bunun çözümü Delta Loglama (Sadece Değişimleri Kaydetme) mantığıdır: Bot yeni fiyatı aldığında dosyadaki en son kayıtlı fiyata bakar; fiyat kuruşu kuruşuna aynıysa dosyaya dokunmaz, yalnızca fiyat değişmişse (artmış veya azalmışsa) arşive yeni bir satır ekler.



1. Optimize Edilmiş `fiyatKaydet()` Fonksiyonu

Mevcut scriptinizdeki `fiyatKaydet` fonksiyonunu aşağıdaki mantıkla güncelleyin:

Kod:
/** * Yalnızca fiyat değiştiğinde JSON dosyasına log atan optimize fonksiyon */ function fiyatKaydet(urunAdi, guncelFiyat) {   let gecmisVeri = {};   // 1. Mevcut JSON dosyasını oku   if (fs.existsSync(LOG_DOSYASI)) {     try {       const hamIcerik = fs.readFileSync(LOG_DOSYASI, 'utf8');       gecmisVeri = hamIcerik ? JSON.parse(hamIcerik) : {};     } catch (e) {       gecmisVeri = {};     }   }   // 2. Bu ürünün geçmiş kayıt listesini al (yoksa boş dizi aç)   if (!gecmisVeri[urunAdi]) {     gecmisVeri[urunAdi] = [];   }   const urunKayitlari = gecmisVeri[urunAdi];   // 3. KONTROL: Ürünün son kayıtlı fiyatına bak   if (urunKayitlari.length > 0) {     const sonKayit = urunKayitlari[urunKayitlari.length - 1];         // Fiyat değişmemişse diske yazma işlemini pas geç     if (sonKayit.fiyat === guncelFiyat) {       console.log(`ℹ️ [Fiyat Sabit] ${urunAdi} hala ${guncelFiyat} TL (Log atlanıyor).`);       return false; // Değişim olmadığını bildirmek için false döner     }     // Fiyat değiştiyse konsola ne kadar değiştiğini yazdır     const fark = (guncelFiyat - sonKayit.fiyat).toFixed(2);     const durum = fark > 0 ? `+${fark} TL (Zam)` : `${fark} TL (İndirim)`;     console.log(`? [Fiyat Değişti] ${urunAdi}: ${sonKayit.fiyat} TL ➔ ${guncelFiyat} TL (${durum})`);   } else {     // Ürün dosyaya ilk defa ekleniyorsa     console.log(`? [İlk Kayıt] ${urunAdi} sisteme eklendi: ${guncelFiyat} TL`);   }   // 4. Yeni kaydı oluştur ve arşive ekle   const simdi = new Date();   const yeniKayit = {     tarih: simdi.toLocaleDateString('tr-TR'),     saat: simdi.toLocaleTimeString('tr-TR'),     fiyat: guncelFiyat   };   urunKayitlari.push(yeniKayit);   // 5. Dosyaya yaz   fs.writeFileSync(LOG_DOSYASI, JSON.stringify(gecmisVeri, null, 2), 'utf8');   return true; // Değişim olduğunu bildirmek için true döner }



2. Elde Ettiğimiz Avantajlar
  • %95 Disk Tasarrufu: Fiyatı 1 ay boyunca değişmeyen bir ürün için 1440 satır yerine sadece 1 satır veri saklarsınız.
  • SSD/Disk Ömrü: Her 30 dakikada bir diske sürekli I/O (yazma) işlemi yapılmaz, sadece piyasa oynadığında diske yazılır.
  • Net Fiyat Eğrisi: Grafiğe veya Excel'e aktardığınızda her satır gerçek bir piyasa hareketini (zam veya indirim anını) temsil eder.

Alıntı:İpucu: Bu fonksiyondan dönen `true` veya `false` değerini kullanarak; sadece fiyat gerçekten değiştiğinde Telegram'a "X ürününün fiyatı güncellendi!" şeklinde bilgilendirme mesajı da attırabilirsiniz.
Bul
Cevapla


Hızlı Menü:


Konuyu Okuyanlar: 2 Ziyaretçi