CN112035578B - 基于众核处理器的数据并行处理方法及装置 - Google Patents

基于众核处理器的数据并行处理方法及装置 Download PDF

Info

Publication number
CN112035578B
CN112035578B CN202011229048.1A CN202011229048A CN112035578B CN 112035578 B CN112035578 B CN 112035578B CN 202011229048 A CN202011229048 A CN 202011229048A CN 112035578 B CN112035578 B CN 112035578B
Authority
CN
China
Prior art keywords
data table
task
slave
core
operated
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
Application number
CN202011229048.1A
Other languages
English (en)
Other versions
CN112035578A (zh
Inventor
杨刚
郑磊
李鸿伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Gushu Polytron Technologies Inc
Original Assignee
Beijing Gushu Polytron Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Gushu Polytron Technologies Inc filed Critical Beijing Gushu Polytron Technologies Inc
Priority to CN202011229048.1A priority Critical patent/CN112035578B/zh
Publication of CN112035578A publication Critical patent/CN112035578A/zh
Application granted granted Critical
Publication of CN112035578B publication Critical patent/CN112035578B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system

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)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了基于众核处理器的数据并行处理方法及装置,应用于单机数据库,每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。一方面,通过对待处理数据表进行排序划分,得到适合于进行并行处理的运算任务,并通过将运算任务分发至单机数据库的众核处理器中,实现了单机数据库处理大数据任务时的并行运算,充分发挥了众核处理器的运算能力;另一方面,在众核间实现了任务的并行处理,消除了并行计算节点间网络数据传输速度的瓶颈,加快了运算进程,提高了任务处理效率。

Description

基于众核处理器的数据并行处理方法及装置
技术领域
本发明涉及分布式数据库库内分析领域,尤其是涉及基于众核处理器的数据并行处理方法及装置。
背景技术
库内分析是指在数据库内部进行科学计算、机器学习、回归分析、聚类分析,通过数据库自定义函数实现相关算法,用户调用数据库自定义函数可直接得到分析结果。数据库自定义函数的语法是基于SQL的,所有的数据调用和计算都可以在数据库内完成,不需要导入和/或导出多个数据库中的数据。用户通过数据库接口调用数据库内置函数,数据库内置函数通过访问底层存储得到数据,并进行计算、返回结果。随着更多业务领域的研究人员涉足人工智能和高性能计算领域,库内分析技术的优势愈加明显,研究人员通过简单学习数据库内置函数的用法,就可以进行机器学习相关算法的使用。
然而随着应用数据量的增长,目前的传统单机数据库的库内分析对数据进行处理,当数据量较大时,处理速度将会降低,不能满足大数据的计算需求;分布式数据库利用多台计算机上的数据库实现并行计算,可以处理数据量较大的任务,但由于在并行计算时,各计算节点间存在大量的网络数据传输,容易达到数据传输速度的瓶颈,影响并行计算速度。
由此可见,目前数据库的库内分析在处理大数据计算任务时,存在着单机数据库处理速度较低,分布式数据库容易在并行计算节点间达到网络数据传输速度的瓶颈,影响并行计算速度,降低任务处理效率的问题。
发明内容
本发明实施例提供了基于众核处理器的数据并行处理方法及装置,用于解决现有技术中的数据库的库内分析在处理大数据计算任务时,存在着单机数据库处理速度较低,分布式数据库容易在并行计算节点间达到网络数据传输速度的瓶颈,影响并行计算速度,降低任务处理效率的问题。
针对以上技术问题,第一方面,本发明实施例提供了一种基于众核处理器的数据并行处理方法,应用于单机数据库,包括:
每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;其中,所述待运算数据表包括以下至少一种:数据库中的原始数据表、根据数据库中的原始数据表运算生成的键值对表;
将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。
第二方面,本发明实施例提供了一种基于众核处理器的数据并行处理装置,应用于单机数据库,包括:
任务划分单元,用于每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;其中,所述待运算数据表包括以下至少一种:数据库中的原始数据表、根据数据库中的原始数据表处理生成的键值对表;
任务分发单元,用于将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。
本发明实施例提供了基于众核处理器的数据并行处理方法及装置,应用于单机数据库,每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。一方面,通过对待处理数据表进行排序划分,得到适合于进行并行处理的运算任务,并通过将运算任务分发至单机数据库的众核处理器中,实现了单机数据库处理大数据任务时的并行运算,充分发挥了众核处理器的运算能力;另一方面,在众核间实现了任务的并行处理,消除了并行计算节点间网络数据传输速度的瓶颈,加快了运算进程,提高了任务处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于众核处理器的数据库服务端的数据处理整体流程示意图;
图2为本发明另一实施例提供的基于众核处理器的数据并行处理方法整体流程示意图;
图3为本发明实施例提供的一种基于众核处理器的数据并行处理方法的流程示意图;
图4为本发明另一实施例提供的数据库内并行计算框架PFMF的流程示意图;
图5为本发明另一实施例提供的数据库服务进程内多核心任务调度进程PMFMC的示意图;
图6为本发明另一实施例提供的数据库服务进程内多核心任务调度进程PMFMC的线程示意图;
图7为本发明另一实施例提供的数据库服务进程内运算任务分发流程示意图;
图8为本发明另一实施例提供的运算任务分发流程示意图;
图9为本发明另一实施例提供的Task Distributor线程及Task Tracker线程同步从核状态的示意图;
图10为本发明另一实施例提供的数据库服务Task Distributor线程同步各个从核加速程序的退出流程示意图;
图11为本发明另一实施例提供的Task Tracker线程的执行流程示意图;
图12为本发明另一实施例提供的一种基于众核处理器的数据并行处理装置示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例得益于开源数据库的可扩展性,为开源数据库服务进程增加了多核任务调度辅助进程,该进程包含三个线程来负责多核任务生成和调度。通过绑定从核加速线程到从核,每个从核心加速程序都具备完整的数据库扫描组件、数据库编译组件,可以同时进行扫描计算。
针对数据库的库内分析,本发明实施例提供了一种数据库内并行计算的PMFM框架系统(Partition-Map-Fetch-Merge,划分-映射-拾取-合并),主要用来在计算集群上对大规模数据集进行并行处理,通过数据划分与映射,将机器学习算法重写为并行算法,并分配到各个计算从核(即空闲从核)。数据库系统通过过滤条件将数据表的数据划分,将计算任务(即运算任务)分配到各个从核加速核心,然后每个节点上会启动相应的程序对相应任务过滤后的数据进行初步处理,生成键值对插入有B-tree索引的表。从核节点上进行进一步处理从而得出最终计算结果并返回给数据库服务进程。本发明实施例通过PMFM系统,对基于众核处理器的数据并行处理方法进行说明。
图1为本发明实施例提供的基于众核处理器的数据库服务端的数据处理整体流程示意图,图2为本发明另一实施例提供的基于众核处理器的数据并行处理方法整体流程示意图。以下根据图2中的内容,对基于众核处理器的数据并行处理方法进行具体说明。
图3为本发明实施例提供的一种基于众核处理器的数据并行处理方法的流程示意图。参见图3,所述基于众核处理器的数据并行处理方法包括:
步骤301:每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;其中,所述待运算数据表包括以下至少一种:数据库中的原始数据表、根据数据库中的原始数据表运算生成的键值对表。
用户向服务器输入指令后,众核处理器中的主核将指令内容解析为SQL查询树,并遍历SQL查询树的每一个节点。若SQL查询树的某个节点为一个数据库中的原始数据表,将该原始数据表作为待运算数据表;若SQL查询树中的多个节点涉及到了不同的原始数据表,则将每个原始数据表都确定为待运算数据表。
进一步地,将原始数据表确定的待运算数据表划分为多个运算任务之后,经过从核并行处理,生成的多个数据表合并成为键值对表,并将键值对表作为新的待运算数据表;其中,根据原始数据表的索引和过滤条件对原始数据表进行划分,通过键值对表的索引对键值对表进行划分。
步骤302:将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。
将待运算数据表进行划分时,众核处理器中的主核会首先获取众核处理器中的处于空闲状态的从核信息;将待运算数据表划分生成的运算任务分发至每个空闲从核中进行处理,以实现不同从核的对运算任务的并行处理,加快运算进程。
本发明实施例提供了基于众核处理器的数据并行处理方法,应用于单机数据库,每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。一方面,通过对待处理数据表进行排序划分,得到适合于进行并行处理的运算任务,并通过将运算任务分发至单机数据库的众核处理器中,实现了单机数据库处理大数据任务时的并行运算,充分发挥了众核处理器的运算能力;另一方面,在众核间实现了任务的并行处理,消除了并行计算节点间网络数据传输速度的瓶颈,加快了运算进程,提高了任务处理效率。
具体的,在PMFM框架系统中,数据库服务和从核加速程序(即从核),以及从核加速程序和从核加速程序之间的数据分发和控制,由主从核间通信接口实现,而不是通过socket。其中,数据库服务以独占核组方式运行,即数据库服务进程以独占方式使用通用主核;计算节点以独占方式使用从核。通用主核上的服务主程序启动后,首先进行存储空间的初始化工作,随后通过系统调用根据启动参数,一次性的将从核上对应类型的计算加速节点程序全部启动。
本发明实施例为数据库服务进程增加了一个辅助进程PMFMC(Partition-Map-Fetch-Merge Controller),负责生成、执行、监控PMFM框架系统相关的任务。PMFM框架总共有为四种任务:Partition Task、Map Task、Fetch Task、Merge Task;其中,PartitionTask的任务是将数据划分成多个部分,Map Task的任务是根据数据源生成key-value对,Fetch Task负责将相同key的key-value对(即键值对)汇总,Merge Task负责最后的计算返回最终结果。
图4为本发明另一实施例提供的数据库内并行计算框架PFMF的流程示意图,图5为本发明另一实施例提供的数据库服务进程内多核心任务调度进程PMFMC的示意图。参见图4、图5,其中,PMFMC主要负责生成工作任务并分发给各个从核加速程序去执行,在分发的过程中根据各个从核加速程序的资源使用情况对任务的分发进行动态的调整,并且能够对各个节点的运行状态进行监控,由三个线程组成:Task Creator、Task Distributor、TaskTracker,分别负责各种任务的生成、分发、监控执行。
图6为本发明另一实施例提供的数据库服务进程内多核心任务调度进程PMFMC的线程示意图,其中:
Task Creator线程负责众核并行任务的生成,根据从核加速程序的状态及函数的定义,封装成Map Task、Fetch Task、Merge Task,然后将其插入到任务队列中。
Task Distributor线程负责任务的分发,该线程从任务队列中获取任务,然后将各个任务依据具体的分发策略将任务分发给各个从核加速程序进行处理,当没有空闲的从核加速程序时该线程循环等待,直到有新的空闲从核可用时在对任务进行分发。当TaskDistributor发现没有任务需要处理时,该线程会等待所有从核加速程序执行完成,并通知每个从核加速程序退出。
Task Tracker线程负责各个从核加速程序状态的监控,对于各个处理任务的从核加速程序,当从核加速程序处理完数据库服务递交给它的任务后发送响应消息给TaskTracker线程,Task Tracker线程将对应线程标记为空闲状态,这样Task Distributor线程发现空闲线程之后会对没有处理完的任务继续进行分发。
利用PMFM框架实现了多种库内分析函数,用户也可以根据自身需求来拓展函数库。PMFM框架提供了三类接口函数,Map函数、Merge函数和PMFM_run函数,定义如下:
Record map_interface(void);
record merge_interface(Datum key,Datum value);
record PMFM_interface(void);
wordcount单词计数程序示例:
Record map_function implements map_interface(void)
{
SetDataSource(a);//a为数据库中的表
for row in table a;
begin;
varchar []array = row.split();
for string in array
begin;
return once string as key,1 as value;
end;
end;
}
Record merge_function implements merge_interface(
Datum key,Datum *value)
{
return key as key,value.getLength() as value;
}
Record PMFM_function implements PMFM_interface()
{
Datum oldkey = null;
Datum [] array = null;
for key,value in table map_function() order by key;
begin;
if oldkey == null;
oldkey = key;
array.add(value);
else
if oldkey == key
array.add(value);
else
return once merge_function(oldkey, array);
oldkey =null;
array.setNull();
end;
}
在上述实施例的基础上,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:
通过遍历用户指令查询树的节点,获取数据库中所述查询树的节点指定的原始数据表,作为第一待运算数据表;
根据所述原始数据表的索引和过滤条件,划分所述第一待运算数据表,并将划分出的每一第一数据表单元作为一个第一运算任务;其中,所述过滤条件至少包括如下一种:空闲状态的从核数量、所述原始数据表的统计信息。
用户向服务器输入指令后,众核处理器的主核将指令内容解析为SQL查询树,并遍历SQL查询树的每一个节点。若SQL查询树的某个节点为一个数据库中的原始数据表,将该原始数据表作为第一待运算数据表,并将该第一待运算数据表划分为多个运算任务;若SQL查询树中涉及到了多个原始数据表,则将多个原始数据表都作为第一待运算数据表并划分为运算任务。
所述过滤条件包括空闲状态的从核数量和原始数据表的统计信息。将第一待运算数据表进行划分时,众核处理器的主核会首先获取众核处理器中的处于空闲状态的从核数量;空闲从核的数量决定了第一待运算任务额数量,即将第一待运算数据表划分为数量与空闲从核的数量相等的第一运算任务,确保每个空闲从核中都可以分发到一个第一运算任务。
原始数据表的统计信息决定了每个第一运算任务中需要运算的数据量,其中统计信息包括原始数据表的直方图信息、原始数据表中一列数据的最值信息或其他信息,本实施例对此不作具体限制。
具体的,例如,基于众核处理器的数据库系统获取的众核处理期中处于空闲状态的从核数量为5个,过滤信息中设置原始数据表的统计信息为数据表中一列数据的最值,且最大值为10,每个第一运算任务中划分的需要运算的数据量为2,即可以将第一运算任务平均划分至5个空闲从核中进行处理,实现了多个从核对运算任务同时进行并行迭代处理的目的。
图7为本发明另一实施例提供的数据库服务进程内运算任务分发流程示意图。参见图7,在PMFM框架系统中,数据库服务将任务分发给各个从核加速程序执行,各个从核加速程序在执行过程中会根据任务的具体情况,通过从核通信进行节点之间消息的传递以及节点之间数据的交换。
具体的,当数据库前端发送的SQL中含有MFMC框架中机器学习函数时,数据库服务进程中的查询编译器新增部分会与PMFMC进程交互,MFMC进程将相应SQL的查询树链表形式发送Task Creator线程,Task Creator线程根据收到的信息生成相应的并行从核任务。从核任务数据结构:
typedef struct MPTask
{
uint64 distribTransactionID;
Query * disQueryTree;
int coreID;//从核编号,由TaskDistributor赋值。
Boolean done;
}MPTask
每个从核加速程序具有完成的数据库扫描组件与相应的计算交换组件。TaskCreator线程生成MP Task结构的多个从核任务,加入到任务队列。
使用当前数据库服务进程的事务ID为MP Task结构中的Distrib TransactionId赋值,这是因为从核加速程序在获得计算数据时需要扫描数据库的表元组,且选择的开源数据库是一种传统关系型数据库,元组并发访问采用多版本并发控制MVCC实现,每个元组有创建时的事务ID和失效时的事务ID,必须要每个从核加速程序具备相同的事务ID来确保各个加速程序访问的数据是同一快照下的,避免出现数据不一致问题。
Task Creator线程需要解析前端传来的查询树,查询树是一棵多叉树,以深度优先遍历的形式访问这颗查询树,如果当前遍历节点是一个数据库表或者是表形式的数据来源(如table map_function),则需为这个表附加一个过滤条件,这是实现并行计算机器学习函数需要做的数据划分基础。过滤条件指定带有B-Tree索引的列,通过B-Tree索引可以以对数级别的复杂度来实现数据库底层文件的划分,如果该表没有B-tree索引的列,则需要在第一次修改查询树时为该表创建一个B-Tree索引,后续再以该表为数据库计算机器学习函数就不需要再创建索引了。这是该流程的代码:
Operation *BtreeCondition = DfsTrav(originalQueryTree,coreNum)
for i in 1.. coreNum
begin;
Query * disQueryTree = copyObject(originalQueryTree)
MPTask * mpTask = TaskCreate(disQueryTree, BtreeCondition[i],distribTransactionID);
addQueue(mpTask)
end;
本实施例中,通过获取空闲从核的数量,确定第一运算任务生成的第一运算任务的数量;通过原始数据表的统计信息,确定每个运算任务中的数据量。根据该任务划分规则,可以给予每个空闲从核分发一个第一运算任务,确保多个空闲从核对第一运算任务的并行处理,提高了第一运算任务的处理效率。
在上述实施例的基础上,所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,包括:
将所述第一运算任务分发到不同的空闲状态的从核上,以通过不同的所述空闲状态的从核并行处理所述第一运算任务,得到与所述原始数据表的每行内容对应的键值对;其中,与所述原始数据表的任一行内容对应的键值对包括根据所述任一行内容的运算结果确定的键值,以及所述任一行内容。
原始数据表经过从核处理后,每一行原始数据表的内容都会生成一个键值对,每个运算任务中都包含多行原始数据表的内容,即每个运算任务都会生成多个键值对。其中,键值为根据所述任一行内容的运算结果确定的值,可以为该行数据内容的一个特征值,也可以为系统为该行数据设定的一个特定值,本实施例对此不作具体限制;每一行原始数据表的内容生成的键值对中还包括该行数据的内容。通过键值对的生成,以使得将原始数据表的内容以键值对表的形式继续进行下一步运算。
本实施例中,第一运算任务经过从核的并行运算,得到键值对表,并将原始数据表的内容以键值对表的形式进行下一步运算;通过生成键值对表,既可以保留原始数据表的全部内容,也可以通过后续的排序、划分过程将原始数据表划分为更易并行处理的运算任务。
在上述实施例的基础上,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,还包括:
获取由与所述原始数据表的每行内容对应的键值对组成的键值对表,根据所述键值对表的索引,对键值对表中的键值进行排序,得到第二待运算数据表;
划分所述第二待运算数据表,将划分出的每一第二数据表单元作为一个第二运算任务;其中,任一第二数据表单元中的每行内容具有相同的键值。
第一运算任务处理完成后,每个第一运算任务会生成多个键值对,将生成的所有键值对合并,生成键值对表。其中,所有键值对的键值在键值对表的同一列中。
根据键值,为键值所在列设置B-tree索引;具体的,可以通过扫描B-tree索引,根据每组键值对中键值的大小重新对键值对表进行排序,例如,键值较小的键值对,排列于键值对表的上部,键值较大的键值对排列于键值对表的下部,生成第二运算数据表。
对排序完成后的键值对表进行划分,将键值相同的键值对表的内容划分在同一个第二数据表单元中,将划分出的每一第二数据表单元作为一个第二运算任务,以使得每个从核处理键值相同的第二运算任务。
进一步地,根据键值划分出的第二运算任务的数量可以小于或等于空闲从核的数量,也可以大于空闲从核的数量。若第二运算任务的数量小于或等于空闲从核的数量,将第二运算任务分发至空闲从核中运行;若第二运算任务的数量大于空闲从核的数量,将第二运算任务分发到所有空闲从核后,通过监控从核对第二运算任务的处理进度,当有从核处于空闲状态是,分发未处理的第二运算任务。
具体的,在PMFM框架系统中,首先以深度优先的方式遍历原始查询树originalQuery,如果当前节点是一个relation节点(表节点),需要检查系统表的元数据信息来判断当前表是否有B-tree索引,如果有则根据核数(即空闲从核的数量)来生成过滤条件,如果没有则新创建一个B-tree索引。DfsTrav函数的功能是遍历原始查询树,根据前端指定的核数来生成过滤条件,返回值是过滤条件的数组,长度为核数。
进一步的,在循环中生成MPTask类型的从核任务,首先深拷贝copyObject原始查询树,返回一个和原始查询树完全一样且不是同内存的查询树,进入Task Create函数,参数为新生成的查询树、DfsTrav函数生成的过滤条件和由数据库服务进程获得的事务号,返回MPTask类型的从核任务,将从核任务MPTask加入任务队列。从核队列位于多核心任务调度器所创建的共享内存,由轻量级锁控制其并发访问。
Map_interface函数中数据划分的基础是数据源表和新增的过滤条件。通过SetDataSource()函数设定数据来源表,之后根据当前数据库的统计信息确定B-tree索引所在列的最大值与最小值,得到当前数据库系统可用从核数,平均划分最值之间的区间来为数据来源表增加过滤条件。SetDataSource()目前只支持调用一次,即只可以设定一次需要划分的数据来源,如果设置多个需要划分的数据来源则会产生笛卡儿积形式的数据。
PMFM框架理论上具有Partition Task、Map Task、Fetch Task以及Merge Task,然而在具体实现上,将Partition Task融入到Map Task,即生成的Map Task中已经含有Partition Task的功能,用户不需要提供数据划分的方式,数据划分的方式由数据库系统根据统计信息和当前运行状态确定。Fetch Task的功能是将相同key的key-value值存储在一起,由Map Task功能可知,Map Task将数据来源划分后,生成指定的key-value,任一从核节点执行Map Task产生的key-value是乱序的,需要将产生的key-value重新排序并分配给各个从核,因此对于实现Map_interface接口函数返回的数据的存储方式,选择存在B-tree索引的临时数据表,为key所在列,设置了B-tree索引,通过B-tree索引可以快速的做到范围扫描,根据B-tree索引的有序性,快速得到根据key排列好的数据,完成Fetch Task中的重新排序操作。
本实施例中,一方面,通过设置B-tree索引,可以更快速的对键值进行扫描并根据键值大小进行排序;另一方面,将相同键值的键值对表的内容划分在同一个第二运算任务中,以使得每个从核处理相同键值的第二运算任务,即每个从核处理具有相同特征值或特定值的原始数据表内容,可以加快任务处理速度,提高众核处理器的并行处理能力。
在上述实施例的基础上,所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,包括:
通过任务分发线程,将划分出的第二运算任务分发至空闲状态的从核进行处理;
其中,所述任务分发线程监控从核对任务的处理进度;若从核完成第二运算任务,将所述从核标记为空闲状态,并向空闲状态的从核分发新的第二运算任务;若从核完成第二运算任务且无新的待处理的第二运算任务,向完成第二运算任务的空闲从核发送退出指令。
基于众核处理器的数据库系统中存在任务分发线程,用于运算任务的分发、从核处理进度的监控,及从核状态的标记。其中,第一运算任务、第二运算任务生成后,被存放于系统的任务队列中;任务分发线程检测到存在待处理的运算任务时且存在空闲从核时,将待处理的运算任务分发至空闲从核中进行处理。若一个从核完成了运算任务,任务分发进程判断该从核为空闲状态,并向空闲状态的从核分发新的待处理的运算任务;若从核完成运算任务且无新的待处理的运算任务,向完成第二运算任务的空闲从核发送退出指令,以使得该从核退出该运算任务的执行,节省从核资源。
图8为本发明另一实施例提供的运算任务分发流程示意图,参见图8,其中,TaskDistributor线程从任务队列中获取待处理的任务,任务队列中如果有待处理的任务需要分发给从核加速程序进行处理,那么就获得下一个空闲的从核节点。在多核任务调度器中有具体的调度策略来对具体的从核加速程序进行选择,若当前有空闲的从核加节点,通过Send函数将任务发送给相应的从核加速节点进行处理,如果当前没有空闲的从核加速节点,则继续获取直到有从核加速节点可用。如果所有待处理的任务全部处理完成,那么多核任务调度器起所有从核加速程序的同步操作,并通知所有从核加速程序退出。
具体的,Map阶段开始之前,Task Creator生成从核任务并加入任务队列,TaskDistributor访问任务队列,通过SEND将任务发送给每个从核节点。从核加速程序得到具有过滤条件的查询树和数据库服务进程的事务ID,执行查询树,将过滤条件所圈定的数据作为一个Map任务,并生成一系列的中间key-value值对并存储于临时表,Task Creator对生成的key-value值对进行划分,每个划分单元作为一个Merge任务,该函数确保相同的key值被划分到一个区域。在每个输出缓冲中,相同key的value在中间处理过程中是排好序的,以此有助于最终的排序过程。PMFMC进程必须对所有的从核进行同步,等待所有的从核都完成之后再开始Merge 阶段。
Merge Task的分配同Map Task相同,也是Task Distributor动态将任务分配给从核。唯一不同的是,Map可以自由的跨任务对键值对进行分发,而Merge必须在一个任务中处理所有相同的key,Merge阶段在从核执行任务时,或许更不容易进行负载平衡,这样动态调度对性能来说也是非常重要的。Merge任务的输出也是按照key排好序的,所有的Merge阶段的输出被合并到一个缓冲中。
本实施例中,通过任务分发线程对运算任务的分发、对从核状态的监控,可以快速地将未处理的运算任务分发给空闲从核,提高运算任务的执行效率;无新的未处理的运算任务时,向从核发送退出指令,使得从核可以处理其他的用户指令任务,最大化利用众核处理器的处理性能。
在上述实施例的基础上,所述基于众核处理器的数据并行处理方法,还包括:
获取从核对所述第二运算任务的处理结果,将所述处理结果保存在同一个内存空间中,根据第二运算任务中的键值,排序并组合所述处理结果,生成完整的用户指令处理结果。
任一第二运算任务中包含的键值对表中的键值相同,将处理结果输出至同一个内存空间中进行存储;进一步地,根据键值对表中键值所在列的B-tree索引,将第二运算任务经过从核处理后得到的处理结果按照键值进行排序及组合,生成完整的用户指令处理结果。
本实施例中,通过将处理结果按照键值进行排序及组合,可以将具有相同键值的处理结果合并,得到更简洁清楚的用户指令处理结果,减少了用户对处理结果的合并总结等步骤,提高了并行处理任务的效率。
在上述实施例的基础上,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:
若所述待运算数据表为数据库中的原始数据表,获取所述原始数据表的索引;其中,所述原始数据表存在索引,直接获取;所述原始数据表无索引,根据原始数据表内容,新建原始数据表的索引;
若所述待运算数据表为键值对表,根据所述键值对表中的键值,新建键值对表的索引。
数据库中的元数据记录着数据库中数据描述性信息,通过查询元数据,可以获得数据库中的一些原始数据表的索引。划分原始数据表生成第一运算任务时,系统在元数据中查询该原始数据表的索引,若元数据中存在该原始数据表的索引,则获取该索引并根据索引及过滤条件,划分该原始数据表;若元数据中无该原始数据表的索引,则根据该原始数据表的任一列内容,新建索引,以对该原始数据表进行划分。
划分键值对表时,该键值对表在元数据中无索引,需对该键值对表新建索引;其中,每个键值对包含一个键值,且键值对表中的所有键值存储在同一列中,即可以根据此列键值的内容,新建该键值对表的索引。
本实施例中,通过获取和/或新建待运算数据表的索引,可以快速对待运算数据表进行范围扫描,并根据该索引对待运算数据表的排序,可以将待运算数据表划分为适于众核处理器中的空闲从核并行处理的运算任务,充分利用众核处理器可以对运算任务进行并行处理的优势,提高了处理任务的效率。
在上述实施例的基础上,所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,还包括:
通过任务监控线程,循环监控从核是否接收到所述退出指令;若所有从核都接到退出指令,所述任务监控线程退出执行,以确保所有从核同步退出对运算任务的并行处理流程。
基于众核处理器的数据库系统中包含有任务监控进程,用于监控任一从核发出的运算任务处理完成的响应,及接收从核发出的退出响应。从核对一个运算任务处理结束后,若任务队列中无新的待处理运算任务,任务分发进程发送退出指令至该从核;从核收到退出指令后,发送退出响应至任务监控进程。其中,任务监控进程循环接收并处理从核发出的退出响应,在每次接收到任一从核的退出响应之前,查看是否收到了所有从核的退出响应;若收到了任一从核发出的退出响应后,未收到除此从核之外的其他所有从核的退出指令,则继续循环接收其他从核的退出响应;若收到了所有节点发出的退出响应,该任务监控线程同步退出执行。
进一步的,任务监控进程接收到从核发出的响应后判定响应的类型,若从核发出的为对于运算任务处理完成的响应,将该从核标记为空闲状态;若从核发出的为对于节点的退出响应,则标记该从核为退出状态。
具体的,对于并行处理来说各个节点必须采取一定的消息策略,该PMFM框架主要涉及两种消息:一种是数据库服务和从核加速程序之间的消息;另一种是各个从核加速程序之间的消息。
数据库服务之间的同步主要使用的是Send和Recv两个函数来进行消息的收发,下表所示为两个函数的接口声明:
Figure 677649DEST_PATH_IMAGE001
其中,count为发送的指定数据类型个数,buf为发送缓冲区,dest为发送的目的节点,tag起到对消息进行区分的作用,comm为消息的通信子,其中使用Send和Recv的两个进程必须处于同一个进程组中。
图9为本发明另一实施例提供的Task Distributor线程及Task Tracker线程同步从核状态的示意图,图10为本发明另一实施例提供的数据库服务Task Distributor线程同步各个从核加速程序的退出流程示意图,参见图9、图10,其中在Task Distributor分发线程将所有任务分发完成之后,会获取当前空闲的从核加速程序并向其发送退出执行的命令,然后数据库服务给对应从核加速程序做一个标记表明已经向其发送过退出命令。循环执行上述步骤直到给所有的从核加速程序都发送完退出命令,该线程退出执行。
图11为本发明另一实施例提供的Task Tracker线程的执行流程示意图。参见图11,图中类型0表示任务处理完成响应消息,类型1表示节点的退出响应消息。TaskDistributor线程负责任务的分发和退出命令的发送,而Task Tracker线程只是负责监控各个节点的状态并设置相应的标志位,该Task Tracker线程只在所有从核加速程序都退出的时候才会退出。
进一步的,Task Tracker线程循环接收并处理消息,在每次接收消息之前查看是否收到了所有从核加速程序的退出消息,如果所有节点都退出了那么该线程也会退出执行。接收到消息后判定消息的类型,对于任务处理完成的响应消息将对应的从核加速程序设置为空闲状态,对于节点的退出响应消息标记该节点为退出状态即可。其中,各个从核加速程序给Task Tracker监控线程发送的消息格式有两个字段类型,任一个都是一个INT类型,消息类型一共有两个值0或1,消息来源字段表明消息发送方的ID。
本实施例中,通过任务监控进程,监控任一从核发出的运算任务处理完成的响应,及接收从核发出的退出响应;并通过循环接收并处理所有从核发出的退出响应,以使得处理运算任务的所有从核可以同时退出并行执行流程,确保处理该用户指令时的所有从核在该用户指令处理结束之前,不会处理其他用户指令,保证了对用户指令处理结果的完整性及正确性。
在上述实施例的基础上,所述基于众核处理器的数据并行处理方法,还包括:
若从核处理运算任务的处理时间超过处理时间阈值,判定所述从核处理所述运算任务失败,将所述运算任务分发至所述从核之外的空闲状态的从核重新处理。
基于众核处理器的数据库系统通过监控从核处理运算任务的处理时间来判断从核处理运算任务时是否发生错误;其中,若处理时间大于设定的处理时间阈值,则判定该从核处理运算任务时发生错误。其中,处理时间阈值可以人为根据需求设定,也可以根据其他相似运算任务的平均处理时间确定,本实施例对此不作具体限制。
在错误被检测出来后,数据库系统重新将该运算任务分发至其他空闲从核进行处理;同时,该运算任务当前可能仍然在发生错误的从核上继续运行,因此需要将接收到该运算任务的空闲从核处理完成的处理结果输出至重新分配的内存地址中,避免与发生错误的从核数据的处理结果冲突。当所有的第一运算任务、第二运算任务执行完成后,服务器系统将所有正确的处理结果进行合并及整合。
进一步的,在错误被检测出来后,数据库系统重新将该运算任务分发至其他空闲从核进行处理,若发生错误的从核已经处理完成该运算任务,则任务分发进程可以将其他的运算任务重新分发至此该发生错误的从核,当该从核处理其他运算任务时同样发生错误,则数据库系统判定此从核出现问题,后续不再将其他运算任务分发至此从核中处理。
具体的,在PMFM框架系统中,数据库运行系统提供了在Map和Merge阶段的临时错误容忍支持,并提供了有限的错误检测的支持。数据库运行系统通过任务执行时间的延迟来检测错误,如果一个工作从核没有在一个合理的时间完成一个任务,那么就假定当前从核执行失败。延迟时间的大小根据相似任务在其它工作从核上的运行时间来衡量。
一个错误或许造成一个任务生成不正确的或者不完整数据,而不是阻塞执行。数据库运行系统不能完全依靠自身检测这种问题,为了克服这个缺点,应该将数据库运行系统与其它己知的错误检测技术相结合。数据库运行系统能够提供一些信息来简化错误检测机制。例如,所使用的输入输出缓冲的内存地址范围是已知,数据库运行系统能够控制操作哪些地址被考虑是安全的,操作哪些地址能够发出异常信号,通知操作系统或错误检测进程当前出现内存访问错误,以此来对错误的发生进行检测和后期的恢复。
在错误被检测或者预期出来后,数据库系统应该重新执行该任务。因为原始的任务当前可能仍然在运行,所以新运行任务的输出缓冲区应该重新分配以避免冲突。当两阶段的任务执行完成后,运行时系统将任务输出结果进行Merge整合。
PMFMC开始假定错误是随机的,仍然将重新执行的任务分配给之前的从核心,当该任务在同一个从核连续失败若干次之后,调度器假定当前从核出现问题,后续则不在将工作任务分配给该从核。
本实施例中,通过监控从核处理运算任务的处理时间来判断从核处理运算任务时是否发生错误。当从核发生错误时,将运算任务分发至其他从核处理,保证了运算任务的快速处理;将处理运算任务输出的处理结果与发生错误的从核输出的处理结果分开存储,可以确保最终生成的用户指令处理结果的正确性。
以下使用具体的基于众核处理器的数据库中机器学习的实施例对该基于众核处理器的数据并行处理方法进行说明。
电商平台需要知道消费者的喜好,从而推荐给消费者可能会买的东西;商场中货品的摆放位置,也取决于商品的相关程度。
假设数据库内有goodsList商品清单数据表:
Figure 972496DEST_PATH_IMAGE002
sellList销售记录数据表:
Figure 448476DEST_PATH_IMAGE003
数据库内有两张数据表,goodsList记录商品编号和名称,sellList记录顾客销售记录编号和购买的物品,比如sellList中第一条记录表示消费记录ID是1,购买的商品是牛奶和面包。Apriori算法描述了如何确定商品的相关程度。
其中,Apriori算法提出了两个定义:
支持度:数据集中包含该项集所占的比例,可以定义最小支持度;
置信度:P(A->B) = P(A,B) / P (A);
表示在A事件发生的情况下,发生B事件的概率为A、B同时发生的概率除以A发生的概率, 可以定义最小置信度。
Apriori算法通过置信度来表示数据之间的关联程度。对apriori做一些修改来计算出物品之间的相关程度。PMFM框架系统中相关函数定义如下:
Record map_function implements map_interface(void)
{
SetDataSource(sellList);//设置sellList为数据源
Set cursor1 for ID,record in table sellList;//设置游标
for ID,record in cursor1;//扫描sellList
begin;
varchar []array = record.split(‘,’);//以逗号为分隔符分割数据
array.sort();//对一行数据排序
for id in array
begin;
return once id as key, record as value;
end;
end;
}
Record merge_function1 implements merge_interface(
Datum key,Datum *value)
{
If value.length()/sellList.length() >=0.9
return key as key, value.length() as value;
}
Record merge_function2 implements merge_interface(
Datum key,Datum *value)
{
int count = 0;
for tkey in merge_func1_table
begin;
for array in value
begin;
if tkey != key and tkey is_number_of array;
count ++;
end;
if count/value.length() > 0.6
return key+’->’+key+’,’+tkey as key, count/value.length() as value;
end;
}
Record PMFM_function implements PMFM_interface()
{
Datum oldkey = null;
Datum [] array = null;
for key,value in table map_function() order by key;//对map_function()产生的结果顺序扫描且排序
begin;
if oldkey == null;
oldkey = key;
array.add(value);
else
if oldkey == key
array.add(value);
else
insert into merge_func1_table select * from merge_function1(oldkey,array);
return merge_function2(oldkey,array);
oldkey =null;
array.setNull();
end;
}
其中,map_function实现了统计一行数据中1-项集与相关2-项集的信息,以record中的值作为key,1作为value代表出现了一次。Merge_function1将支持度设置为0.8,计算频繁1-项集,Merge_function2 将置信度设置为0.6计算最终结果。PMFM_function调用Merge_function1和Merge_function2返回最终结果。
前端调用:
Select * from PMFM_function();
数据库编译系统发现调用PMFM_function,将PMFMC进程发送该函数的查询树链表。TaskCreator线程根据sellList中的ID列添加过滤条件,统计信息显示最小值为1,最大值为5,使用两个从核进行计算,于是两个从核的MapTask查询树中游标设置被修改为:
Set cursor1 for ID,record in table sellList where ID <4 and ID >=1;
Set cursor1 for ID,record in table sellList where ID <6 and ID >=4;
Task Creator将两个任务插入等待队列并通知Task Distributor,TaskDistributor寻找两个空闲从核,并将语句通过Send函数发送给从核加速程序。
从核1Map Task产生的数据如下:
Figure 643703DEST_PATH_IMAGE004
从核2 Map Task产生的数据如下:
Figure 196038DEST_PATH_IMAGE005
Map Task产生的数据默认插入以Key为主键的临时表中,插入完成后 ,从核与Task Tracker线程通信,Task Tracer线程通知Task Creator生成Merge Task,对于MergeTask的数据划分,继续采取和Map Task相同的原则:
for key,value in table map_function() where key < 4 and key >= 1order by key;
for key,value in table map_function() where key < 6 and key >= 4order by key;
借助B-Tree索引的有序性,使用B-tree索引扫描,可以快速得到符合过滤条件的元组。
首先产生对应Merge_function1的Merge Task,该函数合并产生频繁1-项集,将支持度置为0.8,产生的数据保存在merge_func1_table中,由于不是Map_function的返回值,所以不会自动保存,需要手动指定insert…select语句。最后map_function产生的临时表中的数据为:
Figure 494294DEST_PATH_IMAGE006
merge_func1_table中的数据为:
Figure 508386DEST_PATH_IMAGE007
可以看到,当设置支持度为1时,有两个key满足条件。由Task Tracker监督所有从核完成MergeTask1时,才通知Task Creator生成MergeFunction2对应的MergeTask2。MergeFunction2计算1-项集推出2-项集的可信程度,设置置信度为0.6。MergeTask2最终计算得出
P{1->(1,2)}= P{2->(1,2)}=5/5=1
最后数据库清理所有由PMFM框架产生的数据,数据库返回给前端的结果形式为:
1->(1,2) 100%
2->(1,2) 100%
可以得到,结果牛奶和面包关联性很强,即通过现有表数据计算得出,买面包的人一定会买牛奶,因此商场可以选择将面包和牛奶放到比较接近的位置。
另一方面,本发明实施例还提供了一种基于众核处理器的数据并行处理装置,应用于单机数据库,包括任务划分单元和任务分发单元。参见图12,其中:
任务划分单元1201,用于每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;其中,所述待运算数据表包括以下至少一种:数据库中的原始数据表、根据数据库中的原始数据表处理生成的键值对表;
任务分发单元1202,用于将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。
本实施例提供的基于众核处理器的数据并行处理装置,适用于上述基于众核处理器的数据并行处理方法,此处不再赘述。
本发明实施例提供了基于众核处理器的数据并行处理装置,应用于单机数据库,每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务。一方面,通过对待处理数据表进行排序划分,得到适合于进行并行处理的运算任务,并通过将运算任务分发至单机数据库的众核处理器中,实现了单机数据库处理大数据任务时的并行运算,充分发挥了众核处理器的运算能力;另一方面,在众核间实现了任务的并行处理,消除了并行计算节点间网络数据传输速度的瓶颈,加快了运算进程,提高了任务处理效率。
进一步地,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:
通过遍历用户指令查询树的节点,获取数据库中所述查询树的节点指定的原始数据表,作为第一待运算数据表;
根据所述原始数据表的索引和过滤条件,划分所述第一待运算数据表,并将划分出的每一第一数据表单元作为一个第一运算任务;其中,所述过滤条件至少包括如下一种:空闲状态的从核数量、所述原始数据表的统计信息。
进一步地,所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,包括:
将所述第一运算任务分发到不同的空闲状态的从核上,以通过不同的所述空闲状态的从核并行处理所述第一运算任务,得到与所述原始数据表的每行内容对应的键值对;其中,与所述原始数据表的任一行内容对应的键值对包括根据所述任一行内容的运算结果确定的键值,以及所述任一行内容。
进一步地,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,还包括:
获取由与所述原始数据表的每行内容对应的键值对组成的键值对表,根据所述键值对表的索引,对键值对表中的键值进行排序,得到第二待运算数据表;
划分所述第二待运算数据表,将划分出的每一第二数据表单元作为一个第二运算任务;其中,任一第二数据表单元中的每行内容具有相同的键值。
进一步地,所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,包括:
通过任务分发线程,将划分出的第二运算任务分发至空闲状态的从核进行处理;
其中,所述任务分发线程监控从核对任务的处理进度;若从核完成第二运算任务,将所述从核标记为空闲状态,并向空闲状态的从核分发新的第二运算任务;若从核完成第二运算任务且无新的待处理的第二运算任务,向完成第二运算任务的空闲从核发送退出指令。
进一步地,所述基于众核处理器的数据并行处理方法,还包括:
获取从核对所述第二运算任务的处理结果,将所述处理结果保存在同一个内存空间中,根据第二运算任务中的键值,排序并组合所述处理结果,生成完整的用户指令处理结果。
进一步地,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:
若所述待运算数据表为数据库中的原始数据表,获取所述原始数据表的索引;其中,所述原始数据表存在索引,直接获取;所述原始数据表无索引,根据原始数据表内容,新建原始数据表的索引;
若所述待运算数据表为键值对表,根据所述键值对表中的键值,新建键值对表的索引。
进一步地,所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,还包括:
通过任务监控线程,循环监控从核是否接收到所述退出指令;若所有从核都接到退出指令,所述任务监控线程退出执行,以确保所有从核同步退出对运算任务的并行处理流程。
进一步地,所述的基于众核处理器的数据并行处理方法,还包括:
若从核处理运算任务的处理时间超过处理时间阈值,判定所述从核处理所述运算任务失败,将所述运算任务分发至所述从核之外的空闲状态的从核重新处理。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (5)

1.一种基于众核处理器的数据并行处理方法,其特征在于,应用于单机数据库,包括:
每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;其中,所述待运算数据表包括:数据库中的原始数据表、根据数据库中的原始数据表运算生成的键值对表;
所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:通过遍历用户指令查询树的节点,获取数据库中所述查询树的节点指定的原始数据表,作为第一待运算数据表;根据所述原始数据表的索引和过滤条件,划分所述第一待运算数据表,并将划分出的每一第一数据表单元作为一个第一运算任务;其中,所述过滤条件至少包括如下一种:空闲状态的从核数量、所述原始数据表的统计信息;
将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务;
所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,包括:
将所述第一运算任务分发到不同的空闲状态的从核上,以通过不同的所述空闲状态的从核并行处理所述第一运算任务,得到与所述原始数据表的每行内容对应的键值对;其中,与所述原始数据表的任一行内容对应的键值对包括根据所述任一行内容的运算结果确定的键值,以及所述任一行内容;
所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,还包括:
获取由与所述原始数据表的每行内容对应的键值对组成的键值对表,根据所述键值对表的索引,对键值对表中的键值进行排序,得到第二待运算数据表;
划分所述第二待运算数据表,将划分出的每一第二数据表单元作为一个第二运算任务;其中,任一第二数据表单元中的每行内容具有相同的键值;
所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,还包括:
通过任务分发线程,将划分出的第二运算任务分发至空闲状态的从核进行处理;
其中,所述任务分发线程监控从核对任务的处理进度;若从核完成第二运算任务,将所述从核标记为空闲状态,并向空闲状态的从核分发新的第二运算任务;若从核完成第二运算任务且无新的待处理的第二运算任务,向完成第二运算任务的空闲从核发送退出指令;
通过任务监控线程,循环监控从核是否接收到所述退出指令;若所有从核都接到退出指令,所述任务监控线程退出执行,以确保所有从核同步退出对运算任务的并行处理流程。
2.根据权利要求1所述的基于众核处理器的数据并行处理方法,其特征在于,还包括:
获取从核对所述第二运算任务的处理结果,将所述处理结果保存在同一个内存空间中,根据第二运算任务中的键值,排序并组合所述处理结果,生成完整的用户指令处理结果。
3.根据权利要求1所述的基于众核处理器的数据并行处理方法,其特征在于,所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:
若所述待运算数据表为数据库中的原始数据表,获取所述原始数据表的索引;其中,所述原始数据表存在索引,直接获取;所述原始数据包无索引,根据原始数据表内容,新建原始数据表的索引;
若所述待运算数据表为键值对表,根据所述键值对表中的键值,新建键值对表的索引。
4.根据权利要求1所述的基于众核处理器的数据并行处理方法,其特征在于,还包括:
若从核处理运算任务的处理时间超过处理时间阈值,判定所述从核处理所述运算任务失败,将所述运算任务分发至所述从核之外的空闲状态的从核重新处理。
5.一种基于众核处理器的数据并行处理装置,其特征在于,应用于单机数据库,包括:
任务划分单元,用于每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务;其中,所述待运算数据表包括:数据库中的原始数据表、根据数据库中的原始数据表处理生成的键值对表;
所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,包括:通过遍历用户指令查询树的节点,获取数据库中所述查询树的节点指定的原始数据表,作为第一待运算数据表;根据所述原始数据表的索引和过滤条件,划分所述第一待运算数据表,并将划分出的每一第一数据表单元作为一个第一运算任务;其中,所述过滤条件至少包括如下一种:空闲状态的从核数量、所述原始数据表的统计信息;
任务分发单元,用于将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务;
所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,包括:
将所述第一运算任务分发到不同的空闲状态的从核上,以通过不同的所述空闲状态的从核并行处理所述第一运算任务,得到与所述原始数据表的每行内容对应的键值对;其中,与所述原始数据表的任一行内容对应的键值对包括根据所述任一行内容的运算结果确定的键值,以及所述任一行内容;
所述每次确定待运算数据表后,对所述待运算数据表进行划分得到多个运算任务,还包括:
获取由与所述原始数据表的每行内容对应的键值对组成的键值对表,根据所述键值对表的索引,对键值对表中的键值进行排序,得到第二待运算数据表;
划分所述第二待运算数据表,将划分出的每一第二数据表单元作为一个第二运算任务;其中,任一第二数据表单元中的每行内容具有相同的键值;
所述将划分的运算任务分发至众核处理器的从核中,以通过不同从核并行处理运算任务,还包括:
通过任务分发线程,将划分出的第二运算任务分发至空闲状态的从核进行处理;
其中,所述任务分发线程监控从核对任务的处理进度;若从核完成第二运算任务,将所述从核标记为空闲状态,并向空闲状态的从核分发新的第二运算任务;若从核完成第二运算任务且无新的待处理的第二运算任务,向完成第二运算任务的空闲从核发送退出指令;
通过任务监控线程,循环监控从核是否接收到所述退出指令;若所有从核都接到退出指令,所述任务监控线程退出执行,以确保所有从核同步退出对运算任务的并行处理流程。
CN202011229048.1A 2020-11-06 2020-11-06 基于众核处理器的数据并行处理方法及装置 Active CN112035578B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011229048.1A CN112035578B (zh) 2020-11-06 2020-11-06 基于众核处理器的数据并行处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011229048.1A CN112035578B (zh) 2020-11-06 2020-11-06 基于众核处理器的数据并行处理方法及装置

