Запустить парсер Java XML с количеством процессов Erlang - PullRequest
1 голос
/ 06 августа 2020

У меня есть проект в курсе параллельного и распределенного программирования.

В этом курсе мы используем Erlang.

Мне нужно использовать некоторую базу данных из файла XML, в котором уже есть парсер, написанный на java (это ссылка на XML и парсер: https://dblp.org/faq/1474681.html). Размер файла XML составляет 2,5 ГБ, поэтому я понимаю, что первым шагом является использование ряда процессов, которые я создам в erlang, которые будут анализировать XML, и каждый процесс будет анализировать фрагмент XML.

Дело в том, что я впервые делаю что-то подобное (объединяю erlang и java и разбираю действительно большой файл XML), поэтому я не уверен, как подойти к этому проблема - разделить XML на куски, прежде чем я начну его разбирать? Каким-то образом установите начало и конец для каждого процесса, который анализирует XML?

Просто для пояснения - курс посвящен erlang и использованию процессов в erlang, поэтому я должен его использовать (потому что я уверен, что есть java многопоточные решения).

Я буду очень признателен за любые идеи или помощь! Спасибо!

1 Ответ

1 голос
/ 07 августа 2020

Вы можете сделать это в Erlang без использования Java. Вам не нужно полностью читать файл перед обработкой. Вам следует использовать парсер XML, который поддерживает потоковый API XML. Я рекомендую использовать fast_ xml, что слишком быстро (для анализа XML используются функции C). После инициализации состояния парсера потока в al oop (рекурсивная функция) вы должны прочитать фрагмент файла по фрагменту (например, каждый фрагмент по 1024 байта) и передать каждый фрагмент синтаксическому анализатору. Если парсер обнаружит новые элементы XML, он отправит их вашему процессу обратного вызова в форме сообщений erlang. В процессе обратного вызова вы можете создать больше процессов для работы с каждым элементом XML.

...