Transactions Marklogic现实场景中单语句事务与多语句事务的区别

Transactions Marklogic现实场景中单语句事务与多语句事务的区别,transactions,marklogic,Transactions,Marklogic,我正在研究MarkLogic Server中的单语句事务和多语句事务。除了在多语句中显式提交的区别之外,还有哪些区别。我的意思是,在哪些可能的用例中,一个比另一个更受欢迎 到目前为止,对于两个事务T1和T2,其中我需要后续事务中一个事务的结果,我始终使用T1和T2的xdmp:eval(),并将T1和T2的指定为“不同事务” 单语句或多语句事务是什么意思?这个问题似乎有点没有定论,但文档中有一些讨论:事务最常见的用途是通过用户或机器之间的交互进行多个更新。您可以提交每个单独的更新,但为了一致性,您

我正在研究MarkLogic Server中的单语句事务和多语句事务。除了在多语句中显式提交的区别之外,还有哪些区别。我的意思是,在哪些可能的用例中,一个比另一个更受欢迎

到目前为止,对于两个事务T1和T2,其中我需要后续事务中一个事务的结果,我始终使用T1和T2的
xdmp:eval()
,并将T1和T2的
指定为
“不同事务”


单语句或多语句事务是什么意思?

这个问题似乎有点没有定论,但文档中有一些讨论:

事务最常见的用途是通过用户或机器之间的交互进行多个更新。您可以提交每个单独的更新,但为了一致性,您有时希望对这些更新执行集体提交/回滚。此时您需要跨多个请求/语句的事务

您使用的是不同的事务,因此evals实际上是在不同的事务中运行的。设置事务模式不会影响这一点,您只需要更加小心地进行提交。实际上,mblakele文件中提到的所有示例也都是指,不要跨越语句

如果您确实希望跨越多个语句/请求,则需要自己创建事务,并传递该id。有两个未记录的功能可用于此操作:
xdmp:transaction create
,它不接受任何参数;eval的
事务id
选项,它接受事务创建返回的id

不过请注意,事务中的语句是同步执行的,因此我猜您也需要在eval中创建事务,以防止调用eval的语句阻塞eval语句,从而导致死锁