ОБНОВЛЕНИЕ: см. MarkLogic 8 - Stream large result set to a file - JavaScript - Node.js Client API для ответа на вопрос о том, как это сделать в Javascript. В этом вопросе конкретно спрашивают о XQuery.MarkLogic 8 - XQuery написать большой результирующий набор в файл эффективно
У меня есть веб-приложение, которое использует службы отдыха, размещенные в node.js.
Узел просто проксирует запрос XQuery, который затем запрашивает MarkLogic. Эти запросы уже имеют настройку поискового вызова и работают нормально в обычном случае, чтобы вернуть страницу данных в пользовательский интерфейс.
Мне нужно иметь функцию экспорта, так что, когда я добавляю URL-адрес export=all
по запросу, он больше не ищет страницу.
В этот момент он должен получить весь набор результатов, даже если это миллион записей, и сохранить его в файле.
Фактический запрос должен немедленно вернуться: «Мы сообщим вам, когда ваша загрузка будет готова».
Одно из предложений заключалось в использовании xdmp:spawn
для вызова XQuery в фоновом режиме, который сохранил результаты в файле. Мой фактический HTTP-запрос мог бы немедленно вернуться.
Для части икры я думаю, что идея заключается в том, что я запускаю свой запрос с различными параметрами, чтобы получить все результаты вместо одной страницы. Затем я прокрутил данные и создаю строковую переменную, чтобы вызвать xdmp: save with.
Некоторые вопросы, это хорошая идея? Есть ли способ лучше? Если я прохожу через набор результатов, и он очень большой (гигабайт), это может вызвать проблемы с памятью.
Невозможно напрямую передать результаты в файл в XQuery?
Примечание: Еще одна идея у меня было перехватить запрос на (узел) слой прокси, а затем сделать xdmp: оценить, чтобы получить количество записей, а затем петлю через запрашивая каждую страницу и промывке его на диск. В этом случае я должен был бы найти способ, чтобы вернуть мою просьбу еще сразу процесс в фоновом режиме в узле, который, кажется, есть некоторые идеи здесь: http://www.pubnub.com/blog/node-background-jobs-async-processing-for-async-language/
Я думаю, что это в основном то, что я сказал в примечании на дне? –
Возможно, я неправильно понял. Я думал, что примечание в конце вопроса предполагает вытащить из MarkLogic в Node.js (что также будет работать); ответ выше предполагает отталкивание от MarkLogic в Node.js. – ehennum