> Как оценить необходимое дисковое пространство для хранения сокращенных ссылок с учетом нагрузки и времени жизни (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: Международный аэропорт Шереметьево
Стек: Python
> Пример ответа
Для оценки дискового пространства необходимо учесть несколько ключевых параметров: количество генерируемых ссылок в единицу времени, средний размер записи, время жизни ссылок (TTL) и коэффициент избыточности (например, для индексов или репликации).
Формула расчета:
Объем = (RPS × TTL_сек) × (размер_ключа + размер_оригинального_URL + метаданные) × коэффициент
Пример для Python (расчет):
PYTHONdef 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_factorreturn 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, временные файлы).
> Похожие задачи по Python
Как хранить маппинг между длинным и коротким URL
Как справляться с коллизиями при генерации коротких ссылок
Какая должна быть длина короткой ссылки, чтобы избежать коллизий при заданной нагрузке и времени жизни
С чем именно приходилось бороться в производительности
> Похожие задачи по backend
Как хранить маппинг между длинным и коротким URL
Как справляться с коллизиями при генерации коротких ссылок
Какая должна быть длина короткой ссылки, чтобы избежать коллизий при заданной нагрузке и времени жизни
С чем именно приходилось бороться в производительности
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью