Marklogic - удаление коллекций с поддержкой версий
У меня около 43 миллионов документов, в которых есть последняя версия документа в коллекции LIVE, а также такой же документ с версией в другой коллекции версий с именем (/ collection / versionNumber). Я хочу удалить коллекции с поддержкой версий, которых около 34 миллионов. как лучше всего удалить все за один раз.
2 ответа
Вы можете попробовать использовать 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
Я думаю, ваше приложение использует библиотеку DLS для управления версиями. Если да, и если вы никогда не хотите, чтобы какая-либо версия проверялась в будущем, удалите только те документы, которые имеют версии. В этом случае можно использовать API "dls: document-unmanage".
Кроме того, перед продолжением ознакомьтесь с dls: purge и dls: document-purge. Я не очень уверен в этих двоих.
В любом случае, даже если это не DLS, их обработка за один раз (одна транзакция) не рекомендуется. Либо обрабатывайте их партиями, либо задавайте их все в разных потоках на сервере задач через spawn.