Как ускорить функцию Saxon doc ()?

У меня есть XML-файл размером 12 МБ, к которому я обращаюсь из xquery. Файл загружается примерно так;

let $t := doc('file:///C:/foo/bar/file12mb.xml')

На выполнение кода требуется около 950 мсек.

Как можно быстрее загрузить XML-документ? После того, как XML-файл загружен и проанализирован, выполнение тела xquery занимает всего несколько миллисекунд, поэтому я пытаюсь ускорить начальную загрузку и синтаксический анализ файла xml, который занимает большую часть времени выполнения.

Есть ли у Saxon способ сохранить XML-документ после того, как он был проанализирован? В идеале я хотел бы каким-то образом сохранить XML-файл данных, но Saxon, похоже, спроектирован исключительно как XML-процессор, а не как XML-база данных .

Может ли схема помочь? В настоящее время с XML-файлом не связана схема. Документация Saxon подразумевает, что наличие схемы ускоряет выполнение запроса, но замедляет начальную загрузку и анализ XML-данных, поэтому я не пробовал создавать схему.

Любые предложения с благодарностью получены.

Версии

java version "1.6.0_26"
Saxon-B version 9.1.0.8

person Nigel Alderton    schedule 04.10.2011    source источник
comment
Возможно, вам стоит подумать об использовании баз данных XML, таких как Sedna, eXist? Как вы упомянули, Saxon - это процессор, а не хранилище.   -  person Shcheklein    schedule 05.10.2011


Ответы (1)


Это звучит довольно быстро для разбора файла размером 12 МБ. Я не думаю, что вы можете это оптимизировать, и нет, Saxon - это не база данных.

В MarkLogic анализ XML происходит только один раз: во время приема. В других базах данных, таких как Oracle, это может иметь место, а может и нет, в зависимости от того, как вы его загружаете.

person kstirman    schedule 05.10.2011