我正在研究 MarkLogic Server 中的单语句事务和多语句事务。除了多语句中显式提交的区别外,还有什么区别。我的意思是在哪些可能的用例中一个比另一个更受欢迎?
到目前为止,对于两个事务 T1 和 T2,我需要在后续事务中得到一个事务的结果,我总是将T1 和 T2 用于 T1 和 T2 xdmp:eval()
,并指定<database>
为"different-transaction"
T1 和 T2。
单语句或多语句事务会怎么说?
我正在研究 MarkLogic Server 中的单语句事务和多语句事务。除了多语句中显式提交的区别外,还有什么区别。我的意思是在哪些可能的用例中一个比另一个更受欢迎?
到目前为止,对于两个事务 T1 和 T2,我需要在后续事务中得到一个事务的结果,我总是将T1 和 T2 用于 T1 和 T2 xdmp:eval()
,并指定<database>
为"different-transaction"
T1 和 T2。
单语句或多语句事务会怎么说?
事务最常见的用途是通过一些用户或机器交互进行多次更新。您可以提交每个单独的更新,但为了保持一致性,您有时希望对这些更新进行集体提交/回滚。那是当您需要可以跨越多个请求/语句的事务时。
您正在使用不同的事务,因此评估确实在不同的事务中运行。设置事务模式不会影响这一点,您只需要更加小心提交。实际上,文档 mblakele 中提到的所有示例也都在引用,不要跨越语句。
如果您真的想跨越多个语句/请求,则需要自己创建事务,并传递该 id。您可以为此使用两个未记录的功能:xdmp:transaction-create
不带参数transaction-id
的 eval 选项和 eval 选项,它采用 transaction-create 返回的 id。
但是请注意,事务中的语句是同步执行的,所以我想您也需要在 eval 中创建事务,只是为了防止调用 eval 的语句阻塞 eval 语句,从而导致死锁..
!
这个问题似乎有点开放,但文档有一些讨论:http ://docs.marklogic.com/guide/app-dev/transactions#id_68542