MarkLogic 回滚多个语句 explicitCommit
MarkLogic rollback multiple statements explicitCommit
1. declareUpdate({explicitCommit: true});
***************************************************
2. let failSafe = [];
3. xdmp.save(ARTIFACT_DIR + 'Geography-1.0-conv.xqy', es.instanceConverterGenerate(geoDesc));
4. failSafe.push("Geography baseline converter module is generated!");
5. xdmp.save(ARTIFACT_DIR + 'GISHealth-1.0-conv.xqy', es.instanceConverterGenerate(gisDesc));
6. failSafe.push("GISHealth baseline converter module is generated!");
7. xdmp.commit();
8. failSafe;
L5 预计会失败,因为:XDMP-AS: $model as map:map -- 无效强制转换:null as map:map。
我想知道如何实现这一点:L3 和 L5 必须同时成功(提交)或失败(回滚)。即使 L5 失败,L3 也不会回滚。
管理事务只是为了在数据库中持久化。
xdmp.save()
保存到本地E-node的文件系统,非事务性或跨集群共享。
相比之下,xdmp.documentInsert()
确实在数据库中插入。数据库操作被缓冲直到主模块完成,此时所有操作默认应用在单个事务中。
因此,在上面的示例中,不需要显式事务。要么两个文档插入都成功,要么都不成功。
显式事务对于在同一主模块或不同主模块的不同调用中保持事务打开以进行额外工作很有用。在可能的情况下,应避免显式事务,因为额外的复杂性、来自客户端的主机关联的必要性等等。
有没有可能xdmp.documentInsert()
可以满足您的要求?例如,通过将 XQuery 模块插入内容数据库以便稍后下载到另一个系统上的项目目录?
希望对您有所帮助,
1. declareUpdate({explicitCommit: true});
***************************************************
2. let failSafe = [];
3. xdmp.save(ARTIFACT_DIR + 'Geography-1.0-conv.xqy', es.instanceConverterGenerate(geoDesc));
4. failSafe.push("Geography baseline converter module is generated!");
5. xdmp.save(ARTIFACT_DIR + 'GISHealth-1.0-conv.xqy', es.instanceConverterGenerate(gisDesc));
6. failSafe.push("GISHealth baseline converter module is generated!");
7. xdmp.commit();
8. failSafe;
L5 预计会失败,因为:XDMP-AS: $model as map:map -- 无效强制转换:null as map:map。 我想知道如何实现这一点:L3 和 L5 必须同时成功(提交)或失败(回滚)。即使 L5 失败,L3 也不会回滚。
管理事务只是为了在数据库中持久化。
xdmp.save()
保存到本地E-node的文件系统,非事务性或跨集群共享。
相比之下,xdmp.documentInsert()
确实在数据库中插入。数据库操作被缓冲直到主模块完成,此时所有操作默认应用在单个事务中。
因此,在上面的示例中,不需要显式事务。要么两个文档插入都成功,要么都不成功。
显式事务对于在同一主模块或不同主模块的不同调用中保持事务打开以进行额外工作很有用。在可能的情况下,应避免显式事务,因为额外的复杂性、来自客户端的主机关联的必要性等等。
有没有可能xdmp.documentInsert()
可以满足您的要求?例如,通过将 XQuery 模块插入内容数据库以便稍后下载到另一个系统上的项目目录?
希望对您有所帮助,