---
title: 'Veri Örgüsü ve Veri Ağı'
source: 'https://academia.sh/tr/kurslar/veri-depolama-mimarileri/veri-orgusu-ve-veri-agi'
course: 'Veri Depolama Mimarileri'
language: tr
updated: '2026-08-17T18:08:51+00:00'
license: 'CC BY-SA 4.0'
---

# Veri Örgüsü ve Veri Ağı

Sahiplik dağıtıldığında değişen iki sayının ölçülmesi: düzen kararı alan taraf sayısı ve uçtan uca bir sorgunun dokunduğu düzen sayısı. Merkezî kurulum 1/1, veri örgüsü 1/5, veri ağı 5/5 veriyor; beş yerel soru artı bir ülke sorusundan oluşan karışımda maliyet 3.120, 2.000 ve 6.280 çıkıyor. Ağın pahalı olmasının nedeni dağıtım değil ölçülmemiş anahtar seçimidir: iki birimin kararı tek başına 2.450 tutuyor. Ders dosya sabitini 60, 120, 240 ve 480 değerlerinde süpürüyor: iki sayı sabitten bağımsız, sıralama değil — örgü ile merkezînin eşitlendiği yer 400, ve budanmayan tek bir soru eklendiğinde dağıtık kurulum dört değerde de kaybediyor.

Önceki derste altı alt küme çıkarıldı ve her birinin bölüm anahtarını, tazeleme sırasını ve
türetme kuralını **tek bir taraf** belirledi. Bölge birimi kendisi için yazılmış kümeyi yalnızca
okudu. Karar orada kalmasaydı ne olurdu: düzen anahtarını bölgenin kendisi seçseydi, yazma
takvimini kendisi kursaydı, kendi kümesini bir ürün gibi yayımlasaydı.

Bu soru bir mimari tercih gibi görünür, oysa iki sayıyı değiştirir ve o iki sayı ölçülebilir.
Birincisi **düzen kararı alan taraf sayısıdır**: kaç ayrı yerde "bu satırlar hangi anahtara göre
dosyalanacak" sorusu yanıtlanıyor. İkincisi **uçtan uca bir sorgunun dokunduğu düzen sayısıdır**:
bütün bölgeleri kapsayan tek bir soru kaç ayrı bölümleme kararının üstünden geçiyor. Ders bu iki
sayıyı üç düzenlemede ölçer, ardından bu kursun her maliyetinin dayandığı dosya sabitini süpürerek
hangi sonucun sabite bağlı olduğunu gösterir.

- **DY51.** Kaynak, hat ve depolama düzeni **kurgudur** ve ders içinde tanımlanır. Hiçbir ambar,
  göl, katalog ürünü, sorgu motoru ya da bulut depolama servisi çağrılmaz. Tohum 20260218.
- **DY52.** **Veri örgüsü (data fabric)**, satırların birden çok yerde yazıldığı ama **anahtar
  kararının tek bir standartta** kaldığı düzenlemedir. **Veri ağı (data mesh)**, satırları üreten
  birimin hem yazmaya hem **anahtar seçimine** sahip olduğu düzenlemedir; her birim kendi **veri
  ürününü** yayımlar.
- **DY53.** Sorgunun bildiği **adres sayısı** üçüncü bir sayı olarak ayrıca yazılır. Örgüde tek bir
  erişim noktası vardır, ağda beş. Bu sayı maliyeti değiştirmez.
- **DY54.** Soru karışımı ikidir. **A karışımı** beş yerel soru (her birim kendi bölgesinin bir
  dönemi) artı bir ülke sorusu (aynı dönem, bütün bölgeler). **B karışımı** A'nın üstüne
  **budanmayan** bir soru ekler: tek bir abonenin bütün dönemleri.
- **DY55.** Sahiplik ve yönetişim yordamı Siber Güvenlik müfredatındaki Yönetişim, Risk ve
  Uyumluluk kursunda, sahiplik boşluğunun sayısı ise Veri Mühendisliğine Giriş kursundaki Veri
  Yönetişimi dersinde ölçüldü; **burada tekrarlanmaz**. Bu ders sahipliği yalnız **hangi düzenin
  kimin elinde olduğu** olarak sayar.
- **DY56.** Dosya sabiti **bir seçimdir** ve bu derste süpürülür: 60, 120, 240, 480. Maliyet bir
  oran değil tam sayıdır; dosya oranı basılacaksa çözünürlük adımı 0,0091'dir.

