在MarkLogic 9

时间:2018-01-24 09:19:18

标签: javascript marklogic java-api

实际上我有一组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)进行优化以避免此错误?

感谢任何帮助。

1 个答案:

答案 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!