Transactions Marklogic MVCC:同步与非阻塞

Transactions Marklogic MVCC:同步与非阻塞,transactions,marklogic,mvcc,Transactions,Marklogic,Mvcc,我试图通过一个例子来理解同期和非阻塞参数。请让我知道我是否正确 假设我们在时间戳=10时有事务T1、T2、T3。 T1、T2、T3分别在30、40、50时提交。 如果查询事务发生在35: 对于同期: 查询读取T1已提交的版本,并使T2和T3等待,直到读取完成 对于非阻塞: 在50提交所有3个事务T1、T2、T3之后,查询将变为只读。如果您考虑在灾难恢复副本群集上进行查询,这是最容易理解和最重要的。在灾难恢复设置中,主服务器上的每个林都将其日志帧复制到副本上的匹配林。一个数据库中通常有多个林,而且

我试图通过一个例子来理解同期和非阻塞参数。请让我知道我是否正确

假设我们在时间戳=10时有事务T1、T2、T3。
T1、T2、T3分别在30、40、50时提交。 如果查询事务发生在35:

对于同期: 查询读取T1已提交的版本,并使T2和T3等待,直到读取完成

对于非阻塞:
在50提交所有3个事务T1、T2、T3之后,查询将变为只读。

如果您考虑在灾难恢复副本群集上进行查询,这是最容易理解和最重要的。在灾难恢复设置中,主服务器上的每个林都将其日志帧复制到副本上的匹配林。一个数据库中通常有多个林,而且由于复制是在林级别进行的,因此某些林的数据可能比其他林稍晚

现在想象一个(只读)查询进入复制副本上的数据库。你有两个选择。首先,您可以在拥有所有数据的最后一个时间戳运行查询(这是非阻塞的)。第二,您可以在看到任何数据的最后一个时间戳(在最远的林中)运行查询,并等待所有数据到达(对于其他林),这样您就可以获得稍后时间(即同时)的事务一致性视图

请注意,这两个选项在事务上是一致的。这只是关于数据库如何选择要运行查询的时间戳

只读查询总是无锁运行