为什么在VoltDB中进行网络分区时允许脏读?

时间:2019-03-06 02:51:22

标签: voltdb

我是首尔国立大学的博士研究生。我叫崔石元我对研究论文印象深刻(网络分区故障分析)。我希望在实验室研讨会时向我的实验室成员介绍这篇论文。

但是,我阅读了您的研究论文和演示幻灯片。我有一个问题。

为什么读取操作读取VoltDB中的Y值?实际上复制失败,所以写入失败。为什么要更新本地存储中的Y值?

和读取操作读取本地更新的值Y?

我认为读取操作应该读取提交值(成功写入:在这种情况下->值X)。

我尝试找到VoltDB文档。它可以允许在VoltDB中进行脏读。为什么在VoltDB中进行网络分区时允许脏读?

有什么理由要这样工作吗?

我附上了网络分区时脏读的图片

谢谢

最好的问候

崔石元enter image description here

1 个答案:

答案 0 :(得分:3)

VoltDB不允许脏读。在您的图片中,您显示了一个3节点群集,其中1个节点与其他2个节点进行了分区,而单个节点是分区主节点。

事件1:网络分区 事件2:写入少数(并且您显示写入失败,这是正确的) 事件3:从少数族裔读取(并且您显示的是脏读,这是不正确的)。

事件3是不可能的。从其他两个分区中分离出来的单个节点将关闭其客户端接口,然后崩溃,从不允许事件3发生。

几年前,我们进行了Jepsen测试,并修复了V6.4中的一个缺陷,该缺陷在某些情况下会允许从事件#3中读取脏内容。有关VoltDB提供的担保,我们进行的Jepsen测试以及为通过测试而修复的缺陷的完整详细信息,请参见https://aphyr.com/posts/331-jepsen-voltdb-6-3https://www.voltdb.com/blog/2016/07/12/voltdb-6-4-passes-official-jepsen-testing/

披露:我为VoltDB工作。