一种流式事务处理方法及系统转让专利

申请号 : CN201910183742.5

文献号 : CN109918391B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘睿民

申请人 : 威讯柏睿数据科技(北京)有限公司

摘要 :

本发明公开了一种流式事务处理方法及系统,包括如下步骤:S1、识别从事务中获取的参数化查询的输入;S2、创建一个用于保存参数化查询的输入的参数表;S3、将参数化查询转化为包含与参数表连接的等效查询;S4、将识别的参数化查询的输入填充入参数表;S5、判断参数表是否被填满,若否,则返回步骤S4;若是,则执行步骤S6;S6、应用等效查询查询关系数据库以生成结果集,并将结果集的输出值插入相应的事务中;S7、判断事务是否为最后一个事务,若是,则事务处理完毕;若否,则删除参数表,并返回步骤S1。优点是:通过该方法和系统提高流式事务的处理效率,节省处理时间。

权利要求 :

1.一种流式事务处理方法,其中每个事务需要对关系数据库执行参数化查询,所述参数化查询从每个事务中获取至少一个输入;其特征在于,所述方法具体为,将流式事务记录成块序列,对每个块序列进行批量处理,统计批量事务中包含的事务个数,将此批量事务进行排序,之后开始对批量事务中的各个事务进行处理,直到此批量事务被处理完毕,在进行下一批量数据处理时,将会重新统计批量事务中事务的个数,之后再进行相关操作;对批量事务进行处理的过程具体包括如下步骤:S1、识别从一个事务中获取的参数化查询的输入;

S2、创建一个用于保存参数化查询的输入的参数表;所述参数表有特定的大小,针对不同的事务将会创建不同大小的参数表;

S3、将参数化查询转化为包含与参数表连接的等效查询;

S4、将识别的参数化查询的输入填充入参数表;

S5、判断参数表是否被填满,若否,则返回步骤S4;若是,则执行步骤S6;

S6、应用等效查询查询关系数据库以生成结果集,并将结果集的输出值插入相应的事务中;

S7、判断批量事务中的事务是否为最后一个事务,若是,则批量事务处理完毕;若否,则删除参数表,按照事先排好的事务顺序进入下一事务,并返回步骤S1。

2.根据权利要求1中所述的流式事务处理方法,其特征在于,所述步骤S1具体包括如下步骤:对参数化查询进行词法分析,以生成多个令牌;

解析令牌,以识别参数化查询的输入和输出。

3.根据权利要求1所述的流式事务处理方法,其特征在于:所述步骤S2具体包括根据参数化查询的输入的个数使用关系数据库的第一接口创建参数表,所述第一接口为单一数据操作。

4.根据权利要求1所述的流式事务处理方法,其特征在于:所述步骤S3具体包括如下步骤:将参数化查询建模为树结构;

将树结构描述为树语法结构;

根据参数化查询的输入与树语法结构之间的匹配,选择规则集中的至少一个规则,采用选择出的规则将参数化查询转化为包含与参数表连接的等效查询。

5.根据权利要求1所述的流式事务处理方法,其特征在于:所述步骤S4具体包括使用关系数据库的第二接口将参数化查询的输入填充入参数表,所述第二接口为批量数据操作。

6.一种流式事务处理系统,所述流式事务处理系统用于实现上述权利要求1至5任一所述的流式事务处理方法;其特征在于,所述流式事务处理系统包括:识别单元,所述识别单元用于识别参数化查询的输入和输出;

生成单元,用于在存储器中创建参数表以保存参数化查询的输入;

转换单元,用于将参数化查询转化为包含与参数表连接的等效查询;

填充单元,用于将识别的参数化查询的输入填充入参数表;

第一判断单元,用于判断参数表是否被填满;

处理单元,用于应用等效查询查询关系数据库以生成结果集;

插入单元,用于将结果集的输出值插入每个所述事务中,并在等效查询结束后删除所述参数表;

第二判断单元,用于判断当前查询的事务是否为批量事务中的最后一个事务;

计数单元,用于统计批量事务的个数。

7.根据权利要求6所述的流式事务处理系统,其特征在于,所述识别单元包括:词法分析器,用于对参数化查询进行词法分析,以生成多个令牌;

解析器,用于解析令牌,以识别参数化查询的输入和输出。

8.根据权利要求6所述的流式事务处理系统,其特征在于:所述流式事务处理系统包括流水线控制器,所述流水线控制器对批量事务进行排序,并控制批量事务的参数化查询顺序。

说明书 :

一种流式事务处理方法及系统

技术领域

[0001] 本发明涉及流事务处理领域,尤其涉及一种流式事务处理方法及系统。

背景技术

[0002] 在许多流式事务处理系统中,有必要对传统的关系数据库执行由流式数据中的值驱动的查询。例如,在典型的流式环境中,包含各种数据字段的记录或对象流连续到达事务处理系统。为了处理典型的事务,有必要对流中的每个记录执行常规的SQL查询,其中对SQL查询的输入取自该记录中的选定字段值。此外,在许多情况下,来自SQL查询的输出值将被放回到该记录的字段中,以便可以在SQL查询查找的下游进一步处理该记录。例如,计费处理系统可能会收到一个持续的记录流,这些记录是现场计量设备的运行结果。通常需要根据记录中某些字段中的值,例如服务类型和质量、服务持续时间等,查找每个记录的费率或其他值。一旦确定了费率,就将其写入记录中的费率字段,以便将记录作为一个单元进行进一步处理。
[0003] 执行这种查询的一个简单机制是在接收到每个新记录时对数据库执行参数化SQL语句。例如,假设事务处理系统接收记录流(stream),其中每个记录(record)包含至少两个字段,名为字段A和字段B,每个字段包含要在查询中使用的值。然后,如上所述,对于每个这样的记录,需要根据记录中字段A和B的值进行检索,检索出存储在关系数据库表C中的字段值。这种查询可以写成两个表(表t1和t2)的连接,这两个表在第三个字段D的值上关联,其中第二个表保存字段B的参数值。然后,在一个处理流中记录的简单程序中可以使用这个SELECT语句,该程序通过从每个记录中读取字段A和B的值,对该记录执行查询,从查询结果中读取字段(C),然后将字段C的内容写入原始记录。
[0004] 这种方法的最大问题是效率不高,特别是当执行查询的开销成本相对于查询本身的开销成本(尤其包括RPC开销)较小时。此外,这种方法在处理后续记录的相同查询时,不会利用数据库在对一条记录执行查询的过程中所做的任何工作。(这种工作的重要例子包括在合并连接中发生的排序、为执行散列连接而构建的散列表,以及在嵌套循环连接的情况下读取页面的索引遍历)。

发明内容

[0005] 本发明的目的在于提供一种流式事务处理方法及系统,从而解决现有技术中存在的前述问题。
[0006] 为了实现上述目的,本发明采用的技术方案如下:
[0007] 一种流式事务处理方法,其中每个事务需要对关系数据库执行参数化查询,所述参数化查询从每个事务中获取至少一个输入;包括如下步骤:
[0008] S1、识别从事务中获取的参数化查询的输入;
[0009] S2、创建一个用于保存参数化查询的输入的参数表;
[0010] S3、将参数化查询转化为包含与参数表连接的等效查询;
[0011] S4、将识别的参数化查询的输入填充入参数表;
[0012] S5、判断参数表是否被填满,若否,则返回步骤S4;若是,则执行步骤S6;
[0013] S6、应用等效查询查询关系数据库以生成结果集,并将结果集的输出值插入相应的事务中;
[0014] S7、判断事务是否为最后一个事务,若是,则事务处理完毕;若否,则删除参数表,并返回步骤S1。
[0015] 优选的,所述步骤S1具体包括如下步骤:
[0016] 对参数化查询进行词法分析,以生成多个令牌;
[0017] 解析令牌,以识别参数化查询的输入和输出。
[0018] 优选的,所述参数表有特定的大小,针对不同的事务将会创建不同大小的参数表。
[0019] 优选的,所述步骤S2具体包括根据参数化查询的输入的个数使用关系数据库的第一接口创建参数表,所述第一接口为单一数据操作。
[0020] 优选的,所述步骤S3具体包括如下步骤:
[0021] 将参数化查询建模为树结构;
[0022] 将树结构描述为树语法结构;
[0023] 根据参数化查询的输入与树语法结构之间的匹配,选择规则集中的至少一个规则,采用选择出的规则将参数化查询转化为包含与参数表连接的等效查询。
[0024] 优选的,所述步骤S4具体包括使用关系数据库的第二接口将参数化查询的输入填充入参数表,所述第二接口为批量数据操作。
[0025] 本发明的目的还在于提供一种流式事务处理系统,所述流式事务处理系统用于实现上述任一所述的流式事务处理方法;所述流式事务处理系统包括:
[0026] 识别单元,所述识别单元用于识别参数化查询的输入和输出;
[0027] 生成单元,用于在存储器中创建参数表以保存参数化查询的输入;
[0028] 转换单元,用于将参数化查询转化为包含与参数表连接的等效查询;
[0029] 填充单元,用于将识别的参数化查询的输入填充入参数表;
[0030] 第一判断单元,用于判断参数表是否被填满;
[0031] 处理单元,用于应用等效查询查询关系数据库以生成结果集;
[0032] 插入单元,用于将结果集的输出值插入每个所述事务中,并在等效查询结束后删除所述参数表;
[0033] 第二判断单元,用于判断当前查询的事务是否为最后一个事务;
[0034] 计数单元,用于统计事务的个数。
[0035] 优选的,所述识别单元包括:
[0036] 词法分析器,用于对参数化查询进行词法分析,以生成多个令牌;
[0037] 解析器,用于解析令牌,以识别参数化查询的输入和输出。
[0038] 优选的,所述流式事务处理系统包括流水线控制器,所述流水线控制器对批量事务进行排序,并控制批量事务的参数化查询顺序。
[0039] 本发明的有益效果是:1、能够对事务进行批量处理,提高事务处理效率,节省事务处理时间。2、通过将流式事务记录成“块”序列,对每个“块”序列执行批量处理,简化了参数化查询,同时使用参数表保存参数化查询的输入,这样的操作使查询的开销分摊在多个记录上,关系数据库可以选择查询计划,允许它在“块”中的记录之间最佳地共享执行查询的工作。3、本发明批量处理事务的方法能够极大的降低软件开发人员的开发时间,提高开发效率。4、本发明支持SQL(结构化查询语言)开发模式,能够有效降低开发门槛,为项目实施提供便捷。

附图说明

[0040] 图1是本发明实施例中流式事务处理方法的流程图。

具体实施方式

[0041] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
[0042] 如图1所示,本发明提供了一种流式事务处理方法,其中每个事务需要对关系数据库执行参数化查询,所述参数化查询从每个事务中获取至少一个输入;包括如下步骤:
[0043] S1、识别从事务中获取的参数化查询的输入;
[0044] S2、创建一个用于保存参数化查询的输入的参数表;
[0045] S3、将参数化查询转化为包含与参数表连接的等效查询;
[0046] S4、将识别的参数化查询的输入填充入参数表;
[0047] S5、判断参数表是否被填满,若否,则返回步骤S4;若是,则执行步骤S6;
[0048] S6、应用等效查询查询关系数据库以生成结果集,并将结果集的输出值插入相应的事务中;
[0049] S7、判断事务是否为最后一个事务,若是,则事务处理完毕;若否,则删除参数表,并返回步骤S1。
[0050] 本实施例中,所述流式事务处理方法,是一可循环实施的方法,根据事务的个数进行循环,可以对单个事务或者是批量事务进行查询处理,大批量的处理事物,提高处理效率,节省处理时间。
[0051] 本实施例中,当对流式事务进行处理时,首先统计流式事务中包含的事务个数,将此批量事务进行排序,之后开始对批量事务中的各个事务进行处理,处理过程为:识别从事务中获取的参数化查询的输入;创建一个用于保存参数化查询的输入的参数表;将参数化查询转化为包含与参数表连接的等效查询;将识别的参数化查询的输入填充入参数表;参数表被填满后应用等效查询查询关系数据库以生成结果集,并将结果集的输出值插入相应的事务中;完成事务处理。当一个储物被处理完成后,将按照事先排好的事务顺序进就行下个事务的处理,直到此批量事务被处理完毕。在进行下一批量数据处理时,将会重新统计批量事务的个数,之后再进行相关操作。
[0052] 本实施例中,所述步骤S1具体包括如下步骤:对参数化查询进行词法分析,以生成多个令牌;解析令牌,以识别参数化查询的输入和输出。一般来说,通过使用选定的字符(如“空白”字符、逗号等)作为识别标记分隔符来进行词汇化,形成令牌。之后对令牌进行解析,采用令牌的应用语法结构或者是语法,以便识别运算符、操作数和参数等。进而识别参数化查询的输入和输出。
[0053] 本实施例中,所述参数表有特定的大小,针对不同的事务将会创建不同大小的参数表,对每个事物进行处理时,都会重建一个参数表,当处理完此事务后,将此事务对应的参数表进行删除。也就是说不同的事务对应不同的参数表。
[0054] 本实施例中,所述步骤S2具体包括根据参数化查询的输入的个数使用关系数据库的第一接口创建参数表,所述第一接口为单一数据操作。
[0055] 本实施例中,所述步骤S3具体包括如下步骤:将参数化查询建模为树结构;将树结构描述为树语法结构;根据参数化查询的输入与树语法结构之间的匹配,选择规则集中的至少一个规则,采用选择出的规则将参数化查询转化为包含与参数表连接的等效查询。将参数化查询转换成语义等效的等效查询,该等效查询对包含参数表使用一个或多个连接。使用至少一组预定义规则执行此转换。其中,第一个规则通过简单的参数替换来转换查询,并且适用于Select/Project/Join查询。根据这个规则,查询的第一个核心转换是引入与参数表的交叉连接。反过来,这需要将所有参数化查询输入替换为对参数表中相应列的引用。
查询的第二个核心转换是引入记录标识符,该标识符用生成记录的参数化查询的输入来标记每个结果集记录;同一规则还将处理包含相关子查询的查询(包含子句的查询,如EXISTS或IN),其中子查询在包含上下文的范围内。根据另一个规则,为了通过简单的参数替换来转换具有多个可变范围的查询(例如,包括派生表或强制连接顺序的查询),上述核心转换被多次应用于查询。然后,一个附加的转换在派生表和周围查询之间添加了一个等连接谓词。这个规则用于处理联合查询。
[0056] 本实施例中,通常规则的选择由参数化查询的输入的语法和语义驱动。因此,通过使用树语法结构来识别查询的结构来完成规则选择。当树语法结构匹配出结构的一部分时,会采取一个语义动作。对于输入查询中不需要修改的部分,语法匹配的输出只是重新生成树结构的适当部分。对于输入查询中确实需要修改的部分,语法匹配的输出根据上述规则组装正确的树结构。树语法结构是使用ANTLR工具及其对树的正则表达式的变体来构建的。
[0057] 本实施例中,所述步骤S4具体包括使用关系数据库的第二接口将参数化查询的输入填充入参数表,所述第二接口为批量数据操作。
[0058] 本发明还提供了一种流式事务处理系统,所述流式事务处理系统用于实现上述权利要求1至6任一所述的流式事务处理方法;所述流式事务处理系统包括:
[0059] 识别单元,所述识别单元用于识别参数化查询的输入和输出;
[0060] 生成单元,用于在存储器中创建参数表以保存参数化查询的输入;
[0061] 转换单元,用于将参数化查询转化为包含与参数表连接的等效查询;
[0062] 填充单元,用于将识别的参数化查询的输入填充入参数表;
[0063] 第一判断单元,用于判断参数表是否被填满;
[0064] 处理单元,用于应用等效查询查询关系数据库以生成结果集;
[0065] 插入单元,用于将结果集的输出值插入每个所述事务中,并在等效查询结束后删除所述参数表;
[0066] 第二判断单元,用于判断当前查询的事务是否为最后一个事务;
[0067] 计数单元,用于统计事务的个数。
[0068] 本实施例中,当对流式事务进行批量处理时,首先计数单元将会统计流式事务中的事务个数,之后识别单元对第一个事务进行参数化查询,获取参数化查询的输入,之后生成单元将会在存储器中创建参数表,以保存参数化查询的输入;转换单元将参数查询转化为包含与参数表连接的等效查询;之后填充单元将识别的参数化查询的输入填充入参数表;此时,第一判断单元判断参数表是否被填满,如果没有填满,则填充单元继续填充,直到填满,若填满,则处理单元应用等效查询查询关系数据库以生成结果集;之后插入单元将结果集的输出值插入每个所述事务中;等效查询结束后,第二判断单元判断当前查询的事务是否为最后一个事务,若不是最后一个事务,并插入单元将删除所述参数表,同时,识别单元将识别下一个事务,进入下一个事务的处理,直到最后一个事务处理完成。
[0069] 本实施例中,所述识别单元包括:词法分析器,用于对参数化查询进行词法分析,以生成多个令牌;解析器,用于解析令牌,以识别参数化查询的输入和输出。
[0070] 本实施例中,所述流式事务处理系统包括流水线控制器,所述流水线控制器对批量事务进行排序,并控制批量事务的参数化查询顺序。当处理系统对批量事务进行处理时,流水线控制器将会对批量事务进行排序,保证各个事务有序处理,直到此批量的所有事务处理完成。
[0071] 通过采用本发明公开的上述技术方案,得到了如下有益的效果:
[0072] 本发明提供了一种流式事务处理方法及系统,通过采用该处理方法和系统能够对事务进行批量处理,提高事务处理效率,节省事务处理时间。该处理方法将流式事务记录成“块”序列,对每个“块”序列执行批量处理,简化了参数化查询,同时使用参数表保存参数化查询的输入,这样的操作使查询的开销分摊在多个记录上,关系数据库可以选择查询计划,允许它在“块”中的记录之间最佳地共享执行查询的工作。该批量处理事务的方法能够极大的降低软件开发人员的开发时间,提高开发效率;同时本发明支持SQL(结构化查询语言)开发模式,能够有效降低开发门槛,为项目实施提供便捷。
[0073] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。