MarkLogic Как вставить документ в указанный лес

#marklogic

Вопрос:

У меня в базе данных есть дубликаты URI. Я хочу проверить, повторив проблему с одним и тем же URI в разных лесах моей test-dup базы данных, но она выдает ошибки. Похоже, я не могу назначить URI в лесу.

1.0-ml] XDMP-БЛОКИРОВКА МЕСТА РАЗМЕЩЕНИЯ: xdmp:вставка документа(«/xquery/catalog.xml», 557………, (), (), 0, (xs:unsignedLong(«13222250964842568399»), xs:unsignedLong(«15490631252765310070»))) — Быстрая блокировка не может использоваться с ключами от места.

 xquery version "1.0-ml";
let $XML:=<catalog>
             <product dept="WMN">
             <number>557</number>
             <name language="en">Fleece Pullover</name>
             <colorChoices>navy black</colorChoices>
</product>
let $filename:= "/xquery/catalog.xml"
return
xdmp:document-insert($filename,$XML,(),(),0,xdmp:database-forests(xdmp:database("test-dup")) )
 

Ответ №1:

Установлена ли в вашей базе данных отметка времени «быстро»?

Чтобы загрузить документ в лес, явно указав ключ леса, лес должен существовать и быть присоединен к базе данных, в которую вы загружаете. Попытка загрузить документ в лес, который не принадлежит базе данных контекста, вызовет исключение. Кроме того, параметр блокировки должен быть установлен в строгое значение для конфигурации базы данных, в противном случае возникает исключение XDMP-PLACEKEYSLOCKING.

Если вы измените его на strict , то вы не увидите ошибку, но все равно не получите дубликатов.

Простой способ воспроизвести проблему с дубликатом документа-это:

  1. убедитесь, что балансировщик отключен
  2. отсоедините один из лесов test-dup (т. е. test-dup1)
  3. вставьте свой документ
  4. отсоедините лес, в который он был вставлен (т. е. тест-dup2)
  5. повторно прикрепите тестовый лес dup1
  6. вставьте документ еще раз
  7. прикрепите леса test-dup1 и test-dup2

Теперь у вас будут дубликаты документов для одного и того же URI, так как он будет находиться как в лесах test-dup1, так и в лесах test-dup2.