XQuery - регистрация времени, принятого вызовом REST или вызовом метода - PullRequest
3 голосов
/ 08 марта 2011

Мы находимся в процессе тонкой настройки нашего приложения, и я нахожусь в процессе нахождения временного промежутка между вызовом метода. Метод может быть вызовом функции или процессом отдыха.

let $x := fn:current-time()
let $re := xdmp:http-post('http://www.somerestdomain.com',())
let $y := fn:currrent-time()
return $x - $y

or

let $x := fn:current-time()
let $re := domain:call-some-long-running-function()
let $y := fn:currrent-time()
return $x - $y

профилирование показывает, что движок XQuery оптимизирует вызов fn:current-time() и всегда присваивает $ x & $ y одно и то же значение.

Я нашел этот пример кода, который также имеет некоторые проблемы с W.r.t для MarkLogic http://en.wikibooks.org/wiki/XQuery/Uptime_monitor

Мы используем базу данных MarkLogic Xml и псевдокод , упомянутый выше относится к API MarkLogic

Есть ли способ узнать XQuery TimeOut?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Используйте xdmp:elapsed-time() вместо current-time(), новая функция, введенная в 4.2, если я не ошибаюсь.

Как объяснено Скоттом и в комментариях выше current-time() стабильна и будет возвращать то же значениев течение одного прогона, если только вы не прибегнете к использованию xdmp:eval(), но это только значительно замедлит ваш код.

Рядом с этим есть универсальный способ получения синхронизацииинформация из ваших запросов.Самый простой способ - скопировать часть соответствующего кода в CQ (http://developer.marklogic.com/code/cq) и нажать там кнопку Profile.Под капотом используются функции из библиотеки профилей (http://developer.marklogic.com/pubs/5.0/apidocs/ProfileBuiltins.html).Они возвращают HTML-таблицу с большим количеством информации о времени.Очень полезно для оптимизации кода в MarkLogic Server.

2 голосов
/ 08 марта 2011

MarkLogic использует многоверсионный параллелизм , и в основном это означает, что каждая транзакция увеличивает такт на 1 период. Поскольку $ x и $ y находятся в одной транзакции, вы всегда будете возвращать одну и ту же метку времени.

Попробуйте следующую диагностическую функцию.

(xdmp:http-get("http://www.marklogic.com"), xdmp:query-meters())

Это вернет результаты вашего запроса и некоторую диагностическую информацию по вашему запросу. В вашем случае это было бы так ...

(xdmp:http-post('http://www.somerestdomain.com',()), xdmp:query-meters())
...