---
title: 'Kalıcılık Seçimi'
source: 'https://academia.sh/tr/kurslar/bellek-ici-depolar/kalicilik-secimi'
course: 'Bellek İçi Depolar ve Önbellek Sistemleri'
language: tr
updated: '2026-08-17T18:08:58+00:00'
license: 'CC BY-SA 4.0'
---

# Kalıcılık Seçimi

Dört kalıcılık düzeninin aynı çökme senaryosunda karşılaştırılması: kurtarmanın kaç adım sürdüğü ve hangi düzenin eksik durum kurduğu, kayıp penceresi, diske yazılan bayt ile eşzamanlama sayısı olarak sürekli maliyet ve iki yolun birlikte kullanıldığında anlık görüntünün işinin dayanıklılıktan kurtarma süresine kayması.

İki kalıcılık biçimi de ölçüldü ve ikisi de kendi başına eksik kaldı. Anlık görüntü kayıp
penceresini kapatamıyor: aralık ne olursa olsun son görüntüden sonraki yazmalar korumasız.
Ekleme günlüğü ise kayıp penceresini yazma başına ayarlıyor, ama dosyası aynı durum için üç
kattan fazla yer tutuyor ve kurtarma bütün geçmişi yeniden oynatmak zorunda kalıyor.

Bu ders seçimi yapar. Seçim üç ölçü üzerinden verilir ve üçü de aynı koşumda sayılır:

**Kurtarma adımı.** Süreç yeniden başladığında hizmete hazır olmak için kaç kayıt uygulanır.
Süre değil adım sayılır; adım ortamdan bağımsızdır.

**Kayıp penceresi.** Çökme anında kaç yazma yiter.

**Sürekli maliyet.** Depo normal çalışırken kalıcılığın diske yazdığı bayt, yaptığı
eşzamanlama ve bütün girişleri tarayan tam geçiş sayısı.

## Dört Düzen, Tek Çökme

**KB5.** Çökme, 55.000. yazmadan hemen sonra olur. Anlık görüntü 20.000 yazmada bir alınır,
yani son tamamlanmış görüntü 40.000. yazmaya aittir. Günlük saniyede bir eşzamanlanır ve
koşum boyunca bir kez yeniden yazılır. Her tamamlanan görüntü bir eşzamanlama yapar.

Koşum dört düzeni de gerçekten kurar: dosyalar diske yazılır, kurtarma o dosyalardan okunur ve
kurulan durum, 55.000. yazmadaki doğru durumla giriş giriş karşılaştırılır.

