Конвертировать большое количество данных из файлов XML в базу данных - PullRequest
0 голосов
/ 24 апреля 2019

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

enter image description here

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

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

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

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

enter image description here

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

1 Ответ

1 голос
/ 24 апреля 2019

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...