Страницы

Поиск по вопросам

вторник, 5 марта 2019 г.

Как в несколько потоков прочитать ОГРОМНЫЙ (скажем ~25 ГБ) xml файл?

структура xml довольно простая...
Но размер файла довольно большой....
Хочется читать файл в несколько параллельных потоков...
Как в несколько потоков прочитать ОГРОМНЫЙ xml файл?
какой парсер вы бы посоветовали ?
UPD:
Файл имеет не сложную структуру... сильной вложенности нет...
Кусочек файла:
... ... ... ... ... ...
К сожалению, этот xml формируется не в нашей компании (у клиентов)...
Доступа к базам данных(4 разных типа БД) на стороне клиента у нас нет, и быть не может, по соображениям политики безопасности в области информации и чего-то там(одним словом - гос.контора )...
У заказчика нет специалистов и желания переписывать свой софт, который собирает данные из таблиц разных БД и формирует этот xml.


Ответ

Файлы формата XML, как и любых других LL(n)-подобных грамматик, невозможно читать в несколько потоков. Максимум что вы можете сделать - это сразу после получения данных передавать их в другой поток на обработку, чтобы 1 поток всегда был занят парсингом.
К примеру, если на разбор файла уходит половина времени, и еще половина - на запись в БД, то вынесение работы с БД в другой поток ускорит процесс в два раза.
Здесь вам может пригодиться класс java.util.concurrent.BlockingQueue и паттерн "производитель-потребитель" (Producer-Consumer)

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

Отправить комментарий