İçeriğe geç
academia.sh

Ders 12 / 12

Veri Saklama Politikası

Arşive taşımanın kazandırdığının ve kapattığının sayılması: altı dönemlik sıcak pencerede sıcak katman 2200 satırdan 1200'e, 55 dosyadan 30'a iner, anahtar dışı süzgeç kullanan sorgu 11000 yerine 6000 öder ve arşivlenen 1000 satır 25 özet girişine indiği için on iki dönemlik bölge toplamı 11000 yerine 6675'e mal olur; arşivlendikçe tam tarihli sorgu ucuzlar. Bedel çözünürlüktedir: bölge kırılımı on bir dönemin tamamında yanıtlanır ve sıcak katman ile arşiv toplamı tam veriyle birebir aynı çıkar, buna karşılık tip, abone ve bölge artı tip kırılımları yalnız altı dönemde yanıtlanır ve sırasıyla 10, 1000 ve 50 kova kapanır. Korumasız bir tip sorgusu hata vermez, işyeri toplamını 29932 yerine 16818 döndürür ve 13114 metreküp görünmez kalır. Ders kursun kapanışıdır.

İçindekiler

Bir önceki dersin bütün düzenlerinde on iki dönemin tamamı aynı yerde duruyordu; en eski dönem en yenisiyle aynı bedelle okunuyordu. Oysa dosya sabiti her dosya için aynıdır ve bölümlü bir düzende dosya sayısı dönemle birlikte büyür: bir yıl sonra aynı sorgu iki katı dosyaya dokunacaktır.

Bu ders o birikimi bir karara çevirir. Saklama politikası eski dönemleri arşive taşır ve üç şey ölçülür: sıcak katmanda kalan dosya ile maliyet, arşivden okumanın bedeli, ve geriye dönük olarak hangi sorunun artık yanıtlanamadığı. Üçüncüsü asıl bulgudur; ilk ikisi kazançtır ve tek başlarına kararı hep aynı yöne çevirir.

  • AM56. Kaynak, tüketim satırları, sıcak katman ve arşiv kurgudur ve ders içinde üretilir. Hiçbir ambar, göl, bulut servisi ya da sorgu motoru çağrılmaz. Tohum 20260218.
  • AM57. Saklama penceresi (retention window) son N dönemi sıcak katmanda tutar. Sıcak katman donem+bolge bölümlemesiyle yazılır ve sorgu iki sütun okur; ikisi de önceki iki derste ölçüldü, burada sabit tutulur.
  • AM58. Arşivleme (archiving) silme değildir: satırlar kalır ama başka bir çözünürlükte kalır. Arşiv onları tek dosyada bolge ile donem toplamına indirger, abone ve tip kırılımı taşınmaz; dersin bütün kayıp sayıları bu seçime bağlıdır.
  • AM59. Arşiv girişi üç hücredir: bölge, dönem, toplam. Arşiv sabiti 600, sıcak katmanın dosya sabitinin beş katıdır; ikisi de seçimdir.
  • AM60. Saklama ve yaşam süresi yordamı Bulut Bilişim müfredatındaki Bulutta Depolama ve Veri kursunda ölçüldü; tekrarlanmaz. Silmenin geriye dönük denetime etkisi Veri Mühendisliğine Giriş kursundaki Veri Yönetişimi dersinden girdi alınır: altı dönemlik pencere altı dönem silerken denetlenemez dönemi 1’den 7’ye çıkarıyordu.

Arşive Taşımanın Kazandırdığı

Aşağıdaki blok sıcak pencereyi on iki dönemden bire daraltır; her adımda kalan dosyayı, anahtar dışı süzgeçli sorgunun maliyetini, arşivin büyüklüğünü ve on iki dönemlik bölge toplamının uçtan uca maliyetini basar.

# KURGUDUR. Olcum aginin sayac okumalari , tuketim satirlari , sicak katman ve
# arsiv ders icinde uretilir; hicbir ambar , gol , bulut servisi ya da sorgu
# motoru cagrilmaz.
TOHUM, M32 = 20260218, 0xFFFFFFFF


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


BOLGE = ["dogu", "bati", "kuzey", "guney", "merkez"]
TIP = ["mesken", "isyeri"]
DONEM = [f"2026-{a:02d}" for a in range(1, 13)]
SICAK_SABIT = 120          # sicak katmanda bir dosyaya dokunmanin sabit bedeli
ARSIV_SABIT = 600          # arsivde bir dosyaya dokunmanin sabit bedeli , bir secim
ABONE = {}
for i in range(200):
    r = uretec(TOHUM + 37 * i)
    ABONE[f"A{i + 1:03d}"] = {"bolge": BOLGE[int(r() * 5)], "tip": TIP[int(r() * 2)],
                              "baslangic": 10000 + int(r() * 60000)}


