Одним из вариантов может быть выполнение задания CORB , которое разделит работу на отдельные исполнения модуля с несколькими потоками.
Это позволило бы избежать вероятности ошибок расширенного кэша дерева, поскольку каждый документ обрабатывается в одном модуле, а результаты затем собираются в файл. Вы также можете включить опцию DISK-QUEUE , которая позволяет обрабатывать чрезвычайно большой набор URI без необходимости помещать их все в память в JVM.
Задание CORB выберет все URI документов, которые находятся в коллекции и содержат элемент, о котором вы хотите сообщить в URIS-MODULE . МОДУЛЬ ПРОЦЕССА возвращает значения из этих Cost
элементов. Сконфигурируйте задание, чтобы записать результаты модуля процесса в один файл, используя PROCESS-TASK , а затем используйте POST-BATCH-TASK для сортировки и дедупликации значений.
Ниже приведен пример файла опций CORB для настройки работы для достижения желаемого. Вам нужно настроить XCC-CONNECTION-URI для подключения к вашей базе данных.
# how to connect to the database
XCC-CONNECTION-URI=xcc://myUsername:myPassword@localhost:8200
# An inline XQuery module to find the URIs of docs that have a Cost element and are in the myCollection
URIS-MODULE=INLINE-XQUERY|declare variable $URIS := cts:uris("", (), cts:and-query(( cts:collection-query("myCollection"), cts:element-query(xs:QName("Cost"), cts:true-query()) )) ); count($URIS), $URIS
# for every URI, extract and return the value of the Cost element(s)
PROCESS-MODULE=INLINE-XQUERY|declare variable $URI as xs:string external; fn:doc($URI)//Cost/string()
# write the results of the process module execution to a file
PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask
# the name of the output file to write (use full path, or also use EXPORT-FILE-DIR)
EXPORT-FILE-NAME=cost-values.txt
# after batch processing is complete, modify the output file with a post-batch-task
POST-BATCH-TASK=com.marklogic.developer.corb.PostBatchUpdateFileTask
# sort and dedup the values in the export file
EXPORT-FILE-SORT=ascending|distinct
# how many threads you want processing the docs
THREAD-COUNT=10
DISK-QUEUE=true
# A location to store temporary files required for the disk queue, sorting and dedup, etc. (default is Java temp dir)
#TEMP-DIR=/temp
# Override the TEMP-DIR location with a different path to be used for the DISK-QUEUE
#DISK-QUEUE-TEMP-DIR=