10 000 игр — это приличный объем. При текущей средней задержке в 250 мс (чтобы не злить сервер Dice Chess), полная синхронизация займет около 42 минут ( сек).
Обычный HTTP-запрос от браузера к серверу столько не проживет — он отвалится по тайм-ауту (обычно это 30–60 секунд).
Вот какие варианты я вижу, от простых к «профессиональным»:
Вариант 1: «Автокликер» на фронтенде (Самый быстрый в реализации)
Мы можем изменить логику в AdminView.svelte так, чтобы после завершения одного батча (например, 100 игр) фронтенд автоматически запускал следующий, пока счетчик missingMovesCount не станет равным нулю.
- Плюсы: Виден прогресс-бар, легко остановить (закрыв вкладку), не нужно менять архитектуру бэкенда.
- Минусы: Нужно держать вкладку браузера открытой. Если интернет моргнет, процесс остановится.
Вариант 2: Использование существующего CLI-скрипта (Самый надежный)
У нас уже есть backend-api/scripts/experiments/fetch_games.py. Мы можем его немного доработать, чтобы он умел просто «докачивать всё, чего не хватает».
- Плюсы: Можно запустить в терминале (через
screenилиnohup) и забыть. Никаких тайм-аутов HTTP. Самый стабильный вариант для разовой «прокачки» большой базы. - Минусы: Нужно заходить на сервер через SSH.
Вариант 3: Фоновая задача через FastAPI BackgroundTasks
Когда вы нажимаете кнопку в админке, сервер отвечает «Ок, я начал», и продолжает качать игры в отдельном потоке.
- Плюсы: Нажал кнопку и закрыл браузер.
- Минусы: Трудно отслеживать прогресс из UI (нужны либо уведомления, либо отдельный эндпоинт статуса). Если сервер перезагрузится, задача умрет и её нужно будет запускать снова.
Вариант 4: Масштабируемый ETL (Cron / Периодическая задача)
Настроить скрипт так, чтобы он просыпался каждые 5 минут и докачивал по 50 игр.
- Плюсы: Минимальная нагрузка на сеть, выглядит для Dice Chess как «естественная» активность.
- Минусы: 10 000 игр будут качаться долго (около 16 часов при таком темпе).
Моя рекомендация:
Для разовой заливки 10 000 игр я бы выбрал Вариант 2 (CLI). Это даст нам максимальный контроль и стабильность. Мы можем запустить его с параметром --max 10000, и он спокойно всё выкачает.
А для будущего поддержания базы в актуальном состоянии я бы реализовал Вариант 1 (Авто-степпер в UI), чтобы вы могли зайти раз в неделю, нажать «Sync All» и видеть, как бежит полоска прогресса.
Что думаешь? С чего начнем: оживим CLI-скрипт или добавим «авто-цикл» в админку?