У меня довольно большая база данных BaseX (> 2 ГБ), содержащая большое количество XML-документов. XML-файлы по своей природе довольно плоские. Упрощенный пример типичного XML-файла:
<document id="doc_id_1234">
<value id="1">value 1</value>
<value id="2">value 2</value>
<value id="3">value 3</value>
</document>
Мои XQueries в значительной степени основаны на селекторах атрибутов (т.е. //value[@id='1' or @id='3']
), и я обнаружил, что создание индекса атрибутов в базе данных привело к значительному увеличению производительности запросов.
Я загружаю новые XML-данные ежемесячно или ежеквартально. После импорта новых файлов XML я снова воссоздаю индекс атрибутов.
Однако я обнаружил, что после перезагрузки сервера (которая, кажется, довольно часто случается у моего поставщика услуг) скорость запроса значительно снижается. Такое ощущение, что производительность падает до состояния без указания индекса атрибута. Если я открою базу данных с помощью графического интерфейса BaseX, похоже, что индекс атрибутов все еще там. Когда я отбрасываю существующий индекс атрибутов и заново создаю его, производительность моих XQueries снова становится молниеносной.
Я использую BaseX версии 7.7.1.
Я бы хотел знать:
Где хранится индекс атрибутов? Находится ли он в ОЗУ (что объясняет, почему скорость запроса снижается после перезагрузки)?
Как я могу настроить мою базу данных таким образом, чтобы производительность XQuery оставалась стабильно хорошей?
Очень надеюсь, что вы можете мне помочь, так как это серьезная проблема на моем производственном веб-сайте.