CN111198872B - 数据库处理事务的方法及装置 - Google Patents
数据库处理事务的方法及装置 Download PDFInfo
- Publication number
- CN111198872B CN111198872B CN202010011163.5A CN202010011163A CN111198872B CN 111198872 B CN111198872 B CN 111198872B CN 202010011163 A CN202010011163 A CN 202010011163A CN 111198872 B CN111198872 B CN 111198872B
- Authority
- CN
- China
- Prior art keywords
- transaction
- processing
- instruction
- processing instructions
- instructions
- 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
Images
Classifications
-
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据库处理事务的方法及装置,其中,该方法包括:先后接收到第一事务的处理指令和第二事务的处理指令;根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。通过上述方案能够在保证事务隔离的情况下提高硬件数据库处理事务的效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据库处理事务的方法及装置。
背景技术
随着数字社会的到来,各种应用场景对海量数据的调取愈发频繁,对数据库加速处理的需求更丰富,人们对数据的即时处理需求大大增加,因此数据库加速的需求迫在眉睫。当前阶段,采用FPGA(Field Programmable Gate Array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,专用集成电路)等可定制或专用硬件加速数据库的处理速度是一个趋势,为了更大程度的挖掘专用加速器的能力,自然希望它能够支持多个线程或进程向其发送处理指令和数据。这时数据库中就表现为支持同时处理多个事务,由于不同的事务可能要读取或修改同一个表,保持事务之间的隔离性是保证数据库ACID(Atomicity/Consistency/Isolation/Durability,原子性/一致性/隔离性/持久性)特性的必要条件。保持每个事务之间互相不打扰本质是保证每个事务访问或修改数据库的顺序要按照它们被提交到硬件的先后顺序。
现有的通用技术是当CPU(Central Processing Unit,中央处理器)运行数据库时候,允许每个事务对在读取表的时候先要对表上锁,以防止别的事务干扰自己的表。常见的锁有共享锁,排他锁等,一个表可以被加上很多共享锁,但只能被加上一个排他锁。这样,保证了每个表对于当前事务来说都是独享的,如果一个事务试图读取一个已经被上了排他锁的表,这个事务就会阻塞。因此不会出现多个事务修改一个表的情况出现,但允许多个表同时读取一个表。遗憾的是,在专用加速硬件数据库端是无法像CPU上那样的直接加锁的,但又必须提供硬件支持,以确定硬件端指令是否可以读或修改硬件内存中的表数据。
发明内容
本发明提供了一种数据库处理事务的方法及装置,以在保证事务隔离的情况下提高硬件数据库处理事务的效率。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种数据库处理事务的方法,包括:先后接收到第一事务的处理指令和第二事务的处理指令;根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令,则确认所述第一事务和所述第二事务不相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令,则确认所述第一事务和所述第二事务相关。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还包括:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集的情况下,确认所述第一事务和所述第二事务不相关。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集,则确认所述第一事务和所述第二事务相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集,则确认所述第一事务和所述第二事务不相关。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还包括:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令的情况下,确认所述第一事务和所述第二事务不相关。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还包括:根据所述第一事务的所有处理指令中是否存在修改类型的操作关键词,确认所述第一事务的所有处理指令中是否存在修改类型指令;根据所述第二事务的所有处理指令中是否存在修改类型的操作关键词,确认所述第二事务的所有处理指令中是否存在修改类型指令。
在一些实施例中,修改类型的操作关键词包括插入操作关键词、删除操作关键词、及更改操作关键词。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集,确认所述第一事务和所述第二事务是否相关,包括:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集的情况下,确认所述第一事务和所述第二事务不相关。
在一些实施例中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令的情况下,确认所述第一事务和所述第二事务不相关。
在一些实施例中,先后接收到第一事务的处理指令和第二事务的处理指令,包括:先后接收到第一事务的处理指令和第二事务的处理指令,并依据事务标识将第一事务的处理指令和第二事务的处理指令分别存入第一指令缓存队列和第二指令缓存队列。在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令,包括:在所述第一事务和所述第二事务相关的情况下,利用不同线程并行执行第一指令缓存队列和第二指令缓存队列中的处理指令,以并行处理所述第一事务和所述第二事务。在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令,包括:在所述第一事务和所述第二事务相关的情况下,执行第一指令缓存队列中的处理指令直到根据所述第一事务的指令结束标识确认所述第一事务的所有处理指令执行完毕后,再执行第二指令缓存队列中的处理指令,以处理所述第二事务。
在一些实施例中,先后接收到第一事务的处理指令和第二事务的处理指令,包括:先接收到第一事务的所有处理指令后,再接收到第二事务的处理指令。
在一些实施例中,先后接收到第一事务的处理指令和第二事务的处理指令之后,还包括:接收到第三事务的处理指令;根据所述第三事务的所有处理指令和所述第三事务之前接收的尚未处理完的每个事务对应的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第三事务和所述第三事务之前接收的尚未处理完的每个事务是否相关;其中,所述第三事务之前接收的尚未处理完的事务包括所述第一事务和/或所述第二事务;在所述第三事务和所述第三事务之前接收的尚未处理完的事务相关的情况下,并行执行所述第三事务的处理指令和所述第三事务之前接收的尚未处理完的事务的尚未处理完的处理指令;在所述第三事务和所述第三事务之前接收的尚未处理完的事务不相关的情况下,执行完所述第三事务之前接收的尚未处理完的事务的所有尚未处理完的处理指令后,再执行所述第三事务的处理指令。
在一些实施例中,开始接收第三事务的处理指令,包括:在存在空闲的指令缓存队列的情况下,接收第三事务的处理指令,并将第三事务的处理指令存入一个空闲的指令缓存队列。
根据本发明实施例的另一个方面,提供了一种数据库处理事务的方法,包括:利用软件数据库先后接收第一事务的处理指令和第二事务的处理指令,并按先后接收顺序将所述第一事务的处理指令和所述第二事务的处理指令依次发送至硬件数据库;利用硬件数据库先后接收所述第一事务的处理指令和所述第二事务的处理指令;利用硬件数据库根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;在所述第一事务和所述第二事务不相关的情况下,利用硬件数据库并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,利用硬件数据库执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。
根据本发明实施例的又一个方面,提供了一种数据库处理事务的方法,包括:先后接收到第一事务的处理指令和第二事务的处理指令;根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;在所述第一事务和所述第二事务不相关的情况下,为所述第一事务和所述第二事务添加并行处理标记,并发送所述第一事务的处理指令、所述第二事务的处理指令、及所述并行处理标记,以使硬件数据库并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,为所述第一事务和所述第二事务添加按事务接收顺序处理的标记,并发送所述第一事务的处理指令、所述第二事务的处理指令、及所述按事务接收顺序处理的标记,以使硬件数据库执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。
根据本发明实施例的又一个方面,提供了一种数据库系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述方法的步骤。
根据本发明实施例的又一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述方法的步骤。
本发明实施例的数据库处理事务的方法、数据库系统及计算机可读存储介质,通过判断不同事务的相关性,并在处理事务时保证相关的事务不出现数据冲突,保证了隔离性,并能够对不相关的事务进行并行处理,从而可提高硬件数据库的处理效率,从而加快了事务指令的吞吐率,降低用户查询的响应时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的数据库处理事务的方法流程示意图;
图2是本发明另一实施例的数据库处理事务的方法流程示意图;
图3是本发明又一实施例的数据库处理事务的方法流程示意图;
图4是本发明一具体实施例的数据库系统的结构示意图;
图5是本发明一具体实施例的数据库处理事务的方法流程示意图;
图6是本发明一具体实施例中事务指令的示例;
图7是本发明一具体实施例中指令执行顺序的示例。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
现行的一些加速数据库性能的方法无法从根本上解决通用处理器在解决领域内特定问题时的效率低下和功耗过大的问题,因此必须转向领域专用的硬件加速器。尽管专用的硬件加速器的主要是完成某些复杂的特定功能部分,但它也必须为某些原本在CPU软件上实现的功能提供硬件支持。
现在的在CPU上运行的软件数据库系统经常通过加锁,阻塞等软件手段来保证事务之间的隔离性,这样来避免多个事务抢着修改一个表。然而在硬件数据库中,我们的操作都是在硬件端执行的,硬件端捕获不了每个表是否上了锁,所以需要对此提供硬件支持,以便于硬件操作可以更快的执行。
现在的硬件数据库经常是通过按照顺序执行一个事务的SQL(Structured QueryLanguage,结构化查询语言)指令序列,以此来保证事务之间达到真正的隔离性,但顺序执行无法充分利用硬件的资源,造成大量的可以并行的事务不得不串行。因此,有必要在兼顾事务隔离运行的同时挖掘来自不同事务间的并行性。
发明人在利用硬件对数据库加速的时候,为了增加硬件资源的利用,且考虑到实际生产中肯定会遇到多个线程向硬件发射SQL指令的场景,因此必须给硬件提供如何识别哪些SQL指令是来自同一线程的方法,且须保证整个加速系统可以支持进行多事务同时处理,类似于CPU中的硬件多线程。此时遇到了当同时处理多个事务的时候,它们可能会出现试图同时修改和访问表,这样会造成紊乱。
发明人发现要想同时处理多个事务,并保持事务之间的隔离性的化,传统的思路是保证将SQL指令按照顺序提交给硬件加速器执行。但是顺序的程序意味着就会慢,现在的硬件加速器都是支持多线程的多条指令同时被发射给不同的硬件模块执行的。例如,如果先发射的事务A包含下列SQL指令:update table1,select table1。后发射的事务B包含SQL指令:select table1,update table1。则事务B的select指令可在事务A的update指令结束后立即执行。
基于此,为了保证多个事务在硬件数据库中执行时能相互隔离、互不打扰,并尽可能使硬件数据库并行处理多个事务,本发明实施例提供了一种数据库处理事务的方法。
图1是本发明一实施例的数据库处理事务的方法流程示意图。如图1所示,从硬件数据库的角度出发,一实施例的数据库处理事务的方法可包括以下步骤S110~步骤S130。
下面将对步骤S110至步骤S130的具体实施方式进行详细说明。
步骤S110:先后接收到第一事务的处理指令和第二事务的处理指令。
第一事务和第二事务并非特指,只是指某两个事务。可以通过软件数据库接收客户端发来的事务的SQL语句,并解析SQL语句得到事务的处理指令,然后按事务接收顺序发送事务的处理指令给硬件数据库。事务的单元可以在客户端规定,或者,可以将一条或多条SQL语句作为一件事务。另外,可以由软件数据库根据SQL语句的来源途径确定哪些SQL语句属于一件事务,进一步,对于来源途径相同的SQL语句,可以根据事务的开始标识和结束标识来确定哪些SQL语句属于一件事务。另外,软件数据库解析SQL语句后,可以根据指令开始标识和指令结束标识来标记一个事务的指令范围。
不同事务的处理指令可以交叉接收,直到接收到各事务的所有指令,或者,可以先接收完一件事务的所有处理指令,再开始接收另一件事务的处理指令。
示例性地,该步骤S110,即,先后接收到第一事务的处理指令和第二事务的处理指令,具体地,可包括步骤:先接收到第一事务的所有处理指令后,再接收到第二事务的处理指令。
对于硬件数据库而言,接收的不同事务对应的处理指令可以存入不同的指令缓存队列中。不同指令缓存队列中的指令可以对应利用不同进程进行处理。
示例性地,该步骤S110,即,先后接收到第一事务的处理指令和第二事务的处理指令,具体地,可包括步骤:S111,先后接收到第一事务的处理指令和第二事务的处理指令,并依据事务标识将第一事务的处理指令和第二事务的处理指令分别存入第一指令缓存队列和第二指令缓存队列。
步骤S120:根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关。
该步骤S120可包括三种方式:第一种方式,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;第二种方式,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集,确认所述第一事务和所述第二事务是否相关;第三种方式,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关。上述任意一种情况均在本发明的保护范围之内。
对于上述第一种方式而言,更具体地,可以分为两种情况:一种是,先确认所访问数据表是否存在交集,后确认是否存在修改类型指令;另一种是,先确认是否存在修改类型指令,后确认所访问数据表是否存在交集。
对于前一种情况而言,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,具体地,可包括步骤:S1211,在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令,则确认所述第一事务和所述第二事务不相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令,则确认所述第一事务和所述第二事务相关。
进一步地,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,除了包括上述步骤S1211,还可包括步骤:S1212,在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集的情况下,确认所述第一事务和所述第二事务不相关。
对于后一种情况而言,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,具体地,可包括步骤:S1221,在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集,则确认所述第一事务和所述第二事务相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集,则确认所述第一事务和所述第二事务不相关。
进一步地,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,除了包括上述步骤S1221,还可包括步骤:S1222,在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令的情况下,确认所述第一事务和所述第二事务不相关。
对于上述前、后两种情况而言,可以根据修改类型的操作关键词判断是否存在修改类型指令。示例性地,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还可包括步骤:S123,根据所述第一事务的所有处理指令中是否存在修改类型的操作关键词,确认所述第一事务的所有处理指令中是否存在修改类型指令;根据所述第二事务的所有处理指令中是否存在修改类型的操作关键词,确认所述第二事务的所有处理指令中是否存在修改类型指令。
具体地,上述步骤S123可在步骤S1221和步骤S1222之前,或步骤S1211之前执行。另外,修改类型的操作关键词包括插入操作关键词、删除操作关键词、及更改操作关键词。其中,插入操作关键词例如包括Insert,删除操作关键词例如包括Delete,更改操作关键词例如包括Update。
对于上述第二种方式而言,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集,确认所述第一事务和所述第二事务是否相关,具体地,可包括步骤:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集的情况下,确认所述第一事务和所述第二事务不相关。
在其他实施例中,若确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集,可以直接确认第一事务和第二事务相关,或者继续根据其他信息(例如,修改类型指令)确认第一事务和第二事务是否相关。
对于上述第三种方式而言,上述步骤S120中,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,具体地,可包括步骤:在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令的情况下,确认所述第一事务和所述第二事务不相关。
在其他实施例中,若确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令,可以直接确认第一事务和第二事务相关,或者继续根据其他信息(例如,事务指令访问的数据表)确认第一事务和第二事务是否相关。
步骤S130:在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。
在一些实施例中,在硬件数据库将接收的事务的指令存入缓存队列的情况,可以对应缓存队列执行事务的指令。示例性地,在上述步骤S110包括上述步骤S111的情况下,该步骤S130中,在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令,具体地,可包括步骤:在所述第一事务和所述第二事务相关的情况下,利用不同线程并行执行第一指令缓存队列和第二指令缓存队列中的处理指令,以并行处理所述第一事务和所述第二事务。该步骤S130中,在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令,具体地,可包括步骤:在所述第一事务和所述第二事务相关的情况下,执行第一指令缓存队列中的处理指令直到根据所述第一事务的指令结束标识确认所述第一事务的所有处理指令执行完毕后,再执行第二指令缓存队列中的处理指令,以处理所述第二事务。
本发明各实施例的数据库处理事务的方法可以适用于处理多个事务,可以对应硬件数据库可支持缓存事务的数量。上述各实施例的数据库处理事务的方法主要是针对先接收到第一事务再接收到第二事务的情况,以处理两个事务为例进行说明。所以,本发明各实施例的数据库处理事务的方法还适用处理两个及以上事务的情况。
当硬件数据库接收到一个事务时,可以将当前事务分别与之前接收的尚未处理完的每个事务进行相关性比较,每次比较的方式类似于图1所示的方法。
以处理三个事务为例,在一些实施例中,上述步骤S110之后,即,先后接收到第一事务的处理指令和第二事务的处理指令之后,图1所示的方法还可包括步骤:
S140:接收到第三事务的处理指令;
S150:根据所述第三事务的所有处理指令和所述第三事务之前接收的尚未处理完的每个事务对应的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第三事务和所述第三事务之前接收的尚未处理完的每个事务是否相关;其中,所述第三事务之前接收的尚未处理完的事务包括所述第一事务和/或所述第二事务;
S160:在所述第三事务和所述第三事务之前接收的尚未处理完的事务相关的情况下,并行执行所述第三事务的处理指令和所述第三事务之前接收的尚未处理完的事务的尚未处理完的处理指令;在所述第三事务和所述第三事务之前接收的尚未处理完的事务不相关的情况下,执行完所述第三事务之前接收的尚未处理完的事务的所有尚未处理完的处理指令后,再执行所述第三事务的处理指令。
上述步骤S140中,可以在接收到第一事务和第二事务的全部处理指令后,再接收到第三事务的处理指令;或者,可以接收了第一事务和第二事务的部分指令,再接收到第三事务的处理指令,因为先开始接收第一事务和第二事务的处理指令,后开始接收第三事务的处理指令,所以第一事务和第二事务比第三事务先到来。
上述步骤S150中,若第一事务尚未处理完,则需要判断第三事务和第一事务的相关性。若第二事务尚未处理完,则需要判断第三事务和第二事务的相关性。若第一事务和第二事务均为处理完,则需要判断第三事务与第一事务的相关性,以及第三事务与第二事务的相关性。判断相关性时的具体实施方式可以参照上述步骤S120,区别主要在于所需判断的事务不同,故不再赘述。
上述步骤S160中,处理第三事务和在先接收的尚未处理完的事务的具体实施方式可以参见上述步骤S130,不同之处在于,所需判断的事务不同,故不再赘述。
另外,若第一事务和第二事务均尚未处理完,而且第一事务、第二事务及第三事务两两不相关,则可以并行执行该三个事务。同样地,对于三个以上事务而言,若该三个以上事务是两两不相关的,也可以并行处理该三个以上事务。
此外,在只有一个事务尚未处理时,不需要判断该事务与在先事务的相关性。例如,在接收到第三事务时,只有存在尚未处理完的在先接收事务才比较第三事务与在先接收事务的相关性。
在一些实施例中,上述步骤S110,即,开始接收第三事务的处理指令,具体地,可包括步骤:在存在空闲的指令缓存队列的情况下,接收第三事务的处理指令,并将第三事务的处理指令存入一个空闲的指令缓存队列。该实施例中,只有存在空闲的缓存队列,例如,上述第一指令缓存队列、第二指令缓存队列、或其他指令缓存队列时,才会将第三事务的处理指令存入缓存队列。若无空闲的指令缓存队列,则硬件数据库可以不接收该第三事务的指令,或者虽然接收了也指令暂存在缓存队列以外的内存中。
另外,本发明实施例还提供了另一种数据库处理事务的方法,该方法使用于包括硬件数据库和软件数据库的数据库系统。其中,硬件数据库端的数据库处理事务的过程可以类似于上述各实施例所述的数据库处理事务的方法。
图2是本发明另一实施例的数据库处理事务的方法流程示意图。如图2所示,对于包含软件数据库和硬件数据库的数据库系统而言,一些实施例的数据库处理事务的方法可包括以下步骤:
步骤S210:利用软件数据库先后接收第一事务的处理指令和第二事务的处理指令,并按先后接收顺序将所述第一事务的处理指令和所述第二事务的处理指令依次发送至硬件数据库;
步骤S220:利用硬件数据库先后接收所述第一事务的处理指令和所述第二事务的处理指令;
步骤S230:利用硬件数据库根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;
步骤S240:在所述第一事务和所述第二事务不相关的情况下,利用硬件数据库并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,利用硬件数据库执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。
上述步骤S210中,软件数据库接收客户端发来的事务的SQL语句,并解析SQL语句得到事务的处理指令,然后按事务接收顺序发送事务的处理指令给硬件数据库。软件数据库根据SQL语句的来源途径确定哪些SQL语句属于一件事务,进一步,对于来源途径相同的SQL语句,可以根据事务的开始标识和结束标识来确定哪些SQL语句属于一件事务。另外,软件数据库解析SQL语句后,可以根据指令开始标识和指令结束标识来标记一个事务的指令范围。
上述步骤S220中,软件数据库顺序发送接收的事务的指令到硬件数据库,硬件数据库可以顺序接收软件数据库发来的事务的指令。上述步骤S230的具体实施方式可以参照上述步骤S120实施。上述步骤S240的具体实施方式可以参照上述步骤S130实施。
在一个实施例中,提供的能够解决利用硬件加速数据库处理时候如何保持多个事务可以并行执行时候不互相干扰的方法,主要可包括下面步骤S1~S4:
S1.不同的事务按照的指令必须按顺序发射到硬件的不同的SQL指令的缓存队列中,以此来区分来自不同事务的不同指令,并在这个时候检查事务之间的相关性。
S2.如果多个事务之间要访问的表不存在交集,则可以并行发射执行,不需检查相关性。
S3.最先提交的事务不需要检查是否和其他事务间存在相关性。
S4.从第二个事务B开始,按照以下规则检查相关性。
a)如果先提交的事务A中无增删改指令,第二个事务B也没有增删改指令,那么这两个事务可以中的指令可以同时发射执行。
b)如果先提交的事务A中无增删改指令,第二个事务B有增删改指令,那么第二个事务中的指令必须要在第一个事务全部完成后在执行;
c)如果事务A含有增删改指令,事务B没有增删改指令,那么B事务必须等到A事务中的最后一个增删改指令完成后才可以执行;
d)如果先提交的事务A中有增删改指令,第二个事务B也有增删改指令,那么第二个事务中的增删改指令必须要在第一个事务全部完成后在执行。
本实施例中,采用从SQL指令层捕获相关性,并在发射执行的时候保证不出现数据冲突,取代了CPU软件数据库上的上锁和解锁。使得硬件数据库可以支持多事务并行处理,从而加快了SQL指令的吞吐率,降低用户查询的响应时间,且保证了隔离性。
上述基于图1或图2所示的数据库处理事务的方法的实施例中,判断后接收的事务与先接收的事务之间是否相关的过程可以在硬件数据库中执行,从而确定不同事务是否可以在硬件数据库中并行执行。另外,判断不同事务的相关性的过程可以在软件数据库或硬件数据库以外的其他部分(如CPU端)中执行。
基于此,本发明实施例提供了另外一种数据库处理事务的方法。图3是本发明又一实施例的数据库处理事务的方法流程示意图。如图3所示,对于可以在软件数据库端判断事务的相关性的情况,一些实施例的数据库处理事务的方法,可包括以下步骤:
步骤S310:先后接收到第一事务的处理指令和第二事务的处理指令;
步骤S320:根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;
步骤S330:在所述第一事务和所述第二事务不相关的情况下,为所述第一事务和所述第二事务添加并行处理标记,并发送所述第一事务的处理指令、所述第二事务的处理指令、及所述并行处理标记,以使硬件数据库并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,为所述第一事务和所述第二事务添加按事务接收顺序处理的标记,并发送所述第一事务的处理指令、所述第二事务的处理指令、及所述按事务接收顺序处理的标记,以使硬件数据库执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令。
该步骤S310的具体实施方式可以参考上述步骤S210的具体实施方式实施。该步骤S320的具体实施方式可以上述步骤S120的具体实施方式实施,区别主要在于,该步骤S320可以是在软件数据库端执行的,而该步骤S120可以是在硬件数据库端执行的。
该步骤S330中根据相关性判断是并行还是先后处理的具体实施方式可以类似于上述步骤S130。主要区别在于,该步骤S330中是对事务的是并行处理还是先后处理添加标记,之后发送给硬件数据库,使硬件数据库根据添加的标记对多个事务进行并行处理或先后处理,而上述步骤S130中,是可以在硬件数据库判断多个事务是并行处理还是先后处理,不用添加相应标记,可以根据判断结果直接决定多个事务是并行处理还是先后处理。
进一步地,在所述第一事务和所述第二事务不相关的情况下,可以将所述第一事务的处理指令、所述第二事务的处理指令、及所述并行处理标记发送给硬件数据库端,在硬件数据库端可以将不同的事务存入不同的指令缓存队列,并可根据并行处理标记确定可以对哪些事务进行并行处理。在所述第一事务和所述第二事务相关的情况下,可以将所述第一事务的处理指令、所述第二事务的处理指令、及所述按事务接收顺序处理的标记发送给硬件数据库端,在硬件数据库端可以将不同的事务存入不同的指令缓存队列,并可根据按事务接收顺序处理的标记确定可以对接收的多个事务按顺序进行处理。
该步骤S330中,对于不相关的两个事务添加的标记可以包含哪些事务可以并行处理的信息,并可以包含可以并行处理的信息。对于相关的两个事务添加的标记可以包括一个事务需要在哪个事务之后处理的信息。
另外,图3所示的方法仅是以两个事务为例进行说明,在其他实施例中,可以适用于对三个及以上事务进行处理的情况。示例性地,步骤S310之后,图3所示的方法还可包括以下步骤:
步骤S340:接收第三事务的处理指令;
步骤S350:根据所述第三事务的所有处理指令和所述第三事务之前接收的尚未处理完的每个事务对应的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第三事务和所述第三事务之前接收的尚未处理完的每个事务是否相关;其中,所述第三事务之前接收的尚未处理完的事务包括所述第一事务和/或所述第二事务;
步骤S360:在所述第三事务和所述第三事务之前接收的尚未处理完的事务相关的情况下,为所述第三事务的处理指令和所述第三事务之前接收的尚未处理完的事务的尚未处理完的处理指令添加并行处理标记,并发送所述第三事务的处理指令、所述第三事务之前接收的尚未处理完的事务的处理指令、及相应并行处理标记,以使硬件数据库并行执行所述第三事务的处理指令和所述第三事务之前接收的尚未处理完的事务的处理指令;为所述第三事务的处理指令和所述第三事务之前接收的尚未处理完的事务的尚未处理完的处理指令添加按事务接收顺序处理的标记,并发送所述第三事务的处理指令、所述第三事务之前接收的尚未处理完的事务的处理指令、及相应并行处理标记,以使硬件数据库先执行完所述第三事务之前接收的尚未处理完的事务的所有处理指令,在执行所述第三事务的处理指令。
其中,该步骤S350中,上述第一事务、第二事务、第三事务等可以是接收完前一事务的所有指令再接收到后一事务的指令。
基于与上述各实施例所述的数据库处理事务的方法(如图1、图2或图3)相同的发明构思,本发明实施例还提供了一种数据库系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述数据库处理事务的方法的步骤。对于上述从硬件数据库角度所述的数据库处理事务的方法而言,该数据库系统可包括硬件数据库,例如FPGA、ASIC等。对于上述从软件数据库角度所述的数据库处理事务的方法而言,该数据库系统可包括CPU设备(软件数据库的设备),如计算机、服务器等。对于包含软件数据库和硬件数据库的数据库系统而言,数据库系统可包括CPU设备、硬件数据库的设备等。
另外,本发明实施例另提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述数据库处理事务的方法的步骤。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
以JAVA连接和利用ODBC(Open Database Connectivity,开放数据库连接)连接Oracle数据库为例,硬件数据库加速系统主要是利用C++改写JDBC(Java Data BaseConnectivity,java数据库连接)接口的实现,从而使得对上层应用透明。图4显示了数据库加速系统的整体的各个模块设计,数据库加速处理部分是由硬件加速器模块来完成。为了实现如何区分来自不同事务的多个指令以及硬件端的多个事务队列可以并行发射指令到硬件执行单元执行,例如,硬件支持同时发射三条指令。
图4显示了各个模块之间的交互,JDBC是供给Java程序使用的上层调用的接口,从而使得程序员可以在不用修改原来程序代码的情况下得到加速,通过JNI接口模块(JavaNative Interface,Java本地接口),使得下层对数据库的操作可以用C++编写,调度器模块负责各个其他模块的配合,包括将磁盘数据库的内容读取到CPU内存中,再将CPU内存中的内容读取到硬件内存中,将JDBC接收到的SQL指令传输给硬件执行。
如图5所示,数据库系统的工作流程可包括如下步骤:
1.上层JAVA应用程序中的JDBC接口根据应用程序要求先后接收到多个含有一个或多个SQL语句的事务,这些事务中的SQL语句按顺序被交给下层的C++程序模块处理,这里仍然采用了JDBC的接口,不过我们是重写了部分实现。
2.调度器接收到SQL语句后,然后连接数据库,根据SQL语句从磁盘中读取相应的表数据,并将数据传送到硬件内存中以便于硬件根据指令执行。
3.调度器将多个事务按顺序放到硬件的SQL指令序列中。
a)若硬件的指令缓存队列已经满了,就只能等待直到指令缓存有空。
4.硬件自动调度决定来自不同事务的指令是否可以并行执行,硬件需确定以下的内容。
a)确定事务各个事务中的缓存指令中是否含有增删改。
b)对于每一个事务中的指令缓存,检查他和前面的事务中的指令存在的相关,具体的依赖根据发明内容中的三条进行辨别。
5.硬件端在确定各个事务的SQL指令没有依赖的情况下,并行发射SQL指令执行。
假设事务A,B,C的SQL指令序列分别是如图6方框中所示,则依赖关系用直线表示,直线两端的指令存在依赖关系,要求上面的事务必须先处理完才可以处理下面的事务,这样只要多发射的时候避开依赖,就可以实现事务隔离且并行执行了。它的一个可能的执行时序图如图7所示,可以看出发生依赖的指令都能够避免。
综上所述,本发明实施例的数据库处理事务的方法、数据库系统及计算机可读存储介质,通过判断不同事务的相关性,并在处理事务时保证相关的事务不出现数据冲突,保证了隔离性,并能够对不相关的事务进行并行处理,从而可提高硬件数据库的处理效率,从而加快了事务指令的吞吐率,降低用户查询的响应时间。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1.一种数据库处理事务的方法,其特征在于,包括:
先后接收到第一事务的处理指令和第二事务的处理指令;
根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;
在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令;
其中,先后接收到第一事务的处理指令和第二事务的处理指令,包括:
利用硬件数据库先后接收到第一事务的处理指令和第二事务的处理指令;
根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:
利用硬件数据库根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;
在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令,包括:
在所述第一事务和所述第二事务不相关的情况下,利用硬件数据库并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,利用硬件数据库执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令;
根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:
在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令,则确认所述第一事务和所述第二事务不相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令,则确认所述第一事务和所述第二事务相关。
2.如权利要求1所述的数据库处理事务的方法,其特征在于,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还包括:
在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集的情况下,确认所述第一事务和所述第二事务不相关。
3.如权利要求1所述的数据库处理事务的方法,其特征在于,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:
在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集,则确认所述第一事务和所述第二事务相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表不存在交集,则确认所述第一事务和所述第二事务不相关。
4.如权利要求3所述的数据库处理事务的方法,其特征在于,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还包括:
在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令的情况下,确认所述第一事务和所述第二事务不相关。
5.如权利要求1或3所述的数据库处理事务的方法,其特征在于,根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,还包括:
根据所述第一事务的所有处理指令中是否存在修改类型的操作关键词,确认所述第一事务的所有处理指令中是否存在修改类型指令;根据所述第二事务的所有处理指令中是否存在修改类型的操作关键词,确认所述第二事务的所有处理指令中是否存在修改类型指令。
6.如权利要求5所述的数据库处理事务的方法,其特征在于,修改类型的操作关键词包括插入操作关键词、删除操作关键词、及更改操作关键词。
7.如权利要求1所述的数据库处理事务的方法,其特征在于,
先后接收到第一事务的处理指令和第二事务的处理指令,包括:
先后接收到第一事务的处理指令和第二事务的处理指令,并依据事务标识将第一事务的处理指令和第二事务的处理指令分别存入第一指令缓存队列和第二指令缓存队列;
在所述第一事务和所述第二事务不相关的情况下,并行执行所述第一事务的处理指令和所述第二事务的处理指令,包括:
在所述第一事务和所述第二事务相关的情况下,利用不同线程并行执行第一指令缓存队列和第二指令缓存队列中的处理指令,以并行处理所述第一事务和所述第二事务;
在所述第一事务和所述第二事务相关的情况下,执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令,包括:
在所述第一事务和所述第二事务相关的情况下,执行第一指令缓存队列中的处理指令直到根据所述第一事务的指令结束标识确认所述第一事务的所有处理指令执行完毕后,再执行第二指令缓存队列中的处理指令,以处理所述第二事务。
8.如权利要求1所述的数据库处理事务的方法,其特征在于,先后接收到第一事务的处理指令和第二事务的处理指令,包括:
先接收到第一事务的所有处理指令后,再接收到第二事务的处理指令。
9.如权利要求1所述的数据库处理事务的方法,其特征在于,先后接收到第一事务的处理指令和第二事务的处理指令之后,还包括:
接收到第三事务的处理指令;
根据所述第三事务的所有处理指令和所述第三事务之前接收的尚未处理完的每个事务对应的所有处理指令中所访问数据表是否存在交集和/或是否存在修改类型指令,确认所述第三事务和所述第三事务之前接收的尚未处理完的每个事务是否相关;其中,所述第三事务之前接收的尚未处理完的事务包括所述第一事务和/或所述第二事务;
在所述第三事务和所述第三事务之前接收的尚未处理完的事务相关的情况下,并行执行所述第三事务的处理指令和所述第三事务之前接收的尚未处理完的事务的尚未处理完的处理指令;在所述第三事务和所述第三事务之前接收的尚未处理完的事务不相关的情况下,执行完所述第三事务之前接收的尚未处理完的事务的所有尚未处理完的处理指令后,再执行所述第三事务的处理指令。
10.如权利要求9所述的数据库处理事务的方法,其特征在于,开始接收第三事务的处理指令,包括:
在存在空闲的指令缓存队列的情况下,接收第三事务的处理指令,并将第三事务的处理指令存入一个空闲的指令缓存队列。
11.一种数据库处理事务的方法,其特征在于,包括:
利用软件数据库先后接收第一事务的处理指令和第二事务的处理指令,并按先后接收顺序将所述第一事务的处理指令和所述第二事务的处理指令依次发送至硬件数据库;
利用硬件数据库先后接收所述第一事务的处理指令和所述第二事务的处理指令;
利用硬件数据库根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关;
在所述第一事务和所述第二事务不相关的情况下,利用硬件数据库并行执行所述第一事务的处理指令和所述第二事务的处理指令;在所述第一事务和所述第二事务相关的情况下,利用硬件数据库执行完所述第一事务的所有处理指令后再执行所述第二事务的处理指令;
利用硬件数据库根据所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表是否存在交集和是否存在修改类型指令,确认所述第一事务和所述第二事务是否相关,包括:
在确认所述第一事务的所有处理指令和所述第二事务的所有处理指令中所访问数据表存在交集的情况下,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中均不存在修改类型指令,则硬件数据库确认所述第一事务和所述第二事务不相关,若所述第一事务的所有处理指令和所述第二事务的所有处理指令中至少一个存在修改类型指令,则硬件数据库确认所述第一事务和所述第二事务相关。
12.一种数据库系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至11任一项所述方法的步骤。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至11任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010011163.5A CN111198872B (zh) | 2020-01-06 | 2020-01-06 | 数据库处理事务的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010011163.5A CN111198872B (zh) | 2020-01-06 | 2020-01-06 | 数据库处理事务的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111198872A CN111198872A (zh) | 2020-05-26 |
CN111198872B true CN111198872B (zh) | 2021-06-11 |
Family
ID=70746836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010011163.5A Active CN111198872B (zh) | 2020-01-06 | 2020-01-06 | 数据库处理事务的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111198872B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736964B (zh) * | 2020-07-02 | 2021-08-06 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN112256409B (zh) * | 2020-09-15 | 2022-03-04 | 中科驭数(北京)科技有限公司 | 基于多个数据库加速器的任务执行方法及装置 |
CN113448962B (zh) * | 2021-06-02 | 2022-10-28 | 中科驭数(北京)科技有限公司 | 数据库数据管理方法和装置 |
CN114168626A (zh) * | 2021-12-13 | 2022-03-11 | 中国建设银行股份有限公司 | 一种数据库操作的处理方法、装置、设备及介质 |
CN115438025A (zh) * | 2022-08-26 | 2022-12-06 | 华为技术有限公司 | 数据处理方法及装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615203B (zh) * | 2009-07-23 | 2012-04-04 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
CN103885986B (zh) * | 2012-12-21 | 2017-12-19 | 阿里巴巴集团控股有限公司 | 主备数据库同步的方法和装置 |
CN103336792B (zh) * | 2013-06-07 | 2016-11-23 | 华为技术有限公司 | 数据分区方法和装置 |
CN103729442B (zh) * | 2013-12-30 | 2017-11-24 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN106503027B (zh) * | 2015-09-08 | 2020-02-21 | 阿里巴巴集团控股有限公司 | 数据库操作方法及装置 |
CN105354336A (zh) * | 2015-12-07 | 2016-02-24 | Tcl集团股份有限公司 | 一种处理交易事务数据库数据的方法和装置 |
US10163107B1 (en) * | 2016-03-31 | 2018-12-25 | Square, Inc. | Technical fallback infrastructure |
CN107368505A (zh) * | 2016-05-11 | 2017-11-21 | 邓方 | 一种数据库实时增量复制软件中利用Apriori算法对并行入库进行智能分组优化的技术 |
US20190005082A1 (en) * | 2017-07-03 | 2019-01-03 | Infosys Limited | Method and system for committing group atomic transaction in non-relational database |
CN108735300A (zh) * | 2018-05-08 | 2018-11-02 | 西京学院 | 用于挖掘中医证型关联证素的Apriori算法的改进方法 |
-
2020
- 2020-01-06 CN CN202010011163.5A patent/CN111198872B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111198872A (zh) | 2020-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111198872B (zh) | 数据库处理事务的方法及装置 | |
Ren et al. | Lightweight locking for main memory database systems | |
US10474645B2 (en) | Automatically retrying transactions with split procedure execution | |
US7926035B2 (en) | Testing multi-thread software using prioritized context switch limits | |
US8443155B2 (en) | Lock-free concurrent object dictionary | |
US7657500B2 (en) | Concurrent extensible cuckoo hashing | |
US7958091B2 (en) | Method for fast bulk loading data into a database while bypassing exit routines | |
CN111433764A (zh) | 全局一致分片式oltp系统的高吞吐量分布式事务管理及其实现方法 | |
Crain et al. | No hot spot non-blocking skip list | |
CN113205417B (zh) | 一种面向联盟链的交易并行处理方法及系统 | |
CN111209289B (zh) | 数据库访问方法及装置 | |
US11269692B2 (en) | Efficient sequencer for multiple concurrently-executing threads of execution | |
US11409698B2 (en) | Parallel materialisation of a set of logical rules on a logical database | |
US11900175B2 (en) | Computing device, computing equipment and programmable scheduling method | |
CN115080670A (zh) | 一种基于gpu加速的确定性事务并发控制方法 | |
CN114328470A (zh) | 针对单个源表的数据迁移方法及装置 | |
CN110537174B (zh) | 一种基于交替行锁和列锁的数据锁定方法 | |
Alhajri et al. | OCC2T: An Early-Read Dual-Track OCC Algorithm For Mixed Mode Systems | |
Wei et al. | LTPG: Large-Batch Transaction Processing on GPUs with Deterministic Concurrency Control | |
CN112256409B (zh) | 基于多个数据库加速器的任务执行方法及装置 | |
WO2023045713A1 (zh) | 数据库事务的控制方法、装置及相关设备 | |
CN114138728A (zh) | 一种修改共享文件内容的方法、装置、设备、存储介质 | |
CN118860619A (zh) | 单机键值索引的轻量级负载均衡方法、系统、介质及设备 | |
CN115185957A (zh) | 一种轻量级实时内存数据库事务并发控制方法及装置 | |
CN114090626A (zh) | 一种获取数据库数据的方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |