Индекс атрибута BaseX потерян после перезагрузки?

У меня довольно большая база данных 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.

Я бы хотел знать:

  1. Где хранится индекс атрибутов? Находится ли он в ОЗУ (что объясняет, почему скорость запроса снижается после перезагрузки)?

  2. Как я могу настроить мою базу данных таким образом, чтобы производительность XQuery оставалась стабильно хорошей?

Очень надеюсь, что вы можете мне помочь, так как это серьезная проблема на моем производственном веб-сайте.


person guppie70    schedule 22.10.2013    source источник
comment
Вы когда-нибудь находили решение этого вопроса?   -  person favq    schedule 27.02.2014


Ответы (1)


Чтобы ответить на ваши вопросы:

  1. Индекс атрибутов, по крайней мере, материализован на жестком диске внутри вашей папки BaseXData (в которой есть папка для каждой базы данных). Обычно он находится в вашем домашнем каталоге. Индексы атрибутов (имена и значения) хранятся в файлах, следующих по шаблону atv*.basex.
  2. Обычно индекс атрибутов должен выдерживать перезагрузки как BaseX, так и вашей операционной системы. Если вы можете каким-то образом воспроизвести индекс, который был признан недействительным без каких-либо обновлений в базе данных, вы можете отправить сообщение на список рассылки BaseX, чтобы убедиться, что это не ошибка. Возможно, попробуйте выполнить следующие шаги заранее и убедитесь, что вы действительно не обновляете базу данных при запуске.

Вы можете попробовать установить для параметра UPINDEX значение true. Это должно перестроить индекс, если он недействителен или недоступен. Чтобы убедиться, что используется индекс, запустите запрос из basexclient -V.

Заявление об ограничении ответственности: я в некоторой степени связан с командой BaseX.

person Jens Erat    schedule 22.10.2013
comment
У меня действительно есть atv * .basex в моем каталоге данных BaseX. - person guppie70; 25.10.2013
comment
Таким образом, индексные файлы на месте, и сам индекс, кажется, работает, хотя и не стабильно с приличной скоростью (как сообщается). Я действительно понятия не имею, как смоделировать или проверить, не стал ли индекс недействительным. Есть ли какая-то команда для проверки статуса индекса атрибута? Чтобы убедиться, что используется индекс, запустите запрос из basexclient -V Я не уверен, что вы имеете в виду: запустить медленный запрос после перезагрузки в basexclient? Как запустить клиент с ключом -V? Заранее спасибо за помощь! - person guppie70; 25.10.2013