Victor Isaev (torrio) wrote,
Victor Isaev
torrio

Всем бездельникам

С 1-го по 13-е, говорите? Себе хуже делаете, товарищи. Кто не повредит печень - тот замерзнет, кто избежит первых двух бед - останется с мозгами, промытыми телевизором, кто убережется и от этого - ну да, прокачает своего эльфа до 89 уровня. Дело, конечно, полезное, но... грустно всё это.

Я вот занялся полезными вещами. Решил попрограммировать и воплотить в жизнь те идеи, на которые не хватало времени в конце прошлого года. В частности, решил улучшить качество нашей системы оповещений о стихийных бедствиях для пользователей iPhone и нашей программы StormAlert.
Суть такая: клиенты стали жаловаться, что не получают каких-то предупреждений, о которых узнают в последствии из СМИ. Мы стали смотреть, в чем дело. Выянилось, что мы оперируем географическими координатами, в то время, как информация о прогнозах размещается для т.н. forecast zones - зон, на которые поделена территория США. Информация эта доступна из разных источников, мы планируем к ним подключиться, но для начала нужно решить проблему привязки существующих Favorite Locations наших клиентов к этим самым зонам. Удалось найти данные о географической привязке зон, но... формат оказался существенно бинарным, и я допустил первую ошибку.
Я решил, что нет ничего лучше использования существующих велосипедов, и конвертировал проприетарный бинарный формат в XML-style XLS. Размер файла увеличился в 10 раз (до 186 МБ), и я решил, что буду работать с ним. Это была вторая ошибка. Урок, который я извлек для себя: никогда не работайте с большими объемами XML-данных, если цените свое и процессорное время. Я написал довольно простой код, максимально оптимизировал его, мне не нужно было искать по этому гигантскому файлу, я работал с данными последовательно, но... первоначальная оценка времени, требуемого для загрузки всего объема данных в SQL2008 оказалась равна 5-6 дням. После 12 часов работы оценка увеличилась до 25 дней непрерывной работы приложения. Performance Analyzer показал, что 99.5% времени тратится на разворачивание XML (это при том, что весь файл загрузился в RAM, pagefile у меня отключен и всё операции осуществлялись в быстрой DDR2!). Я предпринял пару попыток декомпозиции задачи, но результат оказался столь же печальным.
Пришла мысль, что я поехал не на том велосипеде. Человечество изобрело множество велосипедов - трехколесные, горные, ВМХ, тандемы. Моя же первая попытка заключалась в попытке проехать Tour de France верхом на велотренажере Кеттлер. Судя по скорости. В общем, я решил пересесть на шоссейник. 50 строк кода с чистого листа, использование библиотеки для чтения бинарика с использованием индексов - и - данные оказались в базе за 1 минуту. Процент ошибок из-за некорректных данных - 10%. Много, но как мне кажется, терпимо. Что-нибудь придумаем.

Программировать прикольно:)

Всем желаю отдохнуть деятельно! Не теряйте время! Carpe diem!
Tags: Екатеринбург, отдых, программирование, работа
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 25 comments