Publications (2)

Publication Number Publication Date
CN112035578A CN112035578A (zh) 2020-12-04
CN112035578B true CN112035578B (zh) 2021-03-30

Family

ID=73572809

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011229048.1A Active CN112035578B (zh) 2020-11-06 2020-11-06 基于众核处理器的数据并行处理方法及装置

Country Status (1)

Country Link
CN (1) CN112035578B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114546640A (zh) * 2022-02-14 2022-05-27 北京灵汐科技有限公司 数据处理方法、装置、芯片及介质
CN116107714A (zh) * 2023-02-02 2023-05-12 北京天云融创软件技术有限公司 一种运行mpi任务的方法和装置
CN116485691B (zh) * 2023-04-25 2024-01-26 西南石油大学 一种基于直方图均衡优化算法的图像处理方法及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102446158B (zh) * 2010-10-12 2013-09-18 无锡江南计算技术研究所 多核处理器及多核处理器组
CN103377032A (zh) * 2012-04-11 2013-10-30 浙江大学 一种基于异构多核芯片的细粒度科学计算并行处理装置
US8762407B2 (en) * 2012-04-17 2014-06-24 Renmin University Of China Concurrent OLAP-oriented database query processing method
CN105487634B (zh) * 2015-11-24 2018-04-10 无锡江南计算技术研究所 一种面向异构众核芯片的量化功耗控制方法
CN106598731B (zh) * 2016-12-01 2019-11-19 上海交通大学 基于异构多核架构的运行时系统及其控制方法
CN111221827B (zh) * 2020-01-15 2023-05-26 成都量子象云计算科技有限公司 基于图形处理器的数据库表连接方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN112035578A (zh) 2020-12-04

