8

私は marklogic 4 を使用しており、約 15000 のドキュメント (それぞれ約 10 KB) があります。コンテンツ全体をドキュメントとしてロードしたい (そして、ドキュメント全体を単一の csv ファイルに変換し、ダウンロード用に HTTP 出力ストリームに出力したい)。この方法でドキュメントをロードしている間:

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

xpath には、約 15000 の xml があります。したがって、 fn:docはエラーXDMP-EXPNTREECACHEFULLをスローします。

これに対する回避策はありますか? products/documents/*.xml内の xml ファイルの数が増える可能性があるため、管理コンソールでツリー キャッシュ サイズを増やすことができません。

ありがとう。

4

2 に答える 2

9

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:and-queryいくつかのcts:element-queryテストでを追加できます。

于 2013-02-04T07:19:51.940 に答える
4

このエラーに関する一般的な情報については、XDMP-EXPNTREECACHEFULL に関するMarkLogic ナレッジ ベースの記事を参照してください。

于 2013-12-17T16:32:17.507 に答える