一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种水平分表方法、装置、电子设备及存储介质与流程

2023-01-15 12:26:06 来源:中国专利 TAG:


1.本发明涉及数据处理技术领域,具体涉及一种水平分表方法、装置、电子设备及存储介质。


背景技术:

2.当单表数据增量过快或达到千万甚至亿级别数据量时,数据库将出现性能瓶颈,对外表现大量请求阻塞、sql操作变慢、存储出现问题。但是,若此时单数据库存储未出现存储瓶颈、无需在数据库层分库分表处理时,如何借助应用层能力实现数据库水平分表操作,以在确保避免产生大表的同时还能不增加系统复杂度。
3.通常的解决方案是:根据具体功能水平分成多个表,每张表都有对应的mapper映射、dao层,业务逻辑层对数据库dml操作时调用对应的javabean接口类操作对象。
4.但是随着表越来越多、dao层的冗余代码也越来越多,特别是需要对整体表做多表查询时,代码的可读性与可维护性就越来越差了(以前使用大表时,只需要操作一张表,现在需要操作多张表)。
5.现有的技术带来的问题是显而易见的,具体的
6.问题一:水平分表后带来的多个dao层接口类,存在大量的硬编码,灵活性差;
7.问题二:因冗余代码而造成代码维护困难;
8.问题三:对原代码业务逻辑层的改动比较大。
9.因此,亟需一种能够减少重复代码量与冗余代码量,并提高代码的灵活性的分表方法。


技术实现要素:

10.本发明的目的在于克服上述技术不足,提供一种应用于金融科技或者其它相关技术领域的水平分表方法、装置、电子设备及存储介质,解决现有技术中分表时重复代码量与冗余代码量高、代码的灵活性低的技术问题。
11.为达到上述技术目的,本发明采取了以下技术方案:
12.第一方面,本发明提供一种水平分表方法,包括如下步骤:
13.获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表;
14.根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,其中,各个所述实现类共用一个数据访问对象接口;
15.将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。
16.在一些实施例中,所述获取业务表的所有数据的业务类型,根据所述业务类型对
所述业务表进行水平分表操作,以得到多个分表,包括:
17.获取所述业务表中所有数据的属性标签,根据所述属性标签,确定业务表的所有数据的业务类型;
18.根据预设的分库分表原则,将业务类型相同的数据分配至同一分表中,以得到多个存储有不同业务类型数据的分表。
19.在一些实施例中,根据预设的分库分表原则,将业务类型相同的数据分配至同一分表中,以得到多个存储有不同业务类型数据的分表,包括:
20.根据预设的分库分表原则,生成分库分表脚本;
21.运行所述分库分表脚本,以将业务类型相同的数据分配至同一分表中,得到多个存储有不同业务类型数据的分表。
22.在一些实施例中,所述根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,包括:
23.根据各个分表的数量,建立与所述分表数量相同的索引值,并分配给各个分表;
24.根据所述分表的业务类型,建立所述分表的实现类,并将所述实现类与所述索引值关联;
25.将各个所述分表的实现类存储至预设的spring容器中。
26.在一些实施例中,所述索引值唯一,且每个索引值对应唯一的实现类。
27.在一些实施例中,所述索引值为与所述业务类型相关的枚举类。
28.在一些实施例中,所述水平分表方法还包括:
29.更新所述业务表,判断所述业务表中是否增加新的业务类型的数据,如果是,则根据新增的业务类型,建立新的分表、分表的实现类以及与所述实现类对应的索引值,并将实现类存储至spring容器中,将新增的索引值与预设的代理类接口关联。
30.第二方面,本发明提供一种水平分表装置,包括:
31.分表模块,用于获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表;
32.建立模块,用于根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,其中,各个所述实现类共用一个数据访问对象接口;
33.关联模块,用于将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。
34.第三方面,本发明还提供一种电子设备,包括:处理器和存储器;
35.所述存储器上存储有可被所述处理器执行的计算机程序;
36.所述处理器执行所述计算机程序时实现如上所述的水平分表方法中的步骤。
37.第四方面,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上所述的水平分表方法中的步骤。
38.与现有技术相比,本发明提供的水平分表方法、装置、电子设备及存储介质,首先获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,
以得到多个分表,之后根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,最后将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。通过db层与应用层结合实现水平分表,解决了有多个业务场景就需要编写多次的问题。与传统的分表方法相比较,重复代码量与冗余代码量大大降低,而代码的灵活性得到提升。
附图说明
39.图1是本发明实施例提供的水平分表方法的流程图;
40.图2是本发明实施例提供的水平分表方法中,步骤s100的流程图;
41.图3是本发明实施例提供的水平分表方法中,步骤s200的流程图;
42.图4是本发明实施例提供的水平分表装置的功能模块示意图;
43.图5是本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
44.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
45.请参阅图1,图1是本发明实施例提供的一种水平分表方法的流程示意图,本发明所涉及的水平分表方法可用于银行等金融领域的数据库水平分表中,以减少分表时产生的重复代码量与冗余代码量,提高代码的灵活性。本发明所涉及的水平分表方法可由电子设备执行,该电子设备能够进行接收或发送数据等操作,可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、便携式计算机和台式服务器等等。如图1所示,该方法具体包括以下步骤s100至步骤s300。
46.s100、获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表。
47.本实施例中,私募投后服务平台每天需要给客户、理财经理发送大量的短信、微信消息、内网邮件,曾经的短信表、微信表、邮件表都是大表,因此,在使用时,可能导致数据库出现性能瓶颈,故本发明实施例根据数据的业务类型对业务表进行分表操作,以避免出现性能瓶颈,大量请求阻塞、sql操作变慢、存储出现问题等影响数据库使用的问题。
48.示例性的,以水平拆分短信表为例,短信总表根据业务场景水平拆分成7张表,分别是产品公告报告短信表(xpsmsinfocpggbgdaoimpl)、产品开放日短信表(xpsmsinfocpkfrdaoimpl)、资产到期承接短信表(xpsmsinfodqcjdaoimpl)、产品到期短信表(xpsmsinfodqdaoimpl)、退票短信表(xpsmsinfotpdaoimpl)、产品提前到期短信表(xpsmsinfotqdqdaoimpl)和业绩报酬计提短信表(xpsmsinfoyjbcjtdaoimpl),根据各个数据所述的业务场景对短信总表进行划分,以达到水平分表的目的。
49.s200、根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,其中,各个所述实现类共用一个数据访问对象接口。
50.本实施例中,引入了spring的applicationobjectsupport接口类结合java的多态性设计proxy代理类实现水平分表处理,不仅解决大表性能瓶颈,还提高了代码的灵活性与可阅读行、可维护性。具体的,本实施例中将多张分表的dao注入spring容器中,多张分表的dao实现同一个接口xpsmsinfobasedao,因此可以通过如下代码获取该接口的所有实现类:
51.map《string,xpsmsinfobasedao》smsprocessors=applicationcontext.getbeansoftype(xpsmsinfobasedao.class);
52.此外,本实施例中,把获取的多个实现类放入proxy全局变量(map)xpsmsinfobasedaoimpls,业务层只需要在传入对应的索引值即可获取dao的实现类,达到间接操作dao实现类的目的。
53.s300、将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。
54.本实施例中,通过业务逻辑层依赖的proxy代理类继承短信dao层接口类,并根据索引值从spring容器获取对应业务场景的短信表dao实现类,解决了因水平分表造成的大量冗余代码。
55.本发明通过db层与应用层结合实现水平分表的终目的不变,即减少数据库负担,缩短查询时间,设计的proxy代理类实现短信表的dml操作,解决因水平分表造成大量冗余代码,提高代码的可阅读性及可维护性,通过proxy代理操作数据库与以往操作大表一样,业务逻辑层无需关注数据往哪张表进行读写,保持代码整洁。
56.本发明实施例首先获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表,之后根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,最后将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。通过db层与应用层结合实现水平分表,解决了有多个业务场景就需要编写多次的问题。与传统的分表方法相比较,重复代码量与冗余代码量大大降低,而代码的灵活性得到提升。
57.在一些实施例中,请参阅图2,所述步骤s200具体包括:
58.s210、获取所述业务表中所有数据的属性标签,根据所述属性标签,确定业务表的所有数据的业务类型;
59.s220、根据预设的分库分表原则,将业务类型相同的数据分配至同一分表中,以得到多个存储有不同业务类型数据的分表。
60.本实施例中,首先对业务表中的所有数据进行分析,得到其属性标签,所述属性标签用于标识所述业务表所属的业务类型,例如产品公告报告、产品开放日、资产到期承接、产品到期、退票、产品提前到期、业绩报酬计提等等,通过属性标签可以快速的对业务表中的所有数据进行分类。
61.当得到了属性标签后,即可根据预设的分库分表原则,进行分表操作,将业务类型相同的数据分配至同一分表,从而达到分表的目的。
62.其中,所述分库分表原则可由用户进行自定义,只需满足相同的业务类型的数据分配至同一分表即可。示例性的,分库分表原则基于所述属性标签来进行分表操作,即根据
属性标签中的时间字段来进行分表操作,例如在进行分表时,将相同业务类型的数据分配至同一分表中,然后根据时间字段对分表中的数据进行排序,可将时间字段所表示的时间先后顺序对分表中的数据进行排序,以得到排序整洁的分表。
63.在一些实施例中,所述步骤s220具体包括:
64.根据预设的分库分表原则,生成分库分表脚本;
65.运行所述分库分表脚本,以将业务类型相同的数据分配至同一分表中,得到多个存储有不同业务类型数据的分表。
66.本实施例中,根据预设的分库分表原则生成分库分表脚本,所述分库分表脚本是用于执行分库分表操作的文件,该分库分表脚本能够识别文件数据的属性标签并提取出其中的时间字段和业务类型,然后根据业务类型和时间字段来进行分库分表操作,以得到用户所需的分表。
67.在一些实施例中,请参阅图3,所述步骤s300具体包括:
68.s310、根据各个分表的数量,建立与所述分表数量相同的索引值,并分配给各个分表;
69.s320、根据所述分表的业务类型,建立所述分表的实现类,并将所述实现类与所述索引值关联;
70.s330、将各个所述分表的实现类存储至预设的spring容器中。
71.本实施例中,引入spring的applicationobjectsupport接口类结合java的多态性设计proxy代理类实现水平分表处理,首先为了快速查找到分表的实现类,每个分表的实现类都对应有唯一的索引值,通过该索引值可快速的通过各个实现类的唯一共用数据访问对象接口查找到对应的实现类,从而实现查询操作。其中,索引值可根据用户的需求设定,只需满足方便查询的目的即可。
72.在一些实施例中,所述索引值唯一,且每个索引值对应唯一的实现类。
73.本实施例中,为了避免同一索引值查找到多个实现类,将所述实现类设置为唯一,且每个索引值只对应唯一的实现类,因此,当业务逻辑层输入唯一的索引值时,只会查找到唯一分表的实现类,从而方便用户的查询。当然,在其它的实施例中,所述索引值也可不设置为唯一,即一个索引值可查找多个实现类,但是此时需要用户手动筛选所需的实现类。
74.在一些实施例中,所述索引值为与所述业务类型相关的枚举类。
75.示例性的,对于业务逻辑层通过proxy间接调用dao操作数据库,使用方式与操作一张大表dao类似,只需要多加一个业务场景枚举值入参即可实现。如下代码所示:
76.entity.setbizscene(bizsceneenum.cpkfr);//设置业务场景枚举,
77.通过db层与应用层结合实现水平分表,设计思想类似springaop切面编程,解决了有多个业务场景就需要编写多次的问题。
78.在一些实施例中,所述水平分表方法还包括:
79.更新所述业务表,判断所述业务表中是否增加新的业务类型的数据,如果是,则根据新增的业务类型,建立新的分表、分表的实现类以及与所述实现类对应的索引值,并将实现类存储至spring容器中,将新增的索引值与预设的代理类接口关联。
80.本实施例中,当也到新增业务场景的情况需要创建对应的分表时,只需要多家一个业务场景枚举值入参即可实现,开发人员只需要创建好数据库表及维护表对应的
sqlmapper.xml映射文件,无需再重新编写冗余的dao层代码,节省了开发人员的精力,使开发人员可以把更多的精力放在业务逻辑层编写。
81.本发明提供的技术方案,首先获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表,之后根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,最后将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。通过db层与应用层结合实现水平分表,解决了有多个业务场景就需要编写多次的问题。与传统的分表方法相比较,重复代码量与冗余代码量大大降低,而代码的灵活性得到提升。
82.本发明另一实施例提供一种水平分表装置,请参阅图4,该水平分表装置包括代码分表模块11、建立模块12以及关联模块13。
83.分表模块11用于获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表。
84.建立模块12用于根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,其中,各个所述实现类共用一个数据访问对象接口。
85.关联模块13用于将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。
86.本发明实施例首先获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表,之后根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,最后将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。通过db层与应用层结合实现水平分表,解决了有多个业务场景就需要编写多次的问题。与传统的分表方法相比较,重复代码量与冗余代码量大大降低,而代码的灵活性得到提升。
87.需要说明的是,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述元数据完备率检测的执行过程,各模块的具体实施方式请参考上述对应的方法实施例,此处不再赘述。
88.在一些实施例中,所述分表模块11包括属性标签获取单元以及分配单元。
89.属性标签获取单元用于获取所述业务表中所有数据的属性标签,根据所述属性标签,确定业务表的所有数据的业务类型。
90.分配单元用于根据预设的分库分表原则,将业务类型相同的数据分配至同一分表中,以得到多个存储有不同业务类型数据的分表。
91.在一些实施例中,所述分配单元具体用于:
92.根据预设的分库分表原则,生成分库分表脚本;
93.运行所述分库分表脚本,以将业务类型相同的数据分配至同一分表中,得到多个存储有不同业务类型数据的分表。
94.在一些实施例中,所述建立模块12包括索引值创建单元、实现类创建单元以及存储单元。
95.索引值创建单元用于根据各个分表的数量,建立与所述分表数量相同的索引值,并分配给各个分表。
96.实现类创建单元用于根据所述分表的业务类型,建立所述分表的实现类,并将所述实现类与所述索引值关联。
97.存储单元用于将各个所述分表的实现类存储至预设的spring容器中。
98.在一些实施例中,所述索引值唯一,且每个索引值对应唯一的实现类。
99.在一些实施例中,所述索引值为与所述业务类型相关的枚举类。
100.在一些实施例中,所述水平分表装置还包括更新模块,用于更新所述业务表,判断所述业务表中是否增加新的业务类型的数据,如果是,则根据新增的业务类型,建立新的分表、分表的实现类以及与所述实现类对应的索引值,并将实现类存储至spring容器中,将新增的索引值与预设的代理类接口关联。
101.本发明另一实施例提供一种电子设备,如图5所示,电子设备10包括:
102.一个或多个处理器110以及存储器120,图5中以一个处理器110为例进行介绍,处理器110和存储器120可以通过总线或者其他方式连接,图5中以通过总线连接为例。
103.处理器110用于完成电子设备10的各种控制逻辑,其可以为通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)、单片机、arm(acorn risc machine)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。还有,处理器110还可以是任何传统处理器、微处理器或状态机。处理器110也可以被实现为计算设备的组合,例如,dsp和微处理器的组合、多个微处理器、一个或多个微处理器结合dsp和/或任何其它这种配置。
104.存储器120作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的水平分表方法对应的程序指令。处理器110通过运行存储在存储器120中的非易失性软件程序、指令以及单元,从而执行电子设备10的各种功能应用以及数据处理,即实现上述方法实施例中的水平分表方法。
105.存储器120可以包括存储程序区和存储数据区,其中,存储程序区可存储操作平台、至少一个功能所需要的应用程序;存储数据区可存储根据电子设备10使用所创建的数据等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器120可选包括相对于处理器110远程设置的存储器,这些远程存储器可以通过网络连接至电子设备10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
106.一个或者多个单元存储在存储器120中,当被一个或者多个处理器110执行时,执行上述任意方法实施例中的水平分表方法,例如,执行以上描述的图1中的方法步骤s100至步骤s300。
107.本发明另一实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如,执行以上描述的图1中的方法步骤s100至步骤s300。
108.作为示例,计算机可读存储介质能够包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦rom(eeprom)或闪速存储器。易失性存储器能够包括作为外部高速缓存存储器的随机存取存储器(ram)。通过说明而非限制,ram可以以诸如同步ram(sram)、动态ram、(dram)、同步dram(sdram)、双数据速率sdram(ddrsdram)、增强型sdram(esdram)、synchlink dram(sldram)以及直接rambus(兰巴斯)ram(drram)之类的许多形式得到。本文中所描述的操作环境的所公开的存储器组件或存储器旨在包括这些和/或任何其他适合类型的存储器中的一个或多个。
109.综上所述,本发明提供的水平分表方法、装置、电子设备及存储介质,首先获取业务表的所有数据的业务类型,根据所述业务类型对所述业务表进行水平分表操作,以得到多个分表,之后根据各个分表的业务类型,建立各个分表的实现类以及与所述实现类对应的索引值,并将各个分表的实现类存储至spring容器中,最后将所述索引值与预设的代理类接口关联,并使所述代理类接口继承所述spring容器中的数据访问对象接口,以通过所述索引值在所述spring容器查找到对应的分表的实现类。通过db层与应用层结合实现水平分表,解决了有多个业务场景就需要编写多次的问题。与传统的分表方法相比较,重复代码量与冗余代码量大大降低,而代码的灵活性得到提升。
110.以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献