Проект, где импортировать объем данных, эквивалентный ~600 экземплярам толстовской саги «Война и мир»
«Закрытый» проект City
Проект, где импортировать объем данных, эквивалентный ~600 экземплярам толстовской саги «Война и мир»

«Даже в сегодняшнем виде это лучшее, что есть среди подобных продуктов во всем мире».

Леонид Рысев, заказчик

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

Сегодняшний проект «закрытый», созданный для внутреннего пользования компании и — исключительно программный. Поэтому любители посмотреть красивые картинки будут разочарованы. Только суровый программерский дизайн, только хардкор!

Предыстория

Наш клиент — владелец одной из самых успешных риэлторских компаний элитной недвижимости в Санкт-Петербурге, Rysev Realty. Заметьте, не «самой крупной», а именно успешной: многие именитые риэлторы города работают гораздо менее продуктивно. Причина: эффективное использование времени и информационных ресурсов, понимание того, насколько ценными могут быть своевременные данные.

Чтобы располагать крепкой аналитикой, в девяностых команда работала с макросами в excel-файлах. Которые набирались руками, да. Потом — с внутренней программой на Delphi, которая анализировала данные с двух сайтов питерской недвижимости. На момент начала нашего сотрудничества, текстовых файлов скопилось более 200 штук, и каждый весил по 15МБ. «Мы шли к проекту 20 лет» — написал о нем Леонид. Как видите, они хорошо подготовились.

Для сравнения: Тексты всех трех частей «Войны и мира» весят примерно 5МБ. Итого, нам предстояло импортировать объем данных, эквивалентный ~600 экземплярам толстовской саги.

Команде был нужен уникальный онлайновый сервис для работы с огромными объемами информации, для того, чтобы располагать полной аналитикой о рынке. То есть фактически, для начала работы нам нужно было импортировать те самые 200 толстых файлов в нашу базу данных. Причем каждый файл предстояло проанализировать, разбить на логические куски и потом эти куски аккуратно сложить по полочкам в БД. Чем и занялись — написанием импорта.

В среднем, 100 000 строк текста «распознавалась» и импортировалась в БД за 5-10 минут. Полный импорт занял (не фейк!) — 5 суток. Из восьми ядер нашего боевого сервера 2 были загружены на 100%. Разработчики сравнивали напряженность момента с запуском ракеты и вспоминали молитвы богу-машине.

Кстати: первый импорт, который мы написали, обрабатывал один пятнадцатимегабайтный файл за полчаса. То есть на перенос всех данных в базу у нас ушло бы 2-3 недели. Такая скорость нас не устраивала, поэтому мы оптимизировали до тех пор, пока не добились увеличения скорости в 4 раза. За что отдельное спасибо Денису. И медаль.

Проект изнутри

Что из себя представляет сам инструмент? Это, по сути, база данных, которая формируется и постоянно самообновляется на основе автоматического анализа многочисленных источников. Дает возможность «иметь под рукой» самую полную статистику по городской недвижимости. Сегодня это уже 30+ГБ (это 9 миллионов объявлений), импортированных в систему City.

Сервис состоит из двух частей: первая используется для поиска объявлений, вторая — для анализа полученной информации (разработчики окрестили получаемую таблицу «высокотехнологичным гридом» — сейчас объясню, почему).

Данные регулярно поступают из нескольких проверенных источников и обновляют базу. Вы представляете, что это такое: быстро обрабатывать сотни тысяч объявлений, появляющихся за неделю? А именно, в чем тонкости:

  • Это Питер! Тут улица может называться «1 Линия», а рядом будет «2 Линия» и третья, и четвертая. А алгоритм должен их различать.
  • Цену в разных валютах обычно никто не пишет. А недвижимость элитная. Поэтому наш грид сам находит актуальные курсы валют и рассчитывает цену квартиры в долларах и евро, отталкиваясь от ее площади.
  • Телефон продающего агентства можно указать овер9000 способами. С дефисами, со скобками, с пробелами, без того, другого и (или) третьего. Наша таблица распознает небрежность и приводит все к одному виду. А также ищет номера, игнорируя все особенности авторской пунктуации.
  • На одну квартиру могут подать объявление сразу на нескольких сайтах. Так обычно и происходит. Чтобы не плодить клонов, грид «взвешивает» их характеристики и сам убирает дубли.
  • Некоторые поля могут быть вообще не заполненными. К примеру, относится ли квартира к первичному или вторичному рынку. Грид применяет свой интеллектуальный алгоритм и сам дополняет поля.

Кстати: популярное внутристудийное выражение «Марат, проверь парсер» пошло именно с проекта City. Марату тоже выдана медаль за написание всей этой ужасно впечатляющей программной логики.

Практическая сторона

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

Для этого было сделано следующее:

  • Автокомплиты.
  • Поиск по всем доступным диапазонам (например, «-2» — это «две и меньше комнат», а «200-300» в нужном поле — разбег цены за квадратный метр).
  • Кеширование результатов поиска — для ускорения процесса.
  • Доступ к сервису по IP и по логину. Простым смертным туда нельзя.
  • Редактирование грида напрямую (с удалением из базы) + редактирование только результатов отчета (без удаления из базы).
  • Выгрузка в Excel в асболютно идентичном виде.
  • Приятная фишка: при распечатке excel-файла внизу выводится колонтитул с поисковыми параметрами. То есть, можно понять, что перед вами список всех трехкомнатных квартир на Невском, с такой-то ценой за квадрат, с двумя ванными комнатами и объявления были размещены агентством «Союз» в последние полгода. Неплохая выборка ;).

О значении такого эффективного инструмента по работе с информацией говорит сам Леонид:

avatar
Леонид владелец компании Rysev Realty

Наша компания очень эффективна. Времени не хватает постоянно — для нас важна каждая секунда, мы должны мгновенно получать нужную информацию в удобном виде. Из-за этого столько внимания в City к деталям. Образно говоря мы делаем 20 рукояток для «меча» и только одна из них ложится в ладонь как надо.

Интерфейс City должен быть интуитивно понятен. Если у нас появляется новый сотрудник — он должен понять как все работает не читая Help, без дополнительных разъяснений.

И — да, вся система выглядит, как привычная таблица в Excel с фильтрами вверху — тратить время на изучение практически не нужно. На экстренный случай рядом с каждым полем есть небольшой «знак вопроса в кружочке» — всплывающая подсказка дает исчерпывающее объяснение.

Мы вместе с Леонидом благодарим наших героических разработчиков. Вот она, слава настоящих космодесантников!

ЗЫ. Молодому адепту Алексею тоже выдается пластальный доспех и табельный плазмоган — за заслуги на проекте.

И еще немного эмоций нашего клиента, спасибо ему за понимание:

avatar
Леонид владелец компании Rysev Realty

Уникальный проект City для нас — это меч самурая. Без него наша сила только теоретическая.

Этот проект дает нам зрение и возможность предсказывать будущее. Ни у кого в городе нет такого инструмента. Да и в России нет. В России с недвижимостью работает масса случайных людей — студентов, пенсионеров, бывших инженеров — рынок не профессиональный. В Европе к рынку недвижимость очень «старый классический» подход — не спеша и почти нет общегородских баз данных. Что-то подобное из инструментов City встречается в Американских мультилистинговых системах, но они не проработаны и дают возможность только примитивного анализа.

Очень сложно создать простые в использовании вещи. Но в City это получается. Sibirix, спасибо за это!