Similar Documents

Publication Publication Date Title
US10831758B2 (en) Partitioning and repartitioning for data parallel operations
CN112035578B (zh) 基于众核处理器的数据并行处理方法及装置
Wang et al. {RStream}: Marrying relational algebra with streaming for efficient graph mining on a single machine
US11960464B2 (en) Customer-related partitioning of journal-based storage systems
Ding et al. Improving optimistic concurrency control through transaction batching and operation reordering
US7984043B1 (en) System and method for distributed query processing using configuration-independent query plans
US7779008B2 (en) Parallel partition-wise aggregation
US6505187B1 (en) Computing multiple order-based functions in a parallel processing database system
Quamar et al. SWORD: scalable workload-aware data placement for transactional workloads
USRE42664E1 (en) Method and apparatus for implementing parallel operations in a database management system
US10346434B1 (en) Partitioned data materialization in journal-based storage systems
Pavlo et al. Skew-aware automatic database partitioning in shared-nothing, parallel OLTP systems
Yang et al. Osprey: Implementing MapReduce-style fault tolerance in a shared-nothing distributed database
US6910032B2 (en) Parallel database query processing for non-uniform data sources via buffered access
EP1107135B1 (en) Parallel optimized triggers in parallel processing database systems
CN104063486A (zh) 一种大数据分布式存储方法和系统
Gruenheid et al. Query optimization using column statistics in hive
Costea et al. VectorH: taking SQL-on-Hadoop to the next level
Wang et al. Elastic pipelining in an in-memory database cluster
Margara et al. A model and survey of distributed data-intensive systems
US9870399B1 (en) Processing column-partitioned data for row-based operations in a database system
Lin et al. Anser: Adaptive Information Sharing Framework of AnalyticDB
US11789922B1 (en) Admitting for performance ordered operations of atomic transactions across a distributed database
Durand et al. Piecing Together Large Puzzles, Efficiently: Towards Scalable Loading Into Graph Database Systems.
Schumacher Benchmarking NewSQL Database VoltDB

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