我曾经遇到MVCC_READ_CONFLICT错误,并且知道这是什么意思,但是最近我将其升级到企业版,并开始插入PHANTOM_READ_CONFLICT错误,PHANTOM_READ_CONFLICT是什么意思?确实尝试过搜索它,但无法找到任何有关它的信息。
它与MVCC_READ_CONFLICT有什么不同,我知道如何处理MVCC_READ_CONFLICT,但不知道如何处理PHANTOM_READ_CONFLICT,因为我不知道这是什么意思。
答案 0 :(得分:3)
虚拟读取是指链码中有范围查询时,以及在提交时-范围查询会重新运行,其结果与链码执行期间的结果不同。
假设您进行范围查询,然后计算元素数并将结果写入键“ count”。 可能是在执行链码之后和提交之前-有人插入了一个新元素。如果在提交期间没有范围查询重新验证,则事务将写入错误的count值。
此附加验证应确保没有密钥 在超级范围内插入/删除/更新(即, 范围)中查询信息中捕获的结果。换一种说法, 如果我们重新执行任何范围查询(即交易 在验证状态下进行验证期间) 它应该产生与交易观察到的结果相同的结果 在仿真时。此检查可确保是否有交易 在提交期间观察到幻影项,应标记交易 视为无效。请注意,此幻像保护仅限于范围 查询(即链码中的GetStateByRange函数)但尚未 为其他查询实现的(即, 链码)。其他查询存在幻像的风险,应 因此,仅可用于非 提交订购,除非应用程序可以保证 仿真和验证/提交之间结果集的稳定性 时间。