Кейсы 5 мин чтения

Сколько стоит свой каталог данных: разведка до начала работ

Четверть миллиона объявлений и по два десятка фото у каждого меняют и архитектуру, и счёт за инфраструктуру. Разбираю, что дала разведка за один день и какие вопросы я честно оставил без ответа.

кейсданныеархитектурасмета

Коротко (TL;DR)

  • Идея была простая: собрать собственный каталог автомобилей с зарубежных площадок и продавать доступ к данным через API. Перед сметой я потратил время на разведку — что вообще отдаётся, в каком объёме и во что это превратится на инфраструктуре.
  • Главные находки: четверть миллиона активных объявлений на одной площадке, по пятнадцать-двадцать фотографий у каждого; фотографии нельзя зеркалить к себе; обходить весь каталог каждый раз бессмысленно; данные приходят на чужом языке и в чужих классификаторах.
  • Итог разведки — три варианта стоимости владения в месяц и трудоёмкость первой версии около месяца работы одного человека. Часть вопросов осталась непроверенной, и я записал их как неизвестные, а не как допущения.

Проекты сбора данных почти всегда оценивают на глаз. Кажется, что задача понятная: забрать карточки, положить в базу, отдать наружу. Разберу, почему один день разведки до сметы меняет и архитектуру, и цифру в конце.

Что хотели сделать

Идея заказчика: собрать свой каталог автомобилей с зарубежных площадок и продавать доступ к этим данным через API. То есть не витрина для покупателя, а источник данных для других сервисов.

Такая постановка меняет требования. Витрине достаточно показать то, что есть сейчас. Источнику данных нужны полнота, свежесть и предсказуемость: тот, кто платит за API, ждёт, что вчерашние записи не исчезнут, а снятые с продажи будут отмечены снятыми.

Поэтому первым шагом я пошёл не в редактор кода, а смотреть, что реально отдаётся и в каком объёме.

Первое: объём меняет систему

На одной площадке оказалось около 244 тысяч активных объявлений. У каждого — пятнадцать-двадцать фотографий.

Это не просто большое число, это другая система. Логика, написанная под тысячу карточек, и логика под четверть миллиона — разные вещи почти во всём: в устройстве базы, в индексах, в том, как идёт обход, в том, сколько живёт полная выгрузка и укладывается ли она вообще в ночь.

На тысяче карточек можно позволить себе перебор без индекса, хранение картинок как попало и полный пересчёт при каждом запуске. На четверти миллиона каждая из этих вольностей превращается либо в часы ожидания, либо в счёт за диск.

Поэтому первое, что стоит выяснить на разведке, — не форматы полей, а порядок величины. Он определяет всё остальное.

Второе: фотографии нельзя зеркалить

Самый дорогой пункт в таком проекте — не данные, а изображения.

Полное зеркало всех фотографий к себе потребовало бы сотен гигабайт диска, и объём этот постоянно рос бы: каталог живой, объявления добавляются каждый день. Диск под данные покупается один раз, диск под растущий архив картинок — навсегда.

Решение, к которому я пришёл: хранить у себя ссылки, а саму картинку тянуть при первом показе и складывать в кэш. Тогда в хранилище оседает только то, что люди действительно смотрели, а это заметно меньшая часть каталога. По оценке — десятки гигабайт против сотен.

Побочный эффект приятный: карточки, которые никто не открыл, не стоят ничего. Побочный эффект неприятный: первый показ чуть медленнее, и нужна аккуратная политика очистки кэша. Оба известны заранее, и оба закладываются в смету.

Третье: синхронизация лентой изменений

Второй способ сжечь бюджет — каждый раз обходить весь каталог заново.

Полный обход четверти миллиона карточек — это долго, дорого и бессмысленно, потому что между двумя запусками меняется малая доля записей. Нужна лента изменений: что добавлено, что изменено, что снято с продажи. Такой обход обходится в десятки раз дешевле полного и при этом даёт данные свежее, потому что его можно запускать часто.

Здесь же лежит ответ на вопрос о качестве услуги. Снятые с продажи объявления должны отмечаться снятыми, а не молча исчезать: для клиента API это разные события, и второе ломает ему логику.

Четвёртое: чужой язык и чужие классификаторы

Данные приходят не в том виде, в котором их ждёт конечный пользователь. Язык другой, названия моделей и комплектаций записаны по местным правилам, разбивка на категории своя.

Значит, нужен слой приведения: марка, модель, версия — в привычном виде. Это отдельная работа, и она не сводится к автоматическому переводу. Схема рабочая такая: словарь соответствий, автоматический перевод для описаний и ручная вычитка того, что касается названий.

