CN112256409B - 基于多个数据库加速器的任务执行方法及装置 - Google Patents
基于多个数据库加速器的任务执行方法及装置 Download PDFInfo
- Publication number
- CN112256409B CN112256409B CN202010969557.1A CN202010969557A CN112256409B CN 112256409 B CN112256409 B CN 112256409B CN 202010969557 A CN202010969557 A CN 202010969557A CN 112256409 B CN112256409 B CN 112256409B
- Authority
- CN
- China
- Prior art keywords
- task
- execution
- executed
- queue
- tasks
- 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 OR CALCULATING; 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 OR CALCULATING; 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
- G06F16/217—Database tuning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于多个数据库加速器的任务执行方法及装置,其中,该方法包括:获取待执行的第一任务的相关信息,获取之前尚未执行完的各任务的相关信息;根据第一任务的表标识和之前尚未执行完的任务的操作类型和表标识,判断之前尚未执行完的各任务中是否存在与第一任务相关的第二任务;若存在,则延迟设定阻塞时长后将第一任务发送至存在空闲的流水线的数据库加速器,以在第二任务执行完成的情况下执行第一任务;若不存,则即时将第一任务发送至存在空闲的流水线的数据库加速器,以即时执行第一任务;接收第一任务的执行结果。通过上述方案能实现多个加速平台并行执行任务,并能提高加速平台的利用率。
Description
技术领域
本发明涉及计算机系统技术领域,尤其涉及一种基于多个数据库加速器的任务执行方法及装置。
背景技术
在高速变化的21世纪,数据越来越多,查询速度的要求也越来越高,数据库加速一直是一个很重要的研究方向。从优化查询语句,到提高闪存速度,到增加CPU数量,再到使用GPU、FPGA加速平台加速,从软件层面到硬件层面,目前,比较重要的方向是增加处理器的处理能力和数量,很多公司都推出了自己的数据库加速解决方案以及相应的加速平台。现在加速平台的价格都很贵,单加速平台的性能尚可,但是,为了更好的加速性能,利用多个加速平台也是必要的。
发明内容
本发明提供了一种基于多个数据库加速器的任务执行方法及装置,以实现利用多个加速平台执行任务,并提高加速平台的利用率。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种基于多个数据库加速器的任务执行方法,包括:
获取待执行的第一任务的相关信息,以及获取执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息;
根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;
在存在与所述第一任务相关的第二任务的情况下,延迟设定阻塞时长后将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以在所述第二任务执行完成的情况下执行所述第一任务;
在不存在与所述第一任务相关的第二任务的情况下,即时将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以即时执行所述第一任务;
接收所述第一数据库加速器返回的所述第一任务的执行结果。
在一些实施例中,根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,包括:根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型是否属于更新类型,且执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的表标识与所述第一任务的相关信息中的表标识是否一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务。
在一些实施例中,获取待执行的第一任务的相关信息,以及获取执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息,包括:从任务执行队列中读取待执行的第一任务的相关信息;以及从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息;其中,所述任务执行队列用于存放待执行和正在执行的各任务的相关信息。
在一些实施例中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,包括:从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列中获取相应任务的包括任务标识的相关信息。根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,包括:通过是否从表队列中查找到一条表记录,且查找到的表记录中的表标识和相应的任务标识分别为所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;其中,所述表队列用于存放操作类型属于更新类型且尚未执行完的任务的表标识和相应的任务标识。
在一些实施例中,通过是否从表队列中查找到一条表记录,且查找到的表记录中的表标识和相应的任务标识分别为所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,包括:根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,从表队列查找相应的表记录,并得到查找到的表记录中的表标识;在从所述表队列中查找到相应的表记录的情况下,根据所述第一任务的相关信息中的表标识和查找到的表记录中的表标识是否一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在未从所述表队列中查找到相应的表记录的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务。
在一些实施例中,获取待执行的第一任务的相关信息,以及获取执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息之前,所述方法还包括:从所述任务执行队列中读取执行顺序位于所述第一任务之前且尚未执行完的任务的包括任务标识、操作类型及表标识的相关信息,并且,在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型为更新类型的情况下,在所述表队列中增加表记录,以记录执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的表标识和相应的任务标识。或者,所述方法还包括:将在接收所述第一任务之前接收的任务的包括任务标识、操作类型及表标识的相关信息放入所述任务执行队列,并且,在接收所述第一任务之前接收的任务的相关信息中的操作类型为更新类型的情况下,在所述表队列中增加表记录,以记录在接收所述第一任务之前接收的任务的相关信息中的表标识和相应的任务标识。
在一些实施例中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,包括:从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列中获取相应任务的包括操作类型和表标识的相关信息。根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,包括:在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型属于更新类型的情况下,通过判断其相应表标识与所述第一任务的相关信息中的表标识是否一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息中的操作类型均不属于更新类型的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务。
在一些实施例中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,包括:从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列获取相应任务的包括任务标识的相关信息。根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,包括:根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,在任务指令队列中查找相应的指令记录;在从所述任务指令队列查找到的相应的指令记录中的任务指令属于更新类型的情况下,根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,在表队列中查找相应的表记录,根据是否从所述表队列查找到相应的表记录,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在从所述任务指令队列查找到的相应指令记录中的任务指令不属于更新类型的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务;其中,所述任务指令队列用于存放各任务的任务指令和相应的任务标识,所述表队列用于存放各任务的表标识和相应的任务标识。
在一些实施例中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,包括:从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列中获取相应任务的包括任务标识和操作类型的相关信息。根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,包括:在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型属于更新类型的情况下,根据从所述任务执行队列中获取的相应任务的的任务标识和所述第一任务的相关信息中的表标识是否分别与表队列中一条表记录的任务标识和相应的表标识一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型均不属于更新类型的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务;其中,所述表队列用于存放各任务的表标识和相应的任务标识。
在一些实施例中,在存在与所述第一任务相关的第二任务的情况下,延迟设定阻塞时长后将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以在所述第二任务执行完成的情况下执行所述第一任务,包括:在存在与所述第一任务相关的第二任务的情况下,依据任务执行状态表确定所述第一任务对应的阻塞周期个数,以使在所述第二任务执行完成的情况下执行所述第一任务;根据确定的阻塞周期的个数和设定阻塞周期确定设定阻塞时长,并且,在延迟设定阻塞时长后,将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器;其中,所述任务执行状态表用于记录各任务的各执行过程的执行状态。
在一些实施例中,在存在与所述第一任务相关的第二任务的情况下,依据任务执行状态表确定所述第一任务对应的阻塞周期个数,以使在所述第二任务执行完成的情况下执行所述第一任务,包括:在存在与所述第一任务相关的第二任务的情况下,从所述任务执行状态表中查找所述第一任务的尚未执行完的执行过程的个数,根据所述第一任务的尚未执行完的执行过程的个数确定所述第一任务对应的阻塞周期个数,以使在所述第二任务执行完成的情况下执行所述第一任务。
在一些实施例中,所述第一任务对应的阻塞周期个数等于所述第一任务的尚未执行完的执行过程的个数。
在一些实施例中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,包括:从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,并从所述任务执行队列获取相应任务的任务标识;根据从所述任务执行队列获取相应任务的任务标识,查找任务执行状态表,得到执行顺序位于所述第一任务之前的各任务的各执行过程的执行状态,在相应任务的各执行过程的执行状态中存在尚未执行完的情况下,将相应任务作为执行顺序位于所述第一任务之前且尚未执行完的任务;根据得到的执行顺序位于所述第一任务之前且尚未执行完的任务的任务标识,从所述任务执行队列中获取相应任务的包括操作类型和/或表标识的相关信息。
在一些实施例中,获取待执行的第一任务的相关信息,包括:接收第一任务的包括任务标识、操作类型及表标识的相关信息,并将所述第一任务的相关信息放入任务执行队列;其中,所述任务执行队列用于存放待执行和正在执行的各任务的相关信息。所述方法,还包括:在所述第一任务的相关信息中的操作类型属于更新类型的情况下,将所述第一任务的相关信息中的表标识放入表队列中;其中,所述表队列用于存放操作类型属于更新类型且尚未执行完的任务的表标识和相应的任务标识。根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务之后,所述方法,还包括:在任务执行状态表中,将所述第一任务的执行状态中的任务相关性检测过程标记为已执行;其中,所述任务执行状态表用于记录各任务的各执行过程的执行状态,所述各执行过程包括任务相关性检测过程、指令执行过程、及结果读取过程。将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之后,所述方法,还包括:在所述任务执行状态表中,将所述第一任务的执行状态中的指令执行过程标记为已执行。接收所述第一数据库加速器返回的所述第一任务的执行结果之后,所述方法,还包括:在所述任务执行状态表中,将所述第一任务的执行状态中的结果读取过程标记为已执行。将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之前,所述方法,还包括:通过查找加速器状态表,得到标记的状态为空闲的第一流水线的第一数据库加速器;其中,所述加速器状态表用于记录各数据库加速器的流水线的状态。将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之后,所述方法,还包括:在所述加速器状态表中,将所述第一数据库加速器的所述第一流水线的状态标记为繁忙。所述方法,还包括:在所述任务执行状态表中,所述第一任务的各执行过程的状态均为已执行之后,删除所述任务执行队列中所述第一任务和所述表队列中所述第一任务的表标识和相应的任务标识。
在一些实施例中,所述任务执行队列、所述表队列、所述任务执行状态表、及所述加速器状态表的数据结构是在内存中基于锁构建的并发数据结构。
在一些实施例中,一个任务对应一条SQL语句;属于所述更新类型的操作类型包括Insert、Delete、Update、Create、及Alter。
根据本发明实施例的另一个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述方法的步骤。
根据本发明实施例的又一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述方法的步骤。
本发明实施例的基于多个数据库加速器的任务执行方法、电子设备及计算机可读存储介质,能够尽量实现多加速平台并行执行任务,并提高加速平台的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的基于多个数据库加速器的任务执行方法的流程示意图;
图2是本发明一具体实施例的多平台数据库加速器的执行流程示意图;
图3是简单流水线的时序示意图;
图4是本发明一具体实施例的基于记分牌算法的多平台数据库加速器的流水线时序示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
单加速平台的传统调度方式可以是FCFS(First Come First Service,先到先服务)、SJF(最短作业优先)、优先级调度等算法,都是执行整个任务,本质上还是串行执行;而多加速平台一般使用的是全局调度和局部调度算法,还是以整个任务为单位执行,如果直接使用这种调度方式,肯定无法最大地发挥多个加速平台的性能。
而发明人发现,流水线可以将一个任务划分为多个阶段,从而以更细的粒度并行执行。有些任务会存在数据相关,会造成等待,使运算部件处于空闲状态,无法充分利用运算部件,但是,可以检测任务之间的相关性,只要任务的数据准备好,就可以允许该任务执行。以此可以实现任务指令的乱序执行,减少RAW(写后读)造成的停顿周期,从而更快地执行指令,提高加速平台的利用率。
基于此,本发明实施例提供了一种基于多个数据库加速器的任务执行方法。图1是本发明一实施例的基于多个数据库加速器的任务执行方法的流程示意图,如图1所示,该实施例的基于多个数据库加速器的任务执行方法包括以下步骤S110至步骤S150。
下面将对步骤S110至步骤S150的具体实施方式进行详细说明。
步骤S110:获取待执行的第一任务的相关信息,以及获取执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息。
步骤S120:根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务。
在上述步骤S110中,该“第一任务”是指准备执行的某一个任务。该任务是数据库系统需要执行的任务,例如,是一条SQL语句。该SQL语句可以包括操作类型、表标识等信息,还可以包含其标识信息,还可以包括操作参数。执行顺序位于所述第一任务之前的任务可以是指先到达的任务,或者根据优先规则需要先执行的任务等。若第一任务尚未开始执行(待执行),则执行顺序位于所述第一任务之前的任务可以是已到达但欲早于第一任务执行的任务,可以是待执行、正在执行或已执行的任务。尚未执行完的任务可以是指完全未执行或执行了一部分的任务。另外,执行顺序位于所述第一任务之前且尚未执行完的任务可以是一个或多个,有些情况下可以是没有。
在上述步骤S120中,若第一任务和在前的任务相关,意味着,若要执行在后的第一任务,需要执行完在前的任务,因为,在前的任务可能涉及对数据库表数据的更新(如增加、修改、删除等),而在后的第一任务应针对最新的表数据进行操作(如查询、修改等),所以需要等待在前的任务执行完再执行第一任务,否则,易出现错乱。当然,第一任务和在前的任务也可能不相关,意味着,无论是否待执行完在前的任务再执行第一任务,都不会对在后的第一任务的执行结果造成影响。
发明人经过研究发现,影响两个任务是否相关的主要因素是在前任务的操作类型,以及两个任务的表标识。所以通过上述步骤S120,可以利用操作类型和表标识找到与第一任务相关的在前任务,从而便于后续细粒度地任务执行控制。当然,不排序还可以同时考虑其他影响因素来确定两个任务是否相关。
在上述步骤S120中,可以结合任务的操作类型和表标识对应的表,来判断第一任务和之前的任务是否相关。具体实施时,上述步骤S120,具体地,可包括步骤:根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型是否属于更新类型,且执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的表标识与所述第一任务的相关信息中的表标识是否一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务。
其中,一个任务可能涉及一个或多个表,所以对于两个任务而言,有部分或全部表相同,即存在至少部分表标识一致,则可认为其二者表标识是一致,该两个任务一致,所以该两个任务相关。
另外,本发明各实施例中的一个任务可以对应一条SQL语句。当一整个任务包含多个SQL语句时,可以将该整个任务分成一条一条的SQL语句,从而使一条SQL语句对应本发明实施例的一个任务。所述的属于更新类型的操作类型可包括Insert、Delete、Update、Create、及Alter。反之,不属于更新类型(或称为,查询类型)的操作类型可包括Select等。
在上述步骤S110中,可以利用一个队列(如,称为“任务执行队列”,或,具体地,如SQL执行队列)不断存如需要执行的任务的相关信息,则可以从任务执行队列中获取任务的相关信息。该任务执行队列可以是生产者或消费者队列,各需要执行的任务均可以压入该任务执行队列,以待执行。该任务执行队列中的任务可以关联存储有任务标识(如SQL的ID)、操作类型(如,Select、Join、Union、Insert、Delete、Update、Commit、Create、Alter等)、表标识(可包括操作类型指令对应的操作对象),还可包括操作参数(如WHERE col>=1中的比较符>=和1)等。
以此,利用任务执行队列存放任务及其相关信息,可以方便地管理任务的执行顺序,而且,可以方便地将执行完的任务移出队列。该任务执行队列可以为先进先出队列,可以具有一定长度。当然,不排除可以利用其他方式存放任务及其相关信息。
具体实施时,需要执行的任务已压入任务执行队列,则可以从该任务执行队列获取至少部分相关信息。
例如,上述步骤S110,具体可包括步骤:S111,从任务执行队列中读取待执行的第一任务的相关信息;以及从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息;其中,所述任务执行队列用于存放待执行和正在执行的各任务的相关信息。
该例子中,任务执行队列所存放的相关信息可包括任务标识、操作类型及表标识,对于待执行的第一任务而言,可以从该任务执行队列中获取的该第一任务的相关信息可包括任务标识、操作类型及表标识,对于第一任务之前的任务而言,可以从该任务执行队列中获取任务标识、操作类型及表标识中的一个或多个,具体根据所设计的实施方式而不同。
上述步骤S111中,任务在队列中的顺序与执行顺序可以一致,所以,可以先根据任务在任务执行队列中的顺序找到第一任务之前的任务,再从找到的这些任务中找到尚未执行完的任务。
例如,上述步骤S111中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,具体地,可包括步骤:S11111,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,并从所述任务执行队列获取相应任务的任务标识;S11112,根据从所述任务执行队列获取相应任务的任务标识,查找任务执行状态表,得到执行顺序位于所述第一任务之前的各任务的各执行过程的执行状态,在相应任务的各执行过程的执行状态中存在尚未执行完的情况下,将相应任务作为执行顺序位于所述第一任务之前且尚未执行完的任务;S11113,根据得到的执行顺序位于所述第一任务之前且尚未执行完的任务的任务标识,从所述任务执行队列中获取相应任务的包括操作类型和/或表标识的相关信息。
该例子中,通过上述步骤S11111可以先从任务执行队列中找到第一任务之前的各任务,在该任务执行队列仅用于存放尚未执行完的任务的情况下,找到的第一任务之前的各任务即可为执行顺序位于所述第一任务之前且尚未执行完的各任务。在该任务执行队列除了用于存放尚未执行完的任务,还用于存放其他状态的任务时,例如已执行完的任务(未移出队列的),可以通过上述步骤S11112进一步确认找到的第一任务之前的各任务中哪些是尚未执行完的任务,从而得到执行顺序位于所述第一任务之前且尚未执行完的各任务,进一步可以得到这些任务所对应的相关信息。上述步骤S11113的任务的相关信息可以根据任务标识单独从任务执行队列中再次查找,或者,在上述步骤S11111中可以把所有在前任务的相关信息从队列中提取出来,在步骤S11113中再从提取出来的这些任务的相关信息中找到所需的那些任务的相关信息。另外,上述步骤S11113中,获取的任务的相关信息的具体内容可根据具体实施方式的不同而不同。
进一步而言,上述步骤S111中,可以从不同途径获得任务的相关信息中的不同信息,具体而言,任务的各种相关信息可以部分或全部从任务执行队列中获得,若有其他任务的信息需要获得,可以从任务执行队列以外的途径(如表队列)获得。如此一来,在上述步骤S120中,第一任务的各相关信息可以均从任务执行队列中获得,而,需要用来确定与该第一任务的相关性的其余任务的相关信息并不限于直接从任务执行队列中获得,当然,从其余途径获得的任务的相关信息可以间接从任务执行队列中得到。
在一些实施例中,可以主要从任务执行队列中获取第一任务之前任务的任务标识。可以利用表队列存储操作类型属于更新类型且尚未执行完的任务的表标识,其中,该表队列可以便于管理任务的表标识,便于移除执行完的任务的表标识对应的记录。该表队列可以是先进先出队列。一个任务可以有一个或多个表,有多个表时,通过任务标识可以将该多个表与其他任务的表进行区分。以此,只要第一任务之前的任务的表标识存在于表队列中,就可以说明该任务的操作类型属于更新类型。进一步可以判断该任务的表标识与第一任务的表标识是否存在一致。从而可以判断第一任务之前的任务与该第一任务是否相关。
示例性地,上述步骤S111中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,具体地,可包括步骤:S1112,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列中获取相应任务的包括任务标识的相关信息。该步骤S1112中,从所述任务执行队列中获取第一任务之前且尚未执行完的任务的相关信息可以主要是任务标识。
在此情况下,上述步骤S120,具体地,可包括步骤:S1201,通过是否从表队列中查找到一条表记录,且查找到的表记录中的表标识和相应的任务标识分别为所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;其中,所述表队列用于存放操作类型属于更新类型且尚未执行完的任务的表标识和相应的任务标识。该步骤S1201中,利用通过上述步骤S1112得到的任务标识,查找表队列,若找到一条表记录,其中的任务标识与上述步骤S1112得到的任务标识相同,且其中的表标识与第一任务的表标识一致,则说明该表记录对应的任务与该第一任务的表相同,而且由于表队列是用于存储更新类型的任务的表信息,所以该表记录对应的任务与该第一任务相关。
具体实施时,上述步骤S1201,具体地,可包括步骤:根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,从表队列查找相应的表记录,并得到查找到的表记录中的表标识;在从所述表队列中查找到相应的表记录的情况下,根据所述第一任务的相关信息中的表标识和查找到的表记录中的表标识是否一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在未从所述表队列中查找到相应的表记录的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务。该例子中,可以先将任务的表标识从表队列查找出来,再比较找到的表标识与第一任务的表标识是否一致。在其他实施例中,可以直接将第一任务之前尚未执行的任务的任务标识和第一任务的表标识与表队列中的表记录中的任务标识和表标识进行对应匹配比较。
另外,为了利用表队列来得到第一任务之前的任务的表标识等信息,在上述步骤S110之前,还可以包括将第一任务之前的任务的表标识等信息记录至表队列的步骤。
例如,上述步骤S110之前,还可包括步骤:S161,从所述任务执行队列中读取执行顺序位于所述第一任务之前且尚未执行完的任务的包括任务标识、操作类型及表标识的相关信息,并且,在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型为更新类型的情况下,在所述表队列中增加表记录,以记录执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的表标识和相应的任务标识。
该实施例中,可以在需要从任务执行队列中取执行顺序位于所述第一任务之前且尚未执行完的任务进行执行时实施,或者可以单独作为一个步骤实施。
再例如,上述步骤S110之前,还可包括步骤:S162,将在接收所述第一任务之前接收的任务的包括任务标识、操作类型及表标识的相关信息放入所述任务执行队列,并且,在接收所述第一任务之前接收的任务的相关信息中的操作类型为更新类型的情况下,在所述表队列中增加表记录,以记录在接收所述第一任务之前接收的任务的相关信息中的表标识和相应的任务标识。
该实施例中,可以是在将任务放入任务执行队列时,判断任务的操作类型是否为更新类型,若为更新类型就可以将该任务的表标识记录至表队列中。
在另一些实施例中,第一任务之前的各任务的操作类型和表标识可以从任务执行队列中获得,并可用于判断该各任务与第一任务的相关性。
示例性地,上述步骤S111中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,具体地,可包括步骤:S1121,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列中获取相应任务的包括操作类型和表标识的相关信息。该实施例中,可以不用将任务的信息,如表标识另存起来,如另存到表队列中。
在此情况下,上述步骤S120,即,根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,具体地,可包括步骤:S1202,在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型属于更新类型的情况下,通过判断其相应表标识与所述第一任务的相关信息中的表标识是否一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息中的操作类型均不属于更新类型的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务。
在又一些实施例中,可以主要从任务执行队列中获取第一任务之前任务的任务标识。可以利用表队列存储各种操作类型的尚未执行完的任务的表标识,可以利用任务指令队列存储各种操作类型的尚未执行完的任务的任务指令(如操作指令,更具体地如,Select、Join、Union、Insert、Delete、Update、Commit、Create、Alter等)。以此,可以从表队列中获得第一任务之前的任务的表标识,可以从任务执行队列中获取第一任务之前的任务的操作类型,用于判断第一任务之前的任务与该第一任务是否相关。
示例性地,上述步骤S111中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,具体地,可包括步骤:S1131,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列获取相应任务的包括任务标识的相关信息。
在此情况下,上述步骤S120,即,根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,具体地,可包括步骤:S1203,根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,在任务指令队列中查找相应的指令记录;在从所述任务指令队列查找到的相应的指令记录中的任务指令属于更新类型的情况下,根据执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的任务标识,在表队列中查找相应的表记录,根据是否从所述表队列查找到相应的表记录,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在从所述任务指令队列查找到的相应指令记录中的任务指令不属于更新类型的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务;其中,所述任务指令队列用于存放各任务的任务指令和相应的任务标识,所述表队列用于存放各任务的表标识和相应的任务标识。
该实施例中,任务指令队列不仅用于存放更新类型的任务的指令,还用于存放非更新类型的任务的指令,表队列不仅用于存放更新类型的任务的表标识,还用于存放非更新类型的任务的表标识。可以从任务指令队列中查找第一任务之前的操作类型,来判断操作类型是否为更新类型,可以从表队列中查找第一任务之前的任务的表标识,来判断其表标识与第一任务的表标识是否一致。
在再一些实施例中,可以从任务执行队列中获取第一任务之前的任务的任务标识和操作类型。在表队列用于存放各种操作类型的任务的表标识等信息的情况下,该操作类型可以用于判断第一任务之前的任务是否属于更新类型,该任务标识可以用于从表队列中获取任务的表标识,从而用于与第一任务的表标识进行比较,进而得知第一任务与其之前的任务的相关性。
示例性地,上述步骤S111中,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并获取相应任务的相关信息,具体地,可包括步骤:S1141,从所述任务执行队列中查找执行顺序位于所述第一任务之前的各任务,得到执行顺序位于所述第一任务之前且尚未执行完的各任务,并从所述任务执行队列中获取相应任务的包括任务标识和操作类型的相关信息。
在此情况下,上述步骤S120,即,根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务,具体地,可包括步骤:S1204,在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型属于更新类型的情况下,根据从所述任务执行队列中获取的相应任务的的任务标识和所述第一任务的相关信息中的表标识是否分别与表队列中一条表记录的任务标识和相应的表标识一致,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型均不属于更新类型的情况下,确认执行顺序位于所述第一任务之前且尚未执行完的各任务中不存在与所述第一任务相关的第二任务;其中,所述表队列用于存放各任务的表标识和相应的任务标识。
该实施例中,利用表队列存放任务的表标识,不仅用于存放操作类型属于更新类型的任务的表标识,还用于存放非更新类型的任务的表标识,而操作类型可以从任务执行队列中得到。
上述步骤S110和步骤S120的各具体实施例中,通过任务执行队列存放任务和任务的相关信息,便于管理任务的执行顺序,可以容易的找到第一任务之前的任务,还可以便于移除执行完成的任务。若利用表队列存放任务的表标识,可以从表队列中查找到表标识,而不需从任务执行队列中得到表标识;而且,若表队列用于存放更新类型的任务的表标识,则通过查找表队列中是否有某以前的任务的表标识的记录,就可知道是否存在相关的任务,查找方便;另外,利用表队列存放表标识可以便于移除执行完的任务的表标识,便于管理表标识顺序。若主要从任务执行队列中获取操作类型和/表标识进行判断,可以简化数据结构。
上述任务执行队列、表队列、任务指令队列等可以是在内存中基于锁建立的并发数据结构,以此可以便于一次访问一个任务的数据,防止数据读取混乱。另外,队列可以采用其他形式,如表,表可以采用其他形式,如队列。
步骤S130:在存在与所述第一任务相关的第二任务的情况下,延迟设定阻塞时长后将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以在所述第二任务执行完成的情况下执行所述第一任务。
在上述步骤S130中,可以根据第二任务尚未执行完的执行过程(或称,任务执行阶段)和各执行过程的经验执行耗时长度,确定第一任务的设定阻塞时长。第二任务尚未执行完的执行过程可以根据任务执行状态表中记录的各执行过程的执行状态确定。
示例性地,上述步骤S130,具体地,可包括步骤:S131,在存在与所述第一任务相关的第二任务的情况下,依据任务执行状态表确定所述第一任务对应的阻塞周期个数,以使在所述第二任务执行完成的情况下执行所述第一任务;根据确定的阻塞周期的个数和设定阻塞周期确定设定阻塞时长,并且,在延迟设定阻塞时长后,将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器;其中,所述任务执行状态表用于记录各任务的各执行过程的执行状态。其中,阻塞周期(stall周期,或称停顿周期)可以根据经验确定。
更具体地,上述步骤S131,更具体地,可包括步骤:S1311,在存在与所述第一任务相关的第二任务的情况下,从所述任务执行状态表中查找所述第一任务的尚未执行完的执行过程的个数,根据所述第一任务的尚未执行完的执行过程的个数确定所述第一任务对应的阻塞周期个数,以使在所述第二任务执行完成的情况下执行所述第一任务。
在上述步骤S1311中,可以根据尚未执行的过程的个数确定阻塞周期的个数,例如,所述第一任务对应的阻塞周期个数等于所述第一任务的尚未执行完的执行过程的个数。
具体地,例如,任务的执行过程可以划分为:相关性检测过程、指令执行过程及结果读取过程,若这三个过程中,第二任务的相关性检测过程已执行,而指令执行过程和结果读取过程未执行完,则可以给第一任务增加两个阻塞周期(stall周期)。另外,若数据库中的表数据没有预先加载至加速器的硬件平台,则任务的执行过程可以划分为相关性检测过程、表读取过程、指令执行过程及结果读取过程,这四个过程中,若只有相关性检测过程执行完了,其他过程未执行完,则可以为第一任务增加三个阻塞周期。
步骤S140:在不存在与所述第一任务相关的第二任务的情况下,即时将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以即时执行所述第一任务。
步骤S150:接收所述第一数据库加速器返回的所述第一任务的执行结果。
若存在与第一任务相关的在前未执行完的第二任务,则可以通过上述步骤S130,延迟一定时间再发送第一任务至加速器平台执行。若第一任务与其之前的未执行完的任务均不相关,或者其之前没有尚未执行完的任务,则不存在与第一任务相关的尚未执行完的第二任务,则可以不需延迟、停顿或阻塞一定时间,而可以通过上述步骤S140直接发送至加速平台上空闲的流水线执行。
另外,数据库加速器或加速器,又可称为加速平台、硬件平台、专用处理器、硬件数据库等,其可以承担传统数据库的部分或大部分功能,从而提高数据库的执行速度,其可以基于ASIC(专用集成电路)、FPGA(现场可编程们阵列)等硬件实现。一个数据库加速器可以对应一个或多个流水线,可以有多个数据库加速器,从而这些流水线可以并行执行多个任务。此外,一条流水线可包括相关性检测过程、指令执行过程、结果读取过程,还可包括表读取过程,其中,数据库加速器可主要执行指令执行过程,或者还可涉及表读取过程(其中的从软件数据库部分获得表数据),还可以涉及结果读取过程(其中的返回结果),另外对接数据库加速器的传统数据库(软件数据库)部分(如CPU)可以涉及相关性检测过程、表读取过程(将表数据传送给数据库加速器)、结果读取过程(接收结果并输出)。
通过上述各实施例的方法,可以查找第一任务之前的正在执行的各任务与第一任务是否相关,若相关延迟一定时间再将第一任务发送至数据库加速器进行执行,若不相关可以直接执行第一任务,如此一来,可以尽可能实现将第一任务与之前的任务并行执行,而且同时尽可能避免第一任务受到之前的相关任务没有执行完成时的影响。
进一步地,可以针对第一任务记录所需的信息,以便利用类似于执行第一任务的方式执行第一任务之后的任务。换言之,第一任务可以类似于其之前的任务的情况进行处理。
可以采用类似的方式接收外部传来的第一任务的信息。例如,上述步骤S110中,获取待执行的第一任务的相关信息,具体可包括步骤:接收第一任务的包括任务标识、操作类型及表标识的相关信息,并将所述第一任务的相关信息放入任务执行队列;其中,所述任务执行队列用于存放待执行和正在执行的各任务的相关信息。利用任务执行队列存放任务的相关信息时,可以将在接收到第一任务的相关信息并放入任务执行队列时,当然,其他任务可以采用类似的方式接收相关信息并放入任务执行队列。
在接收到第一任务的相关信息并放入任务执行队列时,可以根据第一任务的操作类型的信息判断其是否属于更新类型,若是,则可以将其表标识放入表队列中,以此,可以遵循利用表队列存放更新类型的任务的表标识的规则,以便后续任务判断是否与第一任务相关。
下面将具体说明针对第一任务记录信息的可能实施方式,第一任务之前或之后到来的任务也可以利用类似的实施方式实施。
例如,图1所示的方法还可包括步骤:在所述第一任务的相关信息中的操作类型属于更新类型的情况下,将所述第一任务的相关信息中的表标识放入表队列中;其中,所述表队列用于存放操作类型属于更新类型且尚未执行完的任务的表标识和相应的任务标识。
在检测第一任务与其之前的任务的相关性的同时或之后,可以记录检测相关性的任务执行阶段的执行状态。例如,上述步骤S120之后,即,根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务之后,图1所示方法还可包括步骤:在任务执行状态表中,将所述第一任务的执行状态中的任务相关性检测过程标记为已执行;其中,所述任务执行状态表用于记录各任务的各执行过程的执行状态,所述各执行过程包括任务相关性检测过程、指令执行过程、及结果读取过程。类似的,其他任务也可以在类似的实际记录相关性检测过程的状态,根据该状态记录可知该任务的该相关检测过程是否已执行。
在发送任务至加速平台的流水线进行执行的同时或之后,可以记录指令执行阶段的状态。例如,上述步骤S130或步骤S140中,将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之后,图1所示的方法还可包括步骤:在所述任务执行状态表中,将所述第一任务的执行状态中的指令执行过程标记为已执行。类似的,其他任务也可以在类似的时机更新记录指令执行过程(阶段)的执行状态。
在接收到任务的执行结果(如结果数据或执行状态)时或读取完结果之后,可以记录读取结果阶段的状态。例如,上述步骤S150之后,即,接收所述第一数据库加速器返回的所述第一任务的执行结果之后,图1所示的方法还可包括步骤:在所述任务执行状态表中,将所述第一任务的执行状态中的结果读取过程标记为已执行。其他任务可以采用类似的方式在类似的时机记录结果读取过程的状态。在结果读取过程位任务的最后一个执行阶段的情况下,在该过程为已执行时,可以认为该任务已执行完成。
在发送任务至加速平台的流水线进行执行之前的各个时机,获取硬件的忙闲信息,以便得到空闲的流水线。例如,上述步骤S130或步骤S140之前,即,将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之前,图1所示的方法还可包括步骤:通过查找加速器状态表,得到标记的状态为空闲的第一流水线的第一数据库加速器;其中,所述加速器状态表用于记录各数据库加速器的流水线的状态。在准备执行其他任务时可以采用类似的方式找到空闲的流水线,并可以更新流水线的状态。当然,在一开始的时候,可以将各加速平台的各流水线的状态初始化为空闲状态。
在发送任务至加速平台的流水线进行执行之前的各个时机,如接收到任务的执行结果之后,可以将流水线的状态更新为空闲。例如,上述步骤S130或步骤S140之后,即,将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之后,图1所示方法还可包括步骤:在所述加速器状态表中,将所述第一数据库加速器的所述第一流水线的状态标记为繁忙。
另外,在任务执行完成后可以将任务从任务执行队列中移除,也可以将任务的表记录从表队列中移除。例如,图1所示的方法还可包括步骤:在所述任务执行状态表中,所述第一任务的各执行过程的状态均为已执行之后,删除所述任务执行队列中所述第一任务和所述表队列中所述第一任务的表标识和相应的任务标识。
进一步的实施例中,所述任务执行队列、所述表队列、所述任务执行状态表、及所述加速器状态表中的一个或多个的数据结构可以是在内存中基于锁构建的并发数据结构。以此,可以保证每次读取一个任务的数据,防止数据读取混乱。
另外,基于与图1所示的方法相同的发明构思,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述方法的步骤。其中,该电子设备可以是计算机、服务器等,还可以包括数据库加速器(如FPGA、ASIC等)。
此外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述方法的步骤。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
为了更好地发挥多个数据库加速平台的性能,提高数据库加速平台的利用率,以提数据库加速器的效率,本实施例提供了一种针对多平台数据库加速器执行的实现方法,通过基于记分牌算法的流水线方式减少SQL相关导致的时延。而记分牌算法的核心是系统中存在有一个“记分牌”,这个记分牌记录了运算部件和寄存器的数据相关性,即如果运算部件需要的寄存器数据准备好,就可以执行,执行完之后,释放寄存器。在这种情况下,就可以实现指令的乱序执行,减少RAW(写后读)造成的停顿周期,从而更快地执行指令。由于涉及到数据库加速平台,需要和上层应用进行交互通信。
在一具体实施例中,基于多个数据库加速器的任务执行方法可以包括以下步骤:
S1,在任务执行队列中有待执行的第一任务的情况下,从所述任务列表中获取所述第一任务的相关信息;其中,所述任务执行队列用于存放待执行任务的相关信息;
S2,在任务执行状态表中有正在执行的任务的情况下,检测所述任务执行状态表中与所述第一任务相关的正在执行的第二任务;若所述第一任务的相关信息中的表标识信息存在于表队列中,则确定所述任务执行状态表中存在与所述第一任务相关的正在执行的第二任务;其中,所述任务执行状态表用于存放正在执行的任务的各执行过程的执行状态,所述表队列用于存放正在执行的任务所包含的表的标识信息;
S3,根据所述第二任务早于所述第一任务的指令执行顺序位置差和所述任务执行状态表中的执行过程的数量确定阻塞周期的数量;
S4,在所述任务执行状态表中记录所述第一任务的相关信息中的任务标识信息,将所述第一任务的相关性检测过程标识为已执行,将所述第一任务的表读取过程、任务执行过程及结果读取过程均标识为未执行,并根据确定的阻塞周期的数量在所述第一任务的相关性检测过程和表读取过程之间插入阻塞周期;
S5,在加速器状态表中有空闲的加速器的情况下,读取所述第一任务的相关表,将所述第一任务的相关表和所述第一任务的指令发送至空闲的加速器,以使所述空闲的加速器依据所述任务执行状态表中所述第一任务的执行过程执行所述第一任务;其中,所述加速器状态表用于存放数据库的各加速器的占用状态;
S6,将所述空闲的加速器的占用状态由空闲更新为繁忙,并根据所述第一任务的各执行过程的执行情况更新所述任务执行状态表中所述第一任务的各执行过程的状态。
上述实施例的方法,还可包括步骤:
S7,在任务执行状态表中有正在执行的任务的情况下,若所述第一任务的相关信息中的表标识信息不存在于表队列中,则确定所述任务执行状态表中不存在与所述第一任务相关的正在执行的第二任务;
S8,在所述任务执行状态表中记录所述第一任务的相关信息中的任务标识信息,将所述第一任务的相关性检测过程标识为已执行,将所述第一任务的表读取过程、任务执行过程及结果读取过程均标识为未执行;
S9,在加速器状态表中有空闲的加速器的情况下,读取所述第一任务的相关表,将所述第一任务的相关表和所述第一任务的指令发送至空闲的加速器,以使所述空闲的加速器依据所述任务执行状态表中所述第一任务的执行过程执行所述第一任务;
S10,将所述空闲的加速器的占用状态由空闲更新为繁忙,并根据所述第一任务的各执行过程的执行情况更新所述任务执行状态表中所述第一任务的各执行过程的状态。
其中,任务执行队列、表队列、任务执行状态表、加速器状态表可以是在内存中建立基于锁的并发数据结构,用于保存相应的数据信息,方便并发访问。
具体而言,首先,需要设计一个SQL执行队列(任务执行队列),一个TABLE队列(表队列),一个SQL语句执行状态表(任务执行状态表)和一个加速平台状态表(加速器状态表)。SQL执行队列中可以是一个生产者消费者队列,可包含一个个SQL语句的相关信息,如操作类型,参数和表名等。操作类型主要可以是Select、Join、Union、Insert、Delete、Update、Commit、Create或Alter等,参数主要是包含比较的那些值,如WHERE col>=1中的比较符“>=”和“1”;TABLE队列包含正在执行的所有SQL语句包含的表ID;SQL语句执行状态表和加速平台状态表在后续部分进行说明。
图2是本发明一具体实施例的多平台数据库加速器的执行流程示意图。参见图2,首先,系统(如CPU端的系统)读取硬件信息;然后判断SQL任务执行队列是否为空:若为空,再判断是否退出;否则,判断当前SQL语句是否与正在执行的SQL语句相关,具体操作是查找相关表是否在执行队列中:若相关,则插入stall周期(阻塞周期);接着读取相关table,然后将当前SQL语句交给空闲的加速平台执行,更新硬件信息,最后可以读取结果信息。
图4是本发明一具体实施例的基于记分牌算法的多平台数据库加速器的流水线时序示意图。在图4中,“1”、“2”、“3”、“4”分别表示SQL语句“SELECT*FROM table_1”、“INSERTINTO table_1xxx”、“SELECT xx FROM table_1,table_2WHERE col>=1”、“SELECT*FROMtable_3”。参见图4,多个加速平台对应多个流水线,每个流水线包括四个流水部件:根据SQL语句中的表名检测相关(相关性检测过程)、读table(表读取过程)、执行SQL(指令执行过程)和读取结果(结果读取过程)。由于是多个加速平台,多个SQL语句可以同时执行,但是SQL语句之间可能存在相关,通过记分牌算法,可以检测这种相关,存在相关的SQL语句先插入三个stall周期,等待之前的SQL语句执行完再接着执行后面的流程;而后面的不存在相关的SQL语句则可以直接执行,这样提高了SQL语句的执行效率。
表1是指令状态表,是用于记录SQL语句执行状态的表,其中SQL_ID代表正在执行的语句,每个语句有四个执行过程:检测相关、读table、执行SQL和读结果四个过程。表1中,可以用1表示该过程已经执行,可以用0表示该过程还没执行。
| 检测相关 | 读table | 执行SQL | 读结果 | |
| SQL_ID | 1或0 | 1或0 | 1或0 | 1或0 |
表1
表2是加速平台状态表,是用于记录加速平台状态的表,包含一个busy状态(繁忙状态),其中,可以用1表示该平台正忙,可以用0表示该平台空闲。
| Busy | |
| 加速平台ID | 1或0 |
表2
本实例的方法可包括以下步骤:1)在内存中建立基于锁的并发数据结构,用于保存数据信息,方便后面并发访问;2)根据硬件资源信息自动构建多个流水线,每个流水线包括四个部件:检测相关、读table、执行SQL和读取结果,流水线是基于线程实现。
图3是简单流水线的时序示意图。类似于图4,在图3中,“1”、“2”、“3”、“4”分别表示SQL语句“SELECT*FROM table_1”、“INSERT INTO table_1xxx”、“SELECT xx FROM table_1,table_2WHERE col>=1”、“SELECT*FROM table_3”。参见图3,数据库加速器若采用简单流水线处理,在多平台数据库加速器的执行流程中,当2和3存在数据相关时,3需要等待2执行完,3后面的也需要等待,在SQL语句很多时,这些等待时间将是难以接受的;并且这种方式在多加速平台的情况下也不适合,无法最大地发挥加速平台的性能。
而在使用了记分牌算法之后,参见图4,在基于记分牌算法的流水线的执行过程中,若某一SQL语句发生数据相关时,之后的不存在数据相关的SQL语句,可以直接执行,有效地解决了SQL语句之间的数据相关,且该方法的性能取决于SQL任务执行队列中存在相关的SQL语句的数量以及加速平台的数量,加速平台的数量越多,加速性能越好。
本实施例中,通过设计并发map数据结构,并设计基于记分牌构思的多平台数据库加速器的流水线,能够实现系统高并发。实现了数据库加速器检测相关、读table、执行SQL和读取结果的解耦合,解决了数据相关问题,通过基于记分牌算法的流水线技术,有效减少了数据库加速器处理SQL语句执行时的等待时间,提高了加速平台的利用率,提高了数据库加速器的加速性能。
综上所述,本发明实施例的基于多个数据库加速器的任务执行方法、电子设备及计算机可读存储介质,通过检测任务与其之前任务的相关性,并对相关的任务,阻塞一定时间再发送至加速器的空闲流水线执行,对不相关的任务,即时发送至加速器的空闲流水线执行,如此一来能够保证任务在其相关任务执行完之后在执行,而且,能够使得任务与其不相关任务并行执行。如此一来,能够尽量实现多加速平台并行执行任务,并提高加速平台的利用率。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于多个数据库加速器的任务执行方法,其特征在于,所述方法基于多个数据库加速器共同运行,包括:
获取待执行的第一任务的相关信息,以及获取执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息;
根据所述第一任务的相关信息中的表标识和执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型和表标识,判断执行顺序位于所述第一任务之前且尚未执行完的各任务中是否存在与所述第一任务相关的第二任务;若顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型属于更新类型,且所述表标识与所述第一任务的相关信息中的表标识一致,则判断执行顺序位于所述第一任务之前且尚未执行完的各任务中存在与所述第一任务相关的第二任务;若顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型不属于更新类型,则不存在与所述第一任务相关的第二任务;在任务执行状态表中,将所述第一任务的执行状态中的任务相关性检测过程标记为已执行;其中,所述任务执行状态表用于记录各任务的各执行过程的执行状态,所述各执行过程包括任务相关性检测过程、指令执行过程、及结果读取过程;
在存在与所述第一任务相关的第二任务的情况下,延迟设定阻塞时长后将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以在所述第二任务执行完成的情况下执行所述第一任务;
在不存在与所述第一任务相关的第二任务的情况下,即时将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以即时执行所述第一任务;
接收所述第一数据库加速器返回的所述第一任务的执行结果;
其中,在存在与所述第一任务相关的第二任务的情况下,延迟设定阻塞时长后将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器,以在所述第二任务执行完成的情况下执行所述第一任务,包括:
在存在与所述第一任务相关的第二任务的情况下,依据任务执行状态表中第一任务的尚未执行的执行过程的个数确定所述第一任务对应的阻塞周期个数,以使在所述第二任务执行完成的情况下执行所述第一任务;根据确定的阻塞周期的个数和设定阻塞周期确定设定阻塞时长,并且,在延迟设定阻塞时长后,将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器;
获取待执行的第一任务的相关信息,包括:
接收第一任务的包括任务标识、操作类型及表标识的相关信息,并将所述第一任务的相关信息放入任务执行队列;其中,所述任务执行队列用于存放待执行和正在执行的各任务的相关信息;
所述方法,还包括:
在所述第一任务的相关信息中的操作类型属于更新类型的情况下,将所述第一任务的相关信息中的表标识放入表队列中;其中,所述表队列用于存放操作类型属于更新类型且尚未执行完的任务的表标识和相应的任务标识;
将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之后,所述方法,还包括:
在所述任务执行状态表中,将所述第一任务的执行状态中的指令执行过程标记为已执行;
接收所述第一数据库加速器返回的所述第一任务的执行结果之后,所述方法,还包括:
在所述任务执行状态表中,将所述第一任务的执行状态中的结果读取过程标记为已执行;
将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之前,所述方法,还包括:
通过查找加速器状态表,得到标记的状态为空闲的第一流水线的第一数据库加速器;其中,所述加速器状态表用于记录各数据库加速器的流水线的状态;
将所述第一任务发送至存在空闲的第一流水线的第一数据库加速器之后,所述方法,还包括:
在所述加速器状态表中,将所述第一数据库加速器的所述第一流水线的状态标记为繁忙;
所述方法,还包括:
在所述任务执行状态表中,所述第一任务的各执行过程的状态均为已执行之后,删除所述任务执行队列中所述第一任务和所述表队列中所述第一任务的表标识和相应的任务标识;
其中,所述任务执行队列、所述表队列、所述任务执行状态表、及所述加速器状态表的数据结构是在内存中基于锁构建的并发数据结构。
2.如权利要求1所述的基于多个数据库加速器的任务执行方法,其特征在于,获取待执行的第一任务的相关信息,以及获取执行顺序位于所述第一任务之前且尚未执行完的各任务的相关信息之前,还包括:
从所述任务执行队列中读取执行顺序位于所述第一任务之前且尚未执行完的任务的包括任务标识、操作类型及表标识的相关信息,并且,在执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的操作类型为更新类型的情况下,在所述表队列中增加表记录,以记录执行顺序位于所述第一任务之前且尚未执行完的任务的相关信息中的表标识和相应的任务标识;
或者,
将在接收所述第一任务之前接收的任务的包括任务标识、操作类型及表标识的相关信息放入所述任务执行队列,并且,在接收所述第一任务之前接收的任务的相关信息中的操作类型为更新类型的情况下,在所述表队列中增加表记录,以记录在接收所述第一任务之前接收的任务的相关信息中的表标识和相应的任务标识。
3.如权利要求1所述的基于多个数据库加速器的任务执行方法,其特征在于,一个任务对应一条SQL语句;属于所述更新类型的操作类型包括Insert、Delete、Update、Create、及Alter。
4.一种电子设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至3任一项所述方法的步骤。
5.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至3任一项所述方法的步骤。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010969557.1A CN112256409B (zh) | 2020-09-15 | 2020-09-15 | 基于多个数据库加速器的任务执行方法及装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010969557.1A CN112256409B (zh) | 2020-09-15 | 2020-09-15 | 基于多个数据库加速器的任务执行方法及装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN112256409A CN112256409A (zh) | 2021-01-22 |
| CN112256409B true CN112256409B (zh) | 2022-03-04 |
Family
ID=74232425
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202010969557.1A Active CN112256409B (zh) | 2020-09-15 | 2020-09-15 | 基于多个数据库加速器的任务执行方法及装置 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN112256409B (zh) |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6134710A (en) * | 1998-06-26 | 2000-10-17 | International Business Machines Corp. | Adaptive method and system to minimize the effect of long cache misses |
| CN1577278A (zh) * | 2003-07-22 | 2005-02-09 | 株式会社东芝 | 执行实时操作的方法和系统 |
| CN104699541A (zh) * | 2015-03-30 | 2015-06-10 | 北京奇虎科技有限公司 | 同步数据的方法、装置、数据传输组件及系统 |
| CN105589874A (zh) * | 2014-10-22 | 2016-05-18 | 阿里巴巴集团控股有限公司 | Etl任务依赖关系的检测方法、装置及etl工具 |
| CN111149166A (zh) * | 2017-07-30 | 2020-05-12 | 纽罗布拉德有限公司 | 基于存储器的分布式处理器架构 |
| CN111198872A (zh) * | 2020-01-06 | 2020-05-26 | 中科驭数(北京)科技有限公司 | 数据库处理事务的方法及装置 |
Family Cites Families (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN111176907B (zh) * | 2020-01-06 | 2021-03-05 | 中科驭数(北京)科技有限公司 | 硬件数据库回滚方法、软件数据库回滚方法及装置 |
-
2020
- 2020-09-15 CN CN202010969557.1A patent/CN112256409B/zh active Active
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6134710A (en) * | 1998-06-26 | 2000-10-17 | International Business Machines Corp. | Adaptive method and system to minimize the effect of long cache misses |
| CN1577278A (zh) * | 2003-07-22 | 2005-02-09 | 株式会社东芝 | 执行实时操作的方法和系统 |
| CN105589874A (zh) * | 2014-10-22 | 2016-05-18 | 阿里巴巴集团控股有限公司 | Etl任务依赖关系的检测方法、装置及etl工具 |
| CN104699541A (zh) * | 2015-03-30 | 2015-06-10 | 北京奇虎科技有限公司 | 同步数据的方法、装置、数据传输组件及系统 |
| CN111149166A (zh) * | 2017-07-30 | 2020-05-12 | 纽罗布拉德有限公司 | 基于存储器的分布式处理器架构 |
| CN111198872A (zh) * | 2020-01-06 | 2020-05-26 | 中科驭数(北京)科技有限公司 | 数据库处理事务的方法及装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN112256409A (zh) | 2021-01-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7899799B2 (en) | Transaction processing system of database using multi-operation processing providing concurrency control of transactions | |
| US8756192B2 (en) | Dispatching conflicting data changes | |
| EP3391214B1 (en) | Processing data using dynamic partitioning | |
| US7827167B2 (en) | Database management system and method including a query executor for generating multiple tasks | |
| US20150278310A1 (en) | Database device | |
| CN111198872B (zh) | 数据库处理事务的方法及装置 | |
| CN110597630B (zh) | 一种分布式系统中内容资源的处理方法及系统 | |
| CN114356999B (zh) | 一种数据处理方法、系统及计算机可读存储介质 | |
| CN110704199B (zh) | 数据压缩方法、装置、计算机设备及存储介质 | |
| EP1850250A1 (en) | Method and system for renewing an index | |
| US10599472B2 (en) | Information processing apparatus, stage-out processing method and recording medium recording job management program | |
| CN112256409B (zh) | 基于多个数据库加速器的任务执行方法及装置 | |
| EP3267329A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
| CN111985868A (zh) | 用于服务器产品生产的物料清单维护方法和系统 | |
| CN114328470B (zh) | 针对单个源表的数据迁移方法及装置 | |
| CN106970998B (zh) | 新闻数据的更新方法及装置 | |
| CN116775695B (zh) | 一种基于索引的动态组合查询优化方法、装置和存储介质 | |
| CN112612800A (zh) | 一种提高数据写入效率的方法及终端 | |
| CN114625546B (zh) | 一种数据处理方法及装置 | |
| CN115586953A (zh) | 基于Hive的任务并发执行方法和相关装置 | |
| EP4303728A1 (en) | Multi-consumer queue | |
| WO2015161550A1 (zh) | 管理索引的方法、装置及计算机存储介质 | |
| CN112000682A (zh) | 数据同步任务调度方法、装置、服务器及存储介质 | |
| CN118708653B (zh) | 分布式数据库查询方法、分布式数据库、设备、介质及产品 | |
| US11734282B1 (en) | Methods and systems for performing a vectorized delete in a distributed database system |
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 | ||
| CB02 | Change of applicant information |
Address after: 100089 room 801, 8 / F, building 3, yard 1, 81 Beiqing Road, Haidian District, Beijing Applicant after: YUSUR TECHNOLOGY Co.,Ltd. Address before: 100190 scientific research complex building, Institute of computing technology, Chinese Academy of Sciences, no.6, Academy of Sciences South Road, Haidian District, Beijing Applicant before: YUSUR TECHNOLOGY Co.,Ltd. |
|
| CB02 | Change of applicant information | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |