超级账本PHANTOM_READ_CONFLICT .vs。 MVCC_READ_CONFLICT

时间:2018-08-21 14:16:52

标签: hyperledger-fabric hyperledger-composer

我曾经遇到MVCC_READ_CONFLICT错误,并且知道这是什么意思,但是最近我将其升级到企业版,并开始插入PHANTOM_READ_CONFLICT错误,PHANTOM_READ_CONFLICT是什么意思?确实尝试过搜索它,但无法找到任何有关它的信息。

它与MVCC_READ_CONFLICT有什么不同,我知道如何处理MVCC_READ_CONFLICT,但不知道如何处理PHANTOM_READ_CONFLICT,因为我不知道这是什么意思。

1 个答案:

答案 0 :(得分:3)

虚拟读取是指链码中有范围查询时,以及在提交时-范围查询会重新运行,其结果与链码执行期间的结果不同。

假设您进行范围查询,然后计算元素数并将结果写入键“ count”。 可能是在执行链码之后和提交之前-有人插入了一个新元素。如果在提交期间没有范围查询重新验证,则事务将写入错误的count值。

official documentation

  

此附加验证应确保没有密钥   在超级范围内插入/删除/更新(即,   范围)中查询信息中捕获的结果。换一种说法,   如果我们重新执行任何范围查询(即交易   在验证状态下进行验证期间)   它应该产生与交易观察到的结果相同的结果   在仿真时。此检查可确保是否有交易   在提交期间观察到幻影项,应标记交易   视为无效。请注意,此幻像保护仅限于范围   查询(即链码中的GetStateByRange函数)但尚未   为其他查询实现的(即,   链码)。其他查询存在幻像的风险,应   因此,仅可用于非   提交订购,除非应用程序可以保证   仿真和验证/提交之间结果集的稳定性   时间。