实际上我有一组json文件(即Total:1M,大小为500MB)。每个json文件有18个密钥。我尝试使用以下Javascript
实现Envelope模式'use strict';
declareUpdate()
var docs = fn.collection("input");
for(var doc of docs) {
var transformed = {};
transformed.Metadata = { "Last Used" : ""};
transformed.Updated = { "University" : "UCLA"}
transformed.Source = doc; //Sending original data under Source section
xdmp.nodeReplace(doc,transformed)
}
我尝试使用marklogic 9的JAVA API调用此JS.sjs
但是我遇到了以下错误:
Exception in thread "main" com.marklogic.client.FailedRequestException: Local message: failed to apply resource at invoke: Internal Server Error. Server Message: XDMP-EXPNTREECACHEFULL: for(var doc of docs) { -- Expanded tree cache full on host localhost uri file.json-0-968991
at com.marklogic.client.impl.OkHttpServices.checkStatus(OkHttpServices.java:4317)
at com.marklogic.client.impl.OkHttpServices.postIteratedResourceImpl(OkHttpServices.java:3831)
at com.marklogic.client.impl.OkHttpServices.postEvalInvoke(OkHttpServices.java:3768)
at com.marklogic.client.impl.ServerEvaluationCallImpl.eval(ServerEvaluationCallImpl.java:164)
at com.marklogic.client.impl.ServerEvaluationCallImpl.eval(ServerEvaluationCallImpl.java:153)
at com.marklogic.client.impl.ServerEvaluationCallImpl.evalAs(ServerEvaluationCallImpl.java:144)
at bulkimport.Tsm.main(Tsm.java:19)
我浏览了MarkLogic Documentation,他们在那里提到了解决此错误的方法。之后我将expanded tree cache size*
增加到2048
,但我仍面临同样的错误。
如何通过上述代码(即JS.sjs
)进行优化以避免此错误?
感谢任何帮助。
答案 0 :(得分:1)
您正尝试一次更新所有文档。那不会扩大规模。您需要以某种方式将工作负载分成更小的部分,并分批处理大约500到1000个文件。
有几种方法可以做到这一点,但正如本电子邮件回复中所建议的,DMSDK可能是目前最好的方法之一:http://markmail.org/message/ua6fyaztctx6syrw。
有关DMSDK的教程,请参阅:http://developer.marklogic.com/learn/data-movement-sdk
有关指南,请参阅:https://docs.marklogic.com/guide/java/data-movement
HTH!