一种基于Sharding-JDBC内核的数据库分库分表插入方法技术

技术编号:32828006 阅读:14 留言:0更新日期:2022-03-26 20:33
本发明专利技术涉及一种基于Sharding

【技术实现步骤摘要】
一种基于Sharding

JDBC内核的数据库分库分表插入方法


[0001]本专利技术涉及数据库
,具体来说是一种基于Sharding

JDBC内核的数据库分库分表插入方法。

技术介绍

[0002]目前可发行资产保持稳定增长趋势,如何从海量数据中筛选资产打包发行已成为发行证券化的一个性能瓶颈。以往常规做法都是将资产存到一个数据库中的一张表里,随着数据量的暴增,对数据进行增删改查的性能急剧下降,单纯通过提高应用配置及优化数据存储无法解决,又因部分数据库的自身缺陷,如MySQL数据库单表数据量超过2000万性能会出现断崖式下降等原因,对解决筛选资产打包发行的性能提出更大挑战。
[0003]目前基于shardingjdbc(4.1.1)对资产进行分库分表,发行前将基础资产表和组合结构表按照资产代码hash值取模分库分表,筛选成功后将各基础资产分表符合筛选条件的资产保存到对应的组合结构分表中,发行后再按项目维度将各组合结构分表中的资产保存到一个独立的新表里。
[0004]但shardingjdbc(4.1.1)并不支持insert select这种高效的插入语句,因此,如何结合ABS业务特点,实现分表到分表、分表到新表的高效保存数据的方法已成为急需解决的技术问题。

技术实现思路

[0005]本专利技术的目的是为了解决现有技术中难以实现分库分表插入的缺陷,提供一种基于Sharding

JDBC内核的数据库分库分表插入方法来解决上述问题。
[0006]为了实现上述目的,本专利技术的技术方案如下:
[0007]一种基于Sharding

JDBC内核的数据库分库分表插入方法,所述的Sharding

