10-17-2026, 11:43 AM
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:
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:
2. Elde Ettiğimiz Avantajlar
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:
- Gereksiz Dosya Boyutu: 10 ürün için günde yüzlerce tekrarlanan satır oluşur ve JSON dosyası megabaytlarca şişer.
- 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.