## Kararın Kaç Elde Olduğu

Üç düzenleme aynı 2.200 satırın üstüne kurulur. Merkezîde tek bir depo vardır ve anahtarı
`donem`'dir. Örgüde satırlar beş ayrı yere yazılır, fakat anahtarın ne olacağına tek bir taraf karar
verir ve beşi de `donem` kullanır. Ağda her birim kendi anahtarını seçer: iki birim `donem`, biri
`donem`+`tip`, biri hiç bölümleme yapmaz, biri yalnız `tip`'i seçer. Bu seçimler kötü niyetli
değildir; hiçbiri hangi soru için yapıldığını yazmamıştır.

```python
# KURGUDUR. Olcum aginin sayac okumalari, hat ve depolama duzeni ders icinde
# tanimlanir; hicbir ambar, gol, katalog urunu 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)]
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 kaynak_uret():
    kayit = []
    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)
            kayit.append({"abone": ab, "donem": d, "bolge": a["bolge"], "tip": a["tip"],
                          "endeks": e, "birim": "m3"})
    return kayit


def a1_ayikla(kayit):
    ZOR = ("abone", "donem", "bolge", "endeks", "birim")
    tut = [k for k in kayit if all(a in k for a in ZOR)]
    return tut, len(kayit) - len(tut)


def a2_tekille(kayit):
    gor, tut = set(), []
    for k in kayit:
        ad = (k["abone"], k["donem"])
        if ad in gor:
            continue
        gor.add(ad)
        tut.append(k)
    return tut, len(kayit) - len(tut)


def a3_tuketim(kayit):
    tablo = {(k["abone"], k["donem"]): k for k in kayit}
    cikti, dusen = [], 0
    for k in kayit:
        i = DONEM.index(k["donem"])
        if i == 0:
            continue
        onceki = tablo.get((k["abone"], DONEM[i - 1]))
        if onceki is None:
            dusen += 1
            continue
        cikti.append(dict(k, m3=int(k["endeks"]) - int(onceki["endeks"])))
    return cikti, dusen


SUTUN = ("abone", "donem", "bolge", "tip", "endeks", "birim", "m3")
DOSYA_SABIT = 120          # bir dosyaya dokunmanin sabit bedeli , hucre cinsinden


def hattan(kaynak):
    v, _ = a1_ayikla(kaynak)
    v, _ = a2_tekille(v)
    v, _ = a3_tuketim(v)
    return v


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, sutunlu=True):
    """Bolumleme anahtarindaki alan dosya budar , obur alan dosyanin tamamini okutur."""
    suzgec = {} if suzgec is None else suzgec
    budayan = {a: v for a, v in suzgec.items() if a in bolumleme}
    kalan = {a: v for a, v in suzgec.items() if a not in bolumleme}
    dosya, hucre, satir = 0, 0, 0
    okunan_sutun = len(secilen) if sutunlu else len(SUTUN)
    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) * okunan_sutun
        satir += sum(1 for k in kayit if all(k[a] == v for a, v in kalan.items()))
    return {"dosya": dosya, "hucre": hucre, "eslesen_satir": satir,
            "maliyet": dosya * DOSYA_SABIT + hucre}


TUM = hattan(kaynak_uret())
SEC = ("abone", "m3")
D07 = {"donem": "2026-07"}
AB = {"abone": "A007"}
# Uc duzenleme. Anahtar secimi kimin elinde: merkezde , tek standartta , birimde.
MERKEZI = {"": ("donem",)}
ORGU = {b: ("donem",) for b in BOLGE}            # dagitik yazim , tek anahtar karari
AG = {"dogu": ("donem",), "bati": ("donem", "tip"), "kuzey": (),
      "guney": ("donem",), "merkez": ("tip",)}   # her birim kendi anahtarini secti
SAYIM = {"merkezi": (1, 1, 1), "orgu": (1, 5, 1), "ag": (5, 5, 5)}


def kur(anahtarlar):
    if list(anahtarlar) == [""]:
        return {"": yaz(TUM, anahtarlar[""])}
    return {b: yaz([k for k in TUM if k["bolge"] == b], anahtarlar[b]) for b in anahtarlar}


def olc(anahtarlar, duzenler):
    """Bes yerel soru (her birim kendi bolgesinin donemi) , bir ulke sorusu ,
    bir abone sorusu. Merkezi kurulumda ucu de tek duzene gider."""
    if list(anahtarlar) == [""]:
        d, a = duzenler[""], anahtarlar[""]
        yerel = sum(sorgu(d, a, SEC, dict(D07, bolge=b))["maliyet"] for b in BOLGE)
        return yerel, sorgu(d, a, SEC, D07)["maliyet"], sorgu(d, a, SEC, AB)["maliyet"]
    yerel = sum(sorgu(duzenler[b], anahtarlar[b], SEC, D07)["maliyet"] for b in BOLGE)
    abone = sum(sorgu(duzenler[b], anahtarlar[b], SEC, AB)["maliyet"] for b in BOLGE)
    return yerel, yerel, abone


KURULUM = [("merkezi", MERKEZI), ("orgu", ORGU), ("ag", AG)]
print(f"satir {len(TUM)} , dosya sabiti {DOSYA_SABIT} hucre\n")
print("duzenleme  duzen karari  dokunulan duzen  adres  dosya   yerel x5   ulke   abone")
for ad, anah in KURULUM:
    dz = kur(anah)
    y, u, a = olc(anah, dz)
    t, dd, ad_r = SAYIM[ad]
    print(f"{ad:<10} {t:>12}  {dd:>15}  {ad_r:>5}  {sum(len(x) for x in dz.values()):>5}"
          f"   {y:>8}  {u:>5}  {a:>6}")

print("\nagda birim basina yerel soru:  anahtar / dosya / maliyet")
dz = kur(AG)
for b in BOLGE:
    r = sorgu(dz[b], AG[b], SEC, D07)
    print(f"  {b:<7} {str(AG[b]):<18} {len(dz[b]):>3} dosyanin {r['dosya']:>2} tanesi"
          f" , maliyet {r['maliyet']:>5}")
```

