Подтвердить что ты не робот

Случайные запросы в большом XML файле

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

4b9b3361

Ответ 1

vtd-xml является наилучшим вариантом для вашего использования. http://vtd-xml.sourceforge.net/

Ответ 2

При обработке XML у вас обычно есть два подхода: потоковая передача (SAX) или загрузка всего документа в память (различные реализации DOM).

Если вы можете предварительно установить набор запросов для обработки массовыми, вы можете написать программу для использования SAX для потоковой передачи файла, поиска совпадений. Если запросы поступают в случайные интервалы (т.е. Типичное приложение базы данных), вам необходимо либо загрузить весь документ в память, либо предварительно обработать документ XML в какую-либо базу данных.

Лучшее описание того, что вы пытаетесь выполнить, может помочь получить более качественные ответы.

Ответ 3

Piccolo - небольшой, чрезвычайно быстрый XML-парсер для Java. Он реализует интерфейсы SAX 1, SAX 2.0.1, and JAXP 1.1 (SAX parsing only) как не прошедший проверку парсер. Это доступно на Apache License

Ответ 4

в зависимости от приложения с использованием ориентированной на xml базы данных, такой http://exist.sourceforge.net/ может быть интересным.