XML API для лучшей производительности

У меня есть приложение, которое работает с большим количеством данных XML. Итак, я хочу спросить вас, какой API является лучшим для обработки XML в Java. Сегодня я использую W3 и для производительности хочу перейти на какой-нибудь API. Я делаю XML из 0, много преобразований, импортирую в базу данных (mysql, mssql и т. Д.), Экспортирую из базы данных в html, модифицирую эти XML и многое другое.

Является ли JDOM лучшим вариантом? Вы знаете что-то лучше, чем JDOM? Я слышал (читая страницы) о javolution. Кто-нибудь этим пользуется?

Какой API вы мне порекомендуете?

3 ответа

Решение

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

Вместо этого посмотрите на использование потокового API, такого как SAX или StAX. StAX, по моему опыту, обычно проще в использовании.

Есть и другие API, которые пытаются дать вам удобство DOM с производительностью SAX. Javolution может быть одним; VTD-XML это другое. Но, честно говоря, я считаю, что с StAX довольно легко работать - это в основном фантастический поток, поэтому вы просто мыслите так же, как если бы вы читали текстовый файл из потока.

Вы можете попробовать объединить JAXB со StAX. Идея состоит в том, что вы передаете файл в потоковом режиме с использованием StAX, а затем используете JAXB для разархивирования фрагментов внутри него. Например, если вы обрабатываете канал Atom, вы можете открыть его, прочитать за заголовком, а затем работать в цикле без разбора entry элементы к объектам по одному. Это действительно работает, только если ваш формат состоит из последовательности независимых элементов, таких как Atom; это было бы бесполезно для чего-то более богатого, например XHTML. Вы можете увидеть примеры этого в ссылочной реализации JAXB и в блоге парня.

Ответ зависит от того, какие аспекты производительности важны для вашего приложения. Одним из факторов является то, обрабатываете ли вы большие XML-документы.

Для анализа подходы на основе DOM не будут хорошо масштабироваться для больших документов. Если вам нужно проанализировать большие документы, парсеры, не использующие DOM, например, использующие SAX и StAX, будут работать быстрее и потреблять меньше ресурсов. Однако, если вам нужно преобразовать XML после синтаксического анализа, используя XSL или DOM API, вам в любом случае понадобится весь документ в памяти.

Для создания XML из кода StAX предоставляет хороший API для этого. Поскольку этот подход основан на потоке, он хорошо подходит для написания очень больших документов.

Ну, большинство разработчиков, которых я знаю, и я, мы используем dom4J, может быть, если у вас будет время, когда вы сможете написать небольшой тест производительности с использованием обеих платформ, вы увидите разницу. Я предпочитаю dom4j.

Другие вопросы по тегам