```
satir 2200 , dosya sabiti 120 hucre

duzenleme  duzen karari  dokunulan duzen  adres  dosya   yerel x5   ulke   abone
merkezi               1                1      1     11       2600    520    5720
orgu                  1                5      1     55       1000   1000   11000
ag                    5                5      5     47       3140   3140   10040

agda birim basina yerel soru:  anahtar / dosya / maliyet
  dogu    ('donem',)          11 dosyanin  1 tanesi , maliyet   188
  bati    ('donem', 'tip')    22 dosyanin  2 tanesi , maliyet   302
  kuzey   ()                   1 dosyanin  1 tanesi , maliyet  1132
  guney   ('donem',)          11 dosyanin  1 tanesi , maliyet   200
  merkez  ('tip',)             2 dosyanin  2 tanesi , maliyet  1318
```

İlk üç sütun dersin iki sayısını taşır. Merkezîde karar bir elde ve uçtan uca sorgu tek düzene
dokunuyor: 1 ve 1. Örgüde satırlar beş yere dağılmış ama anahtar kararı hâlâ tek elde: 1 ve 5.
Ağda ikisi de beş. Adres sütunu üçüncü ayrımı gösterir; örgü beş depoyu tek bir erişim noktasının
arkasına koyar, ağ koymaz. **Adres sayısının maliyet sütunlarına hiçbir katkısı yoktur**: örgü
1.000 ödüyor, çünkü satırlar orada; adresin tek olması okunan hücreyi değiştirmiyor. Bir erişim
katmanı maliyeti değil, **kimin bilmek zorunda olduğunu** azaltır.

Maliyet sütunlarında iki şey birden okunur. Yerel sorularda örgü merkezîden üç kat ucuzdur (1.000'e
karşı 2.600), çünkü merkezî düzende bir bölgenin dönemini sormak o dönemin **bütün** satırlarını
okutur ve beş bölge aynı dosyayı beş kez okur. Dağıtık yazımda beş yerel soru ayrık kümelere iner
ve toplamları tam olarak ülke sorusunun maliyetine eşit çıkar. Buna karşılık ülke sorusunda merkezî
520, örgü 1.000 öder: aynı 400 hücre okunuyor, fark dosya sabitinin bir kez yerine beş kez
ödenmesi. Abone sorusunda uçurum açılıyor, 5.720'ye karşı 11.000, çünkü orada budayan hiçbir anahtar
yok ve elli beş dosyanın tamamına dokunuluyor.

Ağın 3.140'ı ise dağıtımın değil, **ölçülmemiş anahtar seçiminin** sayısıdır. Alt tablo bunu birim
birim ayırır: doğu 188, güney 200, batı 302 öderken kuzey 1.132 ve merkez 1.318 ödüyor. İki birimin
kararı tek başına 2.450 tutuyor, yani ağın yerel toplamının üçte ikisinden fazlası. Kuzey hiç
bölümleme yapmadığı için tek dosyasının tamamını okuyor; merkez `tip`'i seçtiği için dönem süzgeci
hiçbir şey budamıyor. Kursun kuralı burada ikinci kez görünüyor: **hangi sorgu için seçildiği
yazılmayan düzen ölçülmemiş sayılır**, ve ölçülmemiş beş karar ölçülmüş tek karardan pahalıya mal
oluyor. Sahipliği dağıtmak bu farkı yaratmıyor; sahipliği ölçüsüz dağıtmak yaratıyor.

## Dosya Sabiti Süpürülünce

Bu kursun bütün maliyetleri bir seçime dayanıyor: bir dosyaya dokunmanın bedeli 120 hücre. Sayı
kurgudur ve başka türlü olabilirdi. Yukarıdaki bütün karşılaştırmalar o seçime ne kadar borçlu,
bunun tek yolu sabiti değiştirip aynı ölçümü tekrarlamaktır.

```python
# Onceki blogun tanimlari surer: kur, olc, KURULUM, SAYIM, TUM, DOSYA_SABIT.
DUZENLEMELER = {ad: (anah, kur(anah)) for ad, anah in KURULUM}
AD = ("merkezi", "orgu", "ag")


def karisim():
    """A: bes yerel soru + bir ulke sorusu. B: A , ustune bir abone sorusu."""
    c = {}
    for ad, (anah, dz) in DUZENLEMELER.items():
        y, u, a = olc(anah, dz)
        c[ad] = (y + u, y + u + a)
    return c


print("sabit    merkezi-A    orgu-A      ag-A    merkezi-B    orgu-B      ag-B")
for sabit in (60, 120, 240, 480):
    DOSYA_SABIT = sabit
    c = karisim()
    print(f"{sabit:>5}  " + "  ".join(f"{c[a][0]:>9}" for a in AD)
          + "  " + "  ".join(f"{c[a][1]:>9}" for a in AD))

# Maliyet sabitte dogrusaldir: maliyet(sabit) = hucre + sabit x dokunulan dosya.
DOSYA_SABIT = 0
hucre = karisim()
DOSYA_SABIT = 1
egim = {a: tuple(karisim()[a][i] - hucre[a][i] for i in (0, 1)) for a in AD}
DOSYA_SABIT = 120
print("\nkurulum        A karisimi              B karisimi")
for a in AD:
    print(f"{a:<9}  {hucre[a][0]:>7} + sabit x {egim[a][0]:>3}"
          f"      {hucre[a][1]:>7} + sabit x {egim[a][1]:>3}")
esik = (hucre["merkezi"][0] - hucre["orgu"][0]) // (egim["orgu"][0] - egim["merkezi"][0])
print(f"\nA karisiminda orgu ile merkezinin esitlendigi sabit: {esik}")
print("sabitten bagimsiz olan: duzen karari alan taraf / dokunulan duzen , "
      + " , ".join(f"{a} {SAYIM[a][0]}/{SAYIM[a][1]}" for a in AD))
```

```
sabit    merkezi-A    orgu-A      ag-A    merkezi-B    orgu-B      ag-B
   60       2760       1400       5440       7820       9100      12660
  120       3120       2000       6280       8840      13000      16320
  240       3840       3200       7960      10880      20800      23640
  480       5280       5600      11320      14960      36400      38280

kurulum        A karisimi              B karisimi
merkezi       2400 + sabit x   6         6800 + sabit x  17
orgu           800 + sabit x  10         5200 + sabit x  65
ag            4600 + sabit x  14         9000 + sabit x  61

A karisiminda orgu ile merkezinin esitlendigi sabit: 400
sabitten bagimsiz olan: duzen karari alan taraf / dokunulan duzen , merkezi 1/1 , orgu 1/5 , ag 5/5
```

