我正在研究Marklogic Server中的單筆交易和多筆交易。除了多語句顯式提交的區別之外,還有什麼是其他的區別。我指的是可能出現的用例優先於其他用例。Marklogic的現實生活中的單筆交易和多筆交易的區別
直到現在對於兩個事務T1和T2,其中我需要在後續事務中的一個事務的結果,我總是對T1和T2使用xdmp:eval(),併爲T1和T1指定「不同事務」 T2。這可以說是單一語句還是多語句事務。
我正在研究Marklogic Server中的單筆交易和多筆交易。除了多語句顯式提交的區別之外,還有什麼是其他的區別。我指的是可能出現的用例優先於其他用例。Marklogic的現實生活中的單筆交易和多筆交易的區別
直到現在對於兩個事務T1和T2,其中我需要在後續事務中的一個事務的結果,我總是對T1和T2使用xdmp:eval(),併爲T1和T1指定「不同事務」 T2。這可以說是單一語句還是多語句事務。
這個問題似乎有點開放式的,但該文檔有一些討論:http://docs.marklogic.com/guide/app-dev/transactions#id_68542
爲交易最常見的用途是做與兩者之間的某個用戶或計算機交互的多個更新程序。您可以提交每個單獨的更新,但爲了保持一致性,您有時希望對這些更新進行集體提交/回滾。那就是當你需要跨越多個請求/語句的事務時。
您正在使用不同的交易,所以evals確實在不同的交易中運行。設置交易模式不會影響到這一點,你只需要對提交更加謹慎。實際上,doc中的所有例子都是指的,不要跨越語句。
如果您確實想要跨越多個報表/請求,則需要自行創建該事務,並傳遞該ID。有兩種可用於此的未記錄功能:xdmp:transaction-create
(不含參數)和eval的transaction-id
選項,它採用由transaction-create返回的標識。
請注意,事務內的語句是同步執行的,所以我想你也需要在eval中創建事務,只是爲了防止語句調用eval阻塞eval語句,導致死鎖。
HTH!