Статья опубликована в рамках: Научного журнала «Студенческий» № 6(134)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3
ПАРСИНГ ДАННЫХ ФЕДЕРАЛЬНОЙ ИНФОРМАЦИОННОЙ АДРЕСНОЙ СИСТЕМЫ В СЕРВЕР ORACLE
В 2019 году поддержка КЛАДР как классификатор адресов Российской Федерации прекращена. На смену ему приходит ФИАС – федеральная информационная адресная система. В связи с невозможностью быстрого внедрения новой системы в прикладные решения остро встаёт вопрос перехода компаний к ФИАС, для соответствия государственному стандарту.
Есть ряд решений для загрузки данных адресной системы в сервера компаний, которые представлены в виде встроенных функций программного обеспечения (ПО) и возможностями систем управления базами данных (СУБД). Однако, в программных средствах компании они не всегда предусмотрены, и структура поставляемых данных не всегда соответствует требованиям.
В данной работе будет рассмотрен вопрос о парсинге, загрузке поставляемых данных в сервер СУБД Oracle и пример приведения структуры данных к нужному виду.
Решение данного вопроса предполагает использование средств программирования для реализации процесса парсинга. Так как различные компании используют разные операционные системы, необходимо учитывать кроссплатформенность выбираемого языка программирования. На сегодняшний день одним из лучших кроссплатформенных языков программирования является язык Java.
Данные поставляются в форматах dbf и xml. Dbf формат данных является стандартом для СУБД, но он не используется везде, поэтому стоит рассматривать xml формат. Java поддерживает несколько основных программных интерфейсов приложения (API) для xml парсинга данных. Лучшим из них является событийный API SAX Parser, который позволяет быстро и с наименьшими затратами выполнить парсинг данных.
Таблица 1.
Сравнительная таблица API для парсинга
Тип парсера |
Событийный |
Структурный |
Комбинированный |
Сложность в программировании |
Легкий |
Сложный |
Сложный |
Использование памяти |
Малое |
Большое |
Малое |
Скорость парсинга |
Быстрое |
Медленное |
Быстрое |
Совместно с процессом парсинга следует оправлять данные на сервер компании. Для этого следует использовать JDBC – стандарт взаимодействия приложения с различными СУБД.
Обычная последовательная отправка SQL-запросов не является целесообразной, так как будет выполняться дольше самого парсинга данных и будет тормозить процесс в целом. Поэтому стоит использовать подходящие объекты и методы для взаимодействия с СУБД.
Объект preparedStatement позволяет предварительно откомпилировать SQL-запросы, сразу принимая в виде аргументов передаваемые параметры, а не SQL-запрос полностью.
Стоит использовать метод пакетной отправки данных, который позволяет методами addBatch и executeBatch выполнить сразу множество запросов, количество которых выбирается самостоятельно. В случае ошибки выполняется откат транзакций, который вызывается явно, методом rollback.
Используя данные объекты и методы взаимодействия с СУБД, парсинг практически четырёх миллионов записей происходит за 5-15 минут в зависимости от возможностей машины, пропускной способности сети и загруженности сервера. Тогда как последовательная загрузка данных выполняется более недели.
Помимо основных данных, в ФИАС поставляются файлы обновления в тех же форматах. Загрузка данных обновления тем же способом невозможна, так как пакетная отправка данных не учитывает проверку на наличие записи. Можно выполнять данную проверку программно, но это приведёт к лишним запросам к серверу для поиска необходимых записей, увеличивая продолжительность парсинга и загрузки обновлений.
В данном случает следует использовать слияние таблиц. Для этого будет необходимо использовать специальный оператор языка SQL – MERGE. Оператор MERGE, позволяет обновлять и дополнять данные таблицы из другой таблицы. Достаточно выбрать поле с уникальным идентификатором записи, которое оператор будет использовать в условии для переопределения добавления или обновления записи и выполнить запрос, перед этим загрузив во временную таблицу данные обновления тем же способом, как и основную базу.
Рисунок 2. Синтаксис оператора MERGE
В итоге вся операция по обновлению выполняется на стороне сервера и происходит достаточно быстро.
Имея полную базу данных ФИАС на сервере, компания не сможет сразу перейти к её использованию. Им будет необходимо переделывать отправку запросов их программных средств. Если же используется сторонние программные средства без исходного кода, то переход на новую базу может быть невозможен, так как программные средства компании не работать с новой структурой данных.
Данная проблема решается путём использования виртуальных таблиц VIEW. VIEW – это специфический образ таблицы или набора таблиц, определённых оператором SELECT. Представление не существует физически как таблица в табличном пространстве. Фактически это результат хранимого запроса, в котором поля имеют необходимые наименования с указанием данных из подходящих таблиц.
Рисунок 3. SQL-выражение создания представления
Используя представления, можно создать виртуальную таблицу, которая будет повторять структуру ранее используемых таблиц, но будет иметь новые данные. Тем самым необходимость в изменение запросов программных средств отпадёт.
Однако, ФИАС могут не предоставлять все необходимые данные. Например, ссылка на тип адресного объекта, ссылка на родителя записи и полный адрес записи. Их необходимо вычислять. Сделать это можно сразу в SQL-выражении при запросе данных или в представлении, но тогда на обработку одного запроса будет тратиться много времени. Делать это лучше программно. Время, затраченное на вычисление полной базы данных, может различаться в зависимости от алгоритмов вычислений, количества вычисляемых полей и количества выполняемых SQL-запросов.
Остаётся вопрос с вычислением полей после обновления. Можно создать новое поле, которое будет указывать на статус обновления. После вычислять поля заново. Таким способом можно уменьшить количество пустых полей для корректной работы программного обеспечения пока выполняется обновление. Или можно обнулять обновленные поля сразу и вычислять.
В ходе работы был выбран язык Java для написания программы для парсинга Федеральной информационной адресной системы в сервер Oracle, был выбран наиболее подходящий API SAX Parser для работы с базой данных, был выбран JDBC стандарт взаимодействия приложения с СУБД, был определён объект preparedStatement для предворительной компиляции SQL-выражений и метод пакетной отправки данных для взаимодействия с СУБД. Найдены решения проблем связанных с загрузкой обновлений и даны рекомендации к работе с данными на сервере. Обусловлена практическая значимость данной работы.
Список литературы:
- R. M. Menon. Oracle JDBC: High Performance Applications With Oracle 10g. Apress; 1st ed. edition (4 May 2009) – 744 p.
- George Reese. Java Database Best Practices: Persistence Models and Techniques for Java Database Programming. O'Reilly Media; 1 edition (14 May 2003) – 304 p.
Оставить комментарий