我过去经常得到MVCC_READ_CONFLICT错误,并且知道这意味着什么,但是最近我将它升级到企业版本,并开始在PHANTOM_READ_CONFLICT错误中获取,PHANTOM_READ_CONFLICT是什么意思?曾试图搜索它,但没有找到任何关于它的东西。
另外,它与MVCC_READ_CONFLICT有什么不同,我知道如何处理MVCC_READ_CONFLICT,但不知道PHANTOM_READ_CONFLICT,因为我不知道它意味着什么。
发布于 2018-08-21 14:41:40
幻影读取是当您在链码中有一个范围查询时,并且在提交时,范围查询被重新运行,并且结果与您在链码执行过程中得到的结果不同。
假设您执行了一个范围查询,然后计数元素的数量,并将结果写入一个键" count“。可能是在链码执行之后和提交之前-有人插入了一个新元素。如果在提交期间没有范围查询重新验证,事务就会写入计数的错误值。
来自正式文件:
这个额外的验证应该确保在查询-info中捕获的结果的超级范围(即范围的合并)中没有插入/删除/更新任何键。换句话说,如果我们在对提交状态的验证过程中重新执行任何范围查询(在模拟期间执行的事务),那么它应该产生与模拟时事务所观察到的结果相同的结果。此检查确保如果事务在提交期间观察到幻象项,则应将事务标记为无效。请注意,此幻影保护仅限于范围查询(即链码中的GetStateByRange函数),尚未为其他查询(即链码中的GetQueryResult函数)实现。其他查询存在幻影风险,因此只应用于未提交排序的只读事务,除非应用程序能够保证模拟和验证/提交时间之间的结果集的稳定性。
https://stackoverflow.com/questions/51950726
复制相似问题