Я использую ключи XSLT во многих контекстах. Обычно используемые ключи более или менее уникальны с очень редкими дублирующимися экземплярами. Теперь я определил ключ, который имеет много экземпляров для некоторых значений ключа. Чтобы быть точным: я обрабатываю файл 1.7 GigaByte с 420.000 записей, имеющих атрибут @STEREOTYPE. Некоторые из стереотипов встречаются до 90.000 раз. Но это не те, которые мне интересны. Те, которые я хотел бы выбрать, обычно имеют от 10 до 20 экземпляров.
Определение ключа:
<xsl:key
name="entityByStereotype"
match="/REPOSITORY_DUMP/ENTITY_LIST/ENTITY"
use="@STEREOTYPE"/>
Создание индекса длится вечно, то есть я обычно убиваю процесс через 5 или 6 часов.
Определение альтернативного ключа
<xsl:key
name="entityByStereotype"
match="/REPOSITORY_DUMP/ENTITY_LIST/ENTITY"
use="concat(@STEREOTYPE, @OBJECT_ID)"/>
, что делает ключи экземпляра уникальными, и его сборка возвращается через 14 секунд. Я предполагаю, что алгоритм сортировки не очень хорошо работает для нескольких экземпляров одного и того же ключа, что приводит к сложности O (n ** 2) для всех подмножеств с одинаковыми ключами. Это довольно плохо для подмножеств 90.000 записей. : - (
Однако я не могу использовать определение альтернативного индекса, поскольку заранее не знаю части OBJECT_ID экземпляра.
Есть идеи? Большое спасибо!
Saxon используется: версия 9.1.0.5