Süpürme üç ayrı türde sonuç veriyor. Birincisi **sabitten bağımsız** olanlardır: düzen kararı alan
taraf ve dokunulan düzen sayıları dört değerde de 1/1, 1/5 ve 5/5 kalıyor. Bu dersin iki ana sayısı
bir maliyet modelinin değil, bir örgütlenme kararının sayısıdır ve dosya sabiti onlara dokunmaz.
Aynı biçimde ağın örgüden pahalı olması da dört değerde sürüyor; ölçülmemiş anahtar seçiminin
bedeli sabitten bağımsızdır.

İkincisi **sabite bağlı olan sıralamadır** ve bu dersin en önemli uyarısıdır. A karışımında örgü
60, 120 ve 240'ta merkezîden ucuzdur, 480'de değildir. Doğrusal biçim nedenini veriyor: örgü 800
hücreye karşılık her dosya için 10, merkezî 2.400 hücreye karşılık 6 ödüyor. Örgünün hücre
avantajı sabit, dosya dezavantajı sabitle çarpılıyor; ikisi tam olarak 400'de eşitleniyor.
Sabitin 120 seçilmiş olması "dağıtık yazım yerel soruları ucuzlatır" cümlesini doğru yapıyor;
480 seçilseydi aynı cümle yanlış olurdu. **Bir düzen karşılaştırması, dayandığı sabit yazılmadan
aktarılamaz.**

Üçüncüsü **soru karışımına bağlı olan** sonuçtur ve sabitin süpürülmesi onu ortadan kaldırmıyor.
B karışımı A'nın üstüne budanmayan tek bir soru ekliyor ve sıralama dört değerde de tersine
dönüyor: merkezî 7.820, örgü 9.100 ile başlıyor, 480'de fark 14.960'a karşı 36.400 oluyor. Eğim
sütunu bunu açıklıyor: B'de örgünün dosya katsayısı 65, merkezînin 17. Budayan bir anahtarın
olmadığı tek bir soru, dağıtık yazımın dosya sayısını doğrudan maliyete çeviriyor. Dağıtmak da
bozar; bozduğu yer, hiçbir anahtarın yardım etmediği sorulardır.

## Özet

- Sahipliğin dağıtılması iki sayıyı değiştirir: düzen kararı alan taraf sayısı ve uçtan uca bir
  sorgunun dokunduğu düzen sayısı. Merkezî 1/1, veri örgüsü 1/5, veri ağı 5/5 verir.
- Örgü ile ağın ayrımı yazmanın dağıtılması değil, **anahtar kararının** dağıtılmasıdır; sorgunun
  bildiği adres sayısı üçüncü bir sayıdır ve maliyeti hiç değiştirmez.
- Ağın yerel toplamı 3.140, örgününki 1.000; farkın kaynağı dağıtım değil ölçülmemiş anahtar
  seçimidir, iki birimin kararı tek başına 2.450 tutar.
- Dosya sabiti süpürüldüğünde iki ana sayı ve ağın örgüden pahalı olması dört değerde de değişmez;
  değişen şey örgü ile merkezînin sıralamasıdır, eşitlik noktası 400'dür.
- Maliyet sabitte doğrusaldır (`hücre + sabit x dosya`), bu yüzden bir karşılaştırma dayandığı
  sabit yazılmadan aktarılamaz.
- Budanmayan tek bir soru eklendiğinde dağıtık kurulum dört sabit değerinde de kaybeder: B
  karışımında merkezî 8.840, örgü 13.000, ağ 16.320 öder.

## Sonraki Adım

Bu derste beş depo, kırk yedi dosya ve beş ayrı anahtar kararı sayıldı. Ölçülen her maliyet, sorunun
**hangi depoya gideceğinin zaten bilindiği** varsayımına dayanıyordu. Ağ düzenlemesinde beş adres
vardı ve sorgu hepsini biliyordu; oysa bir bölge biriminin ürününün adı, taşıdığı sütunlar,
bölüm anahtarı ve hangi dönemleri kapsadığı bir yerde yazılı olmadıkça bulunmaz. Sonraki ders
bunu tek bir sayıya çevirir: bir veri varlığını bulmak için kaç girişe bakılıyor, katalog varken ve
yokken. Aynı derste kataloğun kendi kusuru ölçülür — kaç giriş artık var olmayan bir düzeni
gösteriyor — ve altı dersin ardından bu konu kapanır.
