2013-02-04 4 views
8

Ich benutze Marklogic 4 und ich habe einige 15000 Dokumente (jeweils ca. 10 KB). Ich möchte den gesamten Inhalt als ein Dokument laden (und die gesamten Dokumente in eine einzige CSV-Datei konvertieren und zum Herunterladen an einen HTTP-Ausgabestream ausgeben). Während ich die Dokumente auf diese Weise lade:Vermeiden XDMP-EXPNTREECACHEFULL und Laden von Dokument

Der XPath hat einige 15000 xmls. So Fn: doc löst einen Fehler XDMP-EXPNTREECACHEFULL.

Gibt es eine Problemumgehung dafür? Ich kann die Größe des Baum-Caches in der Admin-Konsole nicht erhöhen, da sich die Anzahl der XML-Dateien in products/documents/*. Xml erhöhen kann.

Danke.

Antwort

8

Wenn Sie große Mengen von XML aus MarkLogic exportieren möchten, besteht die beste Technik darin, die Abfrage so zu schreiben, dass die Ergebnisse streamen und der erweiterte Baumcache vollständig vermieden wird. Es ist jedoch eine ganz andere Art der Codierung: Sie müssen starke Typisierung jeglicher Art vermeiden und Ihren Code neu gestalten, um FLWOR-Ausdrücke zu entfernen. Sie können auch keinen Code in cq oder qconsole testen.

Werfen Sie einen Blick auf http://blakeley.com/blogofile/2012/03/19/let-free-style-and-streaming/ für einige Tipps, wie Sie dorthin gelangen. Auf ein Minimum Sie das Codebeispiel geschrieben hätten werden:

doc(cts:uri-match('products/documents/*.xml')) 

Nebenbei würde ich versuchen, das zu überarbeiten den *.xml Teil zu vermeiden, weil es langsamer sein wird als nötig. Vielleicht so etwas?

cts:search(
    collection(), 
    cts:directory-query('products/documents/', 'infinity')) 

Wenn Sie nach etwas mehr als das Verzeichnis testen müssen, könnten Sie eine cts:and-query mit einigen cts:element-query Test hinzufügen.