xdmp: вызвать вызов в MarkLogic

Если мы вызовем какой-то модуль xquery в первый раз, это займет некоторое время. Последующие вызовы вызова выполняются быстрее, возможно, потому, что модуль xquery анализируется и присутствует в кеше модуля.

Рассмотрим следующий сценарий: -

HTTP Server1- xdmp:invoke('/a/sample.xqy')   
HTTP Server2 - xdmp:invoke('/a/sample.xqy') 

Оба сервера приложений указывают на одну и ту же базу данных модулей.

Вопросы :-

  1. Почему последующие вызовы вызова выполняются быстрее?

  2. Однако вызов выполняется медленно, если мы вызываем один и тот же модуль на сервере приложений diff. Будет ли этот модуль xquery рассматриваться как отдельный объект на основе сервера приложений для целей кэширования?

  3. Как MarkLogic решает, какую запись удалить из кэша модулей?

  4. Как долго MarkLogic хранит модуль в кеше после вызова xdmp:invoke?

  5. Есть ли какая-либо конфигурация ML для увеличения размера кеша модуля?


person Deekshant    schedule 18.06.2012    source источник


Ответы (3)


  1. Кэширование - но я думаю, вы это знаете?
  2. Похоже, вы это продемонстрировали. Это имеет смысл: разные серверы приложений могут иметь разные конфигурации, которые могут повлиять на оценку: например, пространства имен и схемы и, возможно, параметры вывода. Поэтому, вероятно, проще просто встроить идентификатор сервера приложений в ключ кеша.
  3. Я считаю, что это кэш LRU. Я не знаю, насколько он велик.
  4. До тех пор, пока не закончится место или запись в кэше не станет недействительной в результате обновления.
  5. Насколько я знаю, нет.
person mblakele    schedule 18.06.2012

Касается ли запрос данных в базе данных? Если это так, последующие вызовы того же самого запроса могут получить доступ к кэшу расширенного дерева в E-узле при втором вызове.

Насколько быстрее второй вызов? В прошлый раз, когда я измерял его, разница во времени обработки запроса была небольшой по сравнению со временем поиска в большинстве решений ввода-вывода.

person derickson    schedule 19.06.2012

<сильный>1. кэширование: - Существует три типа кеша - расширенное дерево, сжатое дерево, список. Расширенное дерево хранит недавно использованное, затем сжатое, а затем список. Документы ML объясняют это очень хорошо.

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

3. Последние использовавшиеся будут в расширенном древовидном кеше, а наименее использованные будут в кеше списка. Которые недавно не использовались, будут сброшены из кеша.

4. См. третий пункт

5. да, перейдите в раздел "Администратор" --> группа --> выберите свою группу ---> вкладка "Настройка".

person Mohit Singh    schedule 23.03.2015
comment
Кэш модуля отличается от кеша дерева и кеша списка. Кэш модуля кэширует проанализированные XQuery и XSLT, а возможно, и JavaScript. Это отличается от кэширования исходного кода модуля, поскольку анализ исходного кода требует времени. - person mblakele; 24.03.2015
comment
Чтобы подтвердить mblakele, кеш модуля (xquery, xslt, rewriters) предназначен для каждого сервера приложений по указанным причинам, среда на каждом сервере приложений отличается, включая аутентификацию, корень модуля, базу данных, модули db, схему db, безопасность DB, переписчик и другие. Один и тот же файл может «скомпилироваться» в совершенно разные вещи в разных контекстах. Тем не менее ... что «медленно»? синтаксический анализатор XQuery работает довольно быстро, конечно, не так быстро, как без него, но сервер оптимизирован для балансировки общей производительности. Полезно посмотреть на общую производительность сервера. - person DALDEI; 06.05.2015