2013-02-04 41 views
8

我正在使用marklogic 4,我有一些15000個文件(每個大約10 KB)。我想將整個內容作爲文檔加載(並將整個文檔轉換爲單個csv文件並輸出到HTTP輸出流以供下載)。雖然我用這種方式加載文檔:避免XDMP-EXPNTREECACHEFULL和加載文件

let $uri := cts:uri-match('products/documents/*.xml') 
let $doc := fn:doc ($uri) 

xpath有一些15000 xmls。所以fn:doc引發錯誤XDMP-EXPNTREECACHEFULL

有沒有解決方法?我無法在管理控制檯中增加樹緩存大小,因爲products/documents/*。xml中的xml文件數可能會增加。

謝謝。

回答

8

當您想要從MarkLogic導出大量XML時,最好的方法是編寫查詢以便結果可以流式傳輸,從而完全避免擴展樹緩存。不過,這是一種非常不同的編碼風格:您必須避免使用任何類型的強類型,並重構代碼以刪除FLWOR表達式。您將無法測試cq或qconsole中的任何代碼。

看看http://blakeley.com/blogofile/2012/03/19/let-free-style-and-streaming/關於如何到達那裏的一些提示。至少您發佈將有代碼示例成爲:

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

順便我會嘗試返工,避免*.xml的一部分,因爲它會慢於需要。也許這樣?

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

如果你需要測試的東西比目錄的詳細,你可以用一些cts:element-query測試添加cts:and-query