def satirlar():
    # Hattan cikan tuketim satirlari. Saglam kaynakta ayikla ve tekille satir
    # dusurmedigi icin tuketim dogrudan kaynaktan , donem farkiyla hesaplanir.
    ham = []
    for i, (ab, a) in enumerate(ABONE.items()):
        e = a["baslangic"]
        for d in DONEM:
            r = uretec(TOHUM + 101 * i + 7 * DONEM.index(d))
            e += 4 + int(r() * 46)
            ham.append({"abone": ab, "donem": d, "bolge": a["bolge"], "tip": a["tip"],
                        "endeks": e, "birim": "m3"})
    tablo, cikti = {(k["abone"], k["donem"]): k for k in ham}, []
    for k in ham:
        i = DONEM.index(k["donem"])
        onceki = tablo.get((k["abone"], DONEM[i - 1])) if i else None
        if onceki is not None:
            cikti.append(dict(k, m3=k["endeks"] - onceki["endeks"]))
    return cikti


def yaz(kayitlar, bolumleme=()):
    duzen = {}
    for k in kayitlar:
        duzen.setdefault(tuple(k[a] for a in bolumleme), []).append(k)
    return duzen


def sorgu(duzen, bolumleme, secilen, suzgec=None):
    # Anahtardaki alan dosya budar , anahtar disindaki budamaz.
    suzgec = {} if suzgec is None else suzgec
    budayan = {a: v for a, v in suzgec.items() if a in bolumleme}
    dosya, hucre = 0, 0
    for anahtar, kayit in duzen.items():
        if budayan:
            es = dict(zip(bolumleme, anahtar))
            if any(es[a] != v for a, v in budayan.items()):
                continue
        dosya += 1
        hucre += len(kayit) * len(secilen)
    return {"dosya": dosya, "hucre": hucre, "maliyet": dosya * SICAK_SABIT + hucre}


def arsivle(kayitlar):
    # Satirlar tek dosyada bolge x donem toplamina iner; abone ve tip tasinmaz.
    ozet = {}
    for k in kayitlar:
        ozet[(k["bolge"], k["donem"])] = ozet.get((k["bolge"], k["donem"]), 0) + k["m3"]
    return ozet


BOL = ("donem", "bolge")
SEC = ("bolge", "m3")
TUM = satirlar()
print(f"hattan cikan satir {len(TUM)} , tuketim tasiyan donem"
      f" {len(set(k['donem'] for k in TUM))} , sicak sabit {SICAK_SABIT} ,"
      f" arsiv sabiti {ARSIV_SABIT}")
print("\npencere  sicak satir  sicak dosya   B sicak  arsiv satir  ozet giris"
      "  arsiv mal   12 donem toplami")
for p in (12, 9, 6, 3, 1):
    tut = set(DONEM[len(DONEM) - p:])
    sicak = [k for k in TUM if k["donem"] in tut]
    soguk = [k for k in TUM if k["donem"] not in tut]
    d = yaz(sicak, BOL)
    b = sorgu(d, BOL, SEC, {"tip": "isyeri"})
    ozet = arsivle(soguk)
    # Arsiv tek dosyadir , giris basina uc hucre: bolge , donem , toplam.
    am = ARSIV_SABIT + 3 * len(ozet) if soguk else 0
    print(f"{p:>7}  {len(sicak):>11}  {len(d):>11}  {b['maliyet']:>8}  {len(soguk):>11}"
          f"  {len(ozet):>10}  {am:>9}  {sorgu(d, BOL, SEC)['maliyet'] + am:>18}")
hattan cikan satir 2200 , tuketim tasiyan donem 11 , sicak sabit 120 , arsiv sabiti 600

pencere  sicak satir  sicak dosya   B sicak  arsiv satir  ozet giris  arsiv mal   12 donem toplami
     12         2200           55     11000            0           0          0               11000
      9         1800           45      9000          400          10        630                9630
      6         1200           30      6000         1000          25        675                6675
      3          600           15      3000         1600          40        720                3720
      1          200            5      1000         2000          50        750                1750

İlk satır bir önceki dersin bıraktığı yerdir: sıcak katman 55 dosya taşır, anahtar dışı süzgeçli sorgu 11000 öder. Aşağı inen her satır bir dönemi çıkarır ve maliyeti tam 1000 birim düşürür — bir dönem beş dosya ile 400 hücredir.

