Преобразование большого количества данных из XML-файлов в базу данных

#mysql #xml #xpath

#mysql #xml #xpath

Вопрос:

Существует подсистема, которая генерирует файл данных XML для каждого запроса оценки. Этот XML-файл может содержать данные примерно для 1000 полей. Ежемесячно генерируется не менее 10000 файлов XML-данных. Файлы генерируются на файловом сервере и структурируются с использованием папок файловой системы. Смотрите пример на снимке ниже:

введите описание изображения здесь

Структура XML из одного файла в другой может отличаться, поскольку спецификации ввода данных меняются с течением времени.

Не все поля должны отправляться в базу данных, только определенные поля, и по крайней мере около 200 полей должны отправляться в базу данных в определенной таблице. Например, в XML есть данные, указывающие на контактные данные и сопоставимые детали. Итак, для запроса оценки номер 123 мы вставим одну запись для информации о контактах в одну таблицу контактов и одну запись для информации о сопоставимых данных в таблицу сопоставимых данных.

Вопрос: Есть ли способ подключиться с MySQL или SQL Server для чтения XML-файлов напрямую через файловую систему? Существует ли какая-либо промежуточная подсистема или соединитель, который делает этот процесс возможным. Затем, после доступа к файлу XML, можно ли преобразовать его в формат таблицы и использовать обычный запрос для извлечения полей и их значений?

В настоящее время мы разрабатываем программы в ASP.NET и Java для доступа к файловой системе, запрашивают файлы данных XML (используя API файловой системы), обрабатывают каждый файл по одному, преобразуют файл данных XML в документ XML, используют XPath для получения полей и значений и подключаются к базе данных на основе определенного сопоставления (чтобы решить, где будет сохранен элемент XML, т. Е. в какой базе данных / таблице / столбце) и генерируют Insert SQL и выполняют его для вставки записи в указанную таблицу.

введите описание изображения здесь

Мне просто интересно, есть ли более простой метод?

Ответ №1:

Используя Saxon, вы могли бы сделать это в одном скрипте XSLT:

(a) с collection() функцией вы можете получить доступ ко всем XML-файлам в каталоге и применить одинаковую обработку к каждому из них

(b) с sql:insert расширением Saxon вы можете записывать новые строки в реляционную базу данных.

Это, безусловно, потребует намного меньше кодирования, чем то, как вы это делаете, хотя производительность может не сильно отличаться (в зависимости от того, насколько хорош ваш Java-код).

Если вы инвестируете в Saxon-EE, вы можете получить преимущество в производительности, поскольку функция collection() автоматически становится многопоточной, поэтому она использует преимущества нескольких ядер.

[Отказ от ответственности: Saxon разработан моей компанией]

Комментарии:

1. Большое спасибо за ответ. Пожалуйста, предоставьте ссылку и дайте мне знать, есть ли демо. Я хотел бы получить более подробную информацию, чтобы предложить это команде.