```js
// secim.mjs — dört kalıcılık düzeninin kurtarması, kayıp penceresi ve sürekli maliyeti
import { writeFileSync, readFileSync, statSync } from 'node:fs';

function uretec(t0) {
  let a = t0 >>> 0;
  return () => { a = (a + 0x6d2b79f5) >>> 0; let t = a;
    t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296; };
}
const r = uretec(20260731), YUK = [];
for (let i = 0; i < 60000; i++) {
  const u = Math.floor(r() * 20000);
  YUK.push(['odunc:u' + String(u).padStart(5, '0'),
    `sube=${1 + (u % 8)};gun=${[7, 14, 28][i % 3]};yenileme=${i % 4}`]);
}
const durumu = (n) => { const m = new Map();
  for (let i = 0; i < n; i++) m.set(YUK[i][0], YUK[i][1]); return m; };
const yaz = (m) => { let s = '';
  for (const [a, d] of m) s += a + '\t' + d + '\n'; return s; };

const GORUNTU = 20000, COKME = 55000;            // görüntü aralığı ve çökme anı
writeFileSync('g40.txt', yaz(durumu(40000)));    // son tamamlanmış görüntü
writeFileSync('tam.log', YUK.slice(0, COKME).map(([a, d]) => `Y\t${a}\t${d}\n`).join(''));
writeFileSync('kuyruk.log', YUK.slice(40000, COKME).map(([a, d]) => `Y\t${a}\t${d}\n`).join(''));
const dogru = durumu(COKME);

function kurtar(dosyalar) {                      // dosyaları sırayla oynatıp durumu kurar
  const m = new Map();
  let adim = 0, bayt = 0;
  for (const f of dosyalar) {
    bayt += statSync(f).size;
    for (const s of readFileSync(f, 'utf8').split('\n')) {
      if (s === '') continue;
      const p = s.split('\t');
      m.set(p[p.length - 2], p[p.length - 1]);
      adim++;
    }
  }
  let fark = 0;
  for (const [a, d] of dogru) if (m.get(a) !== d) fark++;
  return { bayt, adim, giris: m.size, fark };
}

const duzen = [                                  // ad, kaynak, görüntü, günlük, yeniden yazım, kayıp
  ['kalıcılık kapalı', [], 0, 0, 0, 60000],
  ['yalnız görüntü', ['g40.txt'], 1, 0, 0, GORUNTU],
  ['yalnız günlük', ['tam.log'], 0, 1, 1, 3000],
  ['görüntü + günlük', ['g40.txt', 'kuyruk.log'], 1, 1, 0, 3000],
];
console.log('çökme anı: 55000. yazma | görüntü aralığı: 20000 yazma | eşzamanlama: saniyede bir');
console.log('düzen              okunan bayt  kurtarma adımı  kurulan giriş  eksik giriş');
for (const [ad, dosyalar] of duzen) {
  const k = kurtar(dosyalar);
  console.log(ad.padEnd(18), String(k.bayt).padStart(11), String(k.adim).padStart(15),
    String(k.giris).padStart(14), String(k.fark).padStart(12));
}

let goruntuBayt = 0;                             // 60000 yazmalık koşumun sürekli maliyeti
for (let n = GORUNTU; n <= 60000; n += GORUNTU) goruntuBayt += Buffer.byteLength(yaz(durumu(n)));
const gunlukBayt = Buffer.byteLength(YUK.map(([a, d]) => `Y\t${a}\t${d}\n`).join(''));
const yenidenYazim = Buffer.byteLength(yaz(durumu(60000)));
console.log('\n60000 yazmalık koşumun sürekli maliyeti');
console.log('düzen              diske yazılan  eşzamanlama  tam tarama  en kötü kayıp');
for (const [ad, , goruntu, gunluk, yeniden, kayip] of duzen) {
  const bayt = goruntu * goruntuBayt + gunluk * gunlukBayt + yeniden * yenidenYazim;
  console.log(ad.padEnd(18), String(bayt).padStart(13),
    String(goruntu * 3 + gunluk * 20).padStart(12),
    String(goruntu * 3 + yeniden).padStart(11), String(kayip).padStart(14));
}

console.log('\nbirlikte kullanımda görüntü aralığının kurtarmaya etkisi (aynı çökme anı)');
console.log('görüntü aralığı  görüntü adımı  günlük adımı  toplam adım  görüntü diski');
for (const aralik of [5000, 20000, 60000]) {
  const son = Math.floor(COKME / aralik) * aralik;
  let disk = 0;
  for (let n = aralik; n <= 60000; n += aralik) disk += Buffer.byteLength(yaz(durumu(n)));
  const g = son ? durumu(son).size : 0;
  console.log(String(aralik).padStart(15), String(g).padStart(14),
    String(COKME - son).padStart(13), String(g + COKME - son).padStart(12),
    String(disk).padStart(14));
}
```

```
çökme anı: 55000. yazma | görüntü aralığı: 20000 yazma | eşzamanlama: saniyede bir
düzen              okunan bayt  kurtarma adımı  kurulan giriş  eksik giriş
kalıcılık kapalı             0               0              0        18763
yalnız görüntü          652842           17330          17330         9816
yalnız günlük          2181666           55000          18763            0
görüntü + günlük       1247842           32330          18763            0

60000 yazmalık koşumun sürekli maliyeti
düzen              diske yazılan  eşzamanlama  tam tarama  en kötü kayıp
kalıcılık kapalı               0            0           0          60000
yalnız görüntü           1849117            3           3          20000
yalnız günlük            3097260           20           1           3000
görüntü + günlük         4229117           23           3           3000

birlikte kullanımda görüntü aralığının kurtarmaya etkisi (aynı çökme anı)
görüntü aralığı  görüntü adımı  günlük adımı  toplam adım  görüntü diski
           5000          18763             0        18763        6535929
          20000          17330         15000        32330        1849117
          60000              0         55000        55000         717260
```

## Kurtarmanın Okunması

İlk tablonun en anlamlı sütunu sonuncusudur. Doğru durum 18.763 giriştir; **eksik giriş**,
kurtarma bittiğinde bu girişlerden kaçının ya hiç bulunmadığını ya da yanlış değer taşıdığını
sayar.

Kalıcılığın kapalı olduğu düzen sıfır adımda kurtarır ve 18.763 girişin hepsini eksik kurar.
Sıfır kurtarma adımı bir başarı değildir; kurtarılacak bir şey olmadığının başka türlü
yazılışıdır.

Asıl uyarı ikinci satırdadır. Yalnız görüntüyle kurtarma 17.330 giriş kurar — bu, doğru
sayının yüzde 92'sidir ve depo yüzeyden bakıldığında dolu görünür. Buna karşın girişlerin
9.816'sı, yani yarısından fazlası ya yoktur ya da eski değerdedir. Kütüphanenin bakış
açısından bu, yarısı geçen haftaya ait bir ödünç tablosuyla açılmak demektir; ödünç sayıları
tutmaz, iade tarihleri geçmişi gösterir ve hatanın hangi kayıtta olduğu dışarıdan
anlaşılmaz. Eksik durumla açılmak, hiç açılmamaktan daha zor fark edilir.

Yalnız günlük ve birlikte kullanım aynı sonucu verir: sıfır eksik giriş. Aralarındaki fark
maliyettedir. Günlük tek başına 55.000 adım uygular ve 2.181.666 bayt okur; birlikte kullanım
aynı durumu 32.330 adımda ve 1.247.842 bayt okuyarak kurar. Kurtarma işi yüzde 41 azalır,
çünkü ilk 40.000 yazmanın hepsini tek tek oynatmak yerine onların **sonucu** okunur.

## Sürekli Maliyet

İkinci tablo aynı düzenlerin çalışma sırasındaki bedelini verir. Yalnız görüntü 1.849.117 bayt
yazar ve üç eşzamanlama yapar; en ucuz korumalı düzendir ve en kötü durumda 20.000 yazma
kaybeder. Yalnız günlük 3.097.260 bayt yazar, yirmi eşzamanlama yapar ve kaybı 3.000 yazmaya
indirir.

Birlikte kullanım en pahalı satırdır: 4.229.117 bayt, yirmi üç eşzamanlama. Bu sayının
günlüğün ve görüntünün toplamı olması beklenir, ama tam toplam değildir — birlikte kullanımda
günlüğün ayrıca yeniden yazılmasına gerek kalmaz, çünkü her tamamlanan görüntüden sonra günlük
kırpılabilir. Görüntü, günlüğün budayıcısı hâline gelir.

Tam tarama sütunu sessiz bir maliyeti sayar. Önceki derste ölçülen tarama bedeli — duraklatma
ya da kopyalama — her tam geçişte yeniden ödenir. Yalnız günlük düzeni bu geçişi koşum boyunca
bir kez yapar, görüntü içeren düzenler üç kez.

## Birlikte Kullanımda Görüntünün İşi

Üçüncü tablo, birlikte kullanımın asıl kararını gösterir. Kayıp penceresi artık görüntünün işi
değildir; onu günlük tutar ve üç satırda da 3.000 yazmadır. Değişen tek şey kurtarma adımıdır.

Görüntü aralığı 60.000 yazma olduğunda, yani çökmeden önce hiç görüntü tamamlanmadığında,
kurtarma 55.000 adıma çıkar ve görüntü diski 717.260 bayta iner. Aralık 20.000 olduğunda
kurtarma 32.330 adıma, aralık 5.000 olduğunda 18.763 adıma iner — bu, mümkün olan en düşük
değerdir, çünkü giriş sayısının altına inilemez. Bedeli görüntü diskidir: 717.260 bayttan
6.535.929 bayta, dokuz katına çıkar.

Bu, dersin kararıdır. **Anlık görüntü ile ekleme günlüğü birlikte kullanıldığında görüntünün
işi dayanıklılık değil kurtarma süresidir.** Aralık, "ne kadar veri kaybetmeyi göze
alıyorum" sorusuna göre değil, "yeniden başlamanın ne kadar sürmesine izin veriyorum"
sorusuna göre ayarlanır.

## Karar

Kütüphanenin verisi tek bir düzen istemez; her veri kendi bedelini taşır.

| Veri | Düzen | Gerekçe |
|---|---|---|
| Katalog önbelleği | kalıcılık kapalı | Kaynağından yeniden üretilebilir; kurtarma adımı sıfır, kayıp önemsiz |
| Oturum kayıtları | yalnız görüntü | Yeniden oturum açmak ucuz; 20.000 yazmalık pencere kabul edilir, sürekli maliyet en düşük |
| Ödünç sayaçları, bekleme listesi | görüntü + günlük | Eksik durumla açılmak kabul edilemez; kurtarma 32.330 adım, pencere 3.000 yazma |
| Gecikme cezası kayıtları | görüntü + günlük, her yazmada eşzamanlama | Kaybedilen kayıt paraya karşılık gelir; pencere sıfıra iner, bedeli yazma başına eşzamanlamadır |

Tabloda eksik kalan tek düzen "yalnız günlük"tür ve bunun nedeni ölçümde görünür: aynı
dayanıklılığı verirken kurtarması birlikte kullanımın 1,7 katı adım sürer, üstelik günlüğün
büyümesini durdurmak için yine tam tarama gerekir. Günlüğü tek başına kullanmak, görüntünün
maliyetinden kaçmaz; onu yalnız erteler.

## Özet

- Kurtarma üç ölçüyle değerlendirilir: uygulanan kayıt sayısı, kayıp penceresi ve çalışma
  sırasındaki sürekli maliyet.
- Yalnız görüntüyle kurtarma doğru girişlerin yüzde 92'sini kurdu ama 9.816'sını eksik ya da
  eski bıraktı; eksik durumla açılmak, hiç açılmamaktan daha zor fark edilir.
- Aynı doğru durumu günlük 55.000 adımda, görüntü ile günlük birlikte 32.330 adımda kurdu;
  okunan bayt 2.181.666'dan 1.247.842'ye indi.
- Birlikte kullanım en pahalı sürekli maliyeti taşır (4.229.117 bayt, 23 eşzamanlama), ama
  görüntü günlüğü kırptığı için ayrıca yeniden yazım gerektirmez.
- Birlikte kullanımda görüntü aralığı kayıp penceresini değil kurtarma adımını ayarlar:
  5.000'lik aralık kurtarmayı 18.763 adıma indirdi, görüntü diskini dokuz katına çıkardı.

## Sonraki Adım

Kalıcılık kararı verildiğinde depo, çökmeden sonra kendine gelmeyi öğrenmiş olur. Çökmeden
**önce** gelen bir sınır ise henüz ele alınmadı: bellek biter. Bu konudaki bütün ölçümler
deponun büyümesine izin verdi; 19.040 giriş 1.593.100 bayt tuttu ve kimse durdurmadı. Sonraki
ders bellek sınırına ulaşıldığında hangi anahtarın atılacağı sorusunu ele alır. Aynı ödünç
erişim izinde dört politika — en az kullanılan, en az sık kullanılan, rastgele ve süreye göre
— isabet oranı ve tutulan bayt düzleminde karşılaştırılır; politikanın girişlere eklediği
üstverinin kendisi de sayıya girer.
