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

У меня есть большой XML-файл (1 ГБ). Я должен сделать много запросов на этом XML-файле (использующий xpath, например). Результатами являются мелкие детали xml. Я хочу, чтобы запросы были максимально быстро, но файл на 1 ГБ является, вероятно, слишком большим для оперативной памяти.

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

12
задан Jan 7 July 2010 в 22:54
поделиться

4 ответа

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

1
ответ дан 2 December 2019 в 23:31
поделиться

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

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

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

4
ответ дан 2 December 2019 в 23:31
поделиться

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

0
ответ дан 2 December 2019 в 23:31
поделиться

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

0
ответ дан 2 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: