Производительность Oracle xpath: два выбранных сценария - PullRequest
2 голосов
/ 10 октября 2011

Я использую оракул 11g и у меня есть таблица с XMLType.В этой таблице много записей, и каждый XML содержит список от 0 до n ответов следующим образом:

<section>
  <answer id="100">
    <value>Something</value>
  </answer>
  ...
</section>

Существует два способа xpath для значений.

Пример 1:

extract(table.column, '//answer[@id=100]').getStringVal()

, который возвращает

<answer id="100">
  <value>Something</value>
</answer>

Пример 2:

extractvalue(table.column, '//answer[@id=100]/value/text()')

, который возвращает

Something

Существует снижение производительности при извлечении большого количества текста() значения для сложного запроса, который заставляет меня задать следующий вопрос.Получу ли я лучшую производительность, если бы я использовал библиотеку, такую ​​как xstream, для анализа этих значений в java (пример 1), или лучше, чтобы oracle проанализировал эти значения для меня (пример 2)?

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

================== РЕДАКТИРОВАТЬ

Начал изучать использование Scala в качестве альтернативы синтаксическому анализу xml в JVM.Не стесняйтесь добавлять примеры Scala в смесь.

Ответы [ 2 ]

1 голос
/ 11 января 2012

Я наконец дошел до тестирования, и вот что я нашел.

Для простого представления "отчета" jsp с использованием таблицы я выполнил запрос, чтобы заполнить 850 строк.

Учитывая мою кодовую базу, я сначала выполнил запрос следующим образом:

  • Запрос содержал 3 левых соединения по XMLTypes для каждой записи.
  • Каждая запись извлекала 15 значений «Примера 2».
  • Каждое значение не требует обработки XStream.

Это заняло всего:

8,27 секунд , чтобы выполнить один запрос.

15 секунд всего от начала до конца просмотра

Затем я изменил запрос, сделав следующее:

  • Запрос содержал 3 левых соединения по XMLTypes для каждой записи.
  • Каждая запись извлекала 15 значений «Пример 1».
  • Каждое значение также запускало обработку XStream для извлечения значений.

Это заняло всего:

24,84 секунды для выполнения запроса в одиночку.

60 секунд всего для перехода от начала к законченному виду.

Это, конечно, моя кодовая база, но я думаю, что могу исключить использование XStream в качестве средства эффективности. Но, похоже, что XMLType и xpathing не очень эффективны.

1 голос
/ 11 ноября 2011

Полагаю, пример 2 должен быть быстрее.Если вам нужно больше скорости, я рекомендую выполнить нормализацию для этой таблицы и избавиться от XML или использовать материализованное представление.

...