Как итеративно обновлять XML-файл, который не помещается в память?

#xml #large-data #large-files

#xml #большие данные #большие файлы

Вопрос:

У меня есть XML-файл объемом 10 ГБ, который анализируется из en-wikipedia-articles-pages-latest.xml досье. Мой XML-файл объемом 10 ГБ содержит XML-элементы, в которых где-то есть слово «футбол» (в тексте). Теперь моя цель — создать новый выходной XML-файл, который содержит только имена игроков и соответствующие им команды на протяжении многих лет. Допустим, я натыкаюсь на страницу Лионеля Месси, я анализирую информационный блок, который содержит нужную мне информацию, и, наконец, записываю ее в XML-файл. Проблема в том, что я могу наткнуться на неизвестного футболиста или страницу о футболисте со старым / сломанным информационным полем. Затем я натыкаюсь на футбольную команду, которая содержит информацию об этом неизвестном футболисте со сломанным информационным полем. Данные в новом выходном XML-файле уже записаны, но должны быть перезаписаны этой новой информацией. Моя проблема в том, что я не могу сохранить новый выходной xml как объект в памяти, потому что он слишком большой. Опять же, я не хочу последовательно сканировать новый выходной XML-файл и пытаться найти конкретную запись. Мой вопрос заключается в том, существует ли общий подход к тому, как справиться с такой ситуацией.

Ответ №1:

Один из подходов заключается в том, чтобы поместить все это в базу данных XML, такую как eXistDB или BaseX.

Другой подход заключается в организации работы в виде конвейера потоковых преобразований (например, с использованием XSLT 3.0). Это требует больше работы, но в конечном итоге будет быстрее.