Marklogic 使用XDMP:http post时发生XDMP-TOOBIGH错误

Marklogic 使用XDMP:http post时发生XDMP-TOOBIGH错误,marklogic,marklogic-7,Marklogic,Marklogic 7,我有一个xquery文件,它返回超过2.2GB的文本数据。当我直接在浏览器(Chrome)中点击xquery文件时,它会加载所有文本数据 但是,当我尝试使用xdmp:httppost($url$options)对该xquery文件进行post调用时,它会抛出xdmp-TOOBIG错误。下面是线索 XDMP-TOOBIG: xdmp:http-post("http://server:8278/services/getText...", <options xmlns="xdmp:http"&g

我有一个xquery文件,它返回超过2.2GB的文本数据。当我直接在浏览器(Chrome)中点击xquery文件时,它会加载所有文本数据

但是,当我尝试使用
xdmp:httppost($url$options)
对该xquery文件进行post调用时,它会抛出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-TOOBIG:XDMP:http post(“http://server:8278/services/getText...“,600000当使用HTTP从MarkLogic内部调用外部服务器时,结果必须放入内存,可能有多个副本,具体取决于您的操作。
文本变量未针对超大数据进行优化。根据远程服务的详细信息,您可以通过使用分页HTTP请求(使用)来容纳大数据

即使取消2G限制,性能也会很差且不可靠:使用单个HTTP请求传输大量数据变得越来越不可靠,因为任何严重的网络错误都需要完全重试

或者,可以扩展服务或本地代理服务,以将数据存储在共享位置,如已装载的fileysystem或S3,并返回对数据的引用,而不是其主体。然后可以使用xdmp:filesystem xxx和xdmp:binary xxx函数访问数据

一旦进入内存,将大型文本数据作为单个字符串进行操作也会有问题。如果需要访问单个大型对象,则可以使用二进制文档(内部或外部)以提高可靠性

如果HTTP请求可以转换为使用GET not POST,那么可以使用xdmp:document load将结果直接流式传输到文档中


对文档的评论建议可以使用“rest:”POST或GET to stream结果的uri前缀直接传递到数据库,尽管我不知道如何以这种方式传递POST。

正如错误消息所示,您不能拥有大于2048MB的文本文档。如果您详细解释您试图实现的内容,而不是您的特定实现,可能会有人n建议一个可行的替代方案。以前我们经常点击一个URL“server:8278/services/getText.xqy(Mocked)”它返回响应类型为text/plain的文本数据。这返回的数据超过2 GB。但现在,此代码被移动到aws群集,在该群集中,我们无法访问端口8278。但我们可以从一个可以访问aws的端口对该端口进行http调用。在invoke.xqy中,我使用了xdmp:http-post()函数,这意味着invoke.xqy就像代理一样。这适用于有限的数据,如果返回的数据超过2GB,则会发生太大的错误。有解决方案吗?