System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及信息管理领域,具体涉及采血监管、血液管理、输血监管方法及血液管理系统。
技术介绍
1、在现有技术中,在mycat中,分库分表的路由规则是通过配置文件来定义的。可以根据数据的某个字段进行分库,比如根据用户id进行分库,将不同用户的数据存储到不同的数据库中;或者可以根据数据的某个字段进行分表,比如根据订单id进行分表,将不同订单的数据存储到不同的表中。现有技术中,根据分库分表规则,mycat会根据数据的某个字段的值来确定数据应该被路由到哪个数据库和表中。
2、现有的mycat分库分表路由规则都只支持单个字段一级路由,实际运用中可能需要按多个字段多级路由来分库分表,从而提升数据库访问速度,缓解数据压力。
3、现有的mycat分库分表路由规则在面对大规模数据增长时,往往难以满足扩展需求。例如,当需要增加新的分片时,需要手动修改路由规则,并且需要重新分配数据,这样会导致系统停机时间较长。
4、现有的mycat分库分表路由规则往往需要手动编写,且需要考虑多个因素,如分片键、分片算法等。这使得路由规则的编写和维护变得复杂,容易出错。
技术实现思路
1、针对现有技术中存在的上述问题,现提供一种多级路由分库分表方法以及系统。
2、具体技术方案如下:一种多级路由分库分表方法,应用于数据库,所述数据库包括多个子数据库,每个所述子数据库中包括多个子表;
3、其中,则所述方法包括:
4、步骤s1,拦截sql语句后解析所述s
5、步骤s2,判断所述sql语句的类型,并当所述sql语句中包含分片字段时,转向所述步骤s3;
6、步骤s3,对所述sql语句进行处理,以得到所述sql语句中所有分片字段的索引位置集合;
7、步骤s4,根据所述索引位置集合得到对应于所述sql语句的查询对象;
8、步骤s5,根据查询到的所述查询对象,对所述sql语句进行改写以得到实际sql语句;
9、步骤s6,执行所述实际sql语句以得到对应的执行结果,并将所述执行结果处理后返回给客户端;
10、所述查询对象包括所述子数据库和所述子表中的至少一种。
11、优选的,在客户端与数据库之间设置一拦截器,采用所述拦截器拦截所述客户端发送的所述sql语句;
12、预先根据sql语句的不同类型设置对应的解析器;
13、则所述步骤s1包括:
14、步骤s11,解析拦截得到的所述sql语句,并根据解析结果判断所述sql语句是否存在语法错误;
15、若是,结束解析,并输出语法异常的提示;
16、若否,则转向步骤s12;
17、步骤s12,根据所述解析结果得到所述sql的关键词,进而通过所述关键词得到所述sql语句的类型;
18、步骤s13,根据所述sql语句的类型,将所述sql语句交送给对应的所述解析器进行解析,以得到所述sql语句的表名。
19、优选的,预先配置有一配置文件及规则文件;
20、所述配置文件中包括对所述数据库进行分表分库后形成的多个所述子数据库;
21、所述规则文件中包括所述sql语句的分片规则以及分片基础信息;
22、则所述步骤s2包括:
23、步骤s21,基于所述配置文件,根据所述表名判断所述配置文件中是否存在对应于所述表名的所述子数据库;
24、若是,则转向步骤s21;
25、若否,则直接通过所述表名查询对应的数据库,随后转向步骤s5;
26、步骤s22;根据所述表名判断所述sql语句所对应的所述子数据库中的子表是否为全局表;
27、若是,则转向步骤s23;
28、若否,则转向步骤s24;
29、步骤s23,判断所述sql语句是否为查询语句;
30、若是,则返回对应的所述数据库中任意一个返回节点,随后转向步骤s5;
31、若否,则返回对应的所述数据库中的所有所述返回节点,随后转向步骤s5;
32、步骤s24,根据所述规则文件判断所述sql语句是否为分片表;
33、若否,则返回所有所述返回节点,随后转向步骤s5;
34、若是,则转向步骤s25;
35、步骤s25,判断所述sql语句的字段中是否包含分片字段;
36、若否,则返回所有所述返回节点,随后转向步骤s5;
37、若是,则转向步骤s3;
38、所述返回节点为所述子数据库和所述子表中的其中一种。
39、优选的,当所述步骤s24中所述sql语句中的分片字段大于1时,转向步骤s3进行处理;
40、当所述s23中所述sql语句中的分片字段为1时,则所述sql语句根据单分片字段的逻辑处理,随后转向步骤s5。
41、优选的,预先设置一数据节点;
42、所述数据节点中包括多个分片字段;
43、则所述配置文件中通过多个分片字段排列组合的方式将所述数据库分库分表形成多个所述子数据库。
44、优选的,所述步骤s3包括:
45、步骤s31,根据所述配置文件中所有所述子数据库及所述分片字段的数量,得到所有所述分片字段于对应表的数量;
46、步骤s32,根据所述sql语句中每个分片字段对应的值得到对应于每个分片字段的索引位置;
47、步骤s33,根据所述配置文件中所有所述分片字段对应于表的数量及所述sql语句中每个分片字段的索引位置计算得到所述sql语句中所有分片字段的索引位置集合。
48、优选的,所述步骤s33中通过下述公式计算得到所述索引位置集合:
49、
50、其中:
51、{an,bn}用于表示所述索引位置集合;
52、index用于表示所述分片字段的索引位置;
53、size用于表示所有所述分片字段对应于所述子表的数量;
54、n用于表示分片字段的数量。
55、一种多级路由分库分表系统,其中,应用上述任意一项所述的多级路由分库分表方法;
56、所述多级分库分表系统包括一所述拦截器及对应于sql语句的不同类型的多个解析器;
57、所述拦截器设置于客户端与数据库之间,用于所述客户端发送的所述sql语句;
58、则所述多级分库分表系统还包括:
59、解析单元:当所述拦截器器拦截sql语句后,所述解析单元用于通过解析器解析所述sql语句,以得到sql语句的表名;
60、判断单元,所述判断单元连接所述解析单元,用于根据所述sql语句的表名判断所述sql语句的类型,并输出判断结果;
61、第一处理单元,连接所述第一判断单元,当所述sql语句中包含分片字本文档来自技高网...
【技术保护点】
1.一种多级路由分库分表方法,应用于数据库,所述数据库包括多个子数据库,每个所述子数据库中包括多个子表;其特征在于,则所述方法包括:
2.根据权利要求1所述的多级路由分库分表方法,其特征在于,在客户端与数据库之间设置一拦截器,采用所述拦截器拦截所述客户端发送的所述SQL语句;
3.根据权利要求1所述的多级路由分库分表方法,其特征在于,预先配置有一配置文件及规则文件;
4.根据权利要求3所述的多级路由分库分表方法,其特征在于,当所述步骤S24中所述SQL语句中的分片字段大于1时,转向步骤S3进行处理;
5.根据权利要求3所述的多级路由分库分表方法,其特征在于,预先设置一数据节点;
6.根据权利要求5所述的多级路由分库分表方法,其特征在于,所述步骤S3包括:
7.根据权利要求6所述的多级路由分库分表方法,其特征在于,所述步骤S33中通过下述公式计算得到所述索引位置集合:
8.一种多级路由分库分表系统,其特征在于,应用如上述权利要求1-7中任意一项所述的多级路由分库分表方法;
9.根据权利要
...【技术特征摘要】
1.一种多级路由分库分表方法,应用于数据库,所述数据库包括多个子数据库,每个所述子数据库中包括多个子表;其特征在于,则所述方法包括:
2.根据权利要求1所述的多级路由分库分表方法,其特征在于,在客户端与数据库之间设置一拦截器,采用所述拦截器拦截所述客户端发送的所述sql语句;
3.根据权利要求1所述的多级路由分库分表方法,其特征在于,预先配置有一配置文件及规则文件;
4.根据权利要求3所述的多级路由分库分表方法,其特征在于,当所述步骤s24中所述sql语句中的分片字段大于1时,转...
【专利技术属性】
技术研发人员:魏莹,丁轶,于松来,
申请(专利权)人:浙江新舍网络科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。