Altıncı sütun sürprizdir: arşiv büyüdükçe maliyeti 630, 675, 720, 750 olarak neredeyse yerinde sayar, çünkü arşive giden her dönem 200 satır götürüp yalnızca 5 giriş, yani 15 hücre bırakır. Son sütun bu ikisinin toplamıdır ve beklentiyi tersine çevirir: arşivlendikçe tam tarihli sorgu ucuzlar — bölge toplamı arşivsiz 11000, altı dönem arşivlendiğinde 6675, bir dönem dışında her şey arşivlendiğinde 1750 eder. Arşiv yavaş değil, önceden toplanmış bir katmandır.

Karar iki sabite de duyarlıdır, ama ayrı biçimde. Arşiv sabitinin başabaş değeri 985‘tir: bir dönemi arşivden okumak sabit artı on beş hücre, sıcak katmandan okumak 1000 birimdir. Sıcak katmanın dosya sabiti ise yönü değiştirmez — bir dönemi çıkarmak sorgudan beş dosya ile 400 hücre siler, arşive on beş hücre ekler; sabit 120’de kazanç 985, sabit 0’da bile 385’tir. Yönü belirleyen indirgemenin varlığı, büyüklüğü belirleyen 120 seçimidir.

Arşivin Kapattığı Soru

Bu sütunlar yalnız kazanç gösterir ve tek başlarına pencereyi bire kadar daraltmayı önerir. Aşağıdaki blok bedeli sayar.

# Bu blok ilk bloktaki satirlar() , yaz() , sorgu() , arsivle() , TUM , BOL ve SEC
# tanimlarini surdurur. Pencere alti donem.
PENCERE = 6
TUT = set(DONEM[len(DONEM) - PENCERE:])
SICAK = [k for k in TUM if k["donem"] in TUT]
OZET = arsivle([k for k in TUM if k["donem"] not in TUT])
SICAK_DONEM = sorted(set(k["donem"] for k in SICAK))
ARSIV_DONEM = sorted(set(d for _, d in OZET))
KIRILIM = {"bolge": ("bolge",), "tip": ("tip",), "abone": ("abone",),
           "bolge+tip": ("bolge", "tip")}


def toplam(kayitlar, alanlar):
    t = {}
    for k in kayitlar:
        ad = tuple(k[a] for a in alanlar)
        t[ad] = t.get(ad, 0) + k["m3"]
    return t


print(f"pencere {PENCERE} donem , sicak donem {len(SICAK_DONEM)} ,"
      f" arsiv donemi {len(ARSIV_DONEM)}")
print("\nkirilim     kova  sicaktan  arsivden  yanitlanan donem  kapali donem  kapali kova")
for ad, alanlar in KIRILIM.items():
    kova = len(toplam(TUM, alanlar))
    arsivden = len(ARSIV_DONEM) if set(alanlar) <= {"bolge"} else 0
    yanit = len(SICAK_DONEM) + arsivden
    kapali = len(SICAK_DONEM) + len(ARSIV_DONEM) - yanit
    print(f"{ad:<11} {kova:>5}  {len(SICAK_DONEM):>8}  {arsivden:>8}  {yanit:>16}"
          f"  {kapali:>12}  {kapali * kova:>11}")

karma = {b: v for (b,), v in toplam(SICAK, ("bolge",)).items()}
for (b, _), v in OZET.items():
    karma[b] = karma.get(b, 0) + v
print(f"\nbolge toplami , tam veri ile sicak+arsiv birebir ayni mi:"
      f" {toplam(TUM, ('bolge',)) == {(b,): v for b, v in karma.items()}}")
tam, sic = toplam(TUM, ("tip",))[("isyeri",)], toplam(SICAK, ("tip",))[("isyeri",)]
print(f"isyeri toplami , on bir donem {tam} ; yalniz sicak katmandan {sic} ;"
      f" gorunmeyen {tam - sic} m3")
pencere 6 donem , sicak donem 6 , arsiv donemi 5

kirilim     kova  sicaktan  arsivden  yanitlanan donem  kapali donem  kapali kova
bolge           5         6         5                11             0            0
tip             2         6         0                 6             5           10
abone         200         6         0                 6             5         1000
bolge+tip      10         6         0                 6             5           50

bolge toplami , tam veri ile sicak+arsiv birebir ayni mi: True
isyeri toplami , on bir donem 29932 ; yalniz sicak katmandan 16818 ; gorunmeyen 13114 m3

İlk satır arşivin doğru yaptığı şeydir: bölge kırılımı on bir dönemin tamamında yanıtlanır ve sıcak katmanla arşivin toplamı tam veriyle birebir aynıdır. Arşiv yaklaşıklık değil, kendi çözünürlüğünde kesindir.

