Marklogic — удаление коллекций с версиями

#xquery #marklogic #mlcp #marklogic-corb

#xquery #marklogic #mlcp #marklogic-corb

Вопрос:

У меня около 43 миллионов документов, в ТЕКУЩЕЙ коллекции которых есть документ с последней версией, а также документ с той же версией в другой коллекции версий, названной как (/ collection / VersionNumber). Я хочу удалить коллекции с версиями, которых около 34 миллионов. каков наилучший подход к удалению всего за один раз.

Ответ №1:

Вы могли бы попробовать использовать xdmp:collection-delete() для удаления всех документов в коллекции за одну транзакцию.

Если это не сработает и он не сможет удалить за один раз, то я бы предпочел использовать пакетные инструменты. Например, задание CoRB.

Пример файла параметров задания с необходимыми свойствами, за исключением XCC-CONNECTION-URI :

 # Inline module to select all URIs from the collection
URIS-MODULE=INLINE-XQUERY|let $uris := cts:uris("",(),cts:collection-query("/collection/versionNumber")) return (count($uris), $uris)

# Inline module to delete the docs
PROCESS-MODULE=INLINE-XQUERY|declare variable $URI as xs:string external; xdmp:document-delete($URI)

THREAD-COUNT=10
  

Ответ №2:

Я думаю, что ваше приложение использует библиотеку DLS для управления версиями. Если да, и если вы никогда не хотите, чтобы какая-либо версия просматривалась в будущем, то удаляйте только документы с версиями. В этом случае можно использовать API «dls: document-unmanage».

Кроме того, изучите dls: purge и dls: document-purge, прежде чем продолжить. Я не очень уверен в этих двух.

В любом случае, даже если это не DLS, обработка их за один раз (одна транзакция) не была бы рекомендуемым способом. Либо обрабатывайте их пакетами, либо устанавливайте их все в разных потоках на сервере задач через spawn.

Комментарии:

1. мы не используем DLS, и даже я знаю о spawn, это снова займет значительное количество времени.