Настройка коллекции в MarkLogic - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть требование, при котором я должен установить коллекцию для существующих документов.Дело в том, что у меня около 20 миллионов записей.Я запускаю запрос ниже из консоли запросов.Это ошибка времени ожидания.Я также опробовал параметр limit = N в запросе ниже.На максимуме я смог достичь N = 40000, после этого снова выбрасывается ошибка времени ожидания.Пожалуйста, помогите мне с любым более быстрым запросом или подходом.

for $each in cts:uri-match("/data/employee/*") return xdmp:document-set-collections($each, "employee")

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Пакетная обработка - это правильный вариант для выполнения задач такого типа. Используйте функцию xdmp:spawn-function() для одновременного размещения нескольких задач на сервере задач. Вам просто нужно указать количество записей, которые ваш запрос может завершить в течение 10 минут или 1 часа, как вам требуется.

Например, если запрос может выполнить 5000 записей в течение 10 минут:

let $total-records := xdmp:estimate(collection())
let $batch-size := 5000
let $pagination := 0
for $records in 1 to fn:ceiling($total-records  div $batch-size )
let $start := fn:sum($pagination + 1)
let $end := fn:sum($batch-size + $pagination)
let $_ := xdmp:set($pagination, $end)
return
  xdmp:spawn-function
  (
  function(),
  for $each in cts:uri-match("/data/employee/*")[$start to $end]
  return xdmp:document-set-collections($each, "employee")
  )
0 голосов
/ 12 ноября 2018

ml-gradle имеет поддержку OOTB, код не требуется. См. https://github.com/marklogic-community/ml-gradle/wiki/DMSDK-Tasks#trying-it-out и посмотрите на «mlAddCollections».

...