Kalan üç satır kaybı verir. tip, abone ve bolge+tip yalnız altı dönemde yanıtlanır, beş dönem için hiç yanıtlanamaz; kapalı kova sırasıyla 10, 1000 ve 50’dir. Maliyet bu satırlarda tanımsızdır, çünkü cevap hiçbir bedele okunamaz: bir düzen bazı soruları pahalı değil imkânsız kılar.

Saklamanın iki biçimi burada ayrılır. Silme dönem kaybettirir: önceki kurs altı dönemlik pencerenin denetlenemez dönemi 1’den 7’ye çıkardığını ölçtü. Arşivleme sütun kaybettirir: hiçbir dönem yok olmaz, beş dönem üç kırılımından ikisini bırakır. Biri zaman, öbürü kırılım eksenini keser.

Son satır dersin en tehlikeli sayısıdır. Tip kırılımı arşivde yoktur ama sıcak katmanda vardır; korumasız bir sorgu hata vermez, elinin altındakini toplar ve işyeri toplamını 29932 yerine 16818 döndürür. 13114 metreküp uyarısız görünmez kalır: sorgu yanlış yazılmamış, veri bozulmamış, hiçbir denetim ateşlememiştir. Yanıt daha küçük bir soruya aittir; iki sorunun sözcükleri aynıdır.

Özet

  • Pencere bir dönem daraldığında anahtar dışı süzgeçli sorgu tam 1000 birim ucuzlar: 11000’den altı dönemlik pencerede 6000’e iner.
  • Arşiv önceden toplanmış olduğu için ucuzdur: her dönem 200 satır götürüp 5 giriş bırakır, on iki dönemlik bölge toplamı 11000’den 6675’e iner, başabaş arşiv sabiti 985’tir.
  • Kayıp çözünürlüktedir: bölge kırılımı tam veriyle birebir aynı kalır ama tip, abone ve bolge+tip beş dönem için hiç yanıtlanamaz (kapanan kova 10, 1000, 50); silme dönem kaybettirir, arşivleme sütun.
  • Korumasız bir tip sorgusu hata vermeden eksik yanıt verir: işyeri toplamı 29932 yerine 16818 çıkar.

Kurs Kapanışı

Satırlar ortak birim taşımaz; her satırın hangi ölçütle okunduğu ders adının yanındadır. Parantezdeki fark düzenli kurulum eksi düzensiz tabandır: eksi ucuzlama, artı pahalılaşma.

Ders Düzensiz taban Düzenli kurulum Bedel
depolama-yaklasimlari/01 — dönem sorgusunun maliyeti bölümlemesiz ve satırlı, 15400 hücre, 15520 donem bölümlü ve sütunlu, 400 hücre, 520 (−15000) anahtar dışı süzgeçte 5720 (+1200); şema kapısı 400 satırı atar, ölçümleri sağlamdır
depolama-yaklasimlari/02 — dönem sorgusunun maliyeti ham göl, 14400 hücre, 14520 ambar, 400 hücre, 520 (−14000) göl yazmada 1000 hücre kazanır, tek sorguda 14000 geri öder; iki tüketici 48004 ve 58454 m3 bulur
depolama-yaklasimlari/03 — yakalanan bozulma sınıfı ve saklanan hücre dayatmasız düzenek 0/6, gecikme tanımsız, 14400 hücre okumada dayatan düzenek 6/6, ortalama 1,33 aşama (+6) saklanan hücre 29800; alan adı değişiminde 1800 yerine 2200 satır, birim_degisti hiçbir kapıya takılmaz
depolama-yaklasimlari/04 — üç soruluk kümenin maliyeti bölümlemesiz ambar 13.560 iki pazar 2.580 (−10.980) 3.322 fazladan satır, satır başına 2,51 kopya; ayrışan tazelemede 126 çift, aynı soruya 4.707 ile 5.340
depolama-yaklasimlari/05 — karar veren taraf / dokunulan düzen, altı soruluk karışım merkezî 1/1, 3.120 veri örgüsü 1/5, 2.000 (−1.120) veri ağı 5/5 ve 6.280 (+3.160); ölçülmemiş anahtar tek başına 2.450
depolama-yaklasimlari/06 — beş aramada bakılan giriş katalogsuz 295 katalogla 29 (−266) bayat katalogda 406’ya karşı 251; iki arama katalogsuzdan pahalı biter (129/122, 104/100)
analitik-modelleme/01 — sorgu maliyeti ve saklanan hücre düz tablo, 15400 hücre, 4520 olgu ve iki boyut, 7236 hücre, 5040 (+520) birleştirme 0’dan 2200’e, sonuç aynı; bölge adı düzeltmesi 506 yerine 46 satır
analitik-modelleme/02 — sorgu maliyeti ve birleştirme yıldız: 2200 birleştirme, 212 boyut satırı, 5040 kar tanesi: 4400, 217, 5170 (+130) beş satır için birleştirme ikiye katlanır, sonuç aynı; tek nitelikte 10 hücre kaybı, altıda 965 kazanç
analitik-modelleme/03 — işyeri toplamı (m3) ve maliyet üzerine yazan boyut 35893, 200 satır, 7240 tarihçe tutan boyut 33145, 2200 satır, 13440 (+6200) 2748 m3 yanlış kovada, kovaların toplamı 58454’te aynı, dört denetim yeşil
analitik-modelleme/04 — iki sütunluk sorgunun okuduğu hücre satırlı, 1400 hücre, 1520 sütunlu, 400 hücre, 520 (−1000) fark yedinci sütunda 0; sıkıştırmayla yedi sütun 851’e karşı 1400; bölge sıralaması m3 koşusunu 196’dan 200’e çıkarır
analitik-modelleme/05 — anahtar dışı süzgecin maliyeti bölümlemesiz 4520 donem+bolge 11000 (+6480) farkın tamamı dosya sabitinin 54 kez fazladan ödenmesi; budayan sorguda hücre 400 sabitken maliyet 520, 1000, 1600
analitik-modelleme/06 — on iki dönemlik bölge toplamı arşivsiz, 55 dosya, 11000 altı dönemlik pencere, 30 dosya, 6675 (−4325) üç kırılım beş dönem için kapanır (10 / 1000 / 50 kova); korumasız sorgu 29932 yerine 16818