Ручная часть здесь не перестраховка. Ошибка в названии модели ломает поиск у конечного пользователя: человек ищет знакомое слово и не находит ничего, хотя карточка в базе есть. Одна такая ошибка тихо выключает из выдачи целый модельный ряд.

В смете это отдельная строка, и она не разовая: новые модели и комплектации появляются постоянно, словарь надо пополнять.

Пятое: что осталось непроверенным

Часть вопросов я за день не закрыл и записал их честно как неизвестные, а не как допущения.

ВопросПочему он дорогой
Ограничение частоты запросовОпределяет, сколько времени занимает обход и сколько каналов доступа нужно
Глубина выдачиЕсли она ограничена, полноту каталога приходится набирать другими срезами
Обязательность подписи запросаВлияет на схему доступа и на то, сколько её поддерживать

Все три сходятся в одну точку: от них зависит, нужны ли дополнительные каналы доступа. А это самая дорогая статья сметы — и разовая, и ежемесячная одновременно.

Записать такое как неизвестное важнее, чем угадать. Угаданное допущение выглядит в документе так же, как проверенный факт, и через месяц его никто уже не отличит.

Что получилось на выходе

Разведка закончилась не кодом, а тремя вариантами по стоимости владения в месяц: минимальный — чтобы проверить идею на ограниченном срезе; рабочий — для продакшена по одной площадке; расширенный — на несколько площадок сразу.

Трудоёмкость первой версии — около месяца работы одного человека. Это не оценка «сколько писать код», а полный цикл: обход, хранение, приведение названий, отдача через API и наблюдение за тем, что всё это не встало ночью.

Смысл разведки не в том, чтобы начать писать код в понедельник. Смысл в том, чтобы понять, во что превратится счёт за инфраструктуру через полгода, и решить, берётесь вы вообще.

Частые вопросы

Сколько занимает такая разведка?

Рабочий день на выяснение объёмов и форматов, ещё немного — на оформление выводов и списка неизвестных. По сравнению с месяцем разработки это незаметная величина, а влияет она на всю смету.

Почему нельзя сразу начать и разбираться по ходу?

Можно, но тогда архитектура выбирается вслепую. Решение про фотографии и решение про ленту изменений принимаются в самом начале и переделываются тяжело — это не настройка, а устройство системы.

Не проще ли купить готовые данные?

Иногда проще, и это честный исход разведки. Если стоимость владения своим каталогом выше, чем подписка на готовый источник, свой каталог имеет смысл только там, где нужны собственные правила обработки или независимость от поставщика.

Что делать с неизвестными в смете?

Оставлять их неизвестными и показывать вилку. Заказчику полезнее видеть «эта цифра зависит от одного непроверенного ограничения», чем аккуратное число, которое поедет на второй неделе.

Обязательно ли хранить картинки у себя?

Нет, и чаще не нужно. Ссылка плюс кэш по факту показа закрывает задачу для большинства каталогов. Полное зеркало имеет смысл, когда картинки должны пережить исчезновение источника.

Коротко о главном

Разведка перед проектом сбора данных стоит один день и отвечает на четыре вопроса, которые определяют всё: сколько записей, что делать с изображениями, как обновлять и как приводить чужие названия к своим. Ответы на них — это и есть архитектура.

Пятый вопрос — про непроверенное. Неизвестные надо записывать как неизвестные, а не превращать в допущения: именно они обычно и держат самую дорогую строку сметы.

Если вы думаете про свой каталог данных или API поверх чужого источника — расскажите, откуда берёте данные и зачем. Посмотрю, что отдаётся и во что это выльется по инфраструктуре. Напишите в Telegram, MAX или VK.

Услуги по теме

Что я делаю для бизнеса

  • Боты в Telegram, MAX, VK
  • Автоматизация процессов и CRM
  • Аналитика и дашборды
  • Сайты и лендинги под ключ

Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»

12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.

Готовы обсудить вашу задачу?

Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.

Пишу о разработке, ИИ и законах для бизнеса

Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.

Готовые решения под ключTurnkey solutionsSoluciones llave en mano交钥匙解决方案Түлхүүр гардуулах шийдэл 451 готовых IT-решений для бизнеса451 ready-made IT solutions for business451 soluciones IT listas para empresas451 个面向企业的现成 IT 解决方案Бизнест зориулсан 451 бэлэн IT шийдэл Автоматизация, боты, AI, 152-ФЗ и платформы · бесплатная консультацияAutomation, bots, AI, data privacy and platforms · free consultationAutomatización, bots, IA, privacidad de datos y plataformas · consulta gratis自动化、机器人、AI、数据合规与平台 · 免费咨询Автоматжуулалт, бот, AI, өгөгдлийн хамгаалалт ба платформ · үнэгүй зөвлөгөө Смотреть каталогView catalogVer catálogo查看目录Каталог үзэх