У меня есть большой 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-библиотеку/подход я мог бы использовать лучше всего для решения этой проблемы?