Tablo tek bir kuralın on iki kez yazılmasıdır. Bir depolama düzeninin sayısı sakladığı satır değil, bir sorgunun ona dokunmak için ödediğidir; hangi sorgu için seçildiği yazılmayan düzen ölçülmemiş sayılır. İlk sütundaki ölçüt adı kuralın kendisidir: aynı 2200 satır on iki kez saklandı ve on iki ayrı sayı verdi, hiçbiri verinin büyüklüğünden gelmedi.

İkinci iddia aynı tablodan okunur: düzen de bozar. Artı işaretli satırlar bunlardır. analitik-modelleme/05 en açığıdır: anahtar dışı süzgeçte +6480 ve farkın tamamı dosya sabitidir; aynı derste budayan sorguda bile hücre 400’de dururken maliyet üç katına çıkar. depolama-yaklasimlari/01 aynı şeyi küçük ölçekte (+1200), /05 dağıtık kurulumda (+3.160) yazar, /03‘te altı sınıfı yakalamak saklanan hücreyi 14400’den 29800’e çıkarır. analitik-modelleme/01 ve /02 ayrımın ve normalleştirmenin okumaya yazdığı +520 ile +130’u taşır, /04’te bir sorgu için seçilen sıralama başka bir sütunu sıkıştırmasız değerine geri iter. depolama-yaklasimlari/04’te pazarın bölge kazancı sıfır, /06’da bayat katalog iki aramayı katalogsuzdan pahalı bitirir.

Üçüncü iddia bir satırda adıyla durur: düzen cevabı sessizce yanlışlar. analitik-modelleme/03‘te tarihçe tutmayan boyut sorguyu yavaşlatmaz, işyeri toplamını 33145 yerine 35893 yapar; 2748 metreküp yanlış kovaya gider, kovaların toplamı 58454’te aynı kalır, dört denetim yeşildir. İki yankısı vardır: /06’da korumasız sorgu 29932 yerine 16818 döndürür, depolama-yaklasimlari/04’te aynı soru iki adreste 4.707 ve 5.340 verir. Üçünde de hata yoktur, yalnızca cevap vardır.

On iki derste verinin nerede ve hangi düzende durduğu ölçüldü. Bu düzeni kimin, ne zaman ve hangi sırayla doldurduğu hiç sorulmadı; dosyalar hep yazılmış, boyutlar hep hazır, arşiv hep taşınmış kabul edildi. Bir adım başarısız olduğunda geri kalanın ne yapacağı, aynı adımın ikinci kez koşturulmasının satırları çoğaltıp çoğaltmadığı ve bir hattın kendini yeniden çalıştırabilmesinin bedeli sayılmadı. Sonraki kurs düzeni değil, düzeni dolduran sırayı ölçüm nesnesine dönüştürür.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat