2016-04-26 2 views
5

2.2kt以上のテキストデータを返すxqueryファイルがあります。ブラウザ(Chrome)でxqueryファイルに直接アクセスすると、すべてのテキストデータが読み込まれます。xdmpを使用しているときにXDMP-TOOBIGエラーが発生します。http-post

しかし、私はxdmp:http-post($url,$options)を使ってそのxqueryファイルへのポストコールをしようとすると、XDMP-TOOBIGエラーがスローされます。以下はトレースです。

XDMP-TOOBIG: xdmp:http-post("http://server:8278/services/getText...", <options xmlns="xdmp:http"><timeout>600000</timeout><authentication method="basic"><usernam...</options>) -- Document size exceeds text document size limit of 2048 megabytes 
in /services/invoke.xqy, at 20:7 [1.0-ml] 
$HTTP_CALL = <configurations xmlns:config="" xmlns=""><credentails><username>admin</username><password>admin</password...</configurations> 
$userName = text{"admin"} 
$password = text{"admin"} 
$timeOut = text{"600000"} 
$url = "http://server:8278/services/getText..." 
$responseType = "text/plain" 
$options = <options xmlns="xdmp:http"><timeout>600000</timeout><authentication method="basic"><usernam...</options> 
$response = xdmp:http-post("http://server:8278/services/getText...", <options xmlns="xdmp:http"><timeout>600000</timeout><authentication method="basic"><usernam...</options>) 
$set-reponse-type =() 

xdmp:http-postまたは他のソリューションを使用したファイルで指定できる制限はありますか?

お手数ですが、

+0

エラーメッセージに示すように、2048MBを超えるテキストドキュメントを作成することはできません。おそらく、具体的な実装ではなく、達成しようとしていることについてもっと説明すれば、誰かが実行可能な代替案を提案することができます。 –

+0

これまで、レスポンスタイプがtext/plainのテキストデータを返す "server:8278/services/getText.xqy(Mocked)"という1つのURLをヒットしました。これは2 GB以上を返します。しかし今ではこのコードはawsクラスタに移されていますが、そこではポート8278へのアクセスはありませんが、awsにアクセスできるポートからhttpポートを呼び出すことができます。 invoke.xqyでは、xdmp:http-post()関数を使用しました。つまり、invoke.xqyはプロキシと似ています。これは限られたデータで動作し、2GBを超えるとTOOBIGエラーが発生します。これに対する解決策はありますか? – Karthick

答えて

0

HTTPを使用してMarkLogic内から外部サーバを呼び出す場合、結果はメモリに収まる必要があります。 テキスト変数は非常に大きなデータに対して最適化されていません。 (Range Request Headersを使用して)リモートサービスの内容によっては、ページ番号付きのHTTPリクエストを使用して、大規模なデータを収容することができ

2Gの制限が削除された場合であっても、パフォーマンスが低下し、信頼できないようになります:大量に転送するために、単一のHTTPリクエストを使用して深刻なネットワーキングエラーが完全な再試行を必要とするため、データの信頼性はますます低くなります。

また、サービスまたはローカルプロキシサービスを拡張して、マウントされたファイルシステムやS3などの共有場所にデータを格納し、本体ではなくデータへの参照を返すことができます。次に、xdmp:filesystem-xxxとxdmp:binary-xxx関数を使用してデータにアクセスできます。

大文字のデータを1つの文字列として操作すると問題があります。単一のラージオブジェクトにアクセスする必要がある場合は、バイナリドキュメント(内部または外部)を使用して信頼性を向上させることができます。

HTTP要求をPOSTではなくGETを使用して変換できる場合は、xdmp:document-loadを使用して結果をドキュメントに直接ストリームすることができます。

xdmp:document-loadのドキュメントへのコメントでは、このようにPOSTをどのように渡すのか分かりませんが、POSTまたはGET用の "rest:" URIプレフィックスを使用してデータベースに直接結果をストリーミングすることができます。

関連する問題