> Как хранить маппинг между длинным и коротким URL (Python)

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

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

Стек: Python

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

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

SQL
CREATE TABLE url_mapping (
id SERIAL PRIMARY KEY,
short_key VARCHAR(10) UNIQUE NOT NULL,
long_url TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);

Короткий URL генерируется как уникальный ключ (например, base62-кодирование от ID записи или случайная строка). В Python-коде:

PYTHON
import string
import random
from sqlalchemy import create_engine, Column, String, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class URLMapping(Base):
__tablename__ = 'url_mapping'
short_key = Column(String(10), primary_key=True)
long_url = Column(Text, nullable=False)
def generate_short_key(length=7):
chars = string.ascii_letters + string.digits
return ''.join(random.choices(chars, k=length))
# Пример использования
def create_short_url(long_url):
short_key = generate_short_key()
# Проверка на коллизию (в реальности - цикл с повторной генерацией)
mapping = URLMapping(short_key=short_key, long_url=long_url)
session.add(mapping)
session.commit()
return f"https://short.domain/{short_key}"

Для повышения производительности добавьте индекс на short_key и кэш (например, Redis) для часто запрашиваемых URL. При редиректе - простой SELECT по ключу.

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

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