Designing Database Solutions and Data Access Using Microsoft SQL Server 2008

Posted: Ноябрь 14, 2010 in TSQL

Я сдал экзамен «70-451 PRO: Designing Database Solutions and Data Access Using Microsoft SQL Server 2008» со второго раза. Во время сдачи мне попался вопрос типа, если вы обмениваетесь с данными в формате XML с другой конторой, то как вы будете их обрабатывать. Правильным ответом было поместить содержимое такого файла в ячейку таблицу формата XML, и далее, используя функции типа query, value… обрабатывать данные. Я так и поступил. Положил содержимое в ячейку, далее с помощью XQuery и метода value сформировал «денормализованную» XML, а затем извлекал из нее данные методом value и ложил их в нужные таблицы. К сожалению, даже после оптимизации XQuery-запроса, обработка XML весом 87 Мб заняло на двухпроцессорном сервере 9.5 часов! Об этом я узнал на следующий день, потому что уже через час тормозов нужно было менять тактику.

Нужно было срочно что-то менять, т.к. XML приходили каждый день. Тогда с помощью утилиты xsd.exe я по схеме сформировал класс на C#. Далее нужно было десериализовать этот класс, используя ту XML весом 87 Мб, что на моей однопроцессорной машине заняло несколько минут. Там еще была проблема, что XML был неправильно сформирован, потому что контора, которая нам его выгружала, была по сути нашим конкурентом. И они всячески старались вставлять палки нам в колеса. Пришлось потратить какое-то время на правку xsd-файла. Но в конце концов класс десериализовался.

Затем нужно было с помощью четырех вложенных циклов пройтись по этому классу, и в конце положить данные в таблицу. Эта процедура проходила со скоростью одна запись в таблицу за две секунды, что опять-таки было печально. Тогда очевидным шагом было разбитие выполнения на несколько потоков. Каждый раз в конце четвертого вложенного цикла вставка в базу данных происходила в отдельном потоке. В итоге 280 000 записей вставились в базу за две минуты!!!

Вот так вот. Верь после этого во всякие сертификации. Можно было бы, конечно, еще понастраивать SQL Server для оптимизации работы с XML, но решение с десериализацией и многопоточной вставкой мне понравилось больше. Правда для такой вставки пришлось открыть около 130 подключений к серверу)

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s