Перейти к основному содержимому
🔒 Режим превью. Первые 15 уроков Foundations — бесплатные; этот — Pro. Запусти 7-дневный trial чтобы открыть редактор, AI-подсказки и остальной курс. Нужна карта, отмена в Dashboard в любой момент.Начать 7-дневный trial →
← КурсыSystem Design for Python JuniorsМодуль 2 · Масштабируемость и кэшированиеСогласованное хешированиеpredict17 / 105
+100 XP
Задание
📝 **Вопрос:** Предскажите точную строку, которую напечатает скрипт — `<naive_moved> <consistent_moved>` — когда 10 000 ключей переназначаются с 8 узлов на 9. 📋Выберите правильный ответ. 💡 **Подсказка:** Если вы не уверены, перечитайте приведенную выше теорию.
Предскажи вывод

Прочти код внимательно

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)

Что выведет программа? Напиши здесь:

💬 Обсуждение

Будьте первым — задайте вопрос или поделитесь подсказкой.
Войдите чтобы участвовать в обсуждении. Чтение бесплатно.
Загрузка обсуждения…