libxml2 из java

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

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

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 - sax мне в этом случае не поможет.

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

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

Спасибо


person andersonbd1    schedule 13.09.2010    source источник


Ответы (2)


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

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

person bdoughan    schedule 24.09.2010
comment
Что касается отказа от DOM - я не могу и не хочу объяснять, почему. - person andersonbd1; 29.09.2010
comment
Спасибо за ваш вклад. Я передумал. Я готов бросить дом, если смогу, и подробнее объясню, что делаю. Я создал здесь новый вопрос: stackoverflow.com/questions/3825206/ - person andersonbd1; 29.09.2010

Во-первых, ваш вопрос не содержит вопроса. Что вы хотите узнать?

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

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

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

person Cephalopod    schedule 23.09.2010
comment
Я выделил жирным шрифтом и добавил вопросительные знаки. Что касается отказа от DOM - я не могу и не хочу объяснять, почему. - person andersonbd1; 29.09.2010
comment
Спасибо за ваш вклад. Я передумал. Я готов бросить дом, если смогу, и подробнее объясню, что делаю. Я создал здесь новый вопрос: stackoverflow.com/questions/3825206/ - person andersonbd1; 29.09.2010