分库分表消息路由方法及装置与流程

文档序号:20264382发布日期:2020-04-03 18:12阅读:234来源:国知局
本发明涉及数据库领域,具体而言,涉及一种分库分表消息路由方法及装置。
背景技术
::在风险绩效领域计算风险指标时会使用很长一段时间的数据,比如绩效基金的业绩会用到从成立到计算时所有数据。还有大量的类似情况,导致数据无法按常规的方式把数据切分为当前数据和历史数据。随着时间和业务的发展,表中的数据量也会越来越大,相应地,数据操作,增、删、改、查的开销也会越来越大。另外,一台服务器的资源(cpu、磁盘、内存、io等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。技术实现要素:本发明为了解决上述技术问题中的至少一个,提出了一种分库分表消息路由方法及装置。为了实现上述目的,根据本发明的一个方面,提供了一种分库分表消息路由方法,该方法包括:确定接收到的数据库操作请求中的逻辑表名和分库分表消息路由键值;确定所述逻辑表名对应的分库分表消息路由配置信息列表,其中,所述分库分表消息路由配置信息列表包括若干条分库分表消息路由配置信息,每条分库分表消息路由配置信息包括:分片号、数据库名和逻辑表名;根据所述分库分表消息路由键值确定分片号;根据计算出的分片号从所述分库分表消息路由配置信息列表中确定出对应的分库分表消息路由配置信息,并将所述数据库操作请求路由到所述对应的分库分表消息路由配置信息对应的数据库中进行处理。可选的,在所述确定所述逻辑表名对应的分库分表消息路由配置信息列表之前,还包括:根据逻辑表名对所有的分库分表消息路由配置信息进行分类,得到各逻辑表名对应的分库分表消息路由配置信息列表;将各逻辑表名对应的分库分表消息路由配置信息列表加载到缓存中。可选的,在所述确定所述逻辑表名对应的分库分表消息路由配置信息列表,包括:从所述缓存中查找所述数据库操作请求的逻辑表名对应的分库分表消息路由配置信息列表。可选的,所述根据所述分库分表消息路由键值确定分片号,包括:计算所述分库分表消息路由键值的哈希值;根据所述分库分表消息路由键值的哈希值在预设的hash环上的位置确定所述分库分表消息路由键值对应的分片号。为了实现上述目的,根据本发明的另一方面,提供了一种分库分表消息路由装置,该装置包括:数据库操作请求处理单元,用于确定接收到的数据库操作请求中的逻辑表名和分库分表消息路由键值;分库分表消息路由配置信息列表确定单元,用于确定所述逻辑表名对应的分库分表消息路由配置信息列表,其中,所述分库分表消息路由配置信息列表包括若干条分库分表消息路由配置信息,每条分库分表消息路由配置信息包括:分片号、数据库名和逻辑表名;分片号计算单元,用于根据所述分库分表消息路由键值确定分片号;数据库操作请求路由单元,用于根据计算出的分片号从所述分库分表消息路由配置信息列表中确定出对应的分库分表消息路由配置信息,并将所述数据库操作请求路由到所述对应的分库分表消息路由配置信息对应的数据库中进行处理。可选的,该分库分表消息路由装置还包括:分库分表消息路由配置信息分类单元,用于根据逻辑表名对所有的分库分表消息路由配置信息进行分类,得到各逻辑表名对应的分库分表消息路由配置信息列表;缓存单元,用于将各逻辑表名对应的分库分表消息路由配置信息列表加载到缓存中。可选的,所述分库分表消息路由配置信息列表确定单元,具体用于从所述缓存中查找所述数据库操作请求的逻辑表名对应的分库分表消息路由配置信息列表。可选的,所述分片号计算单元包括:哈希计算模块,用于计算所述分库分表消息路由键值的哈希值;分片号确定模块,用于根据所述分库分表消息路由键值的哈希值在预设的hash环上的位置确定所述分库分表消息路由键值对应的分片号。为了实现上述目的,根据本发明的另一方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述分库分表消息路由方法中的步骤。为了实现上述目的,根据本发明的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序在计算机处理器中执行时实现上述分库分表消息路由方法中的步骤。本发明的有益效果为:本发明实施例根据设定的分库分表消息路由配置信息对数据库操作请求等消息在包括多个分库的数据库集群中进行路由,其中分库分表消息路由配置信息为根据各分库中的分片号、逻辑表、物理表的信息生成的,本发明实施例基于分库分表消息路由配置信息、分库分表键以及逻辑表名进行消息路由,提升应用业务处理效率,降低系统单库的风险及压力。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:图1是本发明实施例分库分表消息路由方法的第一流程图;图2是本发明实施例分库分表消息路由方法的第二流程图;图3是本发明实施例计算分片号的流程图;图4是本发明实施例分库分表消息路由装置的第一结构框图;图5是本发明实施例分库分表消息路由装置的第二结构框图;图6是本发明实施例分片号计算单元的组成结构框图;图7是本发明实施例消息路由的流程图;图8是本发明实施例跨库处理方案的示意图;图9是本发明实施例计算机设备示意图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。下面对本申请中的一些技术词语进行解释说明:分库分表:分库分表是常用的数据分布式处理的方式,主要分库分表策略:竖直切分:以列为单位对数据表进行拆分,降低业务逻辑之间的耦合度,水平切分:以行为单位对数据表进行拆分,降低单表数据量;逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order;物理表:在分片的数据库中真实存在的物理表。即逻辑表拆分示例中的t_order_0到t_order_9;数据节点:数据分片的最小单元。由数据源名称和数据表组成,例:ds0.t_order_0;广播表:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表;分库分表键:用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段;分布式事务:是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的节点之上。图1是本发明实施例分库分表消息路由方法的第一流程图,如图1所示,本实施例的分库分表消息路由方法包括步骤s101至步骤s104。步骤s101,确定接收到的数据库操作请求中的逻辑表名和分库分表消息路由键值。在本发明实施例中,所述分库分表消息路由键值为所述数据库操作请求中预设字段的值。在本发明实施例中,本发明通过分库分表将现有的单库分成包括多个数据库的数据库集群,数据库集群里包括两种类型的数据库:分库:分库具有多个,从分库1至分库n,用于存放大数据表(t_0表)和广播表(需要经常做关联的表,如g_tbl)数据;默认库:存放配置类表(分库分表消息路由配置信息、配置信息c_tbl、基础信息r_tbl),广播表以及根据分库数据计算后的统计结果表数据等。进而根据分库分表的情况设置分库分表消息路由配置信息,当接收到数据库操作请求时,根据数据库操作请求中的逻辑表名和分库分表消息路由键值以及预设的分库分表消息路由配置信息将数据库操作请求路由到对应的分库中的物理表中进行处理。在本发明可选实施例中,数据库操作请求可以采用现有的数据库语言sql,数据库操作请求sql中包括逻辑表名等数据库操作字段。在本发明实施例中,数据库操作请求sql还包括组合id字段,该组合id字段为分库分表消息路由键,该组合id字段对应的值为分库分表消息路由键值。在本发明可选实施例中,组合id字段可以为数据库操作请求sql中预设的字段。步骤s102,确定所述逻辑表名对应的分库分表消息路由配置信息列表,其中,所述分库分表消息路由配置信息列表包括若干条分库分表消息路由配置信息,每条分库分表消息路由配置信息包括:分片号、数据库名和逻辑表名。在本发明可选实施例中,分库分表消息路由配置信息可以参见表1,如表1实施例所示,每条分库分表消息路由配置信息包括:分片号、数据库名、逻辑表名、物理表名以及分片方式等信息,其中数据库名对应分库的名称。在本发明实施例中,本步骤可以先对所有的分库分表消息路由配置信息进行归总形成如下表1所示的总分库分表消息路由配置信息列表,进而根据逻辑表名对总分库分表消息路由配置信息列表进行分类,得到各逻辑表名对应的分库分表消息路由配置信息列表。进而在确定数据库操作请求中的逻辑表名后,可以确定该逻辑表名对应的分库分表消息路由配置信息列表。分片号数据库名逻辑表名物理表名分片方式bk1db0user_infouser_info1split_db_tablebk2db0user_infouser_info2split_db_tablebk3db1user_infouser_info3split_db_tablebk4db1user_infouser_info4split_db_table1db0org_infoorg_info1split_db2db1org_infoorg_info2split_db1db0role_inforole_info1split_table2db0role_inforole_info2split_table表1步骤s103,根据所述分库分表消息路由键值确定分片号。在本发明可选实施例中,本步骤可以采用多种方法确定分片号,在本发明的一可选实施例中,本步骤可以先建立不同分库分表消息路由键值与分片号的对应关系,进而在得到分库分表消息路由键值后直接确定对应的分片号。在本发明的其他可选实施例中,本步骤也可以采用现有的分片号计算方法。步骤s104,根据计算出的分片号从所述分库分表消息路由配置信息列表中确定出对应的分库分表消息路由配置信息,并将所述数据库操作请求路由到所述对应的分库分表消息路由配置信息对应的数据库中进行处理。在本发明可选实施例中,本步骤可以根据上述步骤s103得到的分片号从上述步骤s102得到的分库分表消息路由配置信息列表中确定出该分片号对应的一条或多条分库分表消息路由配置信息,进而读取出该分库分表消息路由配置信息中的数据库名和物理表名,最后将数据库操作请求路由到该数据库名对应的分库,并在该物理表名对应的物理表中进行对应的操作处理。由以上描述可以看出,本发明实施例的分库分表消息路由方法通过对单库进行分库分表,并根据分库分表消息路由配置信息对数据库操作请求等消息进行路由,提升应用业务处理效率,降低系统单库的风险及压力。本发明实施例考虑采用分库分表消息路由的方式,存放计算所需各类基础数据,保证业务正常快速处理。图2是本发明实施例分库分表消息路由方法的第二流程图,如图2所示,本实施例的分库分表消息路由方法还包括步骤s201至步骤s202。步骤s201,根据逻辑表名对所有的分库分表消息路由配置信息进行分类,得到各逻辑表名对应的分库分表消息路由配置信息列表。在本发明实施例中,本步骤可以先对所有的分库分表消息路由配置信息进行归总形成如下表1所示的总分库分表消息路由配置信息列表,进而根据逻辑表名对总分库分表消息路由配置信息列表进行分类,得到各逻辑表名对应的分库分表消息路由配置信息列表。在本发明的可选实施例中,所有的分库分表消息路由配置信息储存在默认库中,本步骤查询默认库中的分库分表消息路由配置信息,循环每条配置信息,将其转成map形式,key为逻辑表名,value为对应逻辑表名下的所有分库分表消息路由配置信息列表。步骤s202,将各逻辑表名对应的分库分表消息路由配置信息列表加载到缓存中。在本发明实施例中,本步骤将询到的所有配置信息以key-value的形式缓存至redis缓存中,在进行消息路由时,直接从缓存中获取对应的配置信息,提高了路由的效率。在本发明的可选实施例中,上述步骤s102的确定所述逻辑表名对应的分库分表消息路由配置信息列表,具体为从所述缓存中查找所述数据库操作请求的逻辑表名对应的分库分表消息路由配置信息列表。本发明实施例通过从缓存中获取各逻辑表名对应的分库分表消息路由配置信息,减小数据库压力,使消息路由速度更快。图3是本发明实施例计算分片号的流程图,如图3所示,在本发明可选实施例中,上述步骤s103的根据所述分库分表消息路由键值确定分片号,具体包括步骤s301和步骤s302。步骤s301,计算所述分库分表消息路由键值的哈希值。步骤s302,根据所述分库分表消息路由键值的哈希值在预设的hash环上的位置确定所述分库分表消息路由键值对应的分片号。本发明实施例在进行消息路由时,先根据逻辑表名获取对应的分库分表消息路由配置信息列表,如果存在,则根据分库分表消息路由键值进行一致性hash处理,算出对应的分片号,然后根据分片号获取具体的分库分表消息路由配置信息,从而可将对应的数据库操作请求路由至对应的分库及物理表进行处理。在本发明可选实施例中,可以采用一致性hash处理的方法来计算分片号,具体分片策略可以为:通过哈希函数根据物理表名+分片号计算出分片节点,并将每个物理表名+分片号得到的分片节点分配到2^32的hash环上的一个位置(分片节点)。此外,每个分库分表消息路由键值也会被映射到2^32的hash环上的一个位置。这个分库分表消息路由键值最终被放置在距离该它的位置最近,且位置编号大于等于该值的分片节点里面,即放置到顺时针的下一个分片节点里面。在本发明可选实施例中,上述分片策略采用google的murmurhash一致性hash算法,数据分布均匀,每分片数据量最大和最小相差2%以内。在本发明可选实施例中,每个分库分表消息路由键值都根据hash算法算出的键值(key)分散在2^32的hash环上,然后key值获取顺时针最近的分片节点号,即为该分库分表消息路由键值对应的分片号。图7是本发明实施例消息路由的流程图,如图7所示,在本发明的一可选实施例中,分库分表路由处理流程可以为:1、获取逻辑表名,从shardingsphere的标准分片接口中获取对应的逻辑表名,需要在分库分表配置文件中进行配置,如未配置,则无法获取;2、根据逻辑表名获取对应的分库分表消息路由配置信息列表。从redis缓存中获取该逻辑表对应的分库分表消息路由配置信息列表,如果不存在,则查询默认数据库,如在数据库中存在该逻辑表的配置,则将其添加至redis缓存中;3、判断是否存在该逻辑表的分库分表消息路由配置信息列表,如果不存在,则直接返回默认库及逻辑表名,如果存在,则继续。图8是本发明实施例跨库处理方案的示意图,如图8所示,本发明对多个分库间的夸库处理进行了设置,本发明实施例可将跨库事务拆分为多个分库的本地事务,然后依次切换数据源,在各分库执行各个子本地事务。采用事务日志表记录所有的事务操作sql,如果子事务提交成功,将会删除事务日志;如果执行失败,则会按照配置的重试次数,尝试再次提交,即最大努力的进行提交,尽量保证数据的一致性,这里可以根据不同的业务场景,平衡c和a,采用同步重试或异步重试。当然,应该在应用层尽量避免产生跨库事务,比如批量处理时,可以先根据组合id确定对应的库,然后将多个在同一数据库的组合组成一个批次进行处理,从而有效的避免跨库事务产生。在本发明的可选实施例中,本发明的分库分表消息路由方法中的每条消息都具有全局唯一id,本发明根据传入生成类型不同,可生成不同类型的全局唯一id,本发明支持库号+组件号+日期+循环序列号的方式生成全局唯一id,同时也支持雪花算法生成全局唯一id。在本发明可选实施例中,获取唯一id生成方式可以有三种取值:snow_flake(雪花算法)、char_20(20位定长字符串)、user_define(用户自定义),所有算法都实现统一接口方法。在本发明可选实施例中,如果生成方式是snow_flake(雪花算法),则采用twitter开源的snowflake算法,不需要依赖任何第三方组件,这样其扩展性和维护性得到最大的简化,但需要注意(强依赖时间,如果时钟回拨,就会生成重复的id)。如果生成方式是char_20,则根据当前数据库库号、应用组件号、8位日期、10位可循环序列号生成20位定长字符串全局唯一id,每日最大10亿数据量。如果生成方式是user_define,则根据传入的beanid,调用对应的接口方法生成全局唯一id。需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。基于同一发明构思,本发明实施例还提供了一种分库分表消息路由装置,可以用于实现上述实施例所描述的分库分表消息路由方法,如下面的实施例所述。由于分库分表消息路由装置解决问题的原理与分库分表消息路由方法相似,因此分库分表消息路由装置的实施例可以参见分库分表消息路由方法的实施例,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图4是本发明实施例分库分表消息路由装置的第一结构框图,如图4所示,本发明实施例分库分表消息路由装置包括:数据库操作请求处理单元1、分库分表消息路由配置信息列表确定单元2、分片号计算单元3和数据库操作请求路由单元4。数据库操作请求处理单元1,用于确定接收到的数据库操作请求中的逻辑表名和分库分表消息路由键值。其中,所述分库分表消息路由键值为所述数据库操作请求中预设字段的值。分库分表消息路由配置信息列表确定单元2,用于确定所述逻辑表名对应的分库分表消息路由配置信息列表,其中,所述分库分表消息路由配置信息列表包括若干条分库分表消息路由配置信息,每条分库分表消息路由配置信息包括:分片号、数据库名和逻辑表名。分片号计算单元3,用于根据所述分库分表消息路由键值确定分片号。数据库操作请求路由单元4,用于根据计算出的分片号从所述分库分表消息路由配置信息列表中确定出对应的分库分表消息路由配置信息,并将所述数据库操作请求路由到所述对应的分库分表消息路由配置信息对应的数据库中进行处理。图5是本发明实施例分库分表消息路由装置的第二结构框图,如图5所示,本发明实施例分库分表消息路由装置还包括:分库分表消息路由配置信息分类单元5和缓存单元6。分库分表消息路由配置信息分类单元5,用于根据逻辑表名对所有的分库分表消息路由配置信息进行分类,得到各逻辑表名对应的分库分表消息路由配置信息列表。缓存单元6,用于将各逻辑表名对应的分库分表消息路由配置信息列表加载到缓存中。在本发明可选实施例中,分库分表消息路由配置信息列表确定单元2可以从所述缓存中查找所述数据库操作请求的逻辑表名对应的分库分表消息路由配置信息列表。图6是本发明实施例分片号计算单元的组成结构框图,如图6所示,在本发明实施例中,上述分片号计算单元3包括:哈希计算模块301和分片号确定模块302。哈希计算模块301,用于计算所述分库分表消息路由键值的哈希值。分片号确定模块302,用于根据所述分库分表消息路由键值的哈希值在预设的hash环上的位置确定所述分库分表消息路由键值对应的分片号。为了实现上述目的,根据本申请的另一方面,还提供了一种计算机设备。如图9所示,该计算机设备包括存储器、处理器、通信接口以及通信总线,在存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例方法中的步骤。处理器可以为中央处理器(centralprocessingunit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及单元,如本发明上述方法实施例中对应的程序单元。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及作品数据处理,即实现上述方法实施例中的方法。存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。所述一个或者多个单元存储在所述存储器中,当被所述处理器执行时,执行上述实施例中的方法。上述计算机设备具体细节可以对应参阅上述实施例中对应的相关描述和效果进行理解,此处不再赘述。为了实现上述目的,根据本申请的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序在计算机处理器中执行时实现上述分库分表消息路由方法中的步骤。本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,缩写:hdd)或固态硬盘(solid-statedrive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1