Ответ 1
vtd-xml является наилучшим вариантом для вашего использования. http://vtd-xml.sourceforge.net/
У меня есть большой xml файл (1Gb). Мне нужно сделать много запросов в этом XML файле (например, с помощью xpath). Результатом являются небольшие части xml. Я хочу, чтобы запросы были как можно быстрее, но файл 1Gb, вероятно, слишком велик для рабочей памяти.
xml выглядит примерно так:
<all>
<record>
<id>1</id>
... lots of fields. (Very different fields per record including (sometimes) subrecords
so mapping on a relational database would be hard).
</record>
<record>
<id>2</id>
... lots of fields.
</record>
.. lots and lots and lots of records
</all>
Мне нужен произвольный доступ, выбрав записи, используя, например, ключ. (Идентификатор является самым важным, но другие поля также могут использоваться в качестве ключа). Я не знаю запросы заранее, они приходят и должны выполняться как можно скорее, без пакетного исполнения, но в режиме реального времени. SAX выглядит не очень многообещающим, потому что я не хочу перечитывать весь файл для каждого запроса. Но DOM тоже не выглядит очень многообещающим, потому что файл очень большой, и добавление дополнительных служебных накладных расходов почти наверняка означает, что он не будет вписываться в рабочую память.
Какую java-библиотеку/подход я мог бы использовать лучше всего для решения этой проблемы?
vtd-xml является наилучшим вариантом для вашего использования. http://vtd-xml.sourceforge.net/
При обработке XML у вас обычно есть два подхода: потоковая передача (SAX) или загрузка всего документа в память (различные реализации DOM).
Если вы можете предварительно установить набор запросов для обработки массовыми, вы можете написать программу для использования SAX для потоковой передачи файла, поиска совпадений. Если запросы поступают в случайные интервалы (т.е. Типичное приложение базы данных), вам необходимо либо загрузить весь документ в память, либо предварительно обработать документ XML в какую-либо базу данных.
Лучшее описание того, что вы пытаетесь выполнить, может помочь получить более качественные ответы.
Piccolo - небольшой, чрезвычайно быстрый XML-парсер для Java. Он реализует интерфейсы SAX 1, SAX 2.0.1, and JAXP 1.1 (SAX parsing only)
как не прошедший проверку парсер. Это доступно на Apache License
в зависимости от приложения с использованием ориентированной на xml базы данных, такой http://exist.sourceforge.net/ может быть интересным.