CN115098228B - 事务处理方法、装置、计算机设备及存储介质 - Google Patents
事务处理方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN115098228B CN115098228B CN202110546080.0A CN202110546080A CN115098228B CN 115098228 B CN115098228 B CN 115098228B CN 202110546080 A CN202110546080 A CN 202110546080A CN 115098228 B CN115098228 B CN 115098228B
- Authority
- CN
- China
- Prior art keywords
- transaction
- target
- category
- concurrent
- data exception
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003860 storage Methods 0.000 title claims abstract description 36
- 238000003672 processing method Methods 0.000 title claims abstract description 34
- 238000012545 processing Methods 0.000 claims abstract description 79
- 230000008859 change Effects 0.000 claims abstract description 71
- 238000000034 method Methods 0.000 claims abstract description 65
- 238000004590 computer program Methods 0.000 claims description 26
- 230000015654 memory Effects 0.000 claims description 14
- 238000005096 rolling process Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 16
- 238000010586 diagram Methods 0.000 description 67
- 238000005516 engineering process Methods 0.000 description 32
- 238000002955 isolation Methods 0.000 description 27
- 238000004422 calculation algorithm Methods 0.000 description 26
- 238000006243 chemical reaction Methods 0.000 description 16
- 230000005856 abnormality Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 230000009467 reduction Effects 0.000 description 11
- 230000002159 abnormal effect Effects 0.000 description 8
- 239000008186 active pharmaceutical agent Substances 0.000 description 8
- 238000002360 preparation method Methods 0.000 description 7
- 230000007704 transition Effects 0.000 description 7
- 230000000903 blocking effect Effects 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000001364 causal effect Effects 0.000 description 2
- 230000001149 cognitive effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000003776 cleavage reaction Methods 0.000 description 1
- 238000012517 data analytics Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000007017 scission Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/481—Exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5021—Priority
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种事务处理方法、装置、计算机设备及存储介质。在确定目标事务的并发事务后,在该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空的情况下,对目标事务与并发事务是否冲突进行判断,若目标事务与并发事务冲突,则根据这两个事务所作用的相同变量以及相同变量的版本变更次数,来确定数据异常类型。这种方式能够在目标事务的执行过程中,确认目标事务与并发事务是否真正构成冲突,进一步地,通过两个事务所作用的相同变量来确定数据异常类型,能够基于可串行化理论,识别数据库系统中各种各样的数据异常,保证数据状态的一致性,从而提高数据库系统的事务处理效率。
Description
技术领域
本申请涉及数据库技术领域,特别涉及一种事务处理方法、装置、计算机设备及存储介质。
背景技术
随着数据库技术的发展,在数据库系统中如何识别数据异常成为了一个关键问题。目前有两种识别数据异常的方法,其一是利用封锁技术,依赖锁的互斥机制,来识别数据异常,其二是利用依赖图技术,在由并发事务构成的依赖图中确认是否存在环,如果存在环,则说明存在数据异常。然而,封锁技术严重限制了数据库系统的并发度,导致事务处理效率低下,而依赖图技术又需要遍历每个并发事务以识别出环的存在,导致事务处理效率仍然不高。因此,亟需一种能够提升事务处理效率的事务处理方法。
发明内容
本申请实施例提供了一种事务处理方法、装置、计算机设备及存储介质,能够提高数据库系统的事务处理效率。该技术方案如下:
一方面,提供了一种事务处理方法,该方法包括:
确定目标事务的并发事务,该并发事务与该目标事务中存在作用于同一变量的读写操作,该目标事务为待提交事务;
若该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空,且该目标事务与该并发事务冲突,则基于该目标事务和该并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,该目标变量列表包括该目标事务和该并发事务所作用的相同变量。
另一方面,提供了一种事务处理装置,该装置包括:
第一确定模块,用于确定目标事务的并发事务,该并发事务与该目标事务中存在作用于同一变量的读写操作,该目标事务为待提交事务;
第二确定模块,用于若该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空,且该目标事务与该并发事务冲突,则基于该目标事务和该并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,该目标变量列表包括该目标事务和该并发事务所作用的相同变量。
在一种可选地实现方式中,该装置还包括:
第三确定模块,用于从该目标事务和该并发事务中,确定待回滚的事务;
回滚模块,用于对该待回滚的事务进行回滚。
在一种可选地实现方式中,该第三确定模块用于:
按照事务优先级,将该目标事务和该并发事务中事务优先级低的事务确定为该待回滚的事务。
在一种可选地实现方式中,该第三确定模块用于下述任一项:
若该目标事务和该并发事务中任一事务的处理时长小于其他事务,则将该任一事务确定为该待回滚的事务;
若该目标事务和该并发事务中任一事务为读事务,将该读事务确定为待回滚的事务;
若该目标事务和该并发事务中任一事务为写事务,且该写事务的处理时长小于参考时长,则将该写事务确定为该待回滚的事务。
在一种可选地实现方式中,该第三确定模块用于:
若该目标事务与该并发事务中任一事务所作用的变量数量大于其他事务,则将该任一事务确定为待回滚的事务。
在一种可选地实现方式中,该装置还包括:
删除模块,用于删除目标冲突环图中该待回滚的事务所作用的变量以及对应的读写操作,其中,该目标冲突环图中的顶点用于表示事务对应的事务标识以及事务对应的读写操作所作用的变量,该目标冲突环图中的边用于表示事务之间的关联关系以及变量之间的版本变化。
在一种可选地实现方式中,该装置还包括:
获取模块,用于获取该目标事务与该并发事务之间的该目标冲突环图。
在一种可选地实现方式中,该获取模块包括:
获取单元,用于获取该目标事务与该并发事务之间的第一冲突环图,该第一冲突环图中的顶点用于表示事务对应的事务标识,该第一冲突环图中的边用于表示事务之间的关联关系以及事务对应的读写操作所作用的变量;
第一转换单元,用于对该第一冲突环图进行转换,得到第二冲突环图,该第二冲突环图中的顶点用于表示多个不同版本的变量,该第二冲突环图中的边用于表示变量之间的版本变化以及同一事务所作用的变量;
第二转换单元,用于对该第二冲突环图进行转换,得到该目标冲突环图。
在一种可选地实现方式中,该第一转换单元用于:
对该第一冲突环图的边进行拆分,得到该多个不同版本的变量;
将该多个不同版本的变量作为顶点,在相邻版本的同一变量对应的顶点之间添加边,在同一事务所作用的变量对应的顶点之间添加边,得到该第二冲突环图。
在一种可选地实现方式中,该第二转换单元用于:
将该第二冲突环图中同一事务所作用的变量对应的顶点进行合并,将合并后的顶点命名为事务对应的事务标识;
在相邻顶点之间添加边,得到第三冲突环图;
若该第三冲突环图的任意两个相邻顶点中存在相同版本的变量,将该任意两个相邻顶点合并,删去合并后的顶点中的该相同版本的变量,得到该目标冲突环图;若该第三冲突环图的任意两个相邻顶点中存在不同版本的同一变量,将该任意两个相邻顶点合并,得到该目标冲突环图。
在一种可选地实现方式中,该装置还包括:
第一处理模块,用于若该第一交集不为空,对该目标事务和该并发事务之间的有向边的数量进行增量处理,将该第一交集中的变量添加到该目标变量列表中;若该第一交集中存在版本不同的变量,对该版本变更次数进行增量处理,该有向边的数量用于指示该目标事务与该并发事务之间是否冲突;
第二处理模块,用于若第二交集不为空,对该有向边的数量进行增量处理,将该第二交集中的变量添加到该目标变量列表中;若该第二交集中存在版本不同的变量,对该版本变更次数进行增量处理;
第三处理模块,用于若第三交集不为空,基于该并发事务的提交状态,确定该数据异常类型,该第三交集为该目标事务的写集和该并发事务的写集之间的交集。
在一种可选地实现方式中,该第二确定模块包括:
第一确定单元,用于基于该目标事务与该并发事务中作用于同一变量的读写操作,确定该数据异常类型的所属类别;
第二确定单元,用于基于该数据异常类型的所属类别以及该目标变量列表,确定该数据异常类型在所属类别中的子类别;
第三确定单元,用于基于该数据异常类型在所属类别中的子类别、该版本变更次数以及该并发事务与该目标事务中作用于同一变量的读写操作,确定该数据异常类型。
在一种可选地实现方式中,该第一确定单元用于下述任一项:
若该目标事务与该并发事务中存在作用于不同版本的同一变量的两个写操作,则该数据异常类型的所属类别为写异常类别;
若该目标事务与该并发事务中不存在作用于不同版本的同一变量的两个写操作,且该目标事务与该并发事务中存在作用于相同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为读异常类别;
若该目标事务与该并发事务中不存在作用于不同版本的同一变量的两个写操作,且该目标事务与该并发事务中不存在作用于相同版本的同一变量的读操作和写操作,且该目标事务与该并发事务中存在作用于不同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为交叉异常类别。
在一种可选地实现方式中,该第二确定单元用于下述任一项:
若该目标变量列表中的变量数量为一,确定该数据异常类型在所属类别中的子类别属于单元数据异常;
若该目标变量列表中的变量数量为二,确定该数据异常类型在所属类别中的子类别属于双元数据异常;
若该数据异常类型在所属类别中的子类别既不属于该单元数据异常,也不属于该双元数据异常,确定该数据异常类型在所属类别中的子类别属于多元数据异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为写异常类别,该子类别为单元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为一,则该数据异常类型为丢失自更新异常;
若该版本变更次数为二,该目标事务与该并发事务中存在作用于同一变量的三个写操作,则该数据异常类型为全写入异常;
若该版本变更次数为二,该目标事务与该并发事务中存在作用于同一变量的两个写操作和一个读操作,则该数据异常类型为丢失更新异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为写异常类别,该子类别为双元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为一,该目标事务与该并发事务中存在作用于不同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则该数据异常类型为读写偏序异常;
若该版本变更次数为一,该目标事务与该并发事务中存在作用于相同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则该数据异常类型为重复写偏序异常;
若该版本变更次数为一,该目标事务与该并发事务中存在作用于不同版本的第一变量的两个写操作以及作用于不同版本的第二变量的两个写操作,则该数据异常类型为全写入偏序异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为读异常类别,该子类别为单元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为一,该目标事务与该并发事务中存在作用于同一变量的两个读操作和一个写操作,则该数据异常类型为不可重复读异常;
若该版本变更次数为一,该目标事务与该并发事务中存在作用于同一变量的两个写操作和一个读操作,则该数据异常类型为中间读异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为读异常类别,该子类别为双元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为零,则确定该数据异常类型为写读偏序异常;
若该版本变更次数为一,则确定该数据异常类型为读偏序异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为交叉异常类别,该子类别为双元数据异常,则该第三确定单元用于:
若该版本变更次数为一,则确定该数据异常类型为写偏序异常。
在一种可选地实现方式中,该第三确定单元还用于下述任一项:
若该数据异常类型的所属类别为写异常类别,该子类别为多元数据异常,则确定该数据异常类型为台阶式写异常;
若该数据异常类型的所属类别为读异常类别,该子类别为多元数据异常,则确定该数据异常类型为台阶式读异常;
若该数据异常类型的所属类别为交叉异常类别,该子类别为多元数据异常,则确定该数据异常类型为台阶式交叉异常。
另一方面,提供了一种计算机设备,该计算机设备包括处理器和存储器,该存储器用于存储至少一条计算机程序,该至少一段计算机程序由该处理器加载并执行以实现本申请实施例中的事务处理方法中所执行的操作。
另一方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条计算机程序,该至少一条计算机程序由处理器加载并执行以实现如本申请实施例中事务处理方法中所执行的操作。
另一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机程序代码,该计算机程序代码存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序代码,处理器执行该计算机程序代码,使得该计算机设备执行上述各种可选实现方式中提供的事务处理方法。
本申请实施例提供的技术方案带来的有益效果是:
在本申请实施例中,在确定目标事务的并发事务后,在该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空的情况下,对目标事务与并发事务是否冲突进行判断,若目标事务与并发事务冲突,则根据这两个事务所作用的相同变量以及相同变量的版本变更次数,来确定数据异常类型。这种方式能够在目标事务的执行过程中,确认目标事务与并发事务是否真正构成冲突,进一步地,通过两个事务所作用的相同变量来确定数据异常类型,能够基于可串行化理论,识别数据库系统中各种各样的数据异常,保证数据状态的一致性,从而提高数据库系统的事务处理效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请实施例提供的一种事务处理方法的实施环境示意图;
图2是根据本申请实施例提供的一种冲突环图的示意图;
图3是根据本申请实施例提供的一种冲突环图的示意图;
图4是根据本申请实施例提供的一种冲突环图的示意图;
图5是根据本申请实施例提供的一种事务处理方法的流程图;
图6是根据本申请实施例提供的另一种事务处理方法的流程图;
图7是根据本申请实施例提供的一种单元数据异常CCG图的示意图;
图8是根据本申请实施例提供的一种双元数据异常CCG图的示意图;
图9是根据本申请实施例提供的一种多元数据异常CCG图的示意图;
图10是根据本申请实施例提供的一种获取目标冲突环图的示意图;
图11是根据本申请实施例提供的一种事务处理装置的结构示意图;
图12是根据本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。还应理解,尽管以下描述使用术语第一、第二等来描述各种元素,但这些元素不应受术语的限制。
这些术语只是用于将一个元素与另一个元素区别开。例如,在不脱离各种示例的范围的情况下,第一事务能够被称为第二事务,并且类似地,第二事务也能够被称为第一事务。第一事务和第二事务都可以是事务,并且在某些情况下,可以是单独且不同的事务。
其中,至少一个是指一个或一个以上,例如,至少一个事务可以是一个事务、两个事务、三个事务等任意大于等于一的整数个事务。而多个是指两个或者两个以上,例如,多个事务可以是两个事务、三个事务等任意大于等于二的整数个事务。
在介绍本申请实施例之前,需要引入一些云技术领域内的基本概念:
云技术(Cloud Technology):是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,也即是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成云技术领域的重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,均能通过云计算来实现。
云存储(Cloud Storage):是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
数据库(Database):简而言之可视为一种电子化的文件柜,也即是存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
本申请实施例所涉及的数据库系统,可以是单机数据库系统、单机以事务为主的数据库系统、单机以分析型为主但需要事务处理能力的数据库系统,可以是NoSQL(Non-relational SQL,泛指非关系型数据库)体系,还可以是分布式数据库系统、分布式大数据处理系统,对于分布式数据库系统而言,当不同变量分布存储在不同的物理节点上时,对应于数据状态一致性模型中存在两个及两个以上变量的情况,数据状态一致性模型以及相应的事务处理流程均将在后文的各个实施例中进行详细说明,这里不做赘述。
在数据库系统中可以包括至少一个节点设备,每个节点设备的数据库中可以存储有多个数据表,每个数据表可以用于存储一个或多个数据项(也称为变量版本)。其中,节点设备的数据库可以为任一类型的分布式数据库,可以包括关系型数据库或者非关系型数据库中至少一项,例如结构化查询语言(Structured Query Language,SQL)数据库、NoSQL、NewSQL(泛指各种新式的可拓展/高性能数据库)等,在本申请实施例中对数据库的类型不作具体限定。
在一些实施例中,本申请实施例还可以应用于一种基于区块链技术的数据库系统(以下简称为“区块链系统”),上述区块链系统在本质上属于一种去中心化式的分布式数据库系统,采用共识算法保持区块链上不同节点设备所记载的账本数据一致,通过密码算法保证不同节点设备之间账本数据的加密传送以及不可篡改,通过脚本系统来拓展账本功能,通过网络路由来进行不同节点设备之间的相互连接。
在区块链系统中可以包括一条或多条区块链,区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
区块链系统中节点设备之间可以组成点对点(Peer To Peer,P2P)网络,P2P协议是一个运行在传输控制协议(Transmission Control Protocol,TCP)协议之上的应用层协议。在区块链系统中,任一节点设备可以具备如下功能:1)路由,节点设备具有的基本功能,用于支持节点设备之间的通信;2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成账本数据,在账本数据中携带数字签名以表示数据来源,将账本数据发送至区块链系统中的其他节点设备,供其他节点设备在验证账本数据来源以及完整性成功时,将账本数据添加至临时区块中,其中,应用实现的业务可以包括钱包、共享账本、智能合约等;3)区块链,包括一系列按照先后的时间顺序相互接续的区块,新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点设备提交的账本数据。
在一些实施例中,每个区块中可以包括本区块存储交易记录的哈希值(本区块的哈希值)以及前一区块的哈希值,各区块通过哈希值连接形成区块链,另,区块中还可以包括有区块生成时的时间戳等信息。
由于数据库系统中事务并发控制的正确程度可以通过一致性和隔离性来描述,因此在介绍本申请实施例之前,下面先对一致性和隔离性进行解释说明。
一、隔离性
事务隔离级别通过能否规避某种数据异常而进行定义,可能涉及到的数据异常包括:A、脏读,指一个事务读取到了另一事务尚未提交的数据项;B、不可重复读,指一个事务对同一数据项重复读取两次却得到了不同的结果;C、幻读,指事务在操作过程中进行两次谓词查询(范围查询),第二次查询的结果包含了第一次查询的结果中未出现的数据项或者缺少了第一次查询的结果中出现的数据项。
基于能够解决上述三种数据异常,数据库国际标准美国国家标准学会(AmericanNational Standards Institute,ANSI)SQL提出四种隔离级别,以对上述三种已知的数据异常加以区分,目的是在允许某些数据异常存在的情况下提高事务处理效率。
这四种隔离级别分别包括:a、读未提交:允许如上三种数据异常发生;b、读已提交:不允许脏读发生;c、可重复读:不允许脏读、不可重复读发生;d、可串行化:如上三种数据异常均不能发生。
可以看出,这四种隔离级别均不允许脏写异常发生,脏写异常是指两个未提交事务修改了同一个数据项。在ANSI SQL制定标准时已知的数据异常种类不多,后续不断有新的数据异常被发现,除了上述几种数据异常之外,目前已知的数据异常还包括:丢失更新异常、读偏序异常、写偏序异常、读写偏序异常、锯齿波写偏序异常、串行并发现象(Serial-Concurrent-Phenomenon)异常、交叉现象(Cross-Phenomenon)异常、因果丢失异常、因果反转异常、旧读异常、未来读异常等。
二、一致性
在数据库技术中,“一致性”一词可以表达两重含义,其一是指事务一致性,其二是指分布式一致性。
数据库的事务一致性定义为:在事务的操作下,数据库的数据状态从一个一致的状态变迁为另一个一致的状态。上述“一致的状态”是指满足数据库系统预先定义的一些规则的数据状态,比如,这些规则可以包括约束、级联、触发器以及三者之间任意的组合(属于数据的逻辑语义),写偏序异常违反的就是特定数据之间的约束,这里的约束属于用户语义所限定的数据的一致性。
数据库的事务处理技术中的并发访问控制技术,旨在发现、解决事务并发操作在数据项上是否会造成数据异常、如何消除数据异常的问题,ANSI SQL提出了四种数据异常和隔离级别,各种并发访问控制算法也得以发展,例如,基于封锁的并发访问控制技术、基于时间戳的并发访问控制技术、基于MVCC(Mutil-Version Concurrency Control,多版本并发控制)的并发访问控制技术、基于OCC(Optimistic Concurrency Control,乐观并发控制)的并发访问控制技术等。
数据库的分布式一致性定义为:分布式一致性也称为共享数据对象操作一致性,是针对整个数据库系统的系统级含义,是指要想保证数据在数据库系统中保持一致,还要求数据库系统符合两个特性,一个是可串行性(Serializability),另一个是可恢复性(Recoverability)。可串行性也即是说上述在隔离性中所定义到的可串行化隔离级别,可串行性保证了数据不会被并发操作改坏,而可恢复性是指已经提交的事务未曾读过被回滚的事务写过的数据(指不会发生脏读异常),可恢复性保证了事务被回滚后数据回到之前的一致的状态,被回滚的事务不会对数据的一致性造成影响,数据库系统的一致性状态是可恢复的。
基于上述概念可知一致性和隔离性与数据异常是息息相关的,目前,在数据库系统中如何识别并规避数据异常是一个犹为关键的问题。涉及到的数据库异常可以包括:脏读数据异常、脏写数据异常、不可重复读数据异常、幻读数据异常、丢失更新数据异常、读偏序数据异常、写偏序数据异常、串行并发现象(Serial-Concurrent-Phenomenon)数据异常、交叉现象(Cross-Phenomenon)数据异常等。
在识别数据异常时主要依赖于可串行化原理,通常可以采用两种识别数据异常的策略。其一是利用封锁技术,依赖锁的互斥机制来避免数据异常的发生,比如DB2、Informix、MySQL等数据库系统的可串行化隔离级别都是使用封锁技术;其二是利用依赖图技术,通过在并发事务所构成的依赖图中确认是否存在环,如果存在环则需要打破环的存在从而消除潜在的数据异常。
针对上述两种策略分别进行分析,封锁技术严重限制了数据库系统的并发度,导致事务处理效率低下,而依赖图技术则需要在并发事务之间遍历每个事务以识别出环的存在,这样的事务处理效率也不高,而为了识别出环是否存在,不仅需要借助各种衍生出的算法,而且需要复杂的数据结构来表示并发事务与被操作的数据项(也即是变量版本)之间的关联关系,大大提高了数据库系统的复杂性。
此外,还提供了一种基于依赖图和冲突可串行化技术(该技术基于可串行化原理)的简化实现方式,比如PostgreSQL的快照隔离(Snapshot Isolation,SSI)技术,SSI技术中能够提前识别出可能会造成依赖图中存在环的必要不充分条件:一个事务存在一条读写冲突入边和读写冲突出边;如果任一事务满足上述条件,则认为存在数据异常。
另外,更重要的是,上述识别数据异常的方法还存在如下问题:
第一,认知割裂不统一:不管是封锁技术、依赖图技术还是SSI技术,均割裂了每一种数据异常的识别方式,使得在识别数据异常时只能逐个去认知是否符合每一种数据异常,也即是说,不能用统一的角度去识别、认知这些不同种类的数据异常,导致针对数据异常的认知思路复杂且不清晰统一,运用到的各种算法也都形形色色难以理解。
第二,认知有限不全面:不管是封锁技术、依赖图技术还是SSI技术,均不能穷尽是否还有未知的新的数据异常。而一旦新的数据异常存在,那么将会为整个数据库系统带来不可估量的损失和代价,比如,当数据库系统处于非可串行化隔离级别下,如有新的数据异常,那么会导致系统中出现数据不一致错误。
第三,识别原理不精准:可串行化是数据存在异常的充分条件,但并非是数据存在异常的充要条件,在系统实现中虽然可避免出现新的数据异常,但是也有可能会把一些不存在数据异常的情况也当作了数据异常,相当于对于数据异常进行了误判,比如事务1写入了变量版本X1且读取了变量版本Y1,事务2读取了变量版本X1且写入了变量版本Y1,上述一系列的数据库操作可以记为“W1(X1)R2(X1)W2(Y1)R1(Y1)C2 C1”,这一系列的操作是不可串行化的,但并不存在数据异常。
有鉴于此,本申请实施例提供一种事务处理方法,给出了在事务处理过程中识别数据异常并规避数据异常的算法,提供了一种通用形式的冲突环图来定义数据异常,在确保数据异常定义的正确性的前提下,使得数据异常定义形象化,进一步地,对数据异常进行了细化分类,提供了一种具体的数据异常识别方法,从而有效提高了数据库系统的事务处理效率,下面将进行详述。
图1是本申请实施例提供的一种事务处理方法的实施环境示意图。参见图1,本实施例可以应用于分布式数据库系统,该系统中可以包括网关服务器101、全局时间戳生成集群102、分布式存储集群103以及分布式协调系统104(例如ZooKeeper),在分布式存储集群103中可以包括数据节点设备和协调节点设备。
其中,网关服务器101用于接收外部的读写请求,并将读写请求对应的读写事务分发至分布式存储集群103,比如,用户在登录终端上的应用客户端之后,触发应用客户端生成读写请求,调用分布式数据库系统提供的应用程序编程接口(Application ProgrammingInterface,API)将该读写请求发送至网关服务器101,比如,该API可以是MySQL API(一种关系型数据库系统提供的API)。
在一些实施例中,该网关服务器101可以与分布式存储集群103中的任一个数据节点设备或任一协调节点设备合并在同一个物理机上,也即是,让某个数据节点设备或协调节点设备充当网关服务器101。
全局时间戳生成集群102用于生成全局事务的全局提交时间戳(GlobalTimestamp,Gts),该全局事务又称为分布式事务,是指涉及到多个数据节点设备的事务,例如全局读事务可以涉及到对多个数据节点设备上存储数据的读取,又例如,全局写事务可以涉及到对多个数据节点设备上的数据写入。全局时间戳生成集群102在逻辑上可以视为一个单点,但在一些实施例中可以通过一主三从的架构来提供具有更高可用性的服务,采用集群的形式来实现该全局提交时间戳的生成,可以防止单点故障,也就规避了单点瓶颈问题。
可选地,全局提交时间戳是一个在分布式数据库系统中全局唯一且单调递增的时间戳标识,能够用于标志每个事务全局提交的顺序,以此来反映出事务之间在真实时间上的先后关系(事务的全序关系),全局提交时间戳可以采用物理时钟、逻辑时钟、混合物理时钟或者混合逻辑时钟(Hybrid Logical Clock,HLC)中至少一项,本申请实施例不对全局提交时间戳的类型进行具体限定。
在一个示例性场景中,全局提交时间戳可以采用混合物理时钟的方式生成,全局提交时间戳可以由八字节组成,其中,前44位可以为物理时间戳的取值(也即Unix时间戳,精确到毫秒),这样共计可以表示244个无符号整数,因此理论上一共可以表示约为年的物理时间戳,其中,后20位可以为在某一毫秒内的单调递增计数,这样每毫秒有220个(约100万个)计数,基于上述数据结构,如果单机(任一数据节点设备)的事务吞吐量为10w/s,理论上可以支持包含1万个节点设备的分布式存储集群103,同时,全局提交时间戳的数量代表了系统理论上所能支持的总事务数,基于上述数据结构,理论上系统可以支持(244-1)*220个事务。这里仅仅是对一种全局提交时间戳的定义方法的示例性说明,根据业务需求的不同,可以对全局提交时间戳的位数进行扩展,以满足对更多的节点数、事务处理数的支持,本申请实施例不对全局提交时间戳的定义方法进行具体限定。
在一些实施例中,该全局时间戳生成集群102可以是物理独立的,也可以和分布式协调系统104(例如ZooKeeper)合并到一起。
其中,分布式存储集群103可以包括数据节点设备和协调节点设备,每个协调节点设备可以对应于至少一个数据节点设备,数据节点设备与协调节点设备的划分是针对不同事务而言的,以某一全局事务为例,全局事务的发起节点可以称为协调节点设备,全局事务所涉及的其他节点设备称为数据节点设备,数据节点设备或协调节点设备的数量可以是一个或多个,本申请实施例不对分布式存储集群103中数据节点设备或协调节点设备的数量进行具体限定。由于本实施例所提供的分布式数据库系统中缺乏全局事务管理器,因此在该系统中可以采用XA(eXtended Architecture,X/Open组织分布式事务规范)/2PC(Two-Phase Commit,二阶段提交)技术来支持跨节点的事务(全局事务),保证跨节点写操作时数据的原子性和一致性,此时,协调节点设备用于充当2PC算法中的协调者,而该协调节点设备所对应的各个数据节点设备用于充当2PC算法中的参与者。
可选地,每个数据节点设备或协调节点设备可以是单机设备,也可以采用主备结构(也即是为一主多备集群),如图1所示,以节点设备(数据节点设备或协调节点设备)为一主两备集群为例进行示意,每个节点设备中包括一个主机和两个备机,可选地,每个主机或备机都对应配置有代理(agent)设备,代理设备可以与主机或备机是物理独立的,当然,代理设备还可以作为主机或备机上的一个代理模块,以节点设备1为例,节点设备1包括一个主数据库及代理设备(主database+agent,简称主DB+agent),此外还包括两备数据库及代理设备(备database+agent,简称备DB+agent)。
在一个示例性场景中,每个节点设备所对应的主机或备机的数据库实例集合称为一个SET(集合),例如,假设某一节点设备为单机设备,那么该节点设备的SET仅为该单机设备的数据库实例,假设某一节点设备为一主两备集群,那么该节点设备的SET为主机数据库实例以及两个备机数据库实例的集合,此时可以基于云数据库的强同步技术来保证主机的数据与备机的副本数据之间的一致性,可选地,每个SET可以进行线性扩容,以应付大数据场景下的业务处理需求,在一些金融业务场景下,全局事务通常是指跨SET的转账。
分布式协调系统104可以用于对网关服务器101、全局时间戳生成集群102或者分布式存储集群103中至少一项进行管理,可选地,技术人员可以通过终端上的调度器(scheduler)访问该分布式协调系统104,从而基于前端的调度器来控制后端的分布式协调系统104,实现对各个集群或服务器的管理。例如,技术人员可以通过调度器来控制ZooKeeper将某一个节点设备从分布式存储集群103中删除,也即是使得某一个节点设备失效。
上述图1仅是提供了一种轻量级的全局事务处理的架构图,是一种类分布式数据库系统。整个分布式数据库系统可以看作是共同维护一个逻辑上的大表,这个大表中存储的数据通过主键被打散到分布式存储集群103中的各个节点设备中,每个节点设备上存储的数据是独立于其他节点设备的,从而实现了节点设备对逻辑大表的水平切分。由于在上述系统中能够将各个数据库中各个数据表水平切分后进行分布式地存储,因此,这种系统也可以形象地称为具有“分库分表”的架构。
在上述分布式数据库系统中,已经基于XA/2PC算法实现了写操作时数据的原子性和一致性,而读操作的数据一致性问题,需要通过构造一个轻量的、去中心化的分布式事务处理机制来改善,从技术的角度来看,分布分表架构缺乏一个全局事务管理器,也就缺乏分布式事务处理能力,通过构造上述轻量的、去中心化的分布式事务处理机制,能够为分布式数据库系统提供水平扩展等能力,并且保证分布式数据库系统简单易推广、事务处理效率更高,必将对传统并发控制方式所设计的分布式数据库架构产生极大冲击。
本申请实施例提供的事务处理方法,可以应用于上述采用了分库分表架构的分布式系统中,例如,该分布式系统为分布式事务型数据库系统,当然也可以是分布式关系型数据库系统,此外,本申请实施例提供的事务处理方法也可以应用于一些单机数据库系统中,对于分布式系统而言,需要分布式事务处理能力,且为了提高事务处理效率以应对不同用户在不同场景的应用需求,还需要提供丰富灵活的隔离级别。
在一些实施例中,上述网关服务器101、全局时间戳生成集群102、分布式存储集群103以及分布式协调系统104所构成的分布式数据库系统,可以视为一种向用户终端提供数据服务的服务器,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。可选地,上述用户终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在介绍本申请实施例之前,首先将对数据库系统中所涉及到的一些基本术语以及符号表示进行介绍:
事务:事务是数据库管理系统在执行操作的过程中的一个逻辑单位,由一个有限的数据库操作序列构成,是数据库系统操作的最小执行单位。
变量:事务是数据库关系系统中的一个数据单位,变量是数据库操作的作用者(或者说被操作的数据对象),在一些实施例中,变量也称为数据项。其中,一个变量可以是一个元组(tuple)或者记录(record),也可以是一个页面(page)或者一个表(table)对象等。一个变量可以包含若干变量版本(在后文中也简称为“版本”),每当事务对变量进行更新时,则会添加新的变量版本,变量的各个变量版本可以以自然数作为版本号标识,版本号越大,则表示变量版本越新。
操作:一个数据库操作由操作类型、事务、变量版本三部分构成,其中,操作类型可以包括读(Read,R)和写(Write,W)两种。例如,事务Ti读取变量x,生成了变量x的新版本xm,上述读操作可以记为Ri[xm];又例如,事务Tj对变量y进行更新,生成了变量y的新版本xn,上述写操作可以记为Wj[yn];其中,i和j为自然数,分别为对应操作所属的事务号,m和n为自然数,分别为对应变量的版本号。另外,在无需区别R和W时,也可以用O来代表一个操作。
可串行化:可串行化是一个调度,也可以理解为多个事务之间的执行方式;多个事务之间的执行有先后顺序,如果事务之间没有共同操作的变量,则事务之间的执行顺序前后置换是没有关系的;但是如果事务间存在共同操作的变量,则事务间先后执行的顺序则需要区分;对于存在共同操作的变量的多个并发执行的事务,如果其执行结果“等价”于某个“串行化调度”,则这个调度为“可串行化的调度”。满足“可串行化的调度”则具有了可串行化属性。因此,可串行化保证了多个事务并发时的执行顺序对数据的一致性没有影响。
数据库系统中的每个事务拥有两个事务数据集合,分别为事务的写集和事务的读集,其含义为:写集DSW(T)用于存储事务T所写入的新的数据版本,读集DSR(T)用于存储事务T所读取的数据版本。
本申请实施例所提供的事务处理方法,是在数据状态一致性模型(也可以简称为“数据状态模型”)的基础上运行的,本申请实施例基于冲突可串行化理论,对数据异常的定义进行了统一,并提供了一种通用形式的冲突环图,用于表示事务之间的关联关系以及事务对应的读写操作所作用的变量,下面对本申请涉及的基础概念进行介绍:
1、调度(Schedule):
一个调度是指由一组事务的多个操作组成的序列,记为s。一个调度s中所有的事务记为TS(s),一个调度s中所有的操作记为O(s),一个调度s中所有的带有某个版本号标识变量的集合记为VS(s)。例如,调度s=R1[x0]R2[y0]W3[x1]W4[y1]R2[x1]R1[y1],表示该调度s的操作序列来自4个事务,即TS{T1,T2,T3,T4},涉及2个变量x和y,且变量x和y分别有两个版本。
示意性地,如果一个调度s中,任意两个事务的操作各自以事务为单位相邻,也即是,当执行完一个事务的全部操作后再执行下一个事务,则称该调度s为串行调度。例如,一个串行调度s表示为
s=R1[x0]R1[y0]R2[y0]R2[x0]W3[x1]W4[y1]。
2、冲突(Conflict):
冲突也称为冲突操作,当有两个操作满足如下三个条件,则称这两个操作为冲突操作:1)这两个操作属于不同的事务;2)至少一个操作为写操作;3)操作对象为同一个对象(读同一个对象或写同一个对象),在本申请实施例中,对象也称为变量。
示意性地,设Oi[xm]Oj[xn](i≠j,m<n)为调度s中的两个事务的操作,分别为事务Ti和Tj作用于同一个变量x上的两个操作。若Oi[xm]Oj[xn]属于Ri[xm]Wj[xm+1]、Wi[xm]Rj[xm]、Wi[xm]Wj[xm+1]三种冲突中的任一种,则称Oi[xm]Oj[xn]为冲突,冲突在Oi和Oj之间构成偏序关系,将包含有调度s中全部冲突的集合记为conf(s)。在本申请实施例中,上述三种冲突可以分别简写为RW、WR以及WW。
3、冲突等价(Conflict Equivalence):
对于不同的调度s和s′,若满足如下两个条件,则称s和s′为冲突等价:1)调度s和s′包括同样的事务集合,也即是每个事务中的操作的顺序是固定的,不能在不同的调度下发生变化;2)调度s和s′包括同样的冲突集合。
示意性地,对于不同的调度s和s′,若O(s)=O(s′),且conf(s)=conf(s′),则称s和s′为冲突等价,记为s≈s′。
例如,以下为两个冲突等价的调度:
s=R1[x0]R1[y0]W2[x1]W1[y1]R2[z0]W1[x2]W2[y2];
s′=R1[y0]R1[x0]W1[y1]W2[x1]W1[x2]R2[z0]W2[y2]。
4、冲突可串行化(Conflict Serializability):
若一个调度s存在一个串行化调度s′,使得这两个调度为冲突等价(也即是满足s≈s′),则称s为冲突可串行化调度。
5、冲突环图(Conflict Cycle Graph,CCG):
示意性地,在一个调度s中,存在多个事务t∈TS(s),若多个事务t构成的图满足如下三个条件,则称该环图为冲突环图,其中,CCG(s)=(V,E):
1)V=VS(s),表示为CCG图的顶点集,该顶点集中的元素称为顶点,一个顶点对应一个事务,其中,一个顶点Ti满足Ti∈TS(s);
2)E为V×V的子集,也可以称为边集,该边集中的元素称为有向边,记为<Ti,Tj>,也可以简称为边,其中,
3)<Ti,Tj>∈E,<Tj,Tk>∈E,…,<Tp,Ti>∈E,i≠j≠k≠···≠p,则CCG图为一个有向环构成的图。
例如,参考图2,图2是本申请实施例提供的一种冲突环图的示意图。如图2所示,图中T1和T2分别为冲突环图的顶点,且T1和T2之间通过两条边相连,构成冲突环图,其中,两条边分别表示为R1[x0]W2[x1]和W2[x1]R1[x1]。
另外,基于上述对冲突环图的定义,得到下述推论5.1至推论5.3:
推论5.1、一个冲突环图至少有两条边。
示意性地,如果只有一条边,则冲突环图中仅存在两个事务,且这两个事务是串行事务,因此不会构成有向环;如果有两条边构成有向环,例如,第一条边使得Ti在Tj之前先发生,第二条边使得Tj在Ti之前先发生,也即是不存在等价的可串行化调度,则这两个事务Ti和Tj冲突。
推论5.2、一个冲突环图至多有无数条边。
示意性地,一个调度s对应的TS(s)中可以存在无数个事务,相应地,一个冲突环图中可以存在无数个顶点,也即可以存在无数条边。
推论5.3、一个冲突环图如果去掉任何一条边,则不再构成环。
示意性地,根据上述冲突环图的定义中的第三个条件得知,在冲突环图构成的有向环中,存在i≠j≠k≠…≠p,也即是任意两条边是不同的,因此对于一个冲突环图,若去掉任何一条边,则不再构成环。
6、冲突一致性状态图(Conflict Consistency State Graph,CCSG):
示意性地,在一个调度s中,存在多个事务t∈TS(s),若多个事务t构成的图满足如下四个条件,则称该图为冲突一致性状态图,其中,CCSG(s)=(V,E):
1)CCSG图中调度s的定义满足上述CCG图中调度s的定义,即CCG(s)和CCSG(s)之间可以等价转换。
2)对于CCSG(s),V=VS(s)称为CCSG图的顶点集,其元素称为顶点,一个顶点vi满足vi∈VS(s),该顶点由两种类型的数据构成,一是事务标识(Identification,ID),二是一个列表(List),用于存放变量的不同版本。
3)E为V×V的子集,也可以称为边集,该边集中的元素称为有向边,在CCSG图中,边分为下述两种,对于以下两种边,统一表达为<Vi,Vj>,这样的边源自CCG图的边的等价变形,故属于冲突操作的变形。
第一种、一致性状态边。
记为<xm,yn>,简称事务边ET。该类型的边是由同一个事务的操作构成,因此本事务内的数据状态应该满足一致性要求。其中,x=y且m≠n;或者x≠y。由于CCSG图等价于CCG图,故一致性状态边也可表示为Ri[xm]Ri[yn],ET可以作为该边的标签。
第二种、状态变迁边。
记为<xi,xi+1>,简称状态边ES。该类型的边是由某个写事务写某个变量,致使数据状态发生变迁而构成,因此变量的版本发生变化。由于CCSG图等价于CCG图,故一致性状态边也可表示为Wj[xm+1]。
7、CCG图向CCSG图转换的等价转换规则:
其中,CCG图向CCSG图的等价转换规则主要包括下述四条:
第一条、边拆分。
其中,CCG图的任何一条边,由两个操作即一个冲突构成,其可以拆分为两个单独的边。示意性地,边的拆分方式包括如下三种,每一种拆分出两个子边:
1)例如,边表示为R1[x0]W2[x1],对该边进行拆分,得到R1[x0]和W2[x1],同时得到变量x的两个版本x0和x1。
2)例如,边表示为W2[y1]R3[y1],对该边进行拆分,得到W2[y1]和R3[y1],同时得到变量y的一个版本y1。
3)例如,边表示为W3[z1]W1[z2],对该边进行拆分,得到W3[z1]和W1[z2],同时得到变量z的两个版本z1和z2。
第二条、顶点转换。
其中,将变量的版本作为CCSG图的顶点,也即是把上一步的版本转换为顶点,因此,以上述第一条举例得到的顶点为例,CCSG图的顶点包括x0、x1、y1、z1以及z2。同一个变量的多个版本纵向排列,被同一个事务作用过的不同变量的版本之间横向排列。需要说明的是,此处顶点的排列方式并非特定要求,在一些实施例中,还可以按照其他排列方式进行排列,本申请实施例对此不作限定。
第三条、相邻版本的同一变量对应的顶点之间添加边。
其中,以上述第二条得到的新顶点之间的变迁关系为CCSG图的新边。例如,前述的事务T2的相关子边包括:W2[x1]和W2[y1],则把x1和y1水平并列,而x0、x1之间,存在一条W2[x1]边。
第四条、同一事务所作用的变量对应的顶点之间添加边。
其中,在同一个事务之间,构造CCSG图的一致性状态边。例如,继续以前述顶点为例,在x1和y1之间添加边,其边的标签为事务T2。
8、CCSG图向CCG图转换的等价转换规则:
其中,CCSG图向CCG图的等价转换规则主要包括下述三条:
第一条、顶点合并。
其中,对于CCSG图,将同一个事务操作过的变量合并为一个顶点,为该顶点命名为该事务的事务标识,该顶点的表示方式,等价于前述CCG图的顶点表示方式。
第二条、在相邻顶点之间添加边。
其中,包括以下两点,第一点是:保留变量的状态变迁。例如,由边R1[x0]W2[x1]可知,变量的状态变迁由T1指向T2,因此添加的新边为T1→T2。第二点是:如果没有写操作发生,则按照原始的CCG图中发生的冲突关系构造新边。需要说明的是,这只针对存在WR冲突关系的情况,在这种情况下,由W所在的事务指向R所在的事务。
第三条、得到的CCG图存在环,且可以忽略其有向的属性,也即是对CCSG进行转换得到的CCG图为一个无向有环图。
需要说明的是,在本申请实施例中,CCSG图即为数据状态一致性模型的基础。也即是,以变量的版本为顶点,以事务的读写操作为状态变迁的边或以事务的一致性状态边为边,构成的图,即为数据状态一致性模型。在该数据状态一致性模型中,若存在环则存在数据异常,如不存在环,则不存在数据异常。
9、数据异常(DataAnomalies,DA):
另外,基于上述冲突环图的定义以及数据异常的定义,得到下述推论9.1至推论9.3:
推论9.1、数据异常有无数个。
基于上述推论5.2得知,冲突环图中可以存在无数个顶点和无数条边,相应地,数据异常有无数个。
推论9.2、存在无数个具体的数据异常。
由于冲突环图中的顶点不同则数据异常不同,冲突环图中的边不同则数据异常不同,冲突环图中的顶点和/或边的个数不同则数据异常不同,因此存在无数个具体的数据异常。
推论9.3、对每个具体的数据异常用形式化表达式表达,并为该具体的数据异常命名。
应理解,一个数据异常是具有冲突环图的调度s的子集,因此一个具体的数据异常可以由构成冲突环图的该调度s的子集部分的表达式来表示。
例如,以丢失更新异常为例,该丢失更新异常对应的冲突环图参考图3,图3是本申请实施例提供的一种冲突环图的示意图。如图3所示,在该冲突环图中,V={T1,T2},E={<R1[x0]W2[x1]>,<W2[x1]W1[x2]>},则该丢失更新异常的形式化定义为Ri[xm]...Wj[xm+1]...Wi[xm+2]。
又例如,以读偏序异常为例,该读偏序异常对应的冲突环图参考图4,图4是本申请实施例提供的一种冲突环图的示意图,如图4所示,在该冲突环图中,V={T1,T2},E={<R1[x0]W2[x1]>,<W2[y1]R1[y1]>},则该读偏序异常的形式化定义为Ri[xm]...Wj[xm+1]...Wi[yn]...Ri[yn]。
需要说明的是,此处仅以上述两种数据异常为例,结合对应的冲突环图,对数据异常的形式化定义进行了举例说明,其他数据异常对应的冲突环图以及数据异常的形式化定义将在后文进行介绍,这里不做赘述。
10、回滚率:
通常,根据检测环的模式来检测数据异常的发生,代价比较昂贵。为此,相关技术通过引入一种比较保守的做法,例如,利用封锁技术,抑制并发并避免数据异常产生,从而规避昂贵的数据异常检测,但这样会导致原本可以提交事务的回滚,也就是假回滚,而假回滚会浪费计算资源影响事务吞吐量。
在本申请实施例中,提供了如下四点有关回滚的概念:
1)数据异常回滚:对于调度s,当数据异常出现而导致某个事务回滚,称为数据异常回滚,也称为真回滚(True Rollback,TR)。
2)算法回滚:对于调度s,当没有数据异常存在时,并发访问算法认为可能发生数据不一致,而致使某个事务回滚,称为算法回滚,也称为假回滚(False Rollback,FR)。
3)真回滚率:假设N个调度中,如果K个调度中每个调度都存在真回滚,则K/N称为真回滚率。真回滚率反应了某种应用背景下数据异常出现的概率。
4)假回滚率:假设N个调度中,如果M个调度中每个调度都存在假回滚,则M/N称为假回滚率。假回滚率反应了算法对于并发事务的并发执行能力,假回滚率越低则该算法的并发度越高,且计算资源的利用率越高,算法效率越高。
以上对本申请实施例涉及的基础概念进行了介绍,下面将通过几个实施例,来对本申请的事务处理方法进行说明。在下述实施例中,以上述基础概念为理论基础,利用事务与事务之间构成的冲突环图来进行数据异常的识别,能够有效识别出事务在执行过程中出现的数据异常,从而提高事务处理的效率。
在介绍本申请的事务处理方法之前,首先参考表1,对下述实施例涉及到的一些符号及含义进行说明。
表1
在提供了上述基础概念以及表1所示的符号和含义的基础上,下面参考图5,对本申请实施例提供的一种事务处理方法进行说明。图5是本申请实施例提供的一种事务处理方法流程图,如图5所示,该实施例应用于数据库系统中任一节点设备,对于单机数据库系统而言,该节点设备可以是单机设备,对于分布式数据库系统而言,该节点设备可以是协调节点设备或者数据节点设备,该实施例包括下述步骤:
501、节点设备确定目标事务的并发事务,该并发事务与该目标事务中存在作用于同一变量的读写操作,该目标事务为待提交事务。
在本申请实施例中,该目标事务是全局事务或局部事务,其中,该全局事务是指涉及到跨节点操作的事务,全局事务也称为分布式事务,而局部事务则是指仅涉及单个节点操作的事务,局部事务也称为本地事务,本申请实施例对于目标事务的类型进不进行具体限定。
其中,节点设备在执行目标事务时,通过事务读集和写集形成算法、准备阶段算法以及一致性检验算法,对至少一个候选并发事务进行筛选,从中确定出目标事务的并发事务(确定并发事务的具体实施方式将在后文进行介绍,此处不再赘述)。可选地,目标事务可以由终端发起,此时终端与节点设备建立用于处理目标事务的会话,终端向节点设备发送目标事务的执行请求,节点设备响应于目标事务的执行请求,开始执行该目标事务。在一些实施例中,如果终端与节点设备已经建立过一个会话,那么无需在两者之间建立新的会话,只需要复用当前已建立的会话即可。
502、若该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空,且该目标事务与该并发事务冲突,则基于该目标事务和该并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,该目标变量列表包括该目标事务和该并发事务所作用的相同变量。
在本申请实施例中,目标事务与并发事务冲突是指目标事务与并发事务中存在至少两个操作为冲突操作,若此时提交目标事务,将导致数据库系统出现数据异常。节点设备在确定上述第一交集和第二交集中存在至少一项不为空,且目标事务与并发事务冲突时,基于该版本变更次数和该目标变量列表,确定数据异常类型并进行上报。
在本申请实施例提供的事务处理方法中,在确定目标事务的并发事务后,在该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空的情况下,对目标事务与并发事务是否冲突进行判断,若目标事务与并发事务冲突,则根据这两个事务所作用的相同变量以及相同变量的版本变更次数,来确定数据异常类型。这种方式能够在目标事务的执行过程中,确认目标事务与并发事务是否真正构成冲突,进一步地,通过两个事务所作用的相同变量来确定数据异常类型,能够基于可串行化理论,识别出数据库系统中各种各样的数据异常,保证了数据状态的一致性,也提高了数据库系统的事务处理效率。
上述图5是对本申请提供的事务处理方法的简要说明,下面结合图6,对本申请实施例提供的事务处理方法进行详细介绍。图6是本申请实施例提供的另一种事务处理方法流程图,如图6所示,该实施例应用于数据库系统中任一节点设备,对于单机数据库系统而言,该节点设备可以是单机设备,对于分布式数据库系统而言,该节点设备可以是协调节点设备或者数据节点设备,该实施例包括下述步骤:
601、节点设备响应于目标事务的执行指令,对目标事务的读集和写集进行初始化。
在本申请实施例中,节点设备响应于目标事务的执行指令,将该目标事务的读集和写集初始化为空集,并为目标事务分配全局唯一的事务ID,也即是事务标识。可选地,不同事务的事务ID按照节点设备接收到相应执行指令的时间顺序整数递增,例如,节点设备在t1时刻接收到目标事务的执行指令,将该目标事务的事务ID命名为1000,若节点设备在t2时刻接收到另一事务的执行指令,则节点设备将该另一事务的事务ID命名为1001,本申请实施例对此不作限定。
可选地,在该初始化过程中,节点设备在数据库系统启动时,向操作系统申请一块内存空间,该内存空间用于维护至少一个事务的读集和写集,当目标事务开始执行时,节点设备从该内存空间中申请一块内存,该内存用于管理该目标事务的读集和写集,从而在节点设备上完成了目标事务的读集和写集的创建,并且,将创建出的读集和写集均初始化为空集。
下面对目标事务的读集和写集的更新策略进行介绍:
在对读集和写集进行初始化后,节点设备根据目标事务的执行语句,确定该目标事务是否涉及对变量进行更新操作,节点设备响应于该目标事务对任一变量进行更新,将该变量添加至该目标事务的写集中,并为该变量分配版本号。例如,当某一事务T对变量x进行更新时,将变量x添加至事务T的写集中,并为变量x分配版本号。不同事务对同一个变量的写操作的版本号按整数递增。新发生的读操作也因此可获得变量的版本号。即数据库系统为每个变量维护一个递增的版本号。另外,节点设备根据目标事务的执行语句,对任一变量进行读取时,所读取的变量是最新的且满足读已提交规则的变量。
上述更新策略也可以理解为目标事务的读集和写集随着事务操作的进行而实时维护。若发生读操作,则被读取的变量进入读集;若发生写操作,则被读取的变量进入写集。同一个事务写同一个变量多次则有多个不同的新版本,在写集中用最新的变量版本替代旧的变量版本。
需要说明的是,本步骤601也即是上述步骤501中涉及的事务读集和写集形成算法,也称为读写阶段事务读写集合的形成算法。
602、节点设备响应于目标事务中每个操作的执行指令,获取目标事务的至少一个候选并发事务。
在本申请实施例中,对于目标事务的每一个操作(该操作可以是读操作也可以是写操作),在该操作发生时,进入准备阶段,节点设备进入临界区,遍历该目标事务的读集和写集,获取目标事务的至少一个候选并发事务(比如所有并发事务)的事务ID,并将该至少一个候选并发事务的事务ID存入到一个链表(Typescript,TS)中。
可选地,在获取至少一个候选并发事务的过程中,内存中的每个变量上都记载曾经读写过该变量但尚未提交的事务的事务ID(简称为活跃事务ID),每个变量上记载的活跃事务ID可以是一个,也可以是多个,还可以为空。节点设备只需要获取读集和写集中各个变量上所记载的各个活跃事务ID,即可得到该至少一个候选并发事务的事务ID。
步骤602也可以理解为:节点设备在目标事务的每个操作发生时,开始做准备工作,进入目标事务的准备阶段,准备阶段是为事务T是否可以提交做好事务并发访问控制异常验证前的准备工作,节点设备在临界区中找到至少一个候选并发事务的事务ID之后,退出临界区。
需要说明的是,本步骤602也即是上述步骤501中涉及的准备阶段算法。
603、节点设备从该至少一个候选并发事务中确定目标事务的并发事务,该并发事务与该目标事务中存在作用于同一变量的读写操作。
在本申请实施例中,节点设备在目标事务的每个操作发生时,获取该目标事务的至少一个候选并发事务,对于至少一个候选并发事务中的任一个候选并发事务,根据该候选并发事务和目标事务的读集和写集,对该候选并发事务是否为目标事务的并发事务进行判断,若该候选并发事务与目标事务存在作用于同一变量的读写操作,则将该候选并发事务确定为该目标事务的并发事务,执行下述步骤604至步骤607;否则,将该候选并发事务重新加入链表TS的尾部。
其中,节点设备基于可串行化理论,以该至少一个候选并发事务和目标事务之间是否构成冲突环图,来进行一致性检验。下面以链表TS中的任一个候选并发事务为例,对本步骤603的具体实施方式进行详细说明,包括如下步骤6031至步骤6035:
6031、节点设备获取目标事务的读集和该候选并发事务的写集之间的第一交集、目标事务的写集和该候选并发事务的读集之间的第二交集以及目标事务的写集和该候选并发事务的写集之间的第三交集。
其中,假设该目标事务为T,该候选并发事务为TL,节点设备将目标事务T与该候选并发事务TL之间的有向边的数量置为0,将目标事务与候选并发事务所作用的相同变量的版本变更次数置为0,将目标变量列表置为空集。其中,该有向边的数量用于表示目标事务与该候选并发事务之间是否冲突;该版本变更次数用于表示目标事务与该候选并发事务所作用的相同变量的数据状态;该目标变量列表用于存储目标事务与该候选并发事务所作用的相同变量。
可选地,用动边交叉值(Dynamic Line Intersection,DLI)来表示有向边的数量,用变量状态值(Variable State,VS)来表示版本变更次数,用变量列表(Variable List,VL)来表示目标变量列表,也即令DLI=0;VS=0;VL=空集。可选地,第一交集表示为“S1=DSR(T)∩DSW(TL)”;第二交集表示为“S2=DSR(TL)∩DSW(T)”;第三交集表示为“S3=DSW(T)∩DSW(TL)”。
可选地,在获取第一交集、第二交集以及第三交集时,可以使用哈希表存储目标事务和候选并发事务各自的读写集合,从而能够在线性时间复杂度内得到他们的交集和并集。
6032、若第一交集、第二交集以及第三交集之间的并集为空集,则节点设备将该候选并发事务重新加入链表TS的尾部;若第一交集、第二交集以及第三交集中存在至少一项不是空集,则节点设备执行下述步骤6033至步骤6035。
其中,若第一交集、第二交集以及第三交集之间的并集为空集(简化计算:第一交集、第二交集以及第三交集均为空集),说明该候选并发事务并不是目标事务的并发事务,若第一交集、第二交集以及第三交集中存在至少一项不是空集,说明该候选并发事务为目标事务的并发事务,则节点设备将该候选并发事务确定为目标事务的并发事务,也即是本步骤603所涉及的并发事务,执行下述步骤6033至步骤6035。
下面以该候选并发事务为确定好的并发事务为例,对步骤6033至步骤6035进行说明。
6033、若该第一交集不为空,节点设备对该有向边的数量进行增量处理,将该第一交集中的变量添加到该目标变量列表中;若该第一交集中存在版本不同的变量,节点设备对该版本变更次数进行增量处理。
其中,增量处理是指将对应的值自增一。示意性地,以有向边的数量为DLI,版本变更次数为VS为例,上述两种增量处理分别表示为DLI=DLI++和VS=VS++。另外,节点设备将该第一交集中的变量添加到该目标变量列表中是指按照预设顺序,将变量有序添加到该目标变量列表中,本申请实施例对此不作限定。
6034、若该第二交集不为空,节点设备对该有向边的数量进行增量处理,将第二交集中的变量添加到该目标变量列表中;若该第二交集中存在版本不同的变量,节点设备对该版本变更次数进行增量处理。
其中,本步骤6034与上述步骤6033类似,故在此不再赘述。
6035、若该第三交集不为空,节点设备基于该并发事务的提交状态,确定数据异常类型;若该第三交集为空集,节点设备执行后续步骤604。
其中,若第三交集不为空,说明目标事务与并发事务之间出现了写写冲突,而写写冲突是数据一致性状态模型下禁止发生的条件之一,也即禁止脏写数据异常,因此,在这种情况下,节点设备基于该并发事务的提交状态,确定数据异常类型,报告写写异常发生,结束当前流程,对目标事务进行回滚。而当第三交集为空集时,可以保证满足禁止写写冲突发生的条件,节点设备得以执行后续步骤604。
在一些实施例中,若该并发事务未提交且该目标事务的目标参数为一,节点设备确定数据异常类型为脏写异常,其中,该目标参数T.no_committed用于表示该目标事务的读写集合成分所对应的已提交事务数量,由于在循环过程中,如果上一个并发事务与目标事务之间不存在数据异常,那么在执行本次循环之前,需要将上一个并发事务与目标事务进行合并,并将合并后得到的新的事务赋值给目标事务,而合并的本质是对两事务的读写集合进行合并,因此在任一次循环中,目标事务的读写集合有可能是经过合并后的读写集合,在目标事务的读写集合中会拥有某个已经提交的事务的读写集合的成分,而目标参数T.no_committed则用来描述读写集合中所拥有的其他已提交事务的成分所对应的已提交事务数量。
在一些实施例中,若该并发事务已提交且该第一交集与该第三交集之间的交集不是空集,确定数据异常类型为丢失更新异常。
示意性地,以第一交集、第二交集以及第三交集分别表示为S1、S2以及S3为例,若当满足如下任一条件时,节点设备确定数据异常类型,报告写写异常发生,循环终止:1)该并发事务没有提交完成且该目标事务的目标参数T.no_committed=1,此时构成写写冲突,数据异常类型为脏写异常;2)该并发事务已经提交且S1∩S3不是空集,此时数据异常类型为丢失更新异常。
需要说明的是,在一些实施例中,节点设备同步执行上述步骤6031至步骤6035;在另一些实施例中,节点设备按照任意顺序执行上述步骤6031至步骤6035,本申请实施例对此不作限定。
经过上述步骤603,节点设备从至少一个候选并发事务中确定出目标事务的并发事务,进一步地,若该目标事务与该并发事务之间的第三交集为空集,则节点设备执行下述步骤604。
604、若该第一交集和该第二交集中,存在至少一项不为空,且该目标事务与该并发事务冲突,则节点设备基于该目标事务和该并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,该目标变量列表包括该目标事务和该并发事务所作用的相同变量。
其中,该第一交集和该第二交集中,存在至少一项不为空包括以下三种情况:1)第一交集不为空,第二交集为空;2)第一交集为空,第二交集不为空;3)第一交集不为空,第二交集不为空。若第一交集和第二交集满足上述三种情况中的任一种,且该目标事务与该并发事务冲突,则节点设备基于上述版本变更次数和目标变量列表,来确定数据异常类型。其中,节点设备基于目标事务与并发事务之间的有向边的数量来确定目标事务与并发事务是否冲突,也即是,若目标事务与该并发事务之间的有向边的数量大于或等于二,则确定目标事务与并发事务冲突。
下面将对本步骤604中确定数据异常类型的具体实施方式进行说明,需要说明的是,在介绍本步骤604的具体实施方式之前,首先通过以下四点,对本申请实施例所涉及的数据异常类型的所属类别、子类别、具体定义以及隔离级别进行介绍:
第一点、数据异常类型的所属类别。
在本申请实施例中,数据异常类型的所属类别包括写异常类别(Write AnomalyType,WAT)、读异常类别(Read Anomaly Type,RAT)以及交叉异常类别(IntersectAnomalyType,IAT)。
其中,若一个调度中存在作用于不同版本的同一变量的两个写操作,则该数据异常类型的所属类别为写异常类别;若一个调度中不存在作用于不同版本的同一变量的两个写操作,且该调度中存在作用于相同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为读异常类别;若一个调度中不存在作用于不同版本的同一变量的两个写操作,且该调度中不存在作用于相同版本的同一变量的读操作和写操作,且该调度中存在作用于不同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为交叉异常类别。
1、写异常类别。
2、读异常类别。
3、交叉异常类别。
第二点、数据异常类型的子类别。
在本申请实施例中,如上述第一点所示,本申请根据冲突的差异,将数据异常类型分为三类,但是每一类别中数据异常依然是无穷多,这不利于进一步认识数据异常,也不利于量化分析数据异常,因此在第二点中,按照冲突所操作的变量的数量不同,进一步对数据异常的类型进行划分,得到子类别。
其中,若一个数据异常发生同一个变量上,则数据异常类型在所属类别中的子类别属于单元数据异常(Single-Meta Data Anomalies,SDA);若一个数据异常发生两个变量上,则数据异常类型在所属类别中的子类别属于双元数据异常(Double-Meta DataAnomalies,DDA);若一个数据异常不属于上述两种子类别,则数据异常类型在所属类别中的子类别属于多元数据异常(Multi-Meta Data Anomalies,MDA)。
示意性地,假设一个数据异常(Data Anomalies,DA,简写为da)中变量的个数表示为NV,事务的个数表示为NT,将NV和NT的组合称为数据异常的特征,记为Cda=(NV,NT),则上述数据异常类型的子类别表示为下述三种情况:
1、单元数据异常。
若Cda=(1,2),则数据异常发生在两个事务一个变量上,则数据异常类型在所属类别中的子类别属于单元数据异常。
2、双元数据异常。
若Cda=(2,2),则数据异常发生在两个事务两个变量上,则数据异常类型在所属类别中的子类别属于双元数据异常。
3、多元数据异常。
若Cda≠(1,2),且Cda≠(2,2),则数据异常类型在所属类别中的子类别属于多元数据异常。
第三点、数据异常类型的具体定义。
在本申请实施例中,按照上述第一点和第二点所示的分类,给出了每种具体的数据异常的名称、对应的形式化定义以及对应的CCG图。具体如表2以及图7至图9所示,其中,图7为本申请实施例提供的一种单元数据异常CCG图的示意图;图8为本申请实施例提供的一种双元数据异常CCG图的示意图;图9为本申请实施例提供的一种多元数据异常CCG图的示意图。
表2
需要说明的是,图7至图9所示的CCG图的示意图的具体含义已在上述对冲突环图以及数据异常的定义部分说明,详见图2至图4对应文段,故在此不再赘述。
另外,对于图9所示的多元数据异常CCG图,该类数据异常构成复杂,量化研究结果表明多元数据异常的发生概率较小,下面仅对图9所示的多元数据异常CCG图对应的调度表达式进行示意性说明,不做过多阐述。
如图9中(a)图所示,台阶式写异常的调度表达式为s=R1[x0]W2[x1]W2[y1]W3[y2]R3[z0]W1[z1],该调度中包含了WW冲突;
如图9中(b)图所示,台阶式读异常的调度表达式为s=R1[x0]W2[x1]W2[y1]R3[y1]R3[z0]W1[z1],该调度中包含了WR冲突,但没有包含WW冲突;
如图9中(c)图所示,台阶式交叉异常的调度表达式为s=R1[x0]W2[x1]R2[y0]W3[y1]R3[z0]W1[z1],该调度中包含了RW冲突,但没有包含WW冲突和WR冲突。
第四点、数据异常类型的隔离级别。
在本申请实施例中,按照上述第三点所示的数据异常的具体定义,提供了两种隔离级别,分别为无读写异常(No Read-Write Anomalies,NRW)和无任何异常(NoAnomalies,NA),分级依据是数据异常是否可以通过设置简单规则来加以避免,从而降低并发访问控制算法的复杂度。其中,NRW是指不允许出现WAT和RAT类数据异常,但不能消除IAT类数据异常;NA是指不允许任何数据异常发生,其效果等价于ANSI-SQL标准定义的可串行化隔离级别。因此,NRW级别低于NA级别。
下面参考表3,了解本申请实施例提供的隔离级别。
表3
需要说明的是,上述隔离级别的定义,能够指导并发访问控制算法。可选地,按照上述定义的隔离级别,通过设置简单规则避免出现数据异常,达到NRW级别。例如,采用禁止WW边出现的规则来避免出现WAT异常,又例如,采用读已提交,快照读等方式来避免出现RAT异常。通过这种方式能够减少隔离级别的层级个数,提高并发访问控制算法的实现效率。例如,采用可串行化快照隔离(Serializable Snapshot Isolation,SSI)技术,仅需识别连续的2个RW边是否出现异常,即能达到NA级别,因此大大提高了并发访问控制算法的实现效率。
经过上述四点,对本申请实施例所涉及的数据异常类型的所属类别、子类别、具体定义以及隔离级别进行了介绍,下面以上述四点所示为基础,对本步骤604的具体实施方式进行详细说明,包括下述步骤6041至步骤6043:
6041、节点设备基于该目标事务与该并发事务中作用于同一变量的读写操作,确定该数据异常类型的所属类别。
其中,本步骤6041包括下述三种情况:
情况一、若目标事务与该并发事务中存在作用于不同版本的同一变量的两个写操作,则该数据异常类型的所属类别为写异常类别。
情况二、若该目标事务与该并发事务中不存在作用于不同版本的同一变量的两个写操作,且该目标事务与该并发事务中存在作用于相同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为读异常类别。
情况三、若该目标事务与该并发事务中不存在作用于不同版本的同一变量的两个写操作,且该目标事务与该并发事务中不存在作用于相同版本的同一变量的读操作和写操作,且该目标事务与该并发事务中存在作用于不同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为交叉异常类别。
示意性地,假设该目标事务为Ti,该并发事务为Tj,若Tj>∈E≠Wi[xm]Wj[xm+1],且Tj>∈E≠Wi[xm]Rj[xm],且Tj>∈E=Ri[xm]Wj[xm+1],则该数据异常类型的所属类别为交叉异常类别。
6042、节点设备基于该数据异常类型的所属类别以及该目标变量列表,确定该数据异常类型在所属类别中的子类别。
其中,由上述步骤603中可知,目标变量列表中存储有该目标事务与该并发事务所作用的相同变量,也即是,节点设备基于目标变量列表得到该目标事务与该并发事务所作用的相同变量的数量,从而按照上述三种子类别的定义,确定该数据异常类型在所属类别中的子类别。
示意性地,本步骤6042包括下述三种情况:
情况一、若该目标变量列表中的变量数量为一,则确定该数据异常类型在所属类别中的子类别属于单元数据异常。
情况二、若该目标变量列表中的变量数量为二,确定该数据异常类型在所属类别中的子类别属于双元数据异常。
情况三、若该数据异常类型在所属类别中的子类别既不属于该单元数据异常,也不属于该双元数据异常,确定该数据异常类型在所属类别中的子类别属于多元数据异常。
6043、节点设备基于该数据异常类型在所属类别中的子类别、该版本变更次数以及该并发事务与该目标事务中作用于同一变量的读写操作,确定该数据异常类型。
其中,由上述步骤603可知,版本变更次数用于表示该目标事务与该并发事务所作用的相同变量的数据状态,进一步地,由上述表2可知,不同的数据异常对应的版本变更次数以及两个事务作用于同一变量的读写操作不同,因此,在本步骤6043中,节点设备基于版本变更次数以及该并发事务与该目标事务中作用于同一变量的读写操作,来确定该数据异常类型。
示意性地,下面以八种场景为例,对本步骤6043的具体实施方式进行说明:
场景一、该数据异常类型的所属类别为写异常类别,该子类别为单元数据异常,则本步骤6043包括下述三种情况:
1)若该版本变更次数为一,则节点设备确定该数据异常类型为丢失自更新异常。
2)若该版本变更次数为二,该目标事务与该并发事务中存在作用于同一变量的三个写操作,则节点设备确定该数据异常类型为全写入异常;
3)若该版本变更次数为二,该目标事务与该并发事务中存在作用于同一变量的两个写操作和一个读操作,则节点设备确定该数据异常类型为丢失更新异常。
场景二、该数据异常类型的所属类别为写异常类别,该子类别为双元数据异常,则本步骤6043包括下述三种情况:
1)若该版本变更次数为一,该目标事务与该并发事务中存在作用于不同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则节点设备确定该数据异常类型为读写偏序异常。
2)若该版本变更次数为一,该目标事务与该并发事务中存在作用于相同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则节点设备确定该数据异常类型为重复写偏序异常。
3)若该版本变更次数为一,该目标事务与该并发事务中存在作用于不同版本的第一变量的两个写操作以及作用于不同版本的第二变量的两个写操作,则节点设备确定该数据异常类型为全写入偏序异常。
场景三、该数据异常类型的所属类别为读异常类别,该子类别为单元数据异常,则本步骤6043包括下述两种情况:
1)若该版本变更次数为一,该目标事务与该并发事务中存在作用于同一变量的两个读操作和一个写操作,则节点设备确定该数据异常类型为不可重复读异常。
2)若该版本变更次数为一,该目标事务与该并发事务中存在作用于同一变量的两个写操作和一个读操作,则节点设备确定该数据异常类型为中间读异常。
场景四、该数据异常类型的所属类别为读异常类别,该子类别为双元数据异常,则本步骤6043包括下述两种情况:
1)若该版本变更次数为零,则节点设备确定该数据异常类型为写读偏序异常。
2)若该版本变更次数为一,则节点设备确定该数据异常类型为读偏序异常。
场景五、该数据异常类型的所属类别为交叉异常类别,该子类别为双元数据异常,则本步骤6043包括:
若该版本变更次数为一,则节点设备确定该数据异常类型为写偏序异常。
场景六、该数据异常类型的所属类别为写异常类别,该子类别为多元数据异常,则本步骤6043包括:
节点设备确定该数据异常类型为台阶式写异常。
场景七、该数据异常类型的所属类别为读异常类别,该子类别为多元数据异常,则本步骤6043包括:
节点设备确定该数据异常类型为台阶式读异常。
场景八、该数据异常类型的所属类别为交叉异常类别,该子类别为多元数据异常,则本步骤6043包括:
节点设备确定该数据异常类型为台阶式交叉异常。
需要说明的是,在本申请实施例中,节点设备是按照步骤6041至步骤6043的顺序执行的,也即是,节点设备先确定数据异常类型的所属类别,再确定子类别,最后确定具体的数据异常类型。在一些实施例中,上述步骤6041至步骤6043替换为下述步骤一至步骤三:
步骤一、节点设备基于该目标变量列表,确定该数据异常类型的子类别。
步骤二、节点设备基于该目标事务与该并发事务中作用于同一变量的读写操作,确定该数据异常类型的所属类别;
步骤三、节点设备基于该数据异常类型在所属类别中的子类别、该版本变更次数以及该并发事务与该目标事务中作用于同一变量的读写操作,确定该数据异常类型。
也即是,节点设备先确定数据异常类型的子类别,再确定数据异常类型的所属类别,最终确定具体的数据异常类型。
在另一些实施例中,节点设备同步确定数据异常类型的所属类别和子类别,本申请实施例对此不作限定。
经过上述步骤604,节点设备确定数据异常类型后,执行下述步骤605至步骤607。需要说明的是,若该第一交集和该第二交集中,存在至少一项不为空,且该目标事务与该并发事务不冲突,则节点设备执行下述步骤608。
605、节点设备从该目标事务和该并发事务中,确定待回滚的事务。
在本申请实施例中,经过上述步骤604,节点设备确定出现数据异常,需要对该目标事务或该并发事务进行回滚,从这两个事务中确定出待回滚的事务。
下面对本步骤605所涉及的两种可选实施方式进行说明:
方式一、节点设备按照事务优先级,将该目标事务和该并发事务中事务优先级低的事务确定为该待回滚的事务。
可选地,事务优先级为预先设置的优先级,数据库系统预先为每类事务分配事务优先级,例如,按照事务的处理时长、事务的操作类型等,确定每个事务的事务优先级,本申请实施例对于事务优先级的具体设置方式不作限定。
示意性地,下面以三种事务优先级的设置方式为例,对本步骤605的具体实施方式进行说明:
第一种、若该目标事务和该并发事务中任一事务的处理时长小于其他事务,则节点设备将该任一事务确定为该待回滚的事务。
其中,事务优先级是按照事务的处理时长来确定的。处理时长大于参考时长的事务为长事务,处理时长小于或等于参考时长的事务确定为短事务,长事务的事务优先级高于短事务的事务优先级。示意性地,对于目标事务来说,以并发事务的处理时长为参考时长,若目标事务的处理时长小于该并发事务,则节点设备将该目标事务确定为待回滚的事务。
第二种、若该目标事务和该并发事务中任一事务为读事务,则节点设备将该读事务确定为待回滚的事务。
其中,事务优先级是按照事务的操作类型来确定的,写事务的事务优先级高于读事务的事务优先级。示意性地,若目标事务为写事务,并发事务为读事务,则节点设备将该目标事务确定为待回滚的事务。
第三种、若该目标事务和该并发事务中任一事务为写事务,且该写事务的处理时长小于参考时长,则节点设备将该写事务确定为待回滚的事务。
其中,事务优先级是按照事务的处理时长以及操作类型的结合来确定的,也即是,当写事务为短事务时,其事务优先级低于长的读事务。示意性地,若该目标事务为写事务,且该目标事务的处理时长小于参考时长,则节点设备将该目标事务确定为待回滚的事务。
需要说明的是,在一些实施例中,事务优先级的设置方式还可以有其他形式,例如,短事务的事务优先级高于长事务的事务优先级,又例如,读事务的事务优先级高于写事务的事务优先级,等等,本申请实施例对此不作限定。
通过这种基于事务优先级来确定待回滚的事务的方式,能够有针对性地回滚事务,保证重要的事务优先处理,从而提高了计算资源的利用率,提高了事务处理的效率。
方式二,若该目标事务与该并发事务中任一事务所作用的变量数量大于其他事务,则节点设备将该任一事务确定为待回滚的事务。
可选地,节点设备遍历目标事务与并发事务的目标冲突环图(有关目标冲突环图的介绍会在后文步骤607中介绍,在此不再赘述),当任一事务所作用的变量数量最多时,将该任一事务确定为待回滚的事务。
通过这种可选地实施方式,将涉及变量数量较多的事务进行回滚,能够减少未来与其他事务冲突的可能性,从而减少了事务处理的冲突率,提高了事务处理的效率。
606、节点设备对该待回滚的事务进行回滚。
需要说明的是,通过上述步骤601至步骤606,节点设备确定了目标事务与并发事务是否构成冲突,只有在存在数据异常的情况下,才确定待回滚的事务,进一步地,节点设备在确定待回滚的事务时是按照一定的策略来确定的,而不是直接将目标事务进行回滚,这样能够有效降低假回滚率,从而提高计算资源的利用率,提高事务处理的效率。
607、节点设备删除目标冲突环图中该待回滚的事务所作用的变量以及对应的读写操作,其中,该目标冲突环图中的顶点用于表示事务对应的事务标识以及事务对应的读写操作所作用的变量,该目标冲突环图中的边用于表示事务之间的关联关系以及变量之间的版本变化。
在本申请实施例中,目标冲突环图是一种细节冲突环图(Detail Conflict CycleGraph,DCCG),是等价于CCG图和CCSG图的一种冲突环图,也是本申请实施例中数据状态一致性模型的实现基础。在经过上述步骤606,将待回滚的事务进行回滚后,节点设备删除目标冲突环图中待回滚的事务所作用的变量以及对应的读写操作,来维护目标冲突环图的结构。
下面将对目标冲突环图的获取方式进行详细阐述,包括如下步骤一至步骤三:
步骤一、获取该目标事务与该并发事务之间的第一冲突环图,该第一冲突环图中的顶点用于表示事务对应的事务标识,该第一冲突环图中的边用于表示事务之间的关联关系以及事务对应的读写操作所作用的变量。
其中,第一冲突环图为该目标事务与该并发事务之间的CCG图。具体关于第一冲突环图中的顶点以及边的含义请参考前述对CCG图的顶点和边的介绍,此处不再赘述。
步骤二、对该第一冲突环图进行转换,得到第二冲突环图,该第二冲突环图中的顶点用于表示多个不同版本的变量,该第二冲突环图中的边用于表示变量之间的版本变化以及同一事务所作用的变量。
其中,第二冲突环图为该目标事务与该并发事务之间的CCSG图。具体关于第二冲突环图中的顶点以及边的含义请参考前述对CCSG图的顶点和边的介绍,此处不再赘述。基于前述对CCG图和CCSG图的介绍可知,CCG图和CCSG图等价,下面以CCG图向CCSG图的等价转换规则为基础,对本步骤二的具体实施方式进行简要说明,包括下述步骤A和步骤B:
步骤A、对该第一冲突环图的边进行拆分,得到该多个不同版本的变量。
步骤B、将该多个不同版本的变量作为顶点,在相邻版本的同一变量对应的顶点之间添加边,在同一事务所作用的变量对应的顶点之间添加边,得到该第二冲突环图。
步骤三、对该第二冲突环图进行转换,得到该目标冲突环图。
其中,基于前述对CCG图和CCSG图的介绍可知,CCG图和CCSG图等价,CCSG图能够等价转换为CCG图,该目标冲突环图是通过对CCSG图进行转换得到的新的CCG图,在上述第一冲突环图中,该第一冲突环图中的顶点用于表示事务对应的事务标识,而在目标冲突环图(也即是新的CCG图)中,该目标冲突环图的顶点信息更为细化,既包括了事务对应的事务标识,也包括了事务对应的读写操作所作用的变量,进一步地,该目标冲突环图的顶点对应的变量仅保留了构成冲突环的必要变量,因为一个事务所操作过的变量可能很多,但不是所有的变量及其版本都是构成冲突环图的充分条件。
下面以前述CCSG图向CCG图的等价转换规则为基础,对本步骤三的具体实施方式进行说明,包括下述步骤A和步骤C:
步骤A、将该第二冲突环图中同一事务所作用的变量对应的顶点进行合并,将合并后的顶点命名为事务对应的事务标识。
步骤B、在相邻顶点之间添加边,得到第三冲突环图。
步骤C、若该第三冲突环图的任意两个相邻顶点中存在相同版本的变量,将该任意两个相邻顶点合并,删去合并后的顶点所对应的该相同版本的变量,得到该目标冲突环图;若该第三冲突环图的任意两个相邻顶点中存在不同版本的同一变量,将该任意两个相邻顶点合并,得到该目标冲突环图。
其中,该第三冲突环图即为对CCSG图按照等价转换规则进行转换得到的CCG图,在该第三冲突环图中,若任意两个相邻顶点中存在相同版本的变量,则该第三冲突环图适用于约简规则,对这两个顶点进行合并,且删去相同版本的变量;若任意两个相邻顶点中存在不同版本的同一变量,则该第三冲突环图适用于合并规则但不适用于约简规则,仅对这两个顶点进行合并;若任意两个相邻顶点中不存在相同的变量,则直接将该第三冲突环图作为目标冲突环图。
下面对上述约简规则以及合并规则进行介绍:
第一、约简规则。
对于一个冲突环图中任意两个相邻顶点Vi和Vi+1,若 即存在至少一个相同版本的变量,则Vi和Vi+1可以合并为一个顶点,该新顶点中,xm和yn等可以被去除,只保留两个顶点中不相交的部分,也即是Vi∪Vi+1-Vi∩Vi+1。即约简后的新顶点保留Vi和Vi+1这两个集合的差集。
基于上述对目标冲突环图的介绍以及该约简规则,能够得到以下三条推论:
推论2、一个最小DCCG图等价于上述表2中的某一种数据异常。
推论3、若一个调度s中,任意两个并发事务之间存在WR关系,则这两个并发事务可适用约简规则。
第二、合并规则。
对于一个冲突环图中任意两个相邻顶点Vi和Vi+1,若则这两个顶点不可约简;若即存在至少一个相同的变量,且不适用于约简规则,则这两个相邻顶点适用于合并规则,换言之,将这两个相邻顶点对应的事务称为可合并事务,将Vi和Vi+1合并为一个顶点,该新顶点对应的事务的读集为Vi和Vi+1对应的读集的合集,该新顶点对应的事务的写集为Vi和Vi+1对应的写集的合集。
另外,基于上述对目标冲突环图的介绍以及该合并规则,能够得到以下推论:一个调度s的dccg图所表示的数据异常,在通过对可合并事务进行合并后,不影响原dccg图等价的数据异常。
以上对目标冲突环图的获取方式以及相关规则进行了介绍,下面参考表4和图10,结合具体的示例,对目标冲突环图的获取方式进行举例说明,其中,图10是本申请实施例提供的一种获取目标冲突环图的示意图。
其中,一个调度s包括三个事务T1、T2以及T3,其执行序列如表4所示。
表4
时刻 | T1 | T2 | T3 |
t0 | R1[x0] | ||
t1 | W2[x1] | ||
t2 | W2[y1] | ||
t3 | R3[y1] | ||
t4 | W3[z1] | ||
t5 | W1[z2] |
如图10中(a)图所示,该调度s的CCG图(也即是第一冲突环图)中的边用于表示事务之间的关联关系以及事务对应的读写操作所作用的变量,包括以下三条边:E1=(T1→T2,R1[x0]W2[x1]);E2=(T2→T3,W2[y1]R3[y1]);E3=(T3→T1,W3[z1]W1[z2])。
如图10中(b)图和(c)图所示,该CCG图中包括三个变量x,y和z,分别处于边E1,E2以及E3,以变量为顶点,对三条边进行拆分。例如,E1表示为R1[x0]W2[x1],对该边进行拆分,得到E11=R1[x0]和E12=W2[x1];E2表示为W2[y1]R3[y1],对该边进行拆分,得到E21=W2[y1]和E22=R3[y1];E3表示为W3[z1]W1[z2],对该边进行拆分,得到E31=W3[z1]和E32=W1[z2]。由此,CCG图中的顶点消失。
如图10中(d)图所示,在经过上述边拆分的过程后,得到变量x的两个版本x0和x1,变量.y的一个版本y1以及变量z的两个版本z1和z2。将这些变量的版本作为CCSG图的顶点,同一个变量的多个版本纵向排列,被同一个事务作用过的不同变量的版本之间横向排列(应理解,图(d)中还包括变量z的初始版本z0,这样才能与边E31对应)。进一步地,在相邻版本的同一变量对应的顶点之间添加边;在同一事务所作用的变量对应的顶点之间添加边。另外,基于前述对CCSG图的定义可知,CCSG图为一个有向环构成的图,则边W3[z1]和W2[y1]以及变量版本z0和y0对构成有向环没有作用,因此删去这两条边和这两个变量版本,得到如图10中(e)图所示的CCSG图。
如图10中(e)图所示,该CCSG图(也即是第二冲突环图)中的顶点用于表示多个不同版本的变量,该第二冲突环图中的边用于表示变量之间的版本变化以及同一事务所作用的变量。示意性地,顶点V={x0、x1、y1、z1,z2};E={W2[x1],R2[x1]R2[y1],R3[y1]R3[z1],W1[z2],R1[x2]R1[x0]};其中,ET={R2[x1]R2[y1],R3[y1]R3[z1],R1[x2]R1[x0]};Es={W2[x1],W1[z2]}。
如图10中(f)图所示,该图(f)是通过对图(e)所示的CCSG图进行转换得到的新的CCG图(也即是第三冲突环图)。具体过程为:将CCSG图中同一个事务涉及的变量版本合并到同一个顶点里面,得到该图(f)。从该图(f)可以看到,每个顶点重新变为以事务为顶点,但比前述图10中的(a)图更为详细,事务之间的关联关系更加明确。需要说明的是,在一些实施例中,该图为一个无向的环图。
如图10中(g)图所示,顶点V2和V3满足上述约简规则,也即是在这两个顶点中,均包括相同版本的变量y1,因此,对顶点V2和V3进行合并,删去合并后的顶点中的变量y1,得到图10中(h)图所示的DCCG图(也即是目标冲突环图)。
以上通过举例的方式对目标冲突环图的获取方式进行了介绍,也可以理解为求解并发事务之间的有向环图的算法。在本步骤607中,节点设备在确定了待回滚的事务后,对该目标冲突环图的结构进行维护,便于后续执行下一次循环,也即是对至少一个候选并发事务中的其他候选并发事务进行一致性检验。
下面将通过步骤608,对目标事务和并发事务不冲突的情况进行说明。
608、节点设备对目标事务和并发事务进行合并,得到合并后的目标事务,再次执行上述步骤603,直至链表TS为空。
在本申请实施例中,经过上述步骤604,第一交集和第二交集中,存在至少一项不为空,且该目标事务与该并发事务不冲突,也可以理解为该目标事务与该并发事务之间不构成目标冲突环图,则目标事务与并发事务不存在数据异常,节点设备对这两个事务进行合并,得到合并后的目标事务,继续从链表TS中选取候选并发事务,直至链表TS为空。
下面以目标事务为T,并发事务为TL为例,对本步骤608的具体实施方式进行说明:
节点设备将该并发事务TL的读集并入目标事务T的读集中,将该并发事务TL的写集并入目标事务T的写集中,此外,如果并发事务TL没有提交,则对T-new的目标参数进行增量处理,也即令T-new.no_committed++(自增1),表示合并得到的新事务中拥有某个已经提交的事务的读写集合的成分。基于此,得到新的事务为T-new,并将T-new赋值给目标事务T(T=T-new),从链表TS中取出第二个候选并发事务定为TL,执行步骤603(判断新的T-new与新的TL之间是否冲突)。
609、若链表TS中最后一个候选并发事务与该目标事务之间不存在数据异常,则节点设备提交该目标事务。
在本申请实施例中,进一步地,若链表TS中最后一个候选并发事务与该目标事务之间不存在数据异常,则代表目标事务可提交。可选地,如果隔离级别参数=S,也即隔离级别是可串行化级别,此时即可满足可串行化级别,否则,满足前述表3所设定的隔离级别。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
在本申请实施例提供的事务处理方法中,在确定目标事务的并发事务后,在该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空的情况下,对目标事务与并发事务是否冲突进行判断,若目标事务与并发事务冲突,则根据这两个事务所作用的相同变量以及相同变量的版本变更次数,来确定数据异常类型。这种方式能够在目标事务的执行过程中,确认目标事务与并发事务是否真正构成冲突,进一步地,通过两个事务所作用的相同变量来确定数据异常类型,能够基于可串行化理论,识别出数据库系统中各种各样的数据异常,保证了数据状态的一致性,也提高了数据库系统的事务处理效率。
图11是根据本申请实施例提供的一种事务处理装置的结构示意图。该事务处理装置用于执行上述事务处理方法执行时的步骤,参见图11,该事务处理装置包括:第一确定模块1101和第二确定模块1102。
第一确定模块1101,用于确定目标事务的并发事务,该并发事务与该目标事务中存在作用于同一变量的读写操作,该目标事务为待提交事务;
第二确定模块1102,用于若该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空,且该目标事务与该并发事务冲突,则基于该目标事务和该并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,该目标变量列表包括该目标事务和该并发事务所作用的相同变量。
在一种可选地实现方式中,该装置还包括:
第三确定模块,用于从该目标事务和该并发事务中,确定待回滚的事务;
回滚模块,用于对该待回滚的事务进行回滚。
在一种可选地实现方式中,该第三确定模块用于:
按照事务优先级,将该目标事务和该并发事务中事务优先级低的事务确定为该待回滚的事务。
在一种可选地实现方式中,该第三确定模块用于下述任一项:
若该目标事务和该并发事务中任一事务的处理时长小于其他事务,则将该任一事务确定为该待回滚的事务;
若该目标事务和该并发事务中任一事务为读事务,将该读事务确定为待回滚的事务;
若该目标事务和该并发事务中任一事务为写事务,且该写事务的处理时长小于参考时长,则将该写事务确定为该待回滚的事务。
在一种可选地实现方式中,该第三确定模块用于:
若该目标事务与该并发事务中任一事务所作用的变量数量大于其他事务,则将该任一事务确定为待回滚的事务。
在一种可选地实现方式中,该装置还包括:
删除模块,用于删除目标冲突环图中该待回滚的事务所作用的变量以及对应的读写操作,其中,该目标冲突环图中的顶点用于表示事务对应的事务标识以及事务对应的读写操作所作用的变量,该目标冲突环图中的边用于表示事务之间的关联关系以及变量之间的版本变化。
在一种可选地实现方式中,该装置还包括:
获取模块,用于获取该目标事务与该并发事务之间的该目标冲突环图。
在一种可选地实现方式中,该获取模块包括:
获取单元,用于获取该目标事务与该并发事务之间的第一冲突环图,该第一冲突环图中的顶点用于表示事务对应的事务标识,该第一冲突环图中的边用于表示事务之间的关联关系以及事务对应的读写操作所作用的变量;
第一转换单元,用于对该第一冲突环图进行转换,得到第二冲突环图,该第二冲突环图中的顶点用于表示多个不同版本的变量,该第二冲突环图中的边用于表示变量之间的版本变化以及同一事务所作用的变量;
第二转换单元,用于对该第二冲突环图进行转换,得到该目标冲突环图。
在一种可选地实现方式中,该第一转换单元用于:
对该第一冲突环图的边进行拆分,得到该多个不同版本的变量;
将该多个不同版本的变量作为顶点,在相邻版本的同一变量对应的顶点之间添加边,在同一事务所作用的变量对应的顶点之间添加边,得到该第二冲突环图。
在一种可选地实现方式中,该第二转换单元用于:
将该第二冲突环图中同一事务所作用的变量对应的顶点进行合并,将合并后的顶点命名为事务对应的事务标识;
在相邻顶点之间添加边,得到第三冲突环图;
若该第三冲突环图的任意两个相邻顶点中存在相同版本的变量,将该任意两个相邻顶点合并,删去合并后的顶点中的该相同版本的变量,得到该目标冲突环图;若该第三冲突环图的任意两个相邻顶点中存在不同版本的同一变量,将该任意两个相邻顶点合并,得到该目标冲突环图。
在一种可选地实现方式中,该装置还包括:
第一处理模块,用于若该第一交集不为空,对该目标事务和该并发事务之间的有向边的数量进行增量处理,将该第一交集中的变量添加到该目标变量列表中;若该第一交集中存在版本不同的变量,对该版本变更次数进行增量处理,该有向边的数量用于指示该目标事务与该并发事务之间是否冲突;
第二处理模块,用于若第二交集不为空,对该有向边的数量进行增量处理,将该第二交集中的变量添加到该目标变量列表中;若该第二交集中存在版本不同的变量,对该版本变更次数进行增量处理;
第三处理模块,用于若第三交集不为空,基于该并发事务的提交状态,确定该数据异常类型,该第三交集为该目标事务的写集和该并发事务的写集之间的交集。
在一种可选地实现方式中,该第二确定模块1102包括:
第一确定单元,用于基于该目标事务与该并发事务中作用于同一变量的读写操作,确定该数据异常类型的所属类别;
第二确定单元,用于基于该数据异常类型的所属类别以及该目标变量列表,确定该数据异常类型在所属类别中的子类别;
第三确定单元,用于基于该数据异常类型在所属类别中的子类别、该版本变更次数以及该并发事务与该目标事务中作用于同一变量的读写操作,确定该数据异常类型。
在一种可选地实现方式中,该第一确定单元用于下述任一项:
若该目标事务与该并发事务中存在作用于不同版本的同一变量的两个写操作,则该数据异常类型的所属类别为写异常类别;
若该目标事务与该并发事务中不存在作用于不同版本的同一变量的两个写操作,且该目标事务与该并发事务中存在作用于相同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为读异常类别;
若该目标事务与该并发事务中不存在作用于不同版本的同一变量的两个写操作,且该目标事务与该并发事务中不存在作用于相同版本的同一变量的读操作和写操作,且该目标事务与该并发事务中存在作用于不同版本的同一变量的读操作和写操作,则该数据异常类型的所属类别为交叉异常类别。
在一种可选地实现方式中,该第二确定单元用于下述任一项:
若该目标变量列表中的变量数量为一,确定该数据异常类型在所属类别中的子类别属于单元数据异常;
若该目标变量列表中的变量数量为二,确定该数据异常类型在所属类别中的子类别属于双元数据异常;
若该数据异常类型在所属类别中的子类别既不属于该单元数据异常,也不属于该双元数据异常,确定该数据异常类型在所属类别中的子类别属于多元数据异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为写异常类别,该子类别为单元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为一,则该数据异常类型为丢失自更新异常;
若该版本变更次数为二,该目标事务与该并发事务中存在作用于同一变量的三个写操作,则该数据异常类型为全写入异常;
若该版本变更次数为二,该目标事务与该并发事务中存在作用于同一变量的两个写操作和一个读操作,则该数据异常类型为丢失更新异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为写异常类别,该子类别为双元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为一,该目标事务与该并发事务中存在作用于不同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则该数据异常类型为读写偏序异常;
若该版本变更次数为一,该目标事务与该并发事务中存在作用于相同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则该数据异常类型为重复写偏序异常;
若该版本变更次数为一,该目标事务与该并发事务中存在作用于不同版本的第一变量的两个写操作以及作用于不同版本的第二变量的两个写操作,则该数据异常类型为全写入偏序异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为读异常类别,该子类别为单元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为一,该目标事务与该并发事务中存在作用于同一变量的两个读操作和一个写操作,则该数据异常类型为不可重复读异常;
若该版本变更次数为一,该目标事务与该并发事务中存在作用于同一变量的两个写操作和一个读操作,则该数据异常类型为中间读异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为读异常类别,该子类别为双元数据异常,则该第三确定单元用于下述任一项:
若该版本变更次数为零,则确定该数据异常类型为写读偏序异常;
若该版本变更次数为一,则确定该数据异常类型为读偏序异常。
在一种可选地实现方式中,若该数据异常类型的所属类别为交叉异常类别,该子类别为双元数据异常,则该第三确定单元用于:
若该版本变更次数为一,则确定该数据异常类型为写偏序异常。
在一种可选地实现方式中,该第三确定单元还用于下述任一项:
若该数据异常类型的所属类别为写异常类别,该子类别为多元数据异常,则确定该数据异常类型为台阶式写异常;
若该数据异常类型的所属类别为读异常类别,该子类别为多元数据异常,则确定该数据异常类型为台阶式读异常;
若该数据异常类型的所属类别为交叉异常类别,该子类别为多元数据异常,则确定该数据异常类型为台阶式交叉异常。
在本申请实施例中,提供了一种事务处理装置,在确定目标事务的并发事务后,在该目标事务的读集和该并发事务的写集之间的第一交集和该目标事务的写集和该并发事务的读集之间的第二交集中,存在至少一项不为空的情况下,对目标事务与并发事务是否冲突进行判断,若目标事务与并发事务冲突,则根据这两个事务所作用的相同变量以及相同变量的版本变更次数,来确定数据异常类型。这种方式能够在目标事务的执行过程中,确认目标事务与并发事务是否真正构成冲突,进一步地,通过两个事务所作用的相同变量来确定数据异常类型,能够基于可串行化理论,识别数据库系统中各种各样的数据异常,保证数据状态的一致性,从而提高数据库系统的事务处理效率。
需要说明的是:上述实施例提供的事务处理装置在处理事务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的事务处理装置与事务处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供了一种计算机设备,该计算机设备包括处理器和存储器,该存储器用于存储至少一条计算机程序,该至少一段计算机程序由该处理器加载并执行以实现本申请实施例中的事务处理方法中所执行的操作。
在一些实施例中,本申请实施例所涉及的计算机程序可被部署在一个计算机设备上执行,或者在位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过有线网络或无线网络互连的多个计算机设备上执行,分布在多个地点且通过有线网络或无线网络互连的多个计算机设备可以组成区块链系统。
以计算机设备为服务器为例,图12是根据本申请实施例提供的一种服务器的结构示意图,该服务器1200可因配置或性能不同而产生比较大的差异,能够包括一个或一个以上处理器(Central Processing Units,CPU)1201和一个或一个以上的存储器1202,其中,该存储器1202中存储有至少一条计算机程序,该至少一条计算机程序由处理器1201加载并执行以实现上述各个方法实施例提供的事务处理方法。当然,该服务器还能够具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器还能够包括其他用于实现设备功能的部件,在此不做赘述。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质应用于计算机设备,该计算机可读存储介质中存储有至少一条计算机程序,该至少一条计算机程序由处理器加载并执行以实现上述实施例的事务处理方法中计算机设备所执行的操作。
本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机程序代码,该计算机程序代码存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序代码,处理器执行该计算机程序代码,使得该计算机设备执行上述各种可选实现方式中提供的事务处理方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (21)
1.一种事务处理方法,其特征在于,所述方法包括:
确定目标事务的并发事务,所述并发事务与所述目标事务中存在作用于同一变量的读写操作,所述目标事务为待提交事务;
若所述目标事务的读集和所述并发事务的写集之间的第一交集和所述目标事务的写集和所述并发事务的读集之间的第二交集中,存在至少一项不为空,且所述目标事务与所述并发事务冲突,则基于所述目标事务和所述并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,所述目标变量列表包括所述目标事务和所述并发事务所作用的相同变量;
从所述目标事务和所述并发事务中,确定待回滚的事务;
对所述待回滚的事务进行回滚;
删除目标冲突环图中所述待回滚的事务所作用的变量以及对应的读写操作,其中,所述目标冲突环图中的顶点用于表示事务对应的事务标识以及事务对应的读写操作所作用的变量,所述目标冲突环图中的边用于表示事务之间的关联关系以及变量之间的版本变化。
2.根据权利要求1所述的方法,其特征在于,所述从所述目标事务和所述并发事务中,确定待回滚的事务,包括:
按照事务优先级,将所述目标事务和所述并发事务中事务优先级低的事务确定为所述待回滚的事务。
3.根据权利要求2所述的方法,其特征在于,所述按照事务优先级,将所述目标事务和所述并发事务中事务优先级低的事务确定为所述待回滚的事务,包括下述任一项:
若所述目标事务和所述并发事务中任一事务的处理时长小于其他事务,则将所述任一事务确定为所述待回滚的事务;
若所述目标事务和所述并发事务中任一事务为读事务,将所述读事务确定为待回滚的事务;
若所述目标事务和所述并发事务中任一事务为写事务,且所述写事务的处理时长小于参考时长,则将所述写事务确定为所述待回滚的事务。
4.根据权利要求1所述的方法,其特征在于,所述从所述目标事务和所述并发事务中,确定待回滚的事务,包括:
若所述目标事务与所述并发事务中任一事务所作用的变量数量大于其他事务,则将所述任一事务确定为待回滚的事务。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述目标事务与所述并发事务之间的所述目标冲突环图。
6.根据权利要求5所述的方法,其特征在于,所述获取所述目标事务与所述并发事务之间的所述目标冲突环图,包括:
获取所述目标事务与所述并发事务之间的第一冲突环图,所述第一冲突环图中的顶点用于表示事务对应的事务标识,所述第一冲突环图中的边用于表示事务之间的关联关系以及事务对应的读写操作所作用的变量;
对所述第一冲突环图进行转换,得到第二冲突环图,所述第二冲突环图中的顶点用于表示多个不同版本的变量,所述第二冲突环图中的边用于表示变量之间的版本变化以及同一事务所作用的变量;
对所述第二冲突环图进行转换,得到所述目标冲突环图。
7.根据权利要求6所述的方法,其特征在于,所述对所述第一冲突环图进行转换,得到第二冲突环图,包括:
对所述第一冲突环图的边进行拆分,得到所述多个不同版本的变量;
将所述多个不同版本的变量作为顶点,在相邻版本的同一变量对应的顶点之间添加边,在同一事务所作用的变量对应的顶点之间添加边,得到所述第二冲突环图。
8.根据权利要求6所述的方法,其特征在于,所述对所述第二冲突环图进行转换,得到所述目标冲突环图,包括:
将所述第二冲突环图中同一事务所作用的变量对应的顶点进行合并,将合并后的顶点命名为事务对应的事务标识;
在相邻顶点之间添加边,得到第三冲突环图;
若所述第三冲突环图的任意两个相邻顶点中存在相同版本的变量,将所述任意两个相邻顶点合并,删去合并后的顶点中的所述相同版本的变量,得到所述目标冲突环图;若所述第三冲突环图的任意两个相邻顶点中存在不同版本的同一变量,将所述任意两个相邻顶点合并,得到所述目标冲突环图。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述第一交集不为空,对所述目标事务和所述并发事务之间的有向边的数量进行增量处理,将所述第一交集中的变量添加到所述目标变量列表中;若所述第一交集中存在版本不同的变量,对所述版本变更次数进行增量处理,所述有向边的数量用于指示所述目标事务与所述并发事务之间是否冲突;
若所述第二交集不为空,对所述有向边的数量进行增量处理,将所述第二交集中的变量添加到所述目标变量列表中;若所述第二交集中存在版本不同的变量,对所述版本变更次数进行增量处理;
若第三交集不为空,基于所述并发事务的提交状态,确定所述数据异常类型,所述第三交集为所述目标事务的写集和所述并发事务的写集之间的交集。
10.根据权利要求1所述的方法,其特征在于,所述基于所述目标事务和所述并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,包括:
基于所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型的所属类别;
基于所述数据异常类型的所属类别以及所述目标变量列表,确定所述数据异常类型在所属类别中的子类别;
基于所述数据异常类型在所属类别中的子类别、所述版本变更次数以及所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型。
11.根据权利要求10所述的方法,其特征在于,所述基于所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型的所属类别,包括下述任一项:
若所述目标事务与所述并发事务中存在作用于不同版本的同一变量的两个写操作,则所述数据异常类型的所属类别为写异常类别;
若所述目标事务与所述并发事务中不存在作用于不同版本的同一变量的两个写操作,且所述目标事务与所述并发事务中存在作用于相同版本的同一变量的读操作和写操作,则所述数据异常类型的所属类别为读异常类别;
若所述目标事务与所述并发事务中不存在作用于不同版本的同一变量的两个写操作,且所述目标事务与所述并发事务中不存在作用于相同版本的同一变量的读操作和写操作,且所述目标事务与所述并发事务中存在作用于不同版本的同一变量的读操作和写操作,则所述数据异常类型的所属类别为交叉异常类别。
12.根据权利要求10所述的方法,其特征在于,所述基于所述数据异常类型的所属类别以及所述目标变量列表,确定所述数据异常类型在所属类别中的子类别,包括下述任一项:
若所述目标变量列表中的变量数量为一,确定所述数据异常类型在所属类别中的子类别属于单元数据异常;
若所述目标变量列表中的变量数量为二,确定所述数据异常类型在所属类别中的子类别属于双元数据异常;
若所述数据异常类型在所属类别中的子类别既不属于所述单元数据异常,也不属于所述双元数据异常,确定所述数据异常类型在所属类别中的子类别属于多元数据异常。
13.根据权利要求10所述的方法,其特征在于,若所述数据异常类型的所属类别为写异常类别,所述子类别为单元数据异常,则基于所述数据异常类型在所属类别中的子类别、所述版本变更次数以及所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型,包括下述任一项:
若所述版本变更次数为一,则所述数据异常类型为丢失自更新异常;
若所述版本变更次数为二,所述目标事务与所述并发事务中存在作用于同一变量的三个写操作,则所述数据异常类型为全写入异常;
若所述版本变更次数为二,所述目标事务与所述并发事务中存在作用于同一变量的两个写操作和一个读操作,则所述数据异常类型为丢失更新异常。
14.根据权利要求10所述的方法,其特征在于,若所述数据异常类型的所属类别为写异常类别,所述子类别为双元数据异常,则基于所述数据异常类型在所属类别中的子类别、所述版本变更次数以及所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型,包括下述任一项:
若所述版本变更次数为一,所述目标事务与所述并发事务中存在作用于不同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则所述数据异常类型为读写偏序异常;
若所述版本变更次数为一,所述目标事务与所述并发事务中存在作用于相同版本的第一变量的写操作和读操作以及作用于不同版本的第二变量的两个写操作,则所述数据异常类型为重复写偏序异常;
若所述版本变更次数为一,所述目标事务与所述并发事务中存在作用于不同版本的第一变量的两个写操作以及作用于不同版本的第二变量的两个写操作,则所述数据异常类型为全写入偏序异常。
15.根据权利要求10所述的方法,其特征在于,若所述数据异常类型的所属类别为读异常类别,所述子类别为单元数据异常,则基于所述数据异常类型在所属类别中的子类别、所述版本变更次数以及所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型,包括下述任一项:
若所述版本变更次数为一,所述目标事务与所述并发事务中存在作用于同一变量的两个读操作和一个写操作,则所述数据异常类型为不可重复读异常;
若所述版本变更次数为一,所述目标事务与所述并发事务中存在作用于同一变量的两个写操作和一个读操作,则所述数据异常类型为中间读异常。
16.根据权利要求10所述的方法,其特征在于,若所述数据异常类型的所属类别为读异常类别,所述子类别为双元数据异常,则基于所述数据异常类型在所属类别中的子类别、所述版本变更次数以及所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型,包括下述任一项:
若所述版本变更次数为零,则确定所述数据异常类型为写读偏序异常;
若所述版本变更次数为一,则确定所述数据异常类型为读偏序异常。
17.根据权利要求10所述的方法,其特征在于,若所述数据异常类型的所属类别为交叉异常类别,所述子类别为双元数据异常,则基于所述数据异常类型在所属类别中的子类别、所述版本变更次数以及所述目标事务与所述并发事务中作用于同一变量的读写操作,确定所述数据异常类型,包括:
若所述版本变更次数为一,则确定所述数据异常类型为写偏序异常。
18.根据权利要求10所述的方法,其特征在于,所述方法还包括下述任一项:
若所述数据异常类型的所属类别为写异常类别,所述子类别为多元数据异常,则确定所述数据异常类型为台阶式写异常;
若所述数据异常类型的所属类别为读异常类别,所述子类别为多元数据异常,则确定所述数据异常类型为台阶式读异常;
若所述数据异常类型的所属类别为交叉异常类别,所述子类别为多元数据异常,则确定所述数据异常类型为台阶式交叉异常。
19.一种事务处理装置,其特征在于,所述装置包括:
第一确定模块,用于确定目标事务的并发事务,所述并发事务与所述目标事务中存在作用于同一变量的读写操作,所述目标事务为待提交事务;
第二确定模块,用于若所述目标事务的读集和所述并发事务的写集之间的第一交集和所述目标事务的写集和所述并发事务的读集之间的第二交集中,存在至少一项不为空,且所述目标事务与所述并发事务冲突,则基于所述目标事务和所述并发事务所作用的相同变量的版本变更次数和目标变量列表,确定数据异常类型,所述目标变量列表包括所述目标事务和所述并发事务所作用的相同变量;
第三确定模块,用于从该目标事务和该并发事务中,确定待回滚的事务;
回滚模块,用于对该待回滚的事务进行回滚;
删除模块,用于删除目标冲突环图中所述待回滚的事务所作用的变量以及对应的读写操作,其中,所述目标冲突环图中的顶点用于表示事务对应的事务标识以及事务对应的读写操作所作用的变量,所述目标冲突环图中的边用于表示事务之间的关联关系以及变量之间的版本变化。
20.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器用于存储至少一条计算机程序,所述至少一条计算机程序由所述处理器加载并执行如权利要求1至权利要求18中任一项所述的事务处理方法。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条计算机程序,所述至少一条计算机程序由处理器加载并执行以实现如权利要求1至权利要求18中任一项所述的事务处理方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110546080.0A CN115098228B (zh) | 2021-05-19 | 2021-05-19 | 事务处理方法、装置、计算机设备及存储介质 |
EP22803726.3A EP4239475A4 (en) | 2021-05-19 | 2022-04-20 | TRANSACTION PROCESSING METHOD AND APPARATUS FOR A DATABASE SYSTEM AND ELECTRONIC DEVICE, COMPUTER READABLE STORAGE MEDIUM AND COMPUTER PROGRAM PRODUCT |
JP2023521163A JP2023546818A (ja) | 2021-05-19 | 2022-04-20 | データベースシステムのトランザクション処理方法、装置、電子機器、及びコンピュータプログラム |
PCT/CN2022/087848 WO2022242401A1 (zh) | 2021-05-19 | 2022-04-20 | 一种数据库系统的事务处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品 |
US18/072,629 US20230107958A1 (en) | 2021-05-19 | 2022-11-30 | Transaction processing method for database system, apparatus, electronic device, computer-readable storage medium, and computer program product |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110546080.0A CN115098228B (zh) | 2021-05-19 | 2021-05-19 | 事务处理方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115098228A CN115098228A (zh) | 2022-09-23 |
CN115098228B true CN115098228B (zh) | 2023-04-14 |
Family
ID=83287066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110546080.0A Active CN115098228B (zh) | 2021-05-19 | 2021-05-19 | 事务处理方法、装置、计算机设备及存储介质 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230107958A1 (zh) |
EP (1) | EP4239475A4 (zh) |
JP (1) | JP2023546818A (zh) |
CN (1) | CN115098228B (zh) |
WO (1) | WO2022242401A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12067219B2 (en) | 2022-12-01 | 2024-08-20 | Truist Bank | Graphical user interface enabling entry manipulation |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101405735A (zh) * | 2006-03-17 | 2009-04-08 | 微软公司 | 在企业资源计划系统内的并发控制 |
CN107533474A (zh) * | 2016-01-26 | 2018-01-02 | 华为技术有限公司 | 一种事务处理方法及装置 |
CN108874587A (zh) * | 2018-06-06 | 2018-11-23 | 亚信科技(中国)有限公司 | 一种事务的最终一致性保障方法及系统 |
CN111143389A (zh) * | 2019-12-27 | 2020-05-12 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN111209093A (zh) * | 2020-01-16 | 2020-05-29 | 华东师范大学 | 一种分布式数据库系统中分布式事务的处理方法 |
CN111444027A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN111708615A (zh) * | 2020-05-20 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN111736964A (zh) * | 2020-07-02 | 2020-10-02 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN112069196A (zh) * | 2020-11-12 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 基于数据库的数据处理方法、装置、设备及可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11321299B2 (en) * | 2016-02-01 | 2022-05-03 | Verizon Patent And Licensing Inc. | Scalable conflict detection in transaction management |
US10204130B2 (en) * | 2016-03-23 | 2019-02-12 | International Business Machines Corporation | Transactional table truncation for concurrent transactions |
CN109710388B (zh) * | 2019-01-09 | 2022-10-21 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
-
2021
- 2021-05-19 CN CN202110546080.0A patent/CN115098228B/zh active Active
-
2022
- 2022-04-20 EP EP22803726.3A patent/EP4239475A4/en active Pending
- 2022-04-20 JP JP2023521163A patent/JP2023546818A/ja active Pending
- 2022-04-20 WO PCT/CN2022/087848 patent/WO2022242401A1/zh unknown
- 2022-11-30 US US18/072,629 patent/US20230107958A1/en active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101405735A (zh) * | 2006-03-17 | 2009-04-08 | 微软公司 | 在企业资源计划系统内的并发控制 |
CN107533474A (zh) * | 2016-01-26 | 2018-01-02 | 华为技术有限公司 | 一种事务处理方法及装置 |
CN108874587A (zh) * | 2018-06-06 | 2018-11-23 | 亚信科技(中国)有限公司 | 一种事务的最终一致性保障方法及系统 |
CN111143389A (zh) * | 2019-12-27 | 2020-05-12 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算机设备及存储介质 |
CN111209093A (zh) * | 2020-01-16 | 2020-05-29 | 华东师范大学 | 一种分布式数据库系统中分布式事务的处理方法 |
CN111444027A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN111708615A (zh) * | 2020-05-20 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN111736964A (zh) * | 2020-07-02 | 2020-10-02 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN112069196A (zh) * | 2020-11-12 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 基于数据库的数据处理方法、装置、设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20230107958A1 (en) | 2023-04-06 |
EP4239475A1 (en) | 2023-09-06 |
EP4239475A4 (en) | 2023-12-27 |
CN115098228A (zh) | 2022-09-23 |
JP2023546818A (ja) | 2023-11-08 |
WO2022242401A1 (zh) | 2022-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7546832B2 (ja) | トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム | |
CN111736964B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
CN112231071B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
Kumar et al. | A review on big data based parallel and distributed approaches of pattern mining | |
CN111444027B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
Kumar et al. | Semantics based transaction management techniques for replicated data | |
Bala et al. | A Fine‐Grained Distribution Approach for ETL Processes in Big Data Environments | |
CN114329096A (zh) | 一种原生图数据库处理方法及系统 | |
Krechowicz et al. | Highly scalable distributed architecture for NoSQL datastore supporting strong consistency | |
CN112069196A (zh) | 基于数据库的数据处理方法、装置、设备及可读存储介质 | |
Meir et al. | Lockless transaction isolation in hyperledger fabric | |
CN115098228B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
Wang et al. | Towards distributed bitruss decomposition on bipartite graphs | |
Mao et al. | Reversible conflict-free replicated data types | |
Zhu et al. | Efficient MapReduce algorithms for triangle listing in billion-scale graphs | |
Mazumdar et al. | The Data Lakehouse: Data Warehousing and More | |
WO2023124242A1 (zh) | 事务执行方法、装置、设备和存储介质 | |
Aliberti et al. | EXPEDITE: EXPress closED ITemset enumeration | |
CN113986923A (zh) | 基于只追加文件存储的分布式事务处理方法、装置及设备 | |
Mukherjee et al. | Data mining-based hierarchical transaction model for multi-level consistency management in large-scale replicated databases | |
Dhanda | Big data storage and analysis | |
US12008006B1 (en) | Assessments based on data that changes retroactively | |
Cao | Big Data Database for Business | |
Kumar et al. | Computer and Information Sciences | |
Lakhe et al. | Lambda architecture for real-time Hadoop applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40073419 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |