Mühendislik ve bitirme projeleri · 52 / 53
Cache, external memory ve streaming
Anla → iz sür → uygula → gerekçelendir
2 dk okuma · uygulama için ayrıca zaman ayırRAM modelinde O(n) olan iki yapı cache miss yüzünden farklı hızdadır. Array traversal locality sağlar; pointer chasing düzensiz erişir. Disk modelinde block transfer sayısı önemlidir. External merge sort belleğe sığan run'lar oluşturup çok yollu birleştirir; B-tree fanout I/O azaltır. Cache-oblivious tasarım belirli block size bilmeden locality hedefler.
LRU cache, hash map ve doubly linked list ile expected O(1) lookup/update sağlar. OrderedDict aşağıda bu sözleşmenin küçük örneğidir. Cache correctness; eviction, TTL, invalidation, stale data ve concurrency ile birlikte düşünülür. Cache stampede için single-flight veya jitter kullanılabilir; bunlar her tutarlılık modeline aynı uygulanmaz.
LSM tree ardışık write ve compaction kullanır; write amplification, read amplification ve space amplification takası vardır. Streaming'de bütün girdiyi tutmadan sonuç üretirsin. Reservoir sampling sabit k örneği düzgün seçer; online algorithms geleceği bilmez. Ölçümde warm/cold cache, p95 latency, allocation ve adversarial dağılımlar ayrı raporlanır.
Adım adım iz sürme
Kapasite 2: A,B ekle; A'ya eriş; C ekle. En eski kullanılmayan B çıkar.
Maliyet ve varsayımlar
OrderedDict/hash modelinde expected O(1) erişim; cache kapasitesi c için O(c) alan.
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
from collections import OrderedDict
cache=OrderedDict(A=1,B=2)
cache.move_to_end("A"); cache["C"]=3
if len(cache)>2:cache.popitem(last=False)
assert list(cache)==["A","C"]KAVRADIĞINI KONTROL ET
Sıra sende
LRU her workload için en iyi policy midir?
Çözümün mantığını göster
Hayır. Uzun sequential scan sıcak girdileri atabilir; LFU/ARC veya admission politikaları farklı takaslar sunar.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
Pat Morin · Open Data Structures ↗MIT 6.046J · Design and Analysis ↗