Fabric++ 的缺陷是只关注同一区块的并发,没有关注不同区块之间的并发。
区块链的快照:区块链快照是指提交块后区块链的状态。
设M为提交块的序列号,然后将对应的快照表示为M,即具有序列号(M+1、0)。(个人理解,区块是从0块创世块出来的,序列号是从1开始的)(第二位固定为0,没指明哪个事务就默认0表示。是为了表示transaction timestamps)。
快照一致性:如果存在区块链快照M,从中读取所有事务记录的是一致的。
跨块读取(在之前的系统中跨块读取时不允许的,但是现在的读取中,可能存在这个读 在之后的块中并没有改变。所以交易是可以交易成功的)。
开始时间戳:事务Txn的开始时间戳,由StartTs(Txn)表示,是其读取快照的序号。
结束时间戳:交易Txn的结束时间戳,由EndTs(Txn)表示,是它在块中的序列号,由协商一致决定。
并发事务:如果两个事务Txn1和Txn2的执行重叠,则说它们是并发的。
写写冲突(w(A),W(A)),读写冲突(R(A),W(A))。反读写(先写后读)
可序列化分析:根据的冲突序列化性定理,可序列化事务调度的效果等效于任何尊重依赖顺序的序列化事务历史记录。(可序列化事务的依赖图都是无环的)
强可序列化:如果事务计划的效果等效于符合由事务结束时间戳确定的序列化历史记录,则其计划具有强序列化顺序。(时间戳决定事务的先后顺序)
定理:没有anti-rw 的事务能够实现强可序列化。
重排序分析:重排序只发生在并发的事务之间。
在重新排序后,事务不会改变其相对于其他事务的并发关系。
定理:如果两个事务Txn1和Txn2显示出crw或反rw依赖性,则切换它们的提交顺序不会影响它们的依赖性顺序。(交换顺序,先后变化,依赖不变)
定理:如果两个事务Txn1和Txn2显示出c-ww依赖性,则切换它们的提交顺序会翻转它们的依赖性顺序。
定理:如果存在没有涉及挂起事务的c-ww依赖性的周期,则不能将事务计划重新排序为可序列化。
细粒度的并发控制:EOV区块链中细粒度并发控制的以下三个步骤。
1.对于新事务,我们首先考虑所有(待处理)挂起事务(包括新事务)中的所有依赖关系。然后,如果存在依赖环路,我们将直接删除新的事务。
2.在块形成时,我们检索计算出的依赖关系的等待事务的顺序。
3.基于检索策略,我们恢复c-ww依赖到等待事务中。