> Как оценить необходимое дисковое пространство для хранения сокращенных ссылок с учетом нагрузки и времени жизни (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: Международный аэропорт Шереметьево

Стек: Python

> Пример ответа

Для оценки дискового пространства необходимо учесть несколько ключевых параметров: количество генерируемых ссылок в единицу времени, средний размер записи, время жизни ссылок (TTL) и коэффициент избыточности (например, для индексов или репликации).

Формула расчета: Объем = (RPS × TTL_сек) × (размер_ключа + размер_оригинального_URL + метаданные) × коэффициент

Пример для Python (расчет):

PYTHON
def estimate_storage(rps: int, ttl_days: int, avg_url_len: int = 200, overhead: int = 50, replication_factor: float = 1.5) -> float:
"""
rps - количество запросов на создание ссылки в секунду
ttl_days - время жизни ссылки в днях
avg_url_len - средняя длина оригинального URL (байт)
overhead - служебные данные (ключ, timestamp, статус) в байтах
replication_factor - множитель для реплик/индексов (1.0 - без реплик)
"""
total_links = rps * 86400 * ttl_days # общее количество активных ссылок
record_size = 7 + avg_url_len + overhead # 7 байт для короткого ключа (base62)
storage_bytes = total_links * record_size * replication_factor
return storage_bytes / (1024**3) # в гигабайтах
# Пример: 1000 rps, TTL = 30 дней, средний URL = 200 байт
print(f"Требуется ~{estimate_storage(1000, 30):.2f} ГБ")

Допущения:

  • Короткий ключ: 7 символов base62 (~7 байт в UTF-8, можно хранить как int64 - 8 байт).
  • Оригинальный URL: в среднем 200 байт (можно сжимать).
  • Метаданные: дата создания, срок действия, счетчик переходов - ~50 байт.
  • Коэффициент 1.5-2.0 для индексов (B-tree, первичный ключ) и репликации (если используется).

Важно: Для высоконагруженных систем стоит учитывать не только объем, но и IOPS - база данных должна успевать записывать RPS × размер записи в секунду. Также рекомендуется предусмотреть запас 20-30% на рост нагрузки и служебные структуры (WAL, временные файлы).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью