Что мы можем сделать, чтобы ускорить обработку XML? - PullRequest
2 голосов
/ 19 марта 2010

Мы работаем над внутренней корпоративной системой, в которой одним из интерфейсов является веб-интерфейс.

Внешний интерфейс (Java + Tomcat + Apache) связывается с внутренним интерфейсом (проприетарной системой, написанной на языке, похожем на COBOL) через веб-службы SOAP.

В результате мы передаем большие файлы XML туда и обратно.

Мы считаем, что эта архитектура оказывает существенное влияние на производительность из-за больших накладных расходов на транспортировку и анализ XML. К сожалению, мы застряли на этой архитектуре.

Как мы можем сделать эту настройку XML более эффективной?

Любые советы или методы приветствуются.

Ответы [ 6 ]

8 голосов
/ 19 марта 2010

Профилирование!

Выполните правильное профилирование вашей системы под нагрузкой - на самом деле не достаточно информации для продолжения.

Вам необходимо выяснить, куда идет время и какие узкие места (пропускная способность сети, процессор, память и т. Д.). Только тогда вы узнаете, что с этим делать - многие оптимизации - это просто компромиссы (например, кэширование жертвует памятью для повышения производительности в других местах)

Единственное, о чем я могу подумать - это убедиться, что вы используете HTTP-сжатие с веб-сервисами - XML ​​обычно можно сжать до доли его обычного размера, но опять же это поможет, только если Циклы процессора, чтобы сэкономить.

3 голосов
/ 19 марта 2010

Я собираюсь выйти на конечный пункт и предложить сжатие GZIP, если вы думаете, что это связано с пропускной способностью. (вы упомянули XML Transportation) Да, это увеличит время вашего процессора, но может ускорить процесс в транспорте.

Вот первое попадание Google на сжатие GZIP в качестве отправной точки. Описывает, как это работает на Apache.

3 голосов
/ 19 марта 2010

Вы можете сжать передачу, если оба конца могут это поддерживать, и вы можете попробовать разные парсеры, но так как вы говорите SOAP, вариантов не так много. Мыло в любом случае раздуто.

2 голосов
/ 19 марта 2010

Сначала убедитесь, что ваши методы разбора эффективны для больших документов. StAX хорош для анализа больших документов.

Кроме того, вы можете взглянуть на двоичный XML подходы. Они обеспечивают более эффективную транспортировку, но также помогают при разборе.

1 голос
/ 20 марта 2010

Проверьте, читает ли ваше приложение в целом документы XML как дерево DOM. Они могут быть ОЧЕНЬ большими, и часто вы можете сделать это с помощью простой проверки событий SAX или программы XSLT на основе SAX (которую можно скомпилировать для быстрой обработки).

Это очень заметно в профилировщике, например, в Visualvm в Sun Java 6 JDK

1 голос
/ 20 марта 2010

Попробуйте StAX. Он выполняет хорошо и имеет хороший, лаконичный синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...