首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarkLogic :使用xdmp.eval在数据库之间切换

MarkLogic :使用xdmp.eval在数据库之间切换
EN

Stack Overflow用户
提问于 2019-03-19 00:21:35
回答 1查看 87关注 0票数 0

MarkLogic版本: 9.0-6.2

我们有一个自定义REST API,它从STAGING中读取文档,然后在FINAL中更新一些文档,然后在STAGING文档上运行xdmp.documentRemoveCollections。

第1步:从登台数据库开始。阅读文档

步骤2:切换到最终数据库,将更改应用到最终数据库中的多个文档

步骤3:切换到STAGING DB,在步骤1中读取的文档上应用xdmp.documentRemoveCollections

我们使用xdmp.eval在数据库之间切换,但注意到服务超时,这可能是因为在数据库之间切换。(例如,如果我们删除xdmp.documentRemoveCollections步骤,则服务不会超时,这可能是因为它不必从最终阶段切换到分段阶段)

我们尝试使用协调流程,但行为并不一致,可能是因为最终的多个文档更新。

在数据库之间来回切换时,请建议在自定义REST API中是否有任何预防措施以避免超时。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2019-03-19 04:49:07

这种情况下的超时很可能是由于在同一事务中读取和写入同一文档。步骤3不应该必须‘切换’数据库它应该已经在相同的数据库中,唯一的开关是步骤2。这个工作流程很容易死锁而不需要特别注意。步骤2是否需要同步?如果没有,建议将其排队到任务服务器。1,3是否需要在同一事务中?步骤1可能持有它读取的文档上的锁--然后步骤3尝试等待锁释放以进行更新。尝试将步骤1强制为读事务,并验证它在步骤3之前是否保持这种状态。您可以在子事务中(单独)完全隔离所有步骤。推荐使用调用函数(或模块)而不是eval (使用字符串) --使用eval(“我通过连接用户输入构建的某个字符串”)很容易获得“xquery注入”行为(来自朋友或敌人)

您是否与其他活动(相同的REST调用或同一时间对同一DB的不同调用)同时执行此操作。

使用“查询控制台”来查看在什么时间打开了哪些事务。如果你看到一个“挂起”,那么几乎可以肯定的是,你会发现一个打开的事务正在潜伏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55225803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档