分布式数据库系统的事务处理方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别是涉及一种分布式数据库系统的事务处理方法及装置。
【背景技术】
[0002]联机事务处理系统(Online Transact1n Processing,简称为OLTP),是一种事务性非常高的系统,一般都是高可用的在线系统。这样的系统每秒处理的交互(Transact1n)往往都超过几百个或者是几千个,而查询语句(select)的执行量每秒几千甚至几万。典型的OLTP系统有电子商务系统、银行系统、证券系统,例如,国内银行使用的DB2业务数据数据库,就是很典型的OLTP数据库。随着业务越做越大,数据量也会越来越大,同时计算也会越来越复杂,性能、可靠性、可扩展性的需求就会越来越强烈,这个时候一个集中式的关系型数据库很显然已经满足不了需求。
[0003]为了解决这种数据量、事务量大带来的中央处理器(Central Processing Unit,简称为CPU)和磁盘的压力,分布式数据库系统应运而生,成为信息处理的重要技术。分布式数据库是由若干个单节点数据库集合而成,他们通过网络连接一起,每个节点都是独立的数据库系统,他们拥有各自的数据库、CPU、数据管理系统,因此分布式数据库系统可以看做是一系列集中式数据库系统的联合。他们在逻辑上属于同一系统数据库,但在物理结构上是分布式的。
[0004]性能和数据的可扩展性是构建分布式数据库的业务驱动,通过分布式数据库可以为业务提供数据和性能的扩展,但随之也带来一系列问题,例如分布式存储过程的支持、数据一致性、分布式事务的支持与处理、数据重分布等问题。其中分布式事务又是分布式数据库需要解决的重点问题。
【发明内容】
[0005]鉴于现有技术中分布式数据库系统的事务处理所存在的上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的分布式数据库系统的事务处理方法及装置。
[0006]本发明提供一种分布式数据库系统的事务处理方法,包括:
[0007]全局事务处理中心服务器接收用户提交的事务结构化查询语言SQL语句,并根据SQL语句生成SQL语法树;
[0008]全局事务处理中心服务器遍历SQL语法树,根据分布式数据库系统的分布情况,生成能够在分布式数据库系统各个数据库节点执行的SQL执行树;
[0009]全局事务处理中心服务器申请与SQL执行树对应的全局事务标识GTID,并遍历SQL执行树,将SQL执行树的执行节点上的SQL语句下发到相应的数据库节点上执行,其中,GTID携带在SQL语句中;
[0010]全局事务处理中心服务器接收执行结果,根据执行结果遍历SQL执行树,在确定SQL执行树上的SQL语句都执行成功且完毕后,将执行结果返回给用户,并释放GTID。
[0011 ] 优选地,在各个数据库节点执行SQL语句时,在数据库节点存储的SQL语句的操作数据的隐含列中存储相应的GTID,并将SQL语句的操作数据的前后值写入到各个数据库节点的数据库日志;
[0012]上述方法进一步包括分布式回滚操作:全局事务处理中心服务器在部分数据库节点提交的执行结果为执行SQL语句成功,部分数据库节点提交的执行结果为执行SQL语句失败的情况下,获取执行SQL语句成功的数据库节点的数据库日志,通过GTID从数据库日志中获取已执行成功的SQL语句以及操作数据的前后值,根据已执行成功的SQL语句以及操作数据的前后值构造反向SQL语句,对已执行成功的SQL语句进行回滚操作,将已执行成功的SQL语句回滚到与执行失败的SQL语句一致的状态。
[0013]优选地,全局事务处理中心服务器接收用户提交的事务结构化查询语言SQL语句,并根据SQL语句生成SQL语法树具体包括:
[0014]全局事务处理中心服务器接收用户提交的事务SQL语句;
[0015]全局事务处理中心服务器根据SQL语法规则、以及面向分布式的应用规则制定SQL语法分析器,通过SQL语法分析器分析事务SQL语句,生成SQL语法树,并根据SQL语法树重构所需要的SQL语句,其中,SQL语法树包括SQL语句节点和SQL语句操作节点,如果两个SQL语句节点之间是主从关系,则通SQL语句操作节点对两个SQL语句节点进行连接。
[0016]优选地,全局事务处理中心服务器遍历SQL语法树,根据分布式数据库系统的分布情况,生成能够在分布式数据库系统各个数据库节点执行的SQL执行树具体包括:
[0017]全局事务处理中心服务器从根节点深度遍历SQL语法树,在遍历到叶子节点后,开始进行归并操作,将能放在一个SQL语句中下发到数据库节点执行的父子关系的节点和兄弟关系的节点合并成一个执行节点,在当前节点无法合并时,将当前节点分布下发到SQL执行树的执行节点上,最后进行汇总操作,生成能够在分布式数据库系统各个数据库节点执行的SQL执行树。
[0018]优选地,在生成能够在分布式数据库系统各个数据库节点执行的SQL执行树时,上述方法进一步包括:
[0019]在SQL执行树上的SQL语句所涉及到的数据均分布在同一数据库节点时,将该SQL语句标识为直接下发到对应数据库节点执行;在SQL执行树上的SQL语句涉及到的数据分布在不同数据库节点时,将该SQL语句标识为需要进行汇总操作,并将SQL语句分解成的子SQL语句标识为直接下发到相应数据库节点执行;
[0020]将SQL执行树上的SQL语句下发到相应的数据库节点上执行具体包括:
[0021]在SQL语句标识为直接下发的对应数据库节点执行时,全局事务处理中心服务器直接将该SQL语句下发到相应数据库节点执行;
[0022]在SQL语句分解成的子SQL语句标识为直接下发到相应数据库节点执行,该SQL语句标识为需要进行汇总操作时,全局事务处理中心服务器将该SQL语句的子SQL语句下发到各数据库节点执行后,接收各数据库节点反馈的执行结果并对执行结果进行数据汇总操作。
[0023]优选地,全局事务处理中心服务器申请与SQL执行树对应的全局事务标识GTID具体包括:
[0024]步骤I,全局事务处理中心服务器查询SQL执行树各执行节点上SQL语句的操作数据中的GTID ;
[0025]步骤2,全局事务处理中心服务器读取查询到的GTID,将该GTID和全局事务处理中心服务器中保存的当前系统活跃的GTID列表进行对比,判断与读取到的GTID相应的操作数据是否活跃;
[0026]步骤3,全局事务处理中心服务器在确定操作数据活跃的情况下,判断此次事务操作是否超时,或者此次事务操作的重试次数是否超出预先设置的重试次数阈值,如果超时或者超出重试次数阈值,则执行分布式回滚操作,如果未超时或者未超出重试次数阈值,则返回执行步骤I ;
[0027]步骤4,全局事务处理中心服务器在判断操作数据不活跃的情况下,申请一个新的GTID ;
[0028]步骤5,全局事务处理中心服务器将当前活跃的操作数据所对应的GTID存储到当前系统活跃的GTID列表中;
[0029]步骤6,在有其它事务申请对当前系统的活跃GTID列表中的GTID进行相关数据操作时,禁止其他事务进行操作。
[0030]本发明还提供了一种分布式数据库系统的事务处理装置,包括:
[0031]客户端模块,用于接收用户提交的事务结构化查询语言SQL语句
[0032]语法解析模块,用于根据SQL语句生成SQL语法树;
[0033]SQL处理模块,用于遍历SQL语法树,根据分布式数据库系统的分布情况,生成能够在分布式数据库系统各个数据库节点执行的SQL执行树;
[0034]全局事务标识模块,用于申请与SQL执行树对应的全局事务标识GTID,其中,GTID携带在SQL执行树的执行节点上的SQL语句中;
[0035]执行模块,用于遍历SQL执行树,将SQL执行树的执行节点上的SQL语句下发路由模块;
[0036]路由模块,用于将执行模块下发的SQL语句下发到相应的数据库节点上执行,并将执行结果反馈给执行模块;
[0037]执行模块进一步用于:接收执行结果,根据执行结果遍历SQL执行树,在确定SQL执行树上的SQL语句都执行成功且完毕后,将执行结果返回给用户,并控制全局事务标识模块释放GTID。
[0038]优选地,执行模块进一步用于:在部分数据库节点提交的执行结果为执行SQL语句成功,部分数据库节点提交的执行结果为执行SQL语句失败的情况下,获取执行SQL语句成功的数据库节点的数据库日志,通过GTID从数据库日志中获取已执行成功的SQL语句以及操作数据的前后值,根据已执行成功的SQL语句以及操作数据的前后值构造反向SQL语句,对已执行成功的SQL语句进行回滚操作,将已执行成功的SQL语句回滚到与执行失败的SQL语句一致的状态。
[0039]优选地,语法解析模块具体用于:
[0040]根据SQL语法规则、以及面向分布式的应用规则制定SQL语法分析器,通过SQL语法分析器分析事务SQL语句,生成SQL语法树,并根据SQL语法树重构所需要的SQL语句,其中,SQL语法树包括SQL语句节点和SQL语句操作节点,如果两个SQL语句节点之间是主从关系,则通SQL语句操作节点对两个SQL语句节点进行连接。
[0041 ] 优选地,SQL处理模块具体用于:
[0042]从根节点深度遍历SQL语法树,在遍历到叶子节点后,开始进行归并操作,将能放在一个SQL语句中下发到数据库节点执行的父子关系的节点和兄弟关系的节点合并成一个执行节点,在当前节点无法合并时,将当前节点分布下发到SQL执行树的执行节点上,最后进行汇总操作,生成能够在分布式数据库系统各个数据库节点执行的SQL执行树。
[0043]优选地,SQL处理模块进一步用于:
[0044]在生成可以在分布式数据库系统各个数据库节点执行的SQL执行树时,在SQL执行树上的SQL语句涉及到的数据都分布在同一数据库节点时,将该SQL语句标识为直接下发到对应数据库节点执行;在SQL执行树上的SQL语句涉及到的数据分布在不同数据库节点时,将该SQL语句标识为需要进行汇总操作,并将SQL语句分解成的子SQL语句标识为直接下发到相应数据库节点执行;
[0045]路由模块具体用于:在SQL语句标识为直接下发的对应数据库节点执行时,直接将该SQL语句下发到相应数据库节点执行;在SQL语句分解成的子SQL语句标识为直接下发到相应数据库节点执行,该SQL语句标识为需要进行汇总操作时,将该SQL语句的子SQL语句下发到各数据库节点执行后,将接收到的各数据库节点反馈的执行结果发送给执行模块;
[0046]执行模块进一步用于:对执行结果进行数据汇总操作。
[0047]优选地,执行模块具体包括:
[0048]加锁子模块,用于查询SQL执行树各执行节点上SQL语句的操作数据中的GTID ;在有其它事务申请对当前系统的活跃GTID列表中的GTID进行相关数据操作时,禁止其他事务进行操作;
[0049]判断子模块,用于读取查询到的GTID,将该GTID和全局事务处理中心服务器中保存的当前系统活跃的GTID列表进行对比,判断与读取到的GTID相应的操作数据是否活跃;
[0050]处理子模块,用于在确定操作数据活跃的情况下,判断此次事务操作是否超时,或者此次事务操作的重试次数是否超出预先设置的重试次数阈值,如果超时或者超出重试次数阈值,则执行分布式回滚操作,如果未超时或者未超出重试次数阈值,则调用加锁子模块;在判断操作数据不活跃的情况下,控制全局事务标识模块申请一个新的GTID,并将当前活跃的操作数据所对应的GTID存储到当前系统活跃的GTID列表中。
[0051]本发明有益效果如下:
[0052]通过在涉及到分布式多节点数据库的事务操作时,申请一个GTID,通过GT