Marklogic MVCC:同步与非阻塞
Marklogic MVCC :contemporaneous vs non-blocking
我想借助一个例子来理解同步参数和非阻塞参数。如果我是正确的,请告诉我。
假设我们有事务 T1、T2、T3 发生在时间戳 = 10。
T1、T2、T3 分别在 30、40、50 提交。
如果查询交易在 35:
同期:
查询读取已提交 T1 的版本,并让 T2 和 T3 等待读取完成。
对于非阻塞:
在所有 3 个事务 T1、T2、T3 在 50 提交后,查询变为只读。
如果您考虑在灾难恢复副本集群上查询,这是最容易理解和最重要的。在 DR 设置中,主服务器上的每个林都将其日志帧复制到副本上的匹配林。一个数据库中通常有多个林,并且由于复制是在林级别进行的,所以一些林的数据可能比其他林稍晚一些。
现在想象一个(只读)查询进入副本上的数据库。你有两个选择。第一,您可以 运行 在您拥有所有数据(非阻塞)的最后一个时间戳处的查询。第二,您可以 运行 在您看到任何数据的最后一个时间戳(在最远的森林中)的查询并等待所有数据到达(对于其他森林),这样您可以获得事务一致的视图后来的时间(那是同时期的)。
请注意,这两个选项在事务上是一致的。这只是关于数据库如何选择您希望查询的时间戳 运行.
只读查询总是运行无锁。
我想借助一个例子来理解同步参数和非阻塞参数。如果我是正确的,请告诉我。
假设我们有事务 T1、T2、T3 发生在时间戳 = 10。
T1、T2、T3 分别在 30、40、50 提交。
如果查询交易在 35:
同期: 查询读取已提交 T1 的版本,并让 T2 和 T3 等待读取完成。
对于非阻塞: 在所有 3 个事务 T1、T2、T3 在 50 提交后,查询变为只读。
如果您考虑在灾难恢复副本集群上查询,这是最容易理解和最重要的。在 DR 设置中,主服务器上的每个林都将其日志帧复制到副本上的匹配林。一个数据库中通常有多个林,并且由于复制是在林级别进行的,所以一些林的数据可能比其他林稍晚一些。
现在想象一个(只读)查询进入副本上的数据库。你有两个选择。第一,您可以 运行 在您拥有所有数据(非阻塞)的最后一个时间戳处的查询。第二,您可以 运行 在您看到任何数据的最后一个时间戳(在最远的森林中)的查询并等待所有数据到达(对于其他森林),这样您可以获得事务一致的视图后来的时间(那是同时期的)。
请注意,这两个选项在事务上是一致的。这只是关于数据库如何选择您希望查询的时间戳 运行.
只读查询总是运行无锁。