|
|
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
Всем привет! На Java только начал писать. Прочитал, что стандартный XPath имеет низкую производительность на глубоких деревьях. Подскажите, есть ли полноценный и быстрый XPath для Java. Наподобие, например, MSXML6 для Windows. --------------------------------------------------------- is null or not is null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 12:07 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
Лет 15 назад на проекте я-был занят написанием мелкой бизнес-логики для XPath под .Net. Почти все проблемы производительности XPath решались отказом от него самого. Мы переписали узкие места кода на XmlReader+XmlWriter (пришлось напрячся чтобы смоделировать некий конечный автомат для разбора документа). Результатом - довольны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2017, 23:55 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
maytonЛет 15 назад на проекте я-был занят написанием мелкой бизнес-логики для XPath под .Net. Почти все проблемы производительности XPath решались отказом от него самого. Мы переписали узкие места кода на XmlReader+XmlWriter (пришлось напрячся чтобы смоделировать некий конечный автомат для разбора документа). Результатом - довольны. предполагается наверное не универсальный инструмент а заранеее предопределенная неизменная схема xml документа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 09:53 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
Поскольку мы сами были создателями схемы, то её вопрос изменений не стоял так резко. Вообще в xml/xpath изначально заложена либеральная модель развития. Вы можете даже Вводить новые поля в документ при сохранении схемы. Нюанс будет только в трактовке самого понятия поля и в удобстве его парсинга потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 12:56 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
пользовался jaxen - пример для dom может бегать не только по DOM чем меньше использовать выражений типа Код: plaintext можно держать кеши разпаршеных xpath-ов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 16:15 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
maytonПоскольку мы сами были создателями схемы, то её вопрос изменений не стоял так резко. Вообще в xml/xpath изначально заложена либеральная модель развития. Вы можете даже Вводить новые поля в документ при сохранении схемы. Нюанс будет только в трактовке самого понятия поля и в удобстве его парсинга потом. я имеел ввиду при использовании самописного конечного автомата вместо xpath ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 18:42 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
llemingя имеел ввиду при использовании самописного конечного автомата вместо xpath Схемы как таковой не было. Тоесть она конечно была но проектирование шло от кода к схеме. Мы делали функционал ситуативно. По потребностям. Сразу сесть и разработать схему окончательно - было сложно. Требования возникали в ходе разработки. Сам автомат парсинга был достаточно прост. По сути он был надстройкой над XmlTextReader (из ранних библиотек Microsoft.Net 1.1). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2017, 21:53 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
BuryCommonerНа Java только начал писать. Прочитал, что стандартный XPath имеет низкую производительность на глубоких деревьях. IMHO & AFAIK Не бывает абстрактной низкой или высокой производительности В лучшем случае, может быть: a) достаточная производительность для выполнения конкретной бизнес задачи b) и не достаточная производительность также для конкретной задачи Если код требуется выполнять раз в сутки, то и минуту подождать можно, если раз в год, то можно и час подождать ))) А вот если 100500 раз в секунду, то тогда, скорее всего, нужно вкладывать бабло в программистов, которые код на Assembler с SSE и прочими оптимизациями перепишут ))) Или купить пару стоек в дата центре и соорудить какой нибудь распределенный супер-мега кластер типа гугловского или амазоновского ))) BuryCommoner...стандартный XPath... Подскажите, есть ли полноценный и быстрый XPath для Java. Наподобие, например, MSXML6 для Windows. IMHO За гранью добра и зла 1. "стандартный XPath". Это как "стиральный порошок Tide против обычного стирального порошка". Хотя, скорее, тут "если Вы не видите разницы, то покупайте Досю". Т.к., подозреваю, что 80-90% кода в реализациях XML от различных вендоров полностью совпадают или взято из бесплатных источников (типа xalan/xerses) 2. Я так понимаю M$ XML совершенно для других языков. Т.ч. это обсуждения достоинства вкусов банана vs яблока или мягкого vs теплое. Ну и никто не воспрещает его использовать и с Java (например через связку Java - COM - M$ XML или Java - C - M$ XML), если такая потребность _для_бизнеса_ реально есть, а не выдумана 3. Ну и назвать "быстрым" любую реализацию с DOM, хоть на Java, хоть на C, у меня тоже язык не поворачивается. пользовался jaxen - пример для dom может бегать не только по DOM Мне кажется, что если действительно стоит проблема performance, то DOM сразу же нужно отправлять на помойку. И по производительности, но в первую очередь, по потреблению памяти Не уверен, но даже XML трансформация умеет через SAX работать (давно с этим сталкивался, т.ч. полной уверенности нет, нужно смотреть документацию по библиотекам) Если документы могут достигать сотен мегабайт (или нужно обрабатывать сотни тысяч мелких документов), то мне сложно представить продуктовую среду с использованием DOM которая не будет "тормозить" и замусоривать heap (т.е. все равно тормозить, только уже на GC). IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 13:14 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, неконкретно описал про скорость работы. Вот источники: https://habrahabr.ru/post/128175/ http://www.javenue.info/post/60 maytonЛет 15 назад на проекте я-был занят написанием мелкой бизнес-логики для XPath под .Net. Почти все проблемы производительности XPath решались отказом от него самого. Мы переписали узкие места кода на XmlReader+XmlWriter (пришлось напрячся чтобы смоделировать некий конечный автомат для разбора документа). Результатом - довольны. Согласен, потихоньку прихожу к тому, что большинство операций лучше будет алгоритмами перебора реализовывать. Dmitry.пользовался jaxen - пример для dom может бегать не только по DOM Спасибо! Посмотрю библиотеку. Leonid KudryavtsevIMHO & AFAIK Да, вопрос получился сумбурным и неконкретным. Производительность не критична, просто не хотелось использовать инструмент, который имеет подводные камни (ссылки в начале сообщения). Реализовать задачу на SAX возможно, но не целесообразно. Для этого понадобится много времени. В данный момент логика не до конца стабилизирована, возможны существенные перепроектирования. В течение пары лет реализовывал утилиту для разбора XSD и основанных на этом генератора кода, документации, преобразования схем. Начиналось всё с php, с простого инструмента для уменьшения рутины. С возрастанием сложности ушёл в VB.NET для повышения скорости. Постепенно часть функциональности попала в производство (шлюзы стали использовать для валидации схем по наборам правил). Сейчас в связи с переходом на Linux попросили портировать движок на Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 10:59 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
BuryCommonerСпасибо! Посмотрю библиотеку. Спасибо было в плохом смысле. Не надо было рекомендовать эту библиотеку, поскольку устарела. Соответственно,смотреть надо не её, а то, что используется сейчас. Вообще, в обсуждении этой темы ораторы путаются в методах поиска информации в XML. Правда (которая до некоторых не дошла) состоит в том, что нужны разные. XPath требует создания XML DOM (непосредственно в Java или в вызываемом из Java XSLT-процессоре), отчего работает медленнее и требует большей памяти, чем последовательный просмотр XML файла, который однако годится только для файлов с регулярной структурой из достаточно простых записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 11:54 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
https://habrahabr.ru/post/128175/ Жесть какая-то. И сама проблема (бага) жесть (если она конечно существует), но решение еще более "жесткое" Совет клонировать node перед использованием xpath.... волосы дыбом встают. "Туда сюда обратно, тебе и мне приятно" ( C ) мурзилка но на jdk1.8.0_65 поведение такое же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2017, 18:36 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
Как я понимаю, они все время вынуждены пересоздавать DTM для всего документа. Если между вызовами XPath документ не меняется, то можно этого и не делать. Если использовать org.apache.xpath.XPath или org.apache.xpath.CachedXPathAPI, то вроде такого (тормознутого на нодах) поведения нету. Но нужно внимательно доку читать, я как-то многого про DTM и XPathContext не понял ((( Я с XPath близко не разбирался. Использовать - использовал, но на производительность было глубоко пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2017, 20:14 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
тут говорят что бага https://blog.jooq.org/2013/08/25/how-to-speed-up-apache-xalans-xpath-processor-by-factor-10x/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2017, 22:16 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
Хм... последний коммит в xalan был сделан 17 лет назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2017, 22:56 |
|
||
|
Быстрый XPath
|
|||
|---|---|---|---|
|
#18+
maytonХм... последний коммит в xalan был сделан 17 лет назад. Немного провоцирующая статья. На деле статью тот же чувак написал что зарепортил баг, и он же проблему обнаружил. Там на стаковерфлоу он сообщает что для дефолтового из jdk xml процессора проблема тоже проявляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 00:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39537424&tid=2122509]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 526ms |

| 0 / 0 |
