Ugrás a fő tartalomra
🔒 Előnézet mód. Az első tizenöt Foundations lecke ingyenes; ez Pro. Indíts 7 napos trial-t, hogy feloldd a szerkesztőt, az AI tippeket és a tananyag többi részét. Kártya szükséges, bármikor lemondhatod a Dashboard-ban.7 napos trial indítása →
← KurzusokSystem Design for Python Juniors2. modul · Skálázhatóság és gyorsítótárKövetkezetes kivonatoláspredict17 / 105
+100 XP
Feladat
📝 **Kérdés:** Jósolja meg a szkript által kiírt pontos sort – `<naiv_moved> <consistent_moved>` –, amikor 10 000 kulcsot 8 csomópontról 9-re képeznek át. 📋 Válassza ki a megfelelő választ. 💡 **Tipp:** Ha nem biztos benne, olvassa el újra a fenti elméletet.
Találd ki a kimenetet

Olvasd el a kódot figyelmesen

import hashlib

KEYS = [f"key:{i}" for i in range(10_000)]

def h(s):
    return int(hashlib.md5(s.encode()).hexdigest(), 16)

def naive_assign(keys, n):
    return {k: h(k) % n for k in keys}

# Ring with VNODES virtual nodes per server keeps the distribution even.
VNODES = 150

def ring(nodes):
    points = []
    for n in nodes:
        for v in range(VNODES):
            points.append((h(f"{n}#{v}"), n))
    points.sort()
    return points

def consistent_assign(keys, nodes):
    points = ring(nodes)
    out = {}
    for k in keys:
        hk = h(k)
        # walk clockwise to the first ring point >= hk; wrap to points[0] otherwise
        lo, hi = 0, len(points)
        while lo < hi:
            mid = (lo + hi) // 2
            if points[mid][0] < hk: lo = mid + 1
            else: hi = mid
        out[k] = points[lo % len(points)][1]
    return out

before_nodes = [f"s{i}" for i in range(8)]
after_nodes  = [f"s{i}" for i in range(9)]

n_before = naive_assign(KEYS, 8)
n_after  = naive_assign(KEYS, 9)
c_before = consistent_assign(KEYS, before_nodes)
c_after  = consistent_assign(KEYS, after_nodes)

naive_moved      = sum(1 for k in KEYS if n_before[k] != n_after[k])
consistent_moved = sum(1 for k in KEYS if c_before[k] != c_after[k])
print(naive_moved, consistent_moved)

Mit ír ki a program? Írd ide:

💬 Beszélgetés

Légy az első — tegyél fel kérdést vagy oszd meg egy tippet.
Jelentkezz be hogy csatlakozz a beszélgetéshez. Az olvasás ingyenes.
Beszélgetés betöltése…