libxml2 из Java - PullRequest
       32

libxml2 из Java

7 голосов
/ 13 сентября 2010

Этот вопрос в некоторой степени связан с Самым быстрым анализатором XML для небольших, простых документов в Java , но с некоторыми дополнительными особенностями.

Я работаю над приложением, которое должно анализировать многие(10 миллионов), небольшие (около 300 тысяч) XML-документы.Текущая реализация использует xerces-j, и на машине с частотой 1,5 ГГц требуется около 2,5 мс на XML-документ.Я хотел бы улучшить эту производительность.Я наткнулся на эту статью

http://www.xml.com/pub/a/2007/05/16/xml-parser-benchmarks-part-2.html

, в которой утверждается, что libxml2 может анализировать на порядок быстрее, чем любой java-анализатор.Я не уверен, верю ли я в это, но это привлекло мое внимание. Кто-нибудь пробовал использовать libxml2 из jvm?Если да, то быстрее ли это, чем анализ java dom (xerces)? Я думаю, что мне все равно понадобится моя структура java dom, но я предполагаю, что копирование из c-структурированного dom в java-dom не должно 'не займет много времени.У меня должен быть java-dom - саксофон не поможет мне в этом случае.

update : я только что написал тест для libxml2, и он не был быстрее, чем xerces ... предоставленомоя кодирующая способность чрезвычайно ржавая.

update Я немного расширил вопрос: почему синтаксический анализ саксофона происходит быстрее, чем анализ dom?и как работает stax? и я открыт для возможности бросить дом.

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

В Java StAX JSR-173 обычно считается самым быстрым подходом к анализу XML.Существует несколько реализаций StAX, реализация Woodstox обычно считается быстрой.

Для повышения производительности я бы избегал DOM.Что вы делаете с XML?Если вы в конечном итоге имеете дело с ним как с объектами, вам следует рассмотреть решение ОХМ.Стандарт JAXB JSR-222 .Реализации JAXB, такие как MOXy (я технический руководитель), даже позволят вам выполнить частичное отображение, которое улучшит производительность:

0 голосов
/ 23 сентября 2010

Прежде всего, ваш вопрос не содержит вопроса. Что ты хочешь знать?

Полагаю, вы использовали JNI для преобразования c-dom в java-dom. Я не знаю, есть ли официальные цифры, но по моему опыту, c + JNI часто работает медленнее, чем напрямую в java.

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

Если вы используете только подмножество xml (то есть без пространств имен, только несколько атрибутов), подумайте о написании собственного синтаксического анализатора, который напрямую создает более эффективные объекты Java (но я бы не рекомендовал этого).

...