CN111737228A - 数据库的分库分表方法及装置 - Google Patents
数据库的分库分表方法及装置 Download PDFInfo
- Publication number
- CN111737228A CN111737228A CN202010578314.5A CN202010578314A CN111737228A CN 111737228 A CN111737228 A CN 111737228A CN 202010578314 A CN202010578314 A CN 202010578314A CN 111737228 A CN111737228 A CN 111737228A
- Authority
- CN
- China
- Prior art keywords
- sub
- database
- library
- preset
- executed
- 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.)
- Granted
Links
Images
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/21—Design, administration or maintenance of databases
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库的分库分表方法及装置,涉及大数据技术领域,主要在于能够实现分库分表组件与业务代码的彻底分离,便于后期对分库分表组件和业务代码的维护,分库分表操作更加简单。其中方法包括:利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。本发明适用于数据库的分库分表。
Description
技术领域
本发明涉及大数据技术领域,尤其是涉及一种数据库的分库分表方法及装置。
背景技术
随着时间和业务的发展,数据库中数据量的增长是不可控的,数据库和表中的数据会越来越大,随之带来的是更高的磁盘、***开销,甚至出现数据库性能上的瓶颈,因此需要对数据库和表进行拆分,从而更好的提供数据服务。
本申请的发明人在研究中发现,通常使用自主开发的数据库中间件来实现对海量数据的分库分表,例如,DBProxy,sharding-JDBC等,然而,现有的数据库中间件,其分库分表的技术框架与业务代码相关,在性能上具有业务倾向性,且使用时需要研究业务代码,因此使用比较复杂,此外,现有的数据库中间件使用时会侵入业务代码,对于后期业务代码和中间件的维护不是很方便。
发明内容
本发明提供了一种数据库的分库分表方法及装置,主要在于能够实现分库分表组件与业务代码的彻底分离,便于后期对分库分表组件和业务代码的维护,分库分表操作更加简单。
根据本发明的第一个方面,提供一种数据库的分库分表方法,包括:
利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;
根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
根据本发明的第二个方面,提供一种数据库的分库分表装置,包括:
获取单元,用于利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;
确定单元,用于根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
根据本发明的第三个方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:
利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;
根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
根据本发明的第四个方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;
根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
本发明提供的一种数据库的分库分表方法及装置,与目前分库分表中间件与业务代码严重耦合的情况相比,本发明能够利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;并根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表,从而能够实现分库分表组件与业务代码的彻底分离,便于后期对分库分表组件和业务代码的维护,分库分表操作更加简单,同时该分库分表组件能够适用于各种业务场景,分库分表规则可灵活变更,可扩展性较强。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了本发明实施例提供的一种数据库的分库分表方法流程图;
图2示出了本发明实施例提供的另一种数据库的分库分表方法流程图;
图3示出了本发明实施例提供的一种数据库的的分库分表装置的结构示意图;
图4示出了本发明实施例提供的另一种数据库的的分库分表装置的结构示意图;
图5示出了本发明实施例提供的一种计算机设备的实体结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
目前,现有的数据库中间件,其分库分表的技术框架与业务代码相关,使用比较复杂,且现有的数据库中间件使用时会侵入业务代码,对于后期业务代码和中间件的维护不是很方便。
为了解决上述问题,本发明实施例提供了一种数据库的分库分表方法,如图1所示,所述方法包括:
101、利用预设分库分表注解获取待执行方法对应的分库分表参数。
其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法,待执行方法为需要进行分库分表操作的方法,例如,对某数据库中某数据表的增删查改,目前为了避免由于业务数据量过大而造成的数据库性能瓶颈,会对数据库进行分库分表处理,由此能够缓解数据库的压力,但是现有的分库分表中间件多与业务代码相关,操作繁琐,不便于后期对业务代码和中间件的维护,因此,为了实现分库分表组件与业务代码的彻底分离,本发明实施例应用面向切面编程的思想构建独立于业务代码的分库分表组件,并定义该分库分表组件对应的分库分表注解,例如,@Rounting(filedId=“userId”),同时将定义好的分库分表注解加载到需要进行分库分表操作的方法前面,即加载在待执行方法前面,因此在调取待执行方法时,会优先读取该分库分表注解对应的分库分表组件,实现分库分表功能,确定待执行方法中操作数据所涉及的目标数据库和目标数据表,之后在确定的目标数据库和目标数据表中执行该方法,即实现对该目标数据库和目标数据表的增删查改,由此不仅能够实现分库分表功能,还实现了分库分表组件与业务代码的彻底分离。
进一步地,具体在创建分库分表组件时,根据业务需求定义分库分表场景,该分库分表场景具体包括:一库多表、多库一表和多表多表等场景,当业务数据量比较大时,为了防止造成业务数据库性能的瓶颈可以选择多库多表的方式,例如,用户数据和订单数据,这种数据量较大的业务数据可以采用多库多表的场景,当业务数据量相对较少但为了保证数据库的性能,可以选择一库多表的场景和多库一表的场景。
进一步地,根据确定的分库分表场景,在业务代码的配置文件中配置涉及分库分表的数据库、数据库表、路由字段、表后缀、分库分表策略和数据源等,例如,针对多库多表的场景,pingan.dsroutingset.dataSourceNum=3,配置数据库的个数为3;pingan.dsroutingset.tableNum=4,配置数据库中数据表的个数为4;pingan.dsroutingset.rountingFiled=userId,配置分库分表的路由字段为用户ID;pingan.dsroutingset.tableSuffixStyle=%04d,配置数据表的后缀%04d,;pingan.dsroutingset.tableSuffixConnect=_,设置连接符号; pingan.dsroutingset.routing_Stategy=ROUTING_DS_TABLE_STATEGY,配置分库分表规则;db.mybatis.jdbc.driverClassName=XXXXXXX,db.mybatis.jdbc.url=XXXXXXX,db.mybatis.jdbc.username=XXXXXX,db.mybatis.jdbc.password=XXXXXX,配置各个数据源,由此在业务代码的配置文件中完成对该分库分表组件的配置。此外,在创建分库分表组件时,还需要在分库分表组件中定义业务方所需要的分库分表规则,例如,利用预设哈希算法实现分库分表功能,由此当业务方想要应用该分库分表组件时仅需要在业务代码的配置文件中进行简单配置,并将定义的分库分表组件的注解加载在待执行方法的前面,便可以实现分库分表功能,操作简单,轻量级,同时分库分表组件也没有嵌入业务代码,便于后期的维护。
对于本发明实施例,当调取待执行方法时会优先读取该分库分表注解,由于待执行方法是与数据库相关的操作方法,因此待执行方法中包含与数据库相关的参数,通过读取分库分表注解能够获取待操作方法中与数据库相关的参数,即分库分表参数,例如,@Rounting(filedId=”userId”),其中,userId 为分库分表参数,即路由字段,进一步地,读取该分库分表注解对应的分库分表组件中的分库分表规则,根据获取的待执行方法对应的分库分表参数和分库分表规则,能够确定待执行方法中的操作数据所在的目标数据和目标数据库。
102、根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
其中,预设分库分表规则可以根据业务方的需求进行设定,具体可以根据定义的预设哈希算法进行分库分表,还可以根据参数值的业务属性进行分库分表,本发明实施例不做具体限定,分库分表参数对应的参数值是指路由字段值,例如,分库分表参数为用户ID,其对应的参数值为用户的ID号。对于本发明实施例,将确定分库分表参数对应的参数值代入至分库分表组件中的预设分库分表规则,即根据该参数值和预设分库分表规则,将待执行方法中的操作数据关联到目标数据和目标数据表中,以实现分库分表组件的分库分表功能。
需要说明的是,不同的分库分表场景对应的分库分表过程不同,针对多库多表的场景,首先根据分库分表参数对应的参数值和预设分库分表规则,确定待执行方法中操作数据对应的目标数据库,由于目标数据库中存在多个数据表,因此再利用预设分库分表规则根据参数值确定待执行方法中操作数据对应的目标数据表;针对一库多表的场景,因为只有一个数据库,因此不要确定目标数据库,直接根据确定的参数值和预设分库分表规则,确定待执行方法中操作数据对应的目标数据表;针对多库一表的场景,由于每个数据库中只有一张数据表,因此确定完目标数据库后不需要再继续确定目标数据表,即直接根据参数值和预设分库分表规则,确定待执行方法中操作数据对应的目标数据库即可。
进一步地,预设分表分库规则具体可以为预设哈希算法,具体在进行分库分表时,根据分库分表参数对应的参数值利用预设哈希算法计算分库分表参数对应的哈希值,之后对该哈希值进行取模处理,确定该分库分表参数对应的数据库匹配值,接着将确定的数据库匹配值与各个数据库对应的特征值进行匹配,确定待执行方式中操作数据对应的目标数据库,进一步地,利用预设哈希值算法从目标数据库中的各个数据表筛选出操作数据的目标数据表。
本发明实施例提供的一种数据库的分库分表方法,与目前分库分表中间件与业务代码严重耦合的情况相比,本发明能够利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;并根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表,从而能够实现分库分表组件与业务代码的彻底分离,便于后期对分库分表组件和业务代码的维护,分库分表操作更加简单,同时该分库分表组件能够适用于各种业务场景,分库分表规则可灵活变更,可扩展性较强。
进一步的,为了更好的说明上述分库分表的过程,作为对上述实施例的细化和扩展,本发明实施例提供了另一种数据库的分库分表方法,如图2所示,所述方法包括:
201、利用预设分库分表注解获取待执行方法对应的分库分表参数。
其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法,对于本发明实施例,为了实现分表分库组件与待执行方法的彻底分离,需要构建独立于待执行方的分库分表组件,具体构建分表分库组件时,需要定义分表分库组件中的预设分库分表规则,通过该分库分表规则能够确定待执行方法中的操作数据对应的数据库数据表,该预设分表分库规则具体可以为预设哈希算法,即通过预设哈希算法能够将待执行方法中的操作数据路由到目标数据库和目标数据表,其中,预设哈希算法具体还包括预设哈希取模算法和预设一致性哈希算法,此外,该分库分表规则还可以根据待执行方法中分表分库参数的业务属性将操作数据路由到目标数据库和目标数据表,需要说明的是,该预设分库分表规则可以根据业务方需求进行定义,本发明实施例不做具体限定。
进一步地,当业务方应用该预设分库分表组件进行分库分表操作时,需要在业务代码的配置文件中配置涉及分库分表的数据库、数据表、路由字段、表后缀、分库分表策略和数据源等,其中,该分库分表策略可以根据业务方预先定义的分库分表规则进行配置,路由字段即为待执行方法中的分库分表参数,通过该分库分表参数能够将待执行方法中的操作数据路由到对应的目标数据库和目标数据表,关于数据库和数据表的配置,具体可以根据一库多表、多库多表和多库一表等分库分表场景进行配置,分库分表场景可以根据业务方的业务数据量和业务需求进行确定。
进一步地,在预设分库分表组件创建完成之后,定义该预设分库分表组件的分库分表注解,并在需要进行分库分表操作的方法前面加入该分库分表注解,在调用待执行方法时,会先读取待执行方法前面的分库分表注解,通过该分库分表注解获取待执行方法中的分库分表参数,例如, @Rounting(filedId=“userId”),其中,userId为待执行方法的分库分表参数,进一步地,根据该分库分表参数和预设分库分表组件中的分库分表规则,确定待执行方法中操作数据对应的目标数据库和目标数据表,由此通过构建独立于待执行方法的分库分表组件,能够将业务代码和分库分表中间件彻底分离,以便于后期维护,且分库分表规则可灵活变更,能够适用不同的业务场景。
202、获取所述分库分表组件中所涉及的各个数据库对应的特征值。
其中,各个数据库的特征值具体可以为数字,其主要用于与分库分表参数对应的匹配值进行匹配,以便确定操作数据对应的目标数据库和目标数据表,对于本发明实施例,在获取待执行方法对应的分库分表参数之后,根据分库分表参数对应的参数值和预设分库分表规则,确定待执行方法中操作数据对应的目标数据库和目标数据表,其中,该分库分表规则可以为预设哈希算法,预设哈希算法具体包括预设哈希值取模算法和预设一直性哈希算法。
对于本发明实施例,在利用预设哈希算法确定待执行方法中操作数据对应的目标数据库和目标数据表时,针对多库多表和多库一表场景,需要首先确定各个数据库对应的特征值,以便根据特征值确定目标数据库,步骤202 具体包括:获取所述分库分表组件中所涉及的数据库的总数量;根据所述数据库的总数量,确定所述各个数据库对应的特征值。
具体地,针对预设哈希取模算法,根据所涉及的分库分表数据库的总数量,确定各个数据库对应的特征值,例如,涉及分库分表的数据库分别为数据库A、数据库B、数据库C和数据库D、数据库的总数量为4,设定各个数据库对应的特征值分别为0,1,2,3,即数据库A对应的特征值为0,数据库B 对应的特征值为1,数据库C对应的特征值为2,数据库D对应的特征值为3。进一步地,如果业务后期数据量过大,需要增加数据库,会导致数据库中大量数据的迁移,为了避免动态增加数据库时,迁移数据量过大,可以采用预设一致性哈希算法进行分库分表操作,具体地,将各个数据库均分地分布在虚拟环上,确定各个数据库在虚拟环上的特征值2n-1,n=1,2,3…,其中,n代表第n个数据库,例如,涉及分库分表的数据库为数据库A、数据库B和数据C,数据库A对应的特征值为1,数据库B对应的特征值为3,数据库C 对应的特征值为7,由此将各个数据库均匀分布在虚拟环中,当需要动态增加数据库时,可以在虚拟环上特征值为3的数据库B和特征为为7的数据库C 之间***需要增加的数据库,但是不必迁移特征值为1的数据库A中的数据,由此采用预设一直性哈希算法既能够满足动态增加数据库的需求,也不必迁移大量数据。
203、根据所述参数值和预设分库分表规则计算所述分库分表参数对应的数据库匹配值。
对于本发明实施例,针对多库多表或者多库一表的场景,在确定完各个数据库对应的特征值之后,需要根据分库分表参数对应的参数值和预设分库分表规则计算分库分表参数对应的匹配值,其中,预设分库分表规则为预设哈希算法,步骤203具体包括:根据所述参数值和所述预设哈希算法计算所述分库分表参数对应的哈希值;根据所述数据库的总数量对所述哈希值进行取模处理,得到所述分库分表参数对应的数据库匹配值。
其中,无论是利用预设哈希取模算法还是利用预设一直性哈希算法,在计算分库分表参数对应的匹配值的过程中,都需要先计算分库分表参数对应的哈希值,具体可以利用Java的原生方法hashCode()获取到该参数值对应的哈希值,之后对分库分表参数对应的哈希值进行取模处理,具体地,针对预设哈希取模算法,直接利用配置文件中配置的数据库总数量对得到的哈希值进行取模处理,得到分库分表参数对应的数据库匹配值;针对预设哈希一致性算法,利用2N对得到的哈希值进行取模处理,得到分库分表参数对应的数据库匹配值,其中,2N中N代表配置文件中配置的数据库总数量。由此利用预设哈希取模算法或者预设哈希一直性算法,均能够确定各个数据库对应的特征值,以及分库分表参数对应的匹配值。
204、将所述数据库匹配值与所述各个数据库对应的特征值进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据库。
对于本发明实施例,针对多库多表和多库一表场景,在确定各个数据库对应的特征值和分库分表参数对应的匹配值之后,将确定的匹配值与各个数据库对应的特征值进行匹配,并将与该匹配值相匹配的特征值对应的数据库确定为目标数据库,需要说明的是,无论是预设哈希取模算法还是预设哈希一直性算法,匹配数据库特征值确定目标数据库的过程相同,例如,数据库A 对应的特征值为0,数据库B对应的特征值为1,数据库C对应的特征值为2,通过预设哈希取模算法或者预设哈希一致性算法计算分库分表参数对应的数据库匹配值为1,则确定分库分表参数对应的数据库匹配值与数据库B对应的特征值相匹配,即待执行方法中操作数据会被路由到数据库B。
205、根据所述目标数据库中各个数据表对应的特征值和所述参数值,确定所述待执行方法中操作数据对应的目标数据表。
对于本发明实施例,针对多库一表的场景,由于数据库中只有一张表,因此在确定完目标数据库之后,不再需要进一步确定目标数据表;针对一库多表的场景,由于配置文件中仅存在一个数据库因此不需要确定目标数据库,仅确定待执行方法中操作数据对应的目标数据表就可以;针对多库多表的场景,由于数据库中存在多张数据表,在确定完目标数据库之后,还需要进一步确定目标数据表。其中,在确定待执行方法中操作数据对应的目标数据表时,步骤205具体包括:根据所述参数值和所述预设分库分表规则计算所述分库分表参数对应的数据表匹配值;将所述数据表匹配值与所述各个数据表对应的特征值进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据表。
具体地,首先确定目标数据库中各个数据表对应的特征值,针对预设哈希取模算法,确定各个数据表对应的特征值与确定各个数据库对应的特征值一样,即根据目标数据库中数据表的总数量确定各个数据表对应的特征值,例如,目标数据库中存在数据表A、数据表B和数据表C,配置文件中目标数据数据表的总数量为3,确定数据表A对应的特征值为0,数据表B对应的特征值为1,数据表C对应的特征值为2;针对预设哈希一致性算法,确定各个数据表对应的特征值与确定各个数据库对应的特征值也一样,将目标数据库中各个数据表均分地分布在虚拟环上,确定各个数据表在虚拟环上的特征值2n-1,n=1,2,3…,其中,n代表第n个数据表,由此能够确定目标数据库中各个数据表的特征值。
进一步地,根据所述参数值利用预设分库分表规则计算所述分库分表参数对应的数据表匹配值,其中,利用预设哈希取模算法计算数据表匹配值的过程与利用预设哈希取模算法计算数据库匹配值的过程相同,同理利用预设哈希一致性算法计算数据表匹配值的过程与利用预设哈希一致性算法计算数据库匹配值得过程相同,在此不再赘述。进一步地,将计算的数据表匹配值与目标数据库中各个数据表对应的特征值进行匹配,将与数据表匹配值相匹配的特征值对应的数据表确定为目标数据表,由此通过独立于待执行方法的分库分表组件能够实现分库分表的操作。
进一步地,不仅可以通过预设分库分表规则中的哈希算法确定待执行方法中操作数据对应的目标数据库和目标数据表,还可以根据分库分表参数的业务属性,确定目标数据库和目标数据表,所述方法还包括:获取所述分库分表组件中所涉及的各个数据库对应的业务属性;根据所述分库分表参数对应的参数值,确定所述分库分表参数对应的业务属性;将所述分库分表参数对应的业务属性与所述各个数据库对应的业务属性进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据库;根据所述目标数据库中各个数据表对应的业务属性,确定所述待执行方法中操作数据对应的目标数据表。进一步地,所述根据所述目标数据库中各个数据表对应的业务属性,确定所述待执行方法中操作数据对应的目标数据表,包括:将所述分库分表参数对应的业务属性与所述各个数据表对应的业务属性进行匹配;根据匹配结果确定所述待执行方法中操作数据对应的目标数据表。
例如,用户数据按照用户的身份ID对应的区域分别存储至不同的数据库和数据表,数据库A中存储的是辽宁省用户的数据,数据库A中各个数据表分别存储的是辽宁省不同城市用户的数据,数据库B中存储的是江苏省用户的数据,数据库B中各个数据表分别存储的是江苏省不同城市用户的数据,配置文件中设置的路由字段为用户ID,通过待执行方法前的分库分表注解 @Rounting(filedId=”userId”),获取待执行方法对应的分库分表参数userId,即用户ID,进一步地,根据userId对应的身份证号,确定待执行方法中操作数据对应的目标数据库和目标数据表,例如,根据用户的身份证号确定该用户来自江苏省苏州市,则至将待操作数据路由到数据B库中的苏州数据表,由此能够直接根据业务属性实现分库分表操作,操作更加简单,且更切近业务场景。
本发明实施例提供的另一种数据库的分库分表方法,与目前分库分表中间件与业务代码严重耦合的情况相比,本发明能够利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;并根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表,从而能够实现分库分表组件与业务代码的彻底分离,便于后期对分库分表组件和业务代码的维护,分库分表操作更加简单,同时该分库分表组件能够适用于各种业务场景,分库分表规则可灵活变更,可扩展性较强。
进一步地,作为图1的具体实现,本发明实施例提供了一种数据库的分库分表装置,如图3所示,所述装置包括:获取单元31和确定单元32。
所述获取单元31,可以用于利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法。所述获取单元31是本装置中利用预设分库分表注解获取待执行方法对应的分库分表参数的主要功能模块。
所述确定单元32,可以用于根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。所述确定单元32是本装置中根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表的主要功能模块,也是核心模块。
进一步地,如图4所示,所述确定单元32,包括:获取模块321、计算模块322、匹配模块323和确定模块324。
所述获取模块321,可以用于获取所述分库分表组件中所涉及的各个数据库对应的特征值。
所述计算模块322,可以用于根据所述参数值和预设分库分表规则计算所述分库分表参数对应的数据库匹配值。
所述匹配模块323,可以用于将所述数据库匹配值与所述各个数据库对应的特征值进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据库。
所述确定模块324,可以用于根据所述目标数据库中各个数据表对应的特征值和所述参数值,确定所述待执行方法中操作数据对应的目标数据表。
进一步地,所述确定模块324,包括:计算子模块和确定子模块。
所述计算子模块,可以用于根据所述参数值和所述预设分库分表规则计算所述分库分表参数对应的数据表匹配值。
所述确定子模块,可以用于将所述数据表匹配值与所述各个数据表对应的特征值进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据表。
进一步地,所述获取模块321,包括:获取子模块和确定子模块。
所述获取子模块,可以用于获取所述分库分表组件中所涉及的数据库的总数量。
所述确定子模块,可以用于根据所述数据库的总数量,确定所述各个数据库对应的特征值。
进一步地,所述预设分库分表规则为预设哈希算法,所述计算模块322,包括:计算子模块和取模子模块。
所述计算子模块,可以用于根据所述参数值和所述预设哈希算法计算所述分库分表参数对应的哈希值。
所述取模子模块,可以用于根据所述数据库的总数量对所述哈希值进行取模处理,得到所述分库分表参数对应的数据库匹配值。
进一步地,所述获取模块321,还可以用于获取所述分库分表组件中所涉及的各个数据库对应的业务属性。
所述确定模块324,还可以用于根据所述分库分表参数对应的参数值,确定所述分库分表参数对应的业务属性。
所述匹配模块323,还可以用于将所述分库分表参数对应的业务属性与所述各个数据库对应的业务属性进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据库。
所述确定模块324,还可以用于根据所述目标数据库中各个数据表对应的业务属性,确定所述待执行方法中操作数据对应的目标数据表。
进一步地,所述确定模块324,还包括:匹配子模块。
所述匹配子模块,可以用于将所述分库分表参数对应的业务属性与所述各个数据表对应的业务属性进行匹配。
所述确定子模块,还可以用于根据匹配结果确定所述待执行方法中操作数据对应的目标数据表。
需要说明的是,本发明实施例提供的一种数据库的分库分表装置所涉及各功能模块的其他相应描述,可以参考图1所示方法的对应描述,在此不再赘述。
基于上述如图1所示方法,相应的,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
基于上述如图1所示方法和如图3所示装置的实施例,本发明实施例还提供了一种计算机设备的实体结构图,如图5所示,该计算机设备包括:处理器41、存储器42、及存储在存储器42上并可在处理器上运行的计算机程序,其中存储器42和处理器41均设置在总线43上所述处理器41执行所述程序时实现以下步骤:利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
通过本发明的技术方案,本发明能够利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;并根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表,从而能够实现分库分表组件与业务代码的彻底分离,便于后期对分库分表组件和业务代码的维护,分库分表操作更加简单,同时该分库分表组件能够适用于各种业务场景,分库分表规则可灵活变更,可扩展性较强。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (10)
1.一种数据库的分库分表方法,其特征在于,包括:
利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;
根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
2.根据权利要求1所述的方法,其特征在于,所述根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表,包括:
获取所述分库分表组件中所涉及的各个数据库对应的特征值;
根据所述参数值和预设分库分表规则计算所述分库分表参数对应的数据库匹配值;
将所述数据库匹配值与所述各个数据库对应的特征值进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据库;
根据所述目标数据库中各个数据表对应的特征值和所述参数值,确定所述待执行方法中操作数据对应的目标数据表。
3.根据权利要求2所述的方法,其特征在于,所述根据所述目标数据库中各个数据表对应的特征值和所述参数值,确定所述待执行方法中操作数据对应的目标数据表,包括:
根据所述参数值和所述预设分库分表规则计算所述分库分表参数对应的数据表匹配值;
将所述数据表匹配值与所述各个数据表对应的特征值进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据表。
4.根据权利要求2所述的方法,其特征在于,所述获取所述分库分表组件中所涉及的各个数据库对应的特征值,包括:
获取所述分库分表组件中所涉及的数据库的总数量;
根据所述数据库的总数量,确定所述各个数据库对应的特征值。
5.根据权利要求4所述的方法,其特征在于,所述预设分库分表规则为预设哈希算法,所述根据所述参数值和预设分库分表规则计算所述分库分表参数对应的数据库匹配值,包括:
根据所述参数值和所述预设哈希算法计算所述分库分表参数对应的哈希值;
根据所述数据库的总数量对所述哈希值进行取模处理,得到所述分库分表参数对应的数据库匹配值。
6.根据权利要求1所述的方法,其特征在于,所述根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表,包括:
获取所述分库分表组件中所涉及的各个数据库对应的业务属性;
根据所述分库分表参数对应的参数值,确定所述分库分表参数对应的业务属性;
将所述分库分表参数对应的业务属性与所述各个数据库对应的业务属性进行匹配,根据匹配结果确定所述待执行方法中操作数据对应的目标数据库;
根据所述目标数据库中各个数据表对应的业务属性,确定所述待执行方法中操作数据对应的目标数据表。
7.根据权利要求6所述的方法,其特征在于,所述根据所述目标数据库中各个数据表对应的业务属性,确定所述待执行方法中操作数据对应的目标数据表,包括:
将所述分库分表参数对应的业务属性与所述各个数据表对应的业务属性进行匹配;
根据匹配结果确定所述待执行方法中操作数据对应的目标数据表。
8.一种数据库的分库分表装置,其特征在于,包括:
获取单元,用于利用预设分库分表注解获取待执行方法对应的分库分表参数,其中,所述预设分库分表注解对应的分库分表组件独立于所述待执行方法;
确定单元,用于根据所述分库分表参数对应的参数值和所述分库分表组件中的预设分库分表规则,确定所述待执行方法中操作数据对应的目标数据库和目标数据表。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010578314.5A CN111737228B (zh) | 2020-06-23 | 2020-06-23 | 数据库的分库分表方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010578314.5A CN111737228B (zh) | 2020-06-23 | 2020-06-23 | 数据库的分库分表方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737228A true CN111737228A (zh) | 2020-10-02 |
CN111737228B CN111737228B (zh) | 2022-11-15 |
Family
ID=72650538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010578314.5A Active CN111737228B (zh) | 2020-06-23 | 2020-06-23 | 数据库的分库分表方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737228B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113127568A (zh) * | 2021-05-11 | 2021-07-16 | 中国电信股份有限公司江西分公司 | 一种分布式内存数据库数据路由和分库分表的方法及装置 |
CN113742343A (zh) * | 2021-09-01 | 2021-12-03 | 上海浦东发展银行股份有限公司 | 基于大量业务数据场景的数据拆分方法、装置和存储介质 |
WO2022095410A1 (zh) * | 2020-11-03 | 2022-05-12 | 前海飞算云智软件科技(深圳)有限公司 | 组件开发方法、装置、存储介质及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105912678A (zh) * | 2016-04-13 | 2016-08-31 | 北京思特奇信息技术股份有限公司 | 一种数据存储方法、数据读取方法及其对应的*** |
WO2016188280A1 (zh) * | 2015-05-25 | 2016-12-01 | 阿里巴巴集团控股有限公司 | 数据库分表的写入方法及装置 |
CN106302640A (zh) * | 2016-07-27 | 2017-01-04 | 乐视控股(北京)有限公司 | 数据请求处理方法及装置 |
CN110209650A (zh) * | 2019-05-05 | 2019-09-06 | 苏宁易购集团股份有限公司 | 数据规整迁移方法、装置、计算机设备和存储介质 |
CN110674152A (zh) * | 2019-09-24 | 2020-01-10 | 京东数字科技控股有限公司 | 数据同步方法与装置、存储介质、电子设备 |
CN110765187A (zh) * | 2018-07-09 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 一种数据源路由管理方法和装置 |
-
2020
- 2020-06-23 CN CN202010578314.5A patent/CN111737228B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016188280A1 (zh) * | 2015-05-25 | 2016-12-01 | 阿里巴巴集团控股有限公司 | 数据库分表的写入方法及装置 |
CN105912678A (zh) * | 2016-04-13 | 2016-08-31 | 北京思特奇信息技术股份有限公司 | 一种数据存储方法、数据读取方法及其对应的*** |
CN106302640A (zh) * | 2016-07-27 | 2017-01-04 | 乐视控股(北京)有限公司 | 数据请求处理方法及装置 |
CN110765187A (zh) * | 2018-07-09 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 一种数据源路由管理方法和装置 |
CN110209650A (zh) * | 2019-05-05 | 2019-09-06 | 苏宁易购集团股份有限公司 | 数据规整迁移方法、装置、计算机设备和存储介质 |
CN110674152A (zh) * | 2019-09-24 | 2020-01-10 | 京东数字科技控股有限公司 | 数据同步方法与装置、存储介质、电子设备 |
Non-Patent Citations (1)
Title |
---|
水平则静: "MyBatis+Mysql分库分表的案例分析", 《CSDN》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022095410A1 (zh) * | 2020-11-03 | 2022-05-12 | 前海飞算云智软件科技(深圳)有限公司 | 组件开发方法、装置、存储介质及电子设备 |
CN113127568A (zh) * | 2021-05-11 | 2021-07-16 | 中国电信股份有限公司江西分公司 | 一种分布式内存数据库数据路由和分库分表的方法及装置 |
CN113742343A (zh) * | 2021-09-01 | 2021-12-03 | 上海浦东发展银行股份有限公司 | 基于大量业务数据场景的数据拆分方法、装置和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111737228B (zh) | 2022-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111737228B (zh) | 数据库的分库分表方法及装置 | |
US10915532B2 (en) | Supporting a join operation against multiple NoSQL databases | |
CN110019080B (zh) | 数据访问方法和装置 | |
US20100030995A1 (en) | Method and apparatus for applying database partitioning in a multi-tenancy scenario | |
US10831737B2 (en) | Method and device for partitioning association table in distributed database | |
US8015195B2 (en) | Modifying entry names in directory server | |
CN110399368B (zh) | 一种定制数据表的方法、数据操作方法及装置 | |
CN106933891A (zh) | 访问分布式数据库的方法和分布式数据服务的装置 | |
CN110781183A (zh) | Hive数据库中增量数据的处理方法、装置以及计算机设备 | |
CN105447151A (zh) | 访问分布式数据库的方法、数据源代理装置及应用服务器 | |
WO2023098462A1 (en) | Improving performance of sql execution sequence in production database instance | |
US10262037B2 (en) | Joining operations in document oriented databases | |
CN113051250A (zh) | 数据库集群的扩容方法和装置、电子设备和存储介质 | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
US11704327B2 (en) | Querying distributed databases | |
CN114218266A (zh) | 一种数据查询方法、装置、电子设备和存储介质 | |
CN110334103A (zh) | 推荐服务的更新方法、提供装置、访问装置和推荐*** | |
US11645279B2 (en) | Index selection for database query | |
CN105389394A (zh) | 基于多个数据库集群的数据请求处理方法及装置 | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
US11847121B2 (en) | Compound predicate query statement transformation | |
US20230153300A1 (en) | Building cross table index in relational database | |
US11704314B2 (en) | Multiplexing data operation | |
CN111309704B (zh) | 数据库操作方法和数据库操作*** | |
CN105095283A (zh) | 网络社交***中准好友的推荐方法和*** |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220523 Address after: 518000 China Aviation Center 2901, No. 1018, Huafu Road, Huahang community, Huaqiang North Street, Futian District, Shenzhen, Guangdong Province Applicant after: Shenzhen Ping An medical and Health Technology Service Co.,Ltd. Address before: Room 12G, Area H, 666 Beijing East Road, Huangpu District, Shanghai 200001 Applicant before: PING AN MEDICAL AND HEALTHCARE MANAGEMENT Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |