我试图借助示例来了解同时和非阻塞参数。请让我知道我是否正确。
假设我们有事务T1,T2,T3在时间戳= 10处发生。
T1,T2,T3分别提交于30、40、50。
如果查询事务在35进行:
对于同期:
该查询读取已提交T1的版本,并保持T2和T3等待读取完成。
对于非阻塞:
只有将所有3个事务T1,T2,T3都提交为50后,查询才能读取。
最佳答案
如果您考虑在灾难恢复副本群集上进行查询,这是最容易理解且最重要的事情。在灾难恢复设置中,主数据库上的每个林都将其日志帧复制到副本上的匹配林中。数据库中通常有多个目录林,并且由于复制处于目录林级别,因此某些目录林的数据可能比其他目录林稍晚。
现在想象一个(只读)查询进入副本数据库中。您有两种选择。一种,您可以在拥有所有数据的最后一个时间戳上运行查询(这是非阻塞的)。第二,您可以在最后一个时间戳上运行查询,以查看任何数据(在最远的森林中),然后等待所有数据到达(对于其他森林),这样您就可以在以后的时间中获得事务一致的视图(那是同时代的)。
请注意,这两个选项在事务上都是一致的。这与数据库如何选择要运行查询的时间戳有关。
只读查询始终无锁运行。
关于transactions - Marklogic MVCC:同期与非阻塞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44804476/