JDBC内核包括路由引擎和改写引擎,所述数据库分库分表插入方法包括以下步骤:
[0008]拦截插入语句:使用正则表达式“.*insert\s+into.*select.*”对所有的SQL语句进行匹配验证,拦截insert select语句;
[0009]待插入表的提取:分割insert select语句,提取出待插入表T1,并同时提取出次查询语句sql2;
[0010]待插入表T1的改写:利用路由引擎和改写引擎对待插入表T1改写;
[0011]次查询语句sql2的改写:利用路由引擎和改写引擎对次查询语句sql2进行改写;
[0012]改写结果的遍历检查:遍历主查询语句组ExecutionUnits1和次查询语句组ExecutionUnits2,对两组中的每条查询语句逐一检查数据库和表序号是否分别都相等,都相等则改写次查询语句组ExecutionUnits2中的查询语句,填补“insert into table”语句;
[0013]数据库分库分表插入完成:遍历改写检查结束后,将改写结果次查询语句组ExecutionUnits2返回给执行引擎进行执行,完成数据库分库分表的插入。
[0014]所述拦截插入语句包括以下步骤:
[0015]拦截DML语句,识别出其中的InsertStatement语句;
[0016]从InsertStatement语句中获取原始sql;
[0017]使用正则表达式“.*insert\s+into.*select.*”校验原始sql,返回true则表示是insert select语句,进行拦截处理。
[0018]所述待插入表的提取包括以下步骤:
[0019]调用字符串indexOf方法,获取“into”子串在原sql中的位置序号1;
[0020]调用字符串indexOf方法,分别获取“(”和“select”子串在原sql中的位置序号2和位置序号3,如果序号2大于零且比序号3小,则使用序号2作为插入表的终止序号,否则使用序号3作为插入表的终止序号;
[0021]调用字符串substring方法,通过原sql.substring(位置序号1+6,终止序号)提取待插入表名T1和次查询语句sql2;
[0022]调用字符串trim方法,剔除待插入表名T1左右两边的空格。
[0023]所述待插入表T1的改写包括以下步骤:
[0024]将待插入表T1组装成主查询语句sql1,其格式为:“select 1from T1”;
[0025]调用路由引擎对主查询语句sql1进行路由,根据分库分表规则,路由出数据库(ds_0)和表序号(0、1、2

63);
[0026]调用改写引擎对主查询语句sql1的路由结果进行改写,重新组装成64条主查询语句组ExecutionUnits1,每条语句的表下标从0递增到63,其余保持不变。
[0027]所述次查询语句sql2的改写包括以下步骤:
[0028]调用路由引擎对次查询语句sql2进行路由,根据分库分表规则,路由出数据库(ds_0)和表序号(0、1、2

63);
[0029]调用改写引擎对次查询语句sql2的路由结果进行改写,重新组装成64条次查询语句组ExecutionUnits2,每条语句的表下标从0递增到63,其余保持不变。
[0030]有益效果
[0031]本专利技术的一种基于Sharding

JDBC内核的数据库分库分表插入方法,与现有技术相比通过insert select语句直接将数据在数据库中从一张表插入到另一张表,避免了把数据从数据库读取出来转换成实体对象再插入到库里的处理。
[0032]同时,针对于Sharding

JDBC不支持insert select语句,本次insert select改造填补其短板,在实际应用中不需要额外配置即可支持insert select语句,无需再开发单独的逻辑来实现插入功能,节约开发、维护成本,提高数据插入效率。
附图说明
[0033]图1为本专利技术的方法顺序图。
具体实施方式
[0034]为使对本专利技术的结构特征及所达成的功效有更进一步的了解与认识,用以较佳的实施例及附图配合详细的说明,说明如下:
[0035]Sharding

JDBC内核包括解析引擎、路由引擎、改写引擎、执行引擎和归并引擎,本
专利技术基于路由引擎和改写引擎进行操作,结合shardingjdbc路由、改写的方式,将原insert select语句分解,再分别路由进行组装。
[0036]如图1所示,本专利技术所述种基于Sharding

JDBC内核的数据库分库分表插入方法包括以下步骤:
[0037]第一步,拦截插入语句:使用正则表达式“.*insert\s+into.*select.*”对所有的SQL语句进行匹配验证,拦截insert select语句。其具体步骤如下:
[0038](1)拦截DML语本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Sharding

JDBC内核的数据库分库分表插入方法,所述的Sharding

JDBC内核包括路由引擎和改写引擎,其特征在于,所述数据库分库分表插入方法包括以下步骤:11)拦截插入语句:使用正则表达式“.*insert\s+into.*select.*”对所有的SQL语句进行匹配验证,拦截insert select语句;12)待插入表的提取:分割insert select语句,提取出待插入表T1,并同时提取出次查询语句sql2;13)待插入表T1的改写:利用路由引擎和改写引擎对待插入表T1改写;14)次查询语句sql2的改写:利用路由引擎和改写引擎对次查询语句sql2进行改写;15)改写结果的遍历检查:遍历主查询语句组ExecutionUnits1和次查询语句组ExecutionUnits2,对两组中的每条查询语句逐一检查数据库和表序号是否分别都相等,都相等则改写次查询语句组ExecutionUnits2中的查询语句,填补“insert into table”语句;16)数据库分库分表插入完成:遍历改写检查结束后,将改写结果次查询语句组ExecutionUnits2返回给执行引擎进行执行,完成数据库分库分表的插入。2.根据权利要求1所述的一种基于Sharding

JDBC内核的数据库分库分表插入方法,其特征在于,所述拦截插入语句包括以下步骤:21)拦截DML语句,识别出其中的InsertStatement语句;22)从InsertStatement语句中获取原始sql;23)使用正则表达式“.*insert\s+into.*select.*”校验原始sql,返回true则表示是insert select语句,进行拦截处理。3.根据权利要求1所述的一种基于Sharding

JDBC内核的数...

【专利技术属性】
技术研发人员:尹留志镇磊孙英家王平一薛松卢鹏何成弥
申请(专利权)人:安徽兆尹安联科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1