Marklogic在现实生活场景中的单语句事务和多语句事务之间的区别

时间:2013-05-06 10:06:32

标签: transactions marklogic

我正在研究MarkLogic Server中的Single语句事务和多语句事务。除了多语句中显式提交的差异外,还有其他差异。我的意思是什么是可能的用例,其中一个比其他用例更受欢迎?

到目前为止,对于两个事务T1和T2,我需要在后续事务中使用一个事务的结果,我总是使用xdmp:eval()表示T1和T2,并将<database>指定为"different-transaction"对于T1和T2都是如此。

什么会说这是单一陈述或多语句交易?

2 个答案:

答案 0 :(得分:0)

这个问题似乎有些开放,但文档有一些讨论:http://docs.marklogic.com/guide/app-dev/transactions#id_68542

答案 1 :(得分:0)

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

您使用的是不同的交易,因此evals确实在不同的交易中运行。设置事务模式不会影响它,你只需要更加小心提交。实际上,doc mblakele中提到的所有例子都是指的,不要跨越语句。

如果您真的想跨越多个语句/请求,则需要自己创建事务,并传递该id。您可以使用两个未记录的功能:xdmp:transaction-create,它不接受参数,以及eval的transaction-id选项,它接受transaction-create返回的id。

但请注意,事务中的语句是同步执行的,所以我猜你也需要在eval中创建事务,只是为了防止调用eval的语句阻塞eval语句,导致死锁..

HTH!