CN116756150B - 一种Mpp数据库大表关联加速方法 - Google Patents
一种Mpp数据库大表关联加速方法 Download PDFInfo
- Publication number
- CN116756150B CN116756150B CN202311030003.5A CN202311030003A CN116756150B CN 116756150 B CN116756150 B CN 116756150B CN 202311030003 A CN202311030003 A CN 202311030003A CN 116756150 B CN116756150 B CN 116756150B
- Authority
- CN
- China
- Prior art keywords
- data
- sql
- node
- window
- parallel
- 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
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000001133 acceleration Effects 0.000 title claims abstract description 12
- 238000004364 calculation method Methods 0.000 claims abstract description 81
- 238000005192 partition Methods 0.000 claims abstract description 17
- 238000004458 analytical method Methods 0.000 claims abstract description 13
- 238000011068 loading method Methods 0.000 claims description 43
- 230000008569 process Effects 0.000 claims description 41
- 230000002776 aggregation Effects 0.000 claims description 26
- 238000004220 aggregation Methods 0.000 claims description 26
- 230000006870 function Effects 0.000 claims description 11
- 241001522296 Erithacus rubecula Species 0.000 claims description 4
- 230000001568 sexual effect Effects 0.000 claims description 4
- 230000000977 initiatory effect Effects 0.000 claims 2
- 239000012634 fragment Substances 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 238000001914 filtration Methods 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000012098 association analyses Methods 0.000 description 2
- 239000003999 initiator Substances 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000007619 statistical method Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 238000012356 Product development Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000036760 body temperature Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- 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
- G06F16/244—Grouping and aggregation
-
- 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
- G06F16/2445—Data retrieval commands; View definitions
-
- 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/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- 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/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- 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/248—Presentation of query results
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种Mpp数据库大表关联加速方法,包括:使用ANTLR工具对输入的SQL进行解析,通过构建抽象语法树,识别出SQL语句中的表、字段以及表之间的关联关系;基于解析的情况,以及计算资源的状态,制定数据拆分规则;根据制定的拆分规则将数据分配到各分布式节点,并进行窗口式的存储;数据加载后,构建执行区域并进行SQL计算;分区执行的SQL结果集进行汇聚以获取最终结果;通过边计算边返回的方式实现数据快速返回。本发明通过分析当前的SQL语句,找到大表关联的主要关系,并根据此来拆分数据。这种方法将原本的大表数据划分为无数个小表,能利用小表计算分析的性能优势,快速高效地执行完整关联计算SQL。
Description
技术领域
本发明涉及大数据处理技术领域,具体涉及一种Mpp数据库大表关联加速方法。
背景技术
在数据大爆炸的时代,数据产生的速度和数量持续增长,而每份数据都具有其独特的“温度”或“热度”,即其价值和实时性。随着数据的老化,其“体温”或价值将下降,而新鲜的数据则具有更高的价值。为了充分利用这些数据,需要进行数据汇聚和清洗处理,通常通过ETL(提取、转换、加载)过程实现。然而,在大数据环境下,如何从大量的数据表中快速获取所需的数据,并进行各种数据组合分析,已成为一个挑战。
当前存在的解决方案主要有:1)利用MPP(大规模并行处理)数据库的分析计算能力和调度任务进行计算,将结果生成到新的表中;2)使用数据库存储过程和定时任务,在数据库后端进行计算生成临时表,然后显示编排数据;3)使用分布式计算引擎,如Spark,将数据拆分处理,然后进行数据汇聚,将结果写入指定的表。但这些方法存在问题,包括耗时长、占用资源多、需要先对数据进行预处理等。
此外,数据质量实时探查也是一个重要的需求,用户需要能够即时了解数据质量情况,以便决定是否使用该数据进行进一步处理。例如,快速查看采集的数据质量,查看订单数据与订单完成数据的即时性等。现有的技术主要依赖于MPP数据库进行大表关联计算分析,但当两个大数据表直接关联时,往往不能及时返回数据,耗时较长。并且,如果需要提前对多个大数据表进行处理,将其变为大数据表与小数据表的关联模式,这需要更多的数据预处理步骤,处理成本高,运行时间长,无法满足业务场景的实时响应要求。
总的来说,现有的技术解决方案在处理大数据表关联计算和实时数据质量探查时,存在耗时长、成本高、易出错等问题,无法满足大数据环境下的实时性和准确性需求。因此,需要一种新的解决方案来改善这种情况。
发明内容
为克服现有技术的不足,本发明提出一种Mpp数据库大表关联加速方法,通过智能的数据分片技术,数据第一性关联的原则,将所有的数据被水平划分为若干个数据分片(Tablet),每个 Tablet 包含若干数据行,实现具有相同关联原则的数据被分到同一个分片区域,然后再将关联的语句分发到每个分片的区域,关联计算完成后进行数据的汇聚,将多个分片区域的数据进行逐层汇聚,流式返回数据。从大表关联数据出发,将大表根据规则拆分成多个小表进行数据关联计算,基于生成边计算,分布式并发计算的能力,实现亿级大表关联在秒级内返回逐渐返回记录的能力,提升用户用数的感知。
为实现上述目的,本发明提供提出一种Mpp数据库大表关联加速方法,包括:
步骤S1:使用ANTLR工具对输入的SQL进行解析,通过构建抽象语法树(AST),识别出SQL语句中的表、字段以及表之间的关联关系;
步骤S2:基于解析的SQL语句和数据源的情况,以及计算资源的状态,制定数据拆分规则;
步骤S3:根据制定的拆分规则将数据分配到各分布式节点,并进行窗口式的存储;
步骤S4:数据加载后,构建执行区域并进行SQL计算;
步骤S5:分区执行的SQL结果集进行汇聚以获取最终结果;
步骤S6:通过边计算边返回的方式实现数据快速返回。
进一步地,步骤S1具体如下:
步骤S11:定义SQL语法规则;
步骤S12:根据SQL语法规则,使用ANTLR生成对应的解析器代码,解析器代码将能够解析输入的SQL语句,并将其转换成对应的语法树;
步骤S13:解析输入的SQL语句;
步骤S14:获取关联的表;
步骤S15:获取关联关系条件。
进一步地,步骤S2具体如下:
步骤S21:计算出单个节点同时计算的并行数;
步骤S22:根据并行数来计算出各节点的数据量与各节点单个窗口的数据量;
步骤S23:根据节点、并行数与单个窗口的数据量等参数制定数据拆分的规则;
步骤S24:实施数据拆分和加载过程;
步骤S25:数据路由到各个节点,则将数据进一步拆分为多个窗口,每个窗口的大小等于节点的数据范围除以并行数,然后,根据每个并行窗口可以加载的数据量,将数据分配给各个窗口;对于关联的数据,根据第一性关联字段的值进行加载,其中数据窗口的大小不受记录数的限制。
进一步地,步骤S3具体如下:
步骤S31:计算单节点的数据加载并行数;
步骤S32:计算最小化连接,即初始化连接数;
步骤S33:各节点数据并行异步加载;
步骤S34:并行异步加载过程连接请求实现。
进一步地,步骤S4具体如下:
步骤S41:初始化并行执行区;
步骤S42:各节点的分区窗口使用本地的SparkSQL作为查询计算引擎,查询已分区的窗口数据。同时,如果需要,可以在查询计算引擎中增加钩子函数,此函数在SQL执行完后调用;
步骤S43:在原有关联SQL的基础上,增加where条件来限定计算范围;
步骤S44:使用SparkSQL本地引擎在本地划分的小数据区并行执行拼接好的SQL语句,执行完成的结果存储到新的窗口;
步骤S45:并行执行过程中外部节点关联;
步骤S46:各并行执行完成SQL后,结果数据存储到新窗口中,形成宽表,并在SQL执行完成后,调用钩子函数对新窗口进行状态标识;
步骤S47:根据数据量自动拆分。
进一步地,步骤S5包括:
步骤S51:获取汇聚的数据;
步骤S52:计算汇聚的并行数;
步骤S53:计算各并行读取窗口数;
步骤S54:据并行数,合并每个并行已标识的窗口的数,将合并的窗口变成一个窗口的数据;
步骤S55:自动调整计算分析sql;
步骤S56:并行执行调整后的sql;
步骤S57:执行结果返回;
步骤S58:各节点合并执行结果。
进一步地,步骤S6包括:
步骤S61:对单个大表进行操作;
步骤S62:将复杂的关联SQL转化为对单个大表的操作;
步骤S63:根据原始SQL是否包含聚合计算,选择不同的处理方式;
步骤S64:异步返回数据。
进一步地,步骤S21计算公式如下:
;
式中:Ncpu : CPU 核心数;
Ucpu : CPU 利用率,0-100%;
W : I/O等待时间;
C : CPU 运行时间;
W/C: CPU 运算时间比率;
0.9 :由于计算过程没有考虑到一些损耗,需要再考虑10%的损耗,即乘0.9;
步骤S22计算公式如下:
;
式中:
records:各节点的数据量的最佳值;
MIPS:每秒执行多少百万条指令;
MIPS/1000: 表示毫秒级内的百万条指令;
Sql指令数:表示一条sql可转换成指令的个数;
200:表示200毫秒;
单个窗口数据量公式:
;
式中:
wrecords:单个窗口数据量的最佳值;
records: 各节点的数据量的最佳值。
进一步地,步骤S31所用公式如下:
;
式中:
关联次数:表示sql中同第一性条件关联的次数;
pNum:单节点数据加载的并行数;
步骤S32公式如下:
;
式中:
iConnOps:各节点每个窗口最小连接数;
max:最大值;
min:最小值;
aCpu:各节点各自可用的cpu核数;
aMem:各节点各自可用的内存大小,单位为kb;
records:各节点的数据量的最佳值;
pNum:单节点并行数;
总的初始化连接数为:
;
式中:
for:表示轮循从1到n个节点;
i:变量表示从第1个节点开始到第n个节点;
n:表示最后一个节数;
getNwIConnOps:获取第i个节点的每个窗口的初始化连接数;
getNParallet:获取第i个节点的并行窗口数;
totalIConnsOps:表示总的初始化连接数。
进一步地,步骤S33具体包括:首先在并行加载端开启多进程、多线程模式,每个线程分别发起异步请求;然后从连接池获取数据源的连接,如果连接池没有获取数据源的连接,则按需创建连接;根据请求并行开启多线程的数据加载任务,各任务依据设定好的规则进行数据的拆分加载,将原本大的数据拆分成多个小任务形式并行异步执行;多任务执行后,将结果存储到指定的缓冲区,并通知发启端,明确任务已执行完成;发启端通过异步的方式从缓冲区获取加载的数据。
与现有技术相比,本发明的有益效果是:
1.本发明提供了一种Mpp数据库大表关联加速方法,通过分析当前的SQL语句,找到大表关联的主要关系,即第一性关联字段,并根据此字段来拆分数据。这种方法将原本的大表数据划分为无数个小表,能利用小表计算分析的性能优势,快速高效地执行完整关联计算SQL。
2.本发明提供了一种Mpp数据库大表关联加速方法,将原本关联的表的数据转换成单表形式,再利用MPP数据库针对单个大表高效快速处理的特性进行分布式多并发计算,从而有效利用了系统资源,提高了计算效率。
3.本发明提供了一种Mpp数据库大表关联加速方法,可以保证亿级大表关联计算在秒级内返回结果,满足了业务场景的实时性要求。
4.本发明提供了一种Mpp数据库大表关联加速方法,传统的方法需要将大表关联拆分成多个场景,然后通过单个大表关联小表完成,这个开发成本高,而且不能完全达到业务效果。而本发明的方法能避免这种情况,降低了开发成本。
5.本发明提供了一种Mpp数据库大表关联加速方法,通过合理分配和使用资源,本发明的方法能避免因系统资源问题导致的执行失败,提高了计算的稳定性。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为Mpp大表关联加速全程图;
图2为拆分SQL分区执行图;
图3为SQL结果窗口式汇聚过程;
图4为SQL结果窗口式汇聚过程;
图5为SQL解析树状图;
图6为数据规则拆分整体图;
图7为数据拆分规则过程图;
图8为数据并行加载图;
图9为数据并行异步加载;
图10为数据并行异步加载的连接请求过程;
图11为无汇聚SQL的多节点并行异步返回数据;
图12为有汇聚SQL的多节点并行异步返回数据。
实施方式
下面将结合附图、通过对本发明的优选实施方式的描述,更加清楚、完整地阐述本发明的技术方案。
如图1所示,本发明具体为:
步骤S1:使用ANTLR工具对输入的SQL进行解析,通过构建抽象语法树(AST),识别出SQL语句中的表、字段以及表之间的关联关系;
步骤S2:基于解析的SQL语句和数据源的情况,以及计算资源的状态,制定数据拆分规则;
步骤S3:根据制定的拆分规则将数据分配到各分布式节点,并进行窗口式的存储;
步骤S4:数据加载后,构建执行区域并进行SQL计算;
步骤S5:分区执行的SQL结果集进行汇聚以获取最终结果;
步骤S6:通过边计算边返回的方式实现数据快速返回;
作为一种具体的实施方式,步骤S1具体为:
利用antlr解析来源的SQL,ANTLR 是一个强大的语言解析工具。基于ANTLR 生成词法分析器和解析器,将输入SQL构建一棵树,从产生的树节点来理解sql语句关系与库表。通过树节点找到关联关系的表,基于库表名称从数据源中快速计算出表的记录大小,以此来判别表的大小,再从树节点中找出表与表的关联关系,通过关联的字段与库表结构结合分析找到关联关系条件的第一性关联字段,即两表关联条件的最大范围值的字段。具体步骤如图4所示,包括:
1)定义SQL语法规则:通过定义SQL语法规则,包括select、update、insert和delete等四种语句类型,以及表达式、条件运算符等,可以使用ANTLR生成对应的解析器代码。主要通过词法分析器(Lexer)负责将输入的动态 SQL 片段划分为一个个 token(词素), token 对应于关键字、操作符、字面量等,词法分析器基于预定义的文法规则识别这些 token。
2)生成解析器代码:根据SQL语法规则,使用ANTLR生成对应的解析器代码,解析器代码将能够解析输入的SQL语句,并将其转换成对应的语法树。主要通过语法分析器(Parser)接收词法分析器生成的 token,并根据预定义的文法规则将这些 token 组织成一棵抽象语法树(AST)。AST 描述了动态 SQL 片段的结构和语义,为后续的处理提供了基础。
3)解析输入的SQL语句:使用生成的解析器代码解析输入的SQL语句,得到对应的语法树,根据语法树(AST),从AST可以获取SQL语句的各个部分,例如SELECT、FROM、WHERE等关键字,以及它们对应的表、列、函数、运算符等信息。如sql: select f1,f2,f3 fromtable1 left join table2 on table1.id=table2.id and table2.stat=‘001’ wheretable1.name like ‘n%’; 生成的语树如图5所示。
4)获取关联的表:通过解析出来的语法树,找到树节点上的表以及表间的关联关系以及完成表的大小分析,通过以下步骤:
通过如图5解析出来的sql语法树中,找到所有table类型的节点,以及节点的关联关系,如图5的表table1、table2以及表间的关联关系left join;
根据表名找到从Redis的缓存中找到表的数量大小,以及来判断是否是大表,找的过程先”库名#表名”的key找数据,如果没有找到再通过“表名”找数据;
Redis的缓存中表大小通过后端进程动态更新,后端进程定期读取mpp数据源的元数据信息以及表大小数据,并更新redis的缓存数,数据按”库名#表名”和“表名”为key来存储其value数值。
5)获取关联关系条件:通过解析出来的语法树,找到condition相关节点,根据树的层次,找到表及关联关系的条件,如下步骤:
通过如图5解析出来的sql语法树中,找到所有condition类型的节点,以及节点的关联关系,如图5的表condition(and),找到条件table1.id=table2.id and table2.stat=‘001’;
从条件中找参与的字段,分别为table1.id、table2.id与table2.stat;
再根据字段对应的表如table1加“_C”、table2加“_C”,从redis的缓存中找到表的主键字段与索引字段,只有参与条件字段有一方是主键,则可以认为此条件是第一性关联条件,其中第一性关联条件查询出的数据集必定是关联关系中最大的数据集,找出此条件为数据拆分规则的前置输入;
Redis的缓存中表大小通过后端进程动态更新,后端进程定期读取mpp数据源的元数据信息以及表大小数据,并更新redis的缓存数,数据按”库名#表名_C”和“表名_C”为key来存储其主键字段与索引字段数值。
6)第一性关联字段,主要指有主键或唯一索引参与关联的字段,通过第一性字段关联的关系即第一性关系,也是表关联数据范围最大的关系。通过上步分析出关联的字段、以及从缓存中找出库表的主键或唯一索引的字段,进行比较后,分析出第一性关系,并根据此字段来拆分数据。
作为一种具体的实施方式,步骤S2具体为:根据解析后的SQL中找到库表、字段以及关联关系,计算出第一性关联字段,然后连接到源端来识别出字段的类型、数据值的组成形式,结合参与分析的计算资源情况,主要是cpu、内存、服务器台数、硬盘、网络等参数制定数据的拆分规则,将大表的数据根据算法拆分成多个小表的形式,如根据范围,Hash等算法对数据进行拆分,同时相互有关联的数据采用就近原则进行数据的落地规划。
包括:根据关联表的第一性关联条件,找出关联的字段后,对其进行拆分规则的自动配置,为保障拆分后具有高效的计算性能、高性能的数据传输与存储能力,对其拆分规则设置如下:
1)计算出单个节点同时计算的并行数,其计算公式为:
;
说明:
Ncpu : CPU 核心数;
Ucpu : CPU 利用率,0-100%;
W : I/O等待时间;
C : CPU 运行时间;
W/C: CPU 运算时间比率;
0.9 :由于计算过程没有考虑到一些损耗,需要再考虑10%的损耗,即乘0.9。
2)根据并行数来计算出各节点的数据量与各节点单个窗口的数据量,其计算公式为:
各节点的数据量公式:
;
说明:
records:各节点的数据量的最佳值;
MIPS:每秒执行多少百万条指令;
MIPS/1000: 表示毫秒级内的百万条指令;
Sql指令数:表示一条sql可转换成指令的个数;
200:表示200毫秒,要保障秒极计算,需要拆分sql在大部分在200s完成,留部分时间做数据汇聚类计算;
单个窗口数据量公式:
;
说明:
wrecords:单个窗口数据量的最佳值;
records: 各节点的数据量的最佳值;
根据公式,如当前节点1的cpu通用的MIPS:500MHz、节点2的MIPS:900MHz,复杂SQL大概转化成100个指令,节点1是5个并发,节点2是6个并发,200s内并行计算时单节点与单窗口数据量最佳值为:
节点1的数据量=(500Hhz/1000)/100*200=100万;
节点2的数据量=(900Hhz/1000)/100*200=180万;
各窗口的并行数为:
节点1的单个窗口数据量=100万/5=20万,节点2的单个窗口数据量=180万/6=30万。
3)根据节点、并行数与单个窗口的数据量等参数制定数据拆分的规则,保障同维度关联的数据尽量落地同一个节点或就近的节点,支撑高效的计算,规则划分范围分区。范围分区(Range Partitioning)是指根据指定的关键字将数据集拆分为若干连续的范围,每个范围存储到一个单独的节点上,规则拆分步骤如图6所示,包括:获取参与计算的表的记录数大小,根据数”库名#表名”和“表名”为key来获取其value数值,即表的大小;表记录范围拆分,将表的数据根据第一性的关联字段的值轮循拆分,其每次拆分的数据量不超过各节点的最佳的计算数据量的值,拆分过程按顺序加载数据到各节点上,当最后一个节点加载完后,表的数据还没有加载完成,会继续回到第一个节点轮循按顺序、根据节点计算数据量的最佳值的范围继续顺序加载,直到拆分并加载完成所有的记录;
数据拆分规则过程如图7所示,包括:
根据各节点计算出来范围来约定数据的范围,然后根据约定范围将数据路由到各节点;数据路由到各节点上后,为保障数据的计算性能,会再次将数据拆分成多个窗口,拆分规则为:1)记录窗口可载的记录数=节点的数据范围/并行数; 2)根据节点的数据、并行数、每个并行窗口可加载的数据,根据第一性字段再平无分配加载条件,如table.id>=0and table.id<20w,可再次拆分为: (20w-0)/5=4w,其数据加载规则为:
窗口1=[0,4w),窗口2=[4w,8w),窗口3=[8w,12w),窗口3=[12w,16w),窗口5=[16w,20w]
4)关联的数据加载规则,依据第一性关联字段的值加载关联的所有与之相关联的表的数据,加载过程根据关联的字段进行判断值的范围,数据窗口大小不受记录数限制,如关联表为table2,则加载table2的数据规为:节点1(第一轮:table2.id>=0 and table2.id<20w,第二:table2.id>=100w and table2.id<120w)。
作为一种具体的实施方式,步骤S3具体为根据拆分设置的规则自动适配数据,再落地到各分布式的节点上,对数据进窗口式的数据存储。落地前需先进行数据的加载,为保障加载的性能,制定了相应的加载规则,优先多进程加载同一批参与计算的数据,数据加载过程依据表间的第一性关联规则,对关联的字段值根据规则进行相应的拆分,对拆分的数据并发进行加载数据,同时多个表的数据一起加载,充分利用各节点的资源。拆份的规则可根据值的范围或Hash值分桶等。比如根据字段ID的值[1-100],[101-200],...或value.hash%50000来进行数据的拆分。
依据设定的数据规则实现对数据的加载,同时为保障加载过程的高效性,保障后续计算的性能,依据数据拆份规则,将数据划分多份,并行、异步、连接池预先初始化、队列管控稳定性等方式加载数据,如图8所示,实高效加载的步骤包括:
1)计算单节点的数据加载的并行数:依据节点的窗口数,再加关联的表数据也一同并行加载,其各节点并行数据计算为:
;
关联次数:表示sql中同第一性条件关联的次数;
pNum:单节点数据加载的并行数。
2)计算最小化连接(初始化连接数):根据节点的资源,在每个节点制定最小的初始连接数,各节点初始化的连接数总不能大于连接的最小连接数,其各节点每个窗口最小连接数的公式为:
;
式中:
iConnOps:各节点每个窗口最小连接数;
max:最大值;
min:最小值;
aCpu:各节点各自可用的cpu核数;
aMem:各节点各自可用的内存大小,单位为kb;
records:各节点的数据量的最佳值;
pNum:单节点并行数;
总的初始化连接数为:
;
式中:
for:表示轮循从1到n个节点;
i:变量表示从第1个节点开始到第n个节点;
n:表示最后一个节数;
getNwIConnOps:获取第i个节点的每个窗口的初始化连接数;
getNParallet:获取第i个节点的并行窗口数;
totalIConnsOps:表示总的初始化连接数;
连接池会依据此值进行初始化连接数据的配置,连接池在启动后会自动初始化最小的连接数,以便在使用节省连接的时间,提升加载的效率。
3)各节点数据并行异步加载:各节点分别在同一时刻并行异步加载数据,其实现逻辑如图9所示,描述如下:
首先在并行加载端开启多进程、多线程模式,每个线程分别发起异步请求;然后从连接池获取数据源的连接,如果连接池没有会按需创建连接;根据请求并行开启多线程的数据加载任务,各任务依据设定好的规则进行数据的拆分加载,将原本大的数据拆分成多个小任务形式并行异步执行;多任务执行后,将结果存储到指定的缓冲区,并通知发启端,明确任务已执行完成;发启端通过异步的方式从缓冲区获取加载的数据;
4)并行异步加载过程连接请求实现:在加载过程首先使用初始化的连接并行快速加载,如在各节点资源充足并且没有超过最大连接数据的情况下,可以再次创建新的连接,实现更多并发异步的数据加载,有效提升加载效率,其加载过程中的连接申请如图10:
作为一种具体的实施方式,步骤S4具体为数据加载后,数据按分区及数据窗口的方式存储在各个分布式的节点上,在各节点上自动构建执行区域,执行区的资源依据配置的参数与实际的资源对比,最小化地获取可用资源,其资源主要指cpu与内存的大小,一节点可以划分多个执行区;创建好的执行区就可执行对应的sql,并且可以并行执行sql,参与计算的数据根据就近原则,先从本地窗口加载相关的数据,如果本地没有才选择最近的节点加载数据,然后进行关联计算,在分区关联计算的过程中,会再次判断参与计算的数据,参与计算的数据大小会同配置的阈值进行比较,如果参与计算的数据超过阈值,数据会再次拆分成新的分区,然后再进行计算,保障在有限的资源,可以高并发快速的执行sql,如图2所示;包括:
1)初始化并行执行区:根据以上S2步计算出的“并行数”,来初始化创建单节点的sql的执行区个数;
2)本地SQL引擎:各节点的分区的窗口中利用本地的SparkSQL为查询计算引擎,来查询已分区的窗口的数据,同时根据需要查询计算引擎中增加钩子hook函数,此hook函数在sql执行完成后调用;Spark SQL是Spark的其中一个模块,用于结构化数据处理,可以对接多种不同的存储实现统一sql计算与处理能力;
3)各并行执行区的SQL拼接:根据之前加载数据时候的拆分条件在原来关联sql基础上增加where条件来限定计算的范围,保障可以很精确的执行数据,如 select t1.f1,t2.f2 from t1 left join t2 on t1.id=t2.fid where t1.id>0 and t1.id<20w,这其中条件“t1.id>0 and t1.id<20w”根据之前拆分时规划的范围加上对应的条件;
4)并行执行:将拼接好的SQL语句利用SparkSQL本地引擎的能力,在本地划小数据区的情况并行执行,执行完成的结果存储到新的窗口;
5)并行执行过程外部节点关联;
6)执行结果返回:各个并行分别执行完成sql后,结果数据会存到新的窗口中,并为窗内的表取名[swt_节点名_主表名_任务号_序号],将原本多个关联的表数据形成一个大宽表的形式,并在sql执行完成后,会调钩子函数hook,在hook函数,对新建的窗口进行打标识与状态标识分别为:name:collw(汇聚窗口),status:unuse(未被使用),同时已经参与计算的窗口状态标识为:status:used(已使用);
7)计算过程会根据数据量再次自动拆分:计算过程发现数据量过大时,会自动拆分过大的数据分区,增加并发数据,同时对数据量过小的分区,会自动合并过小的数据分区来减少并发数。
作为一种具体的实施方式,步骤S5具体为,由于分区执行sql产生的结果集相对比较分散,没有计算出真正的结果集出来,所以需要实现将各分区执行的sql的结果集进行汇聚,计算sql真正的结果。在汇聚的过程中依据一定的规则要求:首先会配置每个汇聚窗口的大小,然后获取各节点的空闲资源,各节点可以划分的汇聚窗口数量=空闲资源/配置大小,依据sql结果集的大小尽量将相关的多个数据集汇聚一个汇聚窗口,汇聚窗口未满时会继续接收sql结果集。为防止有关联的数据再进行彻底的计算,汇聚后会多次进行汇聚计算,直接最后没有要汇聚的数据,多次汇聚的数据窗口大小会依据配置与实际情况进行相应的动态调整,如图3所示;
具体包括:
通过上述步骤的数据拆分执行后将生成“汇聚窗口=并行数”的窗口数据集,其每个窗口的数据都是经过初步的关联、过滤与计算等所有动作,原则上第一次计算后产生的数据,在各汇聚窗口内已满足了sql的结果要求,如果没有汇聚类的操作时可以直接返回大表关联后的结果,当有汇聚之类的操作时,并且汇聚字段非分拆分字段,如:sum(f2) groupby type(类型字段非拆分字段),其group by的值有可能存储跨不同数据汇聚窗口与跨节点的情况,需要对数据进行多次汇聚计算后才能得到结果,其实现步骤如下:
1)获取汇聚的数据:获取汇聚的窗口数量,即为S2步计算出来“并行数”相等,以及各窗口内产生的记录的数;
2)计算汇聚的并行数:根据各节点的汇聚窗口以及数据量与配置最大记录数相对比来计算并行数:
pAnum=N_TotalWRecords/MaxRecord;
说明:
pAnum:表示可并行汇聚计算的数;
TotalWRecords:单节点内汇聚窗口所有记录数和;
MaxRecord:配置的可同时计算的最大记录数;
如果:
TotalWRecords<MaxRecord或
TotalWRecords∈[MaxRecord-MaxRecord*0.2,MaxRecord+MaxRecord*0.2];
则直接合并所有的窗口数据,并给合并后的窗口取上表名为:[wt_节点名_主表名_任务号_并行号_序号],其中”任务号”为提交sql执行一开始就产生的全局唯一号,然后跳到步骤S5)执行后续的操作;
3)计算各并行读取窗口数:根据并行数据以及配置的最大来选择一个并行计算读取的窗口数的最优方式,具体步骤如下:
初始化:构建为pAnum(可并行汇聚计算的数)值为大小轮询的次数,构建窗口数组,将所有的汇聚窗口组成一个数组,并初始化每个窗口的状态为“未合并”;
轮询一次分的实现:别获取一个的最大记录数的窗口与最小记录数的窗口;
判断并行数是否满足执行条件:大记录数的窗口+最小记录数的窗口的值与配置的值(MaxRecord)接近,其值大于置的值或值的范围在20%差额内,认为是满足条件,可以执行此线程;
将已参与合并的窗口移出窗口的移出待分配的窗口数组;
轮询直到所有的窗口都分配完成后退出。
4)合并每个并行的窗口:根据pAnum的并行数,合并每个并行已标识的窗口的数,将合并的窗口变成一个窗口的数据,并给合并后的窗口取上表名为:[wt_节点名_主表名_任务号_并行号_序号],其中”任务号”为提交sql执行一开始就产生的全局唯一号。
5)自动调整计算分析sql:由于关联与条件过滤的操作在S4步的已经处理完成,剩下的数据都是满足条件的数据,所以此处不需要再进行关联与条件过滤相关的操作,其自动调整体sql实现如下步骤:
去掉原有sql的关联与过滤条件,如原有sql:
select f1,f2,sum(f3) as f3 from table1 left join table2 on table1.id=table2.id and table2.stat=‘001’ where table1.name like ‘n%’ group by f1,f2;
去掉后变成:
select f1,f2,sum(f3) as f3 from [table] group by f1,f2:
将以上sql中的[table] 修改为合并窗口后的表名[wt_节点名_主表名_任务号_并行号_序号]。
6)并行执行调整后的sql:并发执行调整后的sql会再次生成新的窗口数据,由于是单表计算并且无复杂的计算逻辑,在多个片的单表,可以高效的保障执行的性能。
7)执行结果返回:各个并行分别执行完成sql后,结果数据会存到新的窗口中,并给新窗口的表取名:[wt_节点名_主表名_并行号_序号],并在sql执行完成后,会调钩子函数hook,在hook函数,对新键的窗口进行打标识与状态标识分别为:name:collw(汇聚窗口),status:unuse(未被使用),同时已经参与计算的窗口状态标识为:status:used(已使用);
各节点合并执行结果:将各节点汇聚窗口的状态为:status:unuse(未被使用)或为空的数据窗口合并成一个窗口一个表,取表名称为:[fwt_节点名_主表名_任务号_序号]。
作为一种具体的实施方式,汇聚的数据存储在多个窗口,如果全部一起返回,在数据量大的情况,会耗费较长的时间,不利于业务使用数据。在此处通过边计算边返回的方式实现对数据快速返回,返回前会判断当前的窗口是否最终的窗口数据,返回只会返回此类窗口的数据。返回时候,通过多并发实时同时返回多个窗口的数据,保障返回的效率。
具体如下:
利用mpp数据库、sparksql等对单个大表的操作时秒级左右即可响应的特点,在结果返回时,将原本复杂关联的sql变成了对单个大表的操作,同时其返回结果依据原生的sql是否包含聚合类的计算采用不同的方式处理,主要有:
1)针对无聚合操作操作sql,只有关联与过滤类的操作,所有在第一次关联执行完成后,即可进行数据的返回,其返回过程如图11所示,包括:
分布式的多节点均作为处理节点,每个节点都可以是计算节点;
分布式并行多线程的方式多路返回数据;
流式数据展示,通过异步返回的方式,实现数据的边展示边返回,最终实现亿级大表关联查询可在5秒级内高效全部返回的效果;
2)针对有聚合操作的sql,如有sum,count,avg,group by 等算子操作;
经过上步s5的汇聚计算后,最终每个节点的所有数据都合并成一个窗口其表名为:[fwt_节点名_主表名_任务号_序号],由于有汇聚类的操作,参与汇聚的数据有可能在不同的节点,需要再次根据汇聚字段进分布式的汇聚计算后返回数据,其过程如图12所示,包括:
分布式的多节点均作为处理节点,每个节点都可以是计算节点;
各节点依据group by字段的值排序计算;
数据返回过程以排好序的数据顺序多并发返回;
在数据返回过程会同时对多节点的数据进行汇聚计算,实现边汇聚计算边返回,其中汇聚计算依据汇聚字段的值相同来计算,直到汇聚字段的发生变化时,才将此段汇聚的数据整体返回,采用方式最终完成所有的值汇聚计算并返回;
返回过程采集流式数据展示,通过异步返回的方式,实现数据的边展示边返回;
最终实现亿级大表关联与汇聚计算可在10秒级内高效全部返回的效果。
作为一种具体的实施方式,例如:某运营基于两个大宽表中(OFR_OFFER_INST (销售品实例表、1亿数据量)、PRD_PROD_INST (产品实例表(3亿数据量))的数据来统计销售品与产品的发展量等统计分析,基于产品关联销售品等信息的查询,其sql语句:
关联查询语句,查询每个产品其对应的销售品数据,如下sql:
select b.offer_inst_id,b.offer_id,b.offer_name,a.prd_inst_id,a.prd_id,prd_name,a.eff_date,a.exp_date From PRD_PROD_INST a left join OFR_OFFER_INST b on a.prd_inst_id=b.prd_inst_id
Where a.status=’00A’//a.status=’00A’表示有效的数据;
统计分析语句,统计有挂靠销售品的各产品发展量数据,如下sql:
Select count(a.prd_inst_id) as prd_amount,a.prd_name,count(b.offer_inst_id) as off_amount, b.offer_name from PRD_PROD_INST a left join OFR_OFFER_INST b on a.prd_inst_id=b.prd_inst_id Where a.status=’00A’ group bya.prd_name,b.offer_name;
针对以上两个sql执行过程如下:
第一步、解析sql:分别解析“关联查询语句”与“统计分析语句”两条sql语句,找出表PRD_PROD_INST、OFR_OFFER_INST,同时到获到PRD_PROD_INST的数据量为3亿,OFR_OFFER_INST为1亿,找到第一性关联查询条件a.prd_inst_id=b.prd_inst_id,分析出第一性关联字段为prd_inst_id;
第二步、数据拆分规则
部署10节点,每个节点的cpu通用的MIPS:500MHz、复杂SQL大概转化成100个指令,根据计算公式得出节点是5个并发,200s内并行计算时单节点与单窗口数据量最佳值为100万:
节点数据量=(500Hhz/1000)/100*200=100万;
单个节点可划分5个窗口,每个窗口规则20万数据量,3亿数据根据公式,每个节点加载3千万数据量,分30次并行异步加载完成。
第三步、按规则高效加载数据:根据上述规则,并行启动加载程序,根据分拆字段值的范围,分别加载主表与关联的数据,每个节点根据最大的并发异步执行,每个加载一批窗口数据后,即可立即执行计算。
第四步、分区执行SQL分区:针对加载完成窗口,将原有的sql语句加上对应的范围,便可立即执行如:
关联语句增加并行窗品数据范围条件(a.prd_inst_id>=0 and a.prd_inst_id<=20w):
select b.offer_inst_id,b.offer_id,b.offer_name,a.prd_inst_id,a.prd_id,prd_name,a.eff_date,a.exp_date From PRD_PROD_INST a left join OFR_OFFER_INST b on a.prd_inst_id=b.prd_inst_id
Where a.status=’00A’and (a.prd_inst_id>=0 and a.prd_inst_id<=20w);
统计语句增加并行窗品数据范围条件(a.prd_inst_id>=0 and a.prd_inst_id<=20w):
Select count(a.prd_inst_id) as prd_amount,a.prd_name,count(b.offer_inst_id) as off_amount, b.offer_name from PRD_PROD_INST a left join OFR_OFFER_INST b on a.prd_inst_id=b.prd_inst_id Where a.status=’00A’and (a.prd_inst_id>=0 and a.prd_inst_id<=20w) group by a.prd_name,b.offer_name;
执行完成后,会产生新的窗口数据,且窗口取名[swt_节点名_主表名_任务号]如:swt_prd_prod_inst_1_1,并窗口状态为unuse(未被使用)。
第五步、SQL结果窗口式汇聚:此处会依据sql进行判断是否进行汇聚类的操作,
无汇聚:sql无group by,sum,count之类的汇聚,刚可以直接返回结果,不需要再进行汇聚计算,直接将所有的汇聚窗口数据合并成一个窗口,同时多表关联的查询的语自动变成单表语句,如下:
select offer_inst_id,offer_id,offer_name,prd_inst_id,prd_id,prd_name,eff_date,exp_date From ST_PRD_PROD_INST
有汇聚:针对有汇聚类的sql,需要进行对应的二次的汇聚计算,其计算过程需要根据汇聚窗口约定的数据大小进行窗口的合并,将多个小的窗口合并成大的数据窗口,例如合并两个窗口的数据,同时调整运行的sql,将原来关联汇聚sql变成单表操作如下:
Select count(prd_amount) as prd_amount,prd_name,count(off_amount) asoff_amount, offer_name from ST_PRD_PROD_INST Where a.status=’00A’and (prd_inst_id>=0 and prd_inst_id<=1500w) group by prd_name,offer_name;
再根据调整后的sql进行二次汇聚,产生单节点下最终的汇聚数据,将所有的数据汇聚数据合并成一个窗口。
第六步:结果采用异步多并发返回的方式,对于有汇聚操作还有进行一个全局的数据汇聚计算,因为是单表,利用mpp计算的特点可以快速响应,相对直接用mpp执行大表关联语句的性能对比如表1所示:
表1
通过对比分析,通过对大表按约定的规则进行适当的转换,将原来大表关联分析操作,转换成小表进行,其计算的sql转换后进行自动的切换,将原本需要关联汇聚的操作变成单表汇聚的计算操作,单表操作不管理数据多大,基本上都可以做到秒级响应,满足很多复杂业务场景下的数据分析需求,提升数据使用过程的快速响应能力。
上述具体实施方式仅仅对本发明的优选实施方式进行描述,而并非对本发明的保护范围进行限定。在不脱离本发明设计构思和精神范畴的前提下,本领域的普通技术人员根据本发明所提供的文字描述、附图对本发明的技术方案所作出的各种变形、替代和改进,均应属于本发明的保护范畴。本发明的保护范围由权利要求确定。
Claims (8)
1.一种Mpp数据库大表关联加速方法,其特征在于,包括:
步骤S1:使用ANTLR工具对输入的SQL进行解析,通过构建抽象语法树,识别出SQL语句中的表、字段以及表之间的关联关系;
步骤S2:基于解析的SQL语句和数据源的情况,以及计算资源的状态,制定数据拆分规则;
步骤S2具体如下:
步骤S21:计算出单个节点同时计算的并行数,计算公式如下:
;
式中:Ncpu : CPU 核心数;
Ucpu : CPU 利用率,0-100%;
W : I/O等待时间;
C : CPU 运行时间;
W/C: CPU 运算时间比率;
0.9 :由于计算过程没有考虑到一些损耗,需要再考虑10%的损耗,即乘0.9;
步骤S22计算公式如下:
;
式中:
records:各节点的数据量的最佳值;
Mips:每秒执行多少百万条指令;
Mips/1000: 表示毫秒级内的百万条指令;
SQL指令数:表示一条SQL可转换成指令的个数;
200:表示200毫秒;
单个窗口数据量公式:
;
式中:
wrecords:单个窗口数据量的最佳值;
records: 各节点的数据量的最佳值;
步骤S22:根据并行数来计算出各节点的数据量与各节点单个窗口的数据量;
步骤S23:根据节点、并行数与单个窗口的数据量参数制定数据拆分的规则;
步骤S24:实施数据拆分和加载过程;
步骤S25:数据路由到各个节点,则将数据进一步拆分为多个窗口,每个窗口的大小等于节点的数据范围除以并行数,然后,根据每个并行窗口加载的数据量,将数据分配给各个窗口;对于关联的数据,根据第一性关联字段的值进行加载,其中数据窗口的大小不受记录数的限制;
步骤S3:根据制定的拆分规则将数据分配到各分布式节点,并进行窗口式的存储;
步骤S4:数据加载后,构建执行区域并进行SQL计算;
步骤S5:分区执行的SQL结果集进行汇聚以获取最终结果;
步骤S6:通过边计算边返回的方式实现数据快速返回。
2.根据权利要求1所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S1具体如下:
步骤S11:定义SQL语法规则;
步骤S12:根据SQL语法规则,使用ANTLR生成对应的解析器代码,解析器代码将能够解析输入的SQL语句,并将其转换成对应的语法树;
步骤S13:解析输入的SQL语句;
步骤S14:获取关联的表;
步骤S15:获取关联关系条件。
3.根据权利要求1所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S3具体如下:
步骤S31:计算单节点的数据加载并行数;
步骤S32:计算最小化连接,即初始化连接数;
步骤S33:各节点数据并行异步加载;
步骤S34:并行异步加载过程连接请求实现。
4.根据权利要求1所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S4具体如下:
步骤S41:初始化并行执行区;
步骤S42:各节点的分区窗口使用本地的SparkSQL作为查询计算引擎,查询已分区的窗口数据,同时,在查询计算引擎中增加钩子函数,此函数在SQL执行完后调用;
步骤S43:在原有关联SQL的基础上,增加where条件来限定计算范围;
步骤S44:使用SparkSQL本地引擎在本地划分的小数据区并行执行拼接好的SQL语句,执行完成的结果存储到新的窗口;
步骤S45:并行执行过程中外部节点关联;
步骤S46:各并行执行完成SQL后,结果数据存储到新窗口中,形成宽表,并在SQL执行完成后,调用钩子函数对新窗口进行状态标识;
步骤S47:根据数据量自动拆分。
5.根据权利要求1所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S5包括:
步骤S51:获取汇聚的数据;
步骤S52:计算汇聚的并行数;
步骤S53:计算各并行读取窗口数;
步骤S54:据并行数,合并每个并行已标识的窗口的数,将合并的窗口变成一个窗口的数据;
步骤S55:自动调整计算分析SQL;
步骤S56:并行执行调整后的SQL;
步骤S57:执行结果返回;
步骤S58:各节点合并执行结果。
6.根据权利要求1所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S6包括:
步骤S61:对单个大表进行操作;
步骤S62:将复杂的关联SQL转化为对单个大表的操作;
步骤S63:根据原始SQL是否包含聚合计算,选择不同的处理方式;
步骤S64:异步返回数据。
7.根据权利要求3所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S31所用公式如下:
;
式中:
关联次数:表示SQL中同第一性条件关联的次数;
pNum:单节点数据加载的并行数
步骤S32公式如下:
;
式中:
iConnOps:各节点每个窗口最小连接数;
max:最大值;
min:最小值;
aCpu:各节点各自可用的cpu核数;
aMem:各节点各自可用的内存大小,单位为kb;
records:各节点的数据量的最佳值;
pNum:单节点并行数;
总的初始化连接数为:
;
式中:
for:表示轮循从1到n个节点;
i:变量表示从第1个节点开始到第n个节点;
n:表示最后一个节数;
getNwIConnOps:获取第i个节点的每个窗口的初始化连接数;
getNParallel:获取第i个节点的并行窗口数;
totalIConnsOps:表示总的初始化连接数。
8.根据权利要求3所述的一种Mpp数据库大表关联加速方法,其特征在于,步骤S33具体包括:首先在并行加载端开启多进程、多线程模式,每个线程分别发起异步请求;然后从连接池获取数据源的连接,如果连接池没有获取数据源的连接,则按需创建连接;根据请求并行开启多线程的数据加载任务,各任务依据设定好的规则进行数据的拆分加载,将原本大的数据拆分成多个小任务形式并行异步执行;多任务执行后,将结果存储到指定的缓冲区,并通知发起端,明确任务已执行完成;发起端通过异步的方式从缓冲区获取加载的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311030003.5A CN116756150B (zh) | 2023-08-16 | 2023-08-16 | 一种Mpp数据库大表关联加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311030003.5A CN116756150B (zh) | 2023-08-16 | 2023-08-16 | 一种Mpp数据库大表关联加速方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116756150A CN116756150A (zh) | 2023-09-15 |
CN116756150B true CN116756150B (zh) | 2023-10-31 |
Family
ID=87961194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311030003.5A Active CN116756150B (zh) | 2023-08-16 | 2023-08-16 | 一种Mpp数据库大表关联加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116756150B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117648341A (zh) * | 2023-11-21 | 2024-03-05 | 上海金仕达卫宁软件科技有限公司 | 在有限资源基于磁盘内存快速组装数据的方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104871153A (zh) * | 2012-10-29 | 2015-08-26 | 华为技术有限公司 | 用于灵活的分布式大规模并行处理(mpp)数据库的系统和方法 |
CN105279280A (zh) * | 2015-11-16 | 2016-01-27 | 天津南大通用数据技术股份有限公司 | 快速迁移Oracle数据到MPP数据库的方法及工具 |
CN107885779A (zh) * | 2017-10-12 | 2018-04-06 | 北京人大金仓信息技术股份有限公司 | 一种Spark并行访问MPP数据库的方法 |
CN109388638A (zh) * | 2012-10-29 | 2019-02-26 | 华为技术有限公司 | 用于分布式大规模并行处理数据库的方法及系统 |
CN109582667A (zh) * | 2018-10-16 | 2019-04-05 | 中国电力科学研究院有限公司 | 一种基于电力调控大数据的多数据库混合存储方法及系统 |
US10649106B1 (en) * | 2014-09-19 | 2020-05-12 | EMC IP Holding Company LLC | Continuously combining seismic migration results using a massively parallel processing (MPP) database |
CN115510024A (zh) * | 2022-08-26 | 2022-12-23 | 苏州浪潮智能科技有限公司 | 一种实现大规模并行数据库高可用的方法及系统 |
CN115982278A (zh) * | 2022-12-29 | 2023-04-18 | 数字郑州科技有限公司 | 基于mpp数据库的自助式实时数据比对方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8874602B2 (en) * | 2012-09-29 | 2014-10-28 | Pivotal Software, Inc. | Random number generator in a MPP database |
US10210206B2 (en) * | 2014-10-03 | 2019-02-19 | International Business Machines Corporation | Optimization of a plurality of table processing operations in a massive parallel processing environment |
-
2023
- 2023-08-16 CN CN202311030003.5A patent/CN116756150B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104871153A (zh) * | 2012-10-29 | 2015-08-26 | 华为技术有限公司 | 用于灵活的分布式大规模并行处理(mpp)数据库的系统和方法 |
CN109388638A (zh) * | 2012-10-29 | 2019-02-26 | 华为技术有限公司 | 用于分布式大规模并行处理数据库的方法及系统 |
US10649106B1 (en) * | 2014-09-19 | 2020-05-12 | EMC IP Holding Company LLC | Continuously combining seismic migration results using a massively parallel processing (MPP) database |
CN105279280A (zh) * | 2015-11-16 | 2016-01-27 | 天津南大通用数据技术股份有限公司 | 快速迁移Oracle数据到MPP数据库的方法及工具 |
CN107885779A (zh) * | 2017-10-12 | 2018-04-06 | 北京人大金仓信息技术股份有限公司 | 一种Spark并行访问MPP数据库的方法 |
CN109582667A (zh) * | 2018-10-16 | 2019-04-05 | 中国电力科学研究院有限公司 | 一种基于电力调控大数据的多数据库混合存储方法及系统 |
CN115510024A (zh) * | 2022-08-26 | 2022-12-23 | 苏州浪潮智能科技有限公司 | 一种实现大规模并行数据库高可用的方法及系统 |
CN115982278A (zh) * | 2022-12-29 | 2023-04-18 | 数字郑州科技有限公司 | 基于mpp数据库的自助式实时数据比对方法及系统 |
Non-Patent Citations (5)
Title |
---|
Feng Li 等.Accelerating Relational Databases by Leveraging Remote Memory and RDMA.《SIGMOD '16: Proceedings of the 2016 International Conference on Management of Data》.2016,355–370. * |
G-tran: a high performance distributed graph database with a decentralized architecture;Hongzhi Chen 等;《Proceedings of the VLDB Endowment》;第15卷(第11期);2545–2558 * |
MPP数据库;Phoenix Cola;《CSDN博客 https://blog.csdn.net/qq_34569121/article/details/129883103》;全文 * |
云计算环境下海量矢量数据的高效存储与并行叠置分析;蒋元义;《中国优秀硕士学位论文全文数据库 基础科学辑》(第04期);A008-54 * |
基于MPP数据库的金融行业大数据平台的设计与实现;韩金倡;《中国优秀硕士学位论文全文数据库 信息科技辑》(第02期);I138-300 * |
Also Published As
Publication number | Publication date |
---|---|
CN116756150A (zh) | 2023-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11126626B2 (en) | Massively parallel and in-memory execution of grouping and aggregation in a heterogeneous system | |
CN105824957B (zh) | 分布式内存列式数据库的查询引擎系统及查询方法 | |
Zhang et al. | EAGRE: Towards scalable I/O efficient SPARQL query evaluation on the cloud | |
Nykiel et al. | MRShare: sharing across multiple queries in MapReduce | |
US8166022B2 (en) | System, method, and apparatus for parallelizing query optimization | |
EP2831767B1 (en) | Method and system for processing data queries | |
CN104063486A (zh) | 一种大数据分布式存储方法和系统 | |
US11003649B2 (en) | Index establishment method and device | |
Dokeroglu et al. | Robust heuristic algorithms for exploiting the common tasks of relational cloud database queries | |
CN116756150B (zh) | 一种Mpp数据库大表关联加速方法 | |
Wang et al. | Elastic pipelining in an in-memory database cluster | |
Zhan et al. | AnalyticDB: real-time OLAP database system at Alibaba cloud | |
US20130159287A1 (en) | Database query optimizer that takes network choice into consideration | |
CN110909077A (zh) | 一种分布式存储方法 | |
Breß et al. | A framework for cost based optimization of hybrid CPU/GPU query plans in database systems | |
CN108319604B (zh) | 一种hive中大小表关联的优化方法 | |
Azez et al. | JOUM: an indexing methodology for improving join in hive star schema | |
CN116089414B (zh) | 基于海量数据场景的时序数据库写入性能优化方法及装置 | |
CN116401277A (zh) | 数据处理方法、装置、系统、设备及介质 | |
MahmoudiNasab et al. | AdaptRDF: adaptive storage management for RDF databases | |
Zhao et al. | A data locality optimization algorithm for large-scale data processing in Hadoop | |
Pan et al. | Parallelizing multiple group-by queries using MapReduce: optimization and cost estimation | |
Hameurlain et al. | CPU and incremental memory allocation in dynamic parallelization of SQL queries | |
EP2469424B1 (en) | Hash-join in parallel computation environments | |
Jamadagni et al. | GoDB: From batch processing to distributed querying over property graphs |
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 |