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

一种基于分库分表的动态数据处理方法、系统和装置与流程

2022-05-18 03:41:23 来源:中国专利 TAG:


1.本发明涉及模型驱动技术领域,特别是涉及一种基于分库分表的动态数据处理方法、系统和装置。


背景技术:

2.随着企业数字化和上云的趋势愈演愈烈,越来越多的个性化saas(software-as-a-service,软件即服务)应用,需要更快、更高效的开发。模型驱动(model driven)使用可视化建模技术来定义数据及其关系,使开发人员和业务用户能够快速处理各种结构化数据,交付应用程序,而不需要代码。
3.而目前,现有技术的模型驱动一般采用动态生成代码后再进行ci(continuous integration,持续集成)/cd(continuous deployment,持续部署),此类技术需要生成代码并完成打包、部署等活动后相关程序才能生效;第二种,采用动态编译方式生成动态类来绑定对象,此类技术可以实时生效,但需要动态编译,容易导致程序异常;第三种,采用大量预留不同类型的字段,比如预留200个字符串型字段,以解决不大于200个字符串型属性实体的orm(object relational mapping,对象关系映射)和数据处理,此类技术未根本解决字段的动态变化问题,超出范围之后还是要对代码进行变更;最后一种,通过纯sql(structured query language,结构化查询语言)进行数据处理,此类技术可以适配各种格式数据,但需要自行通过拼接sql的方式适配各种不同数据库,获取数据后的对象绑定需要额外的代码来实现。
4.另一方面,个性化saas应用要求同一种业务在实现时,根据业务的变化而有差异,数据结构、存储的库都因业务而变。分库分表技术的成熟,使得同时操作不同库不同表的数据成为可能,如:垂直分库,按照业务将表进行分类,分布到不同的数据库上面;垂直分表,将一个表按照字段分成多表,每个表存储其中一部分字段;水平分库,把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上;水平分表,在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。而一般分库分表主要针对一个实体类对应的一张表进行拆分,拆分的表之间具有一定的关联性,是对解决同一种业务的数据进行拆分。对于多种类业务的数据则无法处理好。
5.鉴于以上情况,如何克服现有技术所存在的缺陷,解决动态数据处理时需要开发、生成代码、适配性低,不能动态适配各种业务的不同数据格式等问题,是本技术领域待解决的难题。


技术实现要素:

6.针对现有技术的以上缺陷或改进需求,本发明提供一种基于分库分表的动态数据处理方法、系统和装置,无需开发,在不生成代码、不编译的情况下,将不同的业务数据绑定到一个实体对象,可以动态适配不同数据格式,对不同种类数据库的数据进行处理。
7.本发明实施例采用如下技术方案:
8.第一方面,本发明提供了一种基于分库分表的动态数据处理方法,包括:
9.接收输入数据并将输入数据与对应的模型标识绑定,根据绑定的模型标识以及当前用户标识获取相关数据;
10.根据所述相关数据对输入数据进行效验,保留效验后符合要求的输入数据,并计算分库分表数据;
11.将效验后的输入数据以及所述分库分表数据赋值给实体对象,由该实体对象进行orm,以生成sql;
12.执行生成的sql,将返回的数据绑定到orm对应的实体对象,根据实体对象对应的相关数据对返回的数据进行效验后返回给调用方。
13.进一步的,所述相关数据包括模型和模型字段数据以及租户和角色权限数据,所述根据绑定的模型标识以及当前用户标识获取相关数据具体包括:
14.根据绑定的模型标识获取模型和模型字段数据;
15.根据当前用户标识获取当前用户的租户和角色权限数据。
16.进一步的,所述根据相关数据对输入数据进行效验,保留符合要求的输入数据,并计算分库分表数据具体包括:
17.根据租户和角色权限数据过滤模型字段数据并用过滤后的模型字段数据对输入数据进行效验,保留效验后符合要求的输入数据;
18.根据模型和模型字段数据以及租户和角色权限数据来计算分库分表数据。
19.进一步的,所述实体对象绑定有对应的模型标识并含有分库分表属性以及可扩展的键-值属性。
20.进一步的,在所述由该实体对象进行orm,以生成sql的过程中,将分库分表属性和键-值属性展开扁平化,将键-值属性的key、value的层级和分库分表属性的层级保持一致,将所有的分库分表属性和键-值属性的key绑定到sql的字段,将所有分库分表属性的值和键-值属性的value作为sql的参数。
21.进一步的,所述根据实体对象对应的相关数据对返回的数据进行效验后返回给调用方具体包括:
22.根据实体对象绑定的模型标识得到对应的相关数据,根据相关数据中的模型和模型字段数据以及租户和角色权限数据来对返回的数据进行效验后返回给调用方。
23.进一步的,所述执行生成的sql具体包括:
24.将生成的sql根据提前配置的分库分表规则路由到不同种类的数据库中执行,并返回数据库中执行后的数据。
25.第三方面,本发明提供了一种基于分库分表的动态数据处理系统,用于实现如第一方面所述的基于分库分表的动态数据处理方法,所述系统包括数据建模、访问控制、解释执行服务以及分库分表中间件;
26.所述数据建模提供可视化建模能力,产生模型和模型字段数据,其中包含用于分库分表规则的相关配置数据;
27.所述访问控制提供可视化租户、角色权限配置能力,产生租户和角色权限数据,用于过滤模型和模型字段数据,租户和部分角色权限数据用于分库分表规则;
28.所述解释执行服务用于获得输入的不同格式数据,并将输入数据与对应的模型标
识绑定,根据绑定的模型标识以及当前用户标识获取相关数据;根据相关数据对输入数据进行效验,保留效验后符合要求的输入数据,并计算分库分表数据;将效验后的输入数据以及分库分表数据赋值给实体对象,由该实体对象进行orm,以生成sql;当分库分表中间件返回执行sql后的数据时,将返回的数据绑定到orm对应的实体对象,根据实体对象对应的相关数据对返回的数据进行效验后返回给调用方;
29.所述分库分表中间件用于获取生成的sql,将sql经过分库分表规则路由到不同种类的数据库中执行,并返回数据库中的数据。
30.进一步的,所述数据建模、访问控制、解释执行服务以及分库分表中间件通过分离成多个微服务或者合并成一个微服务来提供对应功能,其中当分库分表中间件独立部署时,由该分库分表中间件来连接不同种类的数据库并提供动态的增减数据库连接的功能,实现运行期间接入其他未连接的数据库。
31.第三方面,本发明提供了一种基于分库分表的动态数据处理装置,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的基于分库分表的动态数据处理方法。
32.与现有技术相比,本发明的有益效果在于:
33.(1)对不同结构数据采用同一个实体对象进行orm,可以在不生成代码、不编辑的情况下,动态的适配不同格式数据,在系统运行期间,数据格式修改实时生效,减少了编译、打包、发布的时间,对于数据格式不一样但逻辑相同的方法,无需开发即可适配,提高了开发和运维的效率。
34.(2)使用了orm和分库分表中间件,对开发人员屏蔽了数据层的读写操作,让开发人员无需关心数据层的适配,即可同时操作不同种类的数据库的读写,降低了开发难度。
35.(3)同一种业务数据根据业务的差异,对不同租户、用户提供不同的数据存储方式,使得实际业务库、表和表字段由于租户、角色权限的不一样而不一样。
附图说明
36.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
37.图1为本发明实施例1提供的一种基于分库分表的动态数据处理方法的流程图;
38.图2为本发明实施例1提供的步骤200扩展流程图;
39.图3为本发明实施例2提供的一种基于分库分表的动态数据处理系统的模块结构示意图;
40.图4为本发明实施例2提供的一个实施方式中的系统结构示意图;
41.图5为本发明实施例2提供的另一个实施方式中的系统结构示意图;
42.图6为本发明实施例2提供的系统功能实现流程示意图;
43.图7为本发明实施例3提供的一种基于分库分表的动态数据处理装置结构示意图。
具体实施方式
44.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
45.本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
46.此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
47.实施例1:
48.如图1所示,本发明实施例提供一种基于分库分表的动态数据处理方法,该方法包括如下步骤:
49.步骤100:接收输入数据并将输入数据与对应的模型标识绑定,根据绑定的模型标识以及当前用户标识获取相关数据。在该步骤中,所述对应的模型标识为接收的输入数据中含有的模型标识或者接口参数中传入的模型标识。所述相关数据包括模型和模型字段数据以及租户和角色权限数据。具体的,根据绑定的模型标识以及当前用户标识获取相关数据包括两个步骤:根据绑定的模型标识获取模型和模型字段数据;根据当前用户标识获取当前用户的租户和角色权限数据。
50.步骤200:根据相关数据对输入数据进行效验,保留效验后符合要求的输入数据,并计算分库分表数据。该步骤根据相关数据也即模型和模型字段数据以及租户和角色权限数据来对输入数据进行效验,以得到符合要求的输入数据,另外还能通过上述相关数据对分库分表数据进行计算。具体的,如图2所示,该步骤200具体可以分为如下两个步骤:步骤201:根据租户和角色权限数据过滤模型字段数据并用过滤后的模型字段数据对输入数据进行效验,保留效验后符合要求的输入数据。步骤202:根据模型和模型字段数据以及租户和角色权限数据来计算分库分表数据。
51.步骤300:将效验后的输入数据以及分库分表数据赋值给实体对象,由该实体对象进行orm,以生成sql。该步骤的实体对象在面对不同格式的数据时均为同一个实体对象,在将输入数据以及分库分表数据赋值给实体对象时,实体对象绑定对应的模型标识并含有分库分表属性以及可扩展的键-值(key-value)属性,该属性用于存储不同格式的业务数据,所有的orm都由该实体对象进行绑定。本优选实施例的该步骤在由实体对象进行orm,以生成sql的过程中,需要将分库分表属性和键-值属性展开扁平化,将键-值属性的key、value的层级和分库分表属性的层级保持一致,将所有的分库分表属性和键-值属性的key绑定到sql的字段,将所有分库分表属性的值和键-值属性的value作为sql的参数,从而生成sql。
52.步骤400:执行生成的sql,将返回的数据绑定到orm对应的实体对象,根据实体对象对应的相关数据对返回的数据进行效验后返回给调用方。该步骤中,执行生成的sql具体包括:将生成的sql根据提前配置的分库分表规则路由到不同种类的数据库中执行,并返回数据库中执行后的数据。sql执行完毕后,将返回的数据绑定到orm对应的实体对象,然后根据实体对象绑定的模型标识得到对应的相关数据,根据相关数据中的模型和模型字段数据以及租户和角色权限数据来对返回的数据进行效验后,将符合效验条件的数据返回给调用方。
53.本优选实施例中,上述的实体对象结构如下所示:
54.public class fitobject《id》{
55.private localmodelcache localmodel;//模型数据
56.private localmodelfield localmodelfield;//模型字段数据
57.private id id;//主键,若模型主键字段不是id,则复制该值
58.private string model;//用于分库分表
59.private string tenant;//用于分库分表
60.private string service;//用于分库分表
61.private map《string,object》dynamicattributes;//键-值属性
62.}
63.其中,属性localmodel(模型核心信息,如:模型所在微服务的标识、主键字段等)、localmodelfield(模型字段核心信息,如:模型包含的字段名、字段的数据类型等)用于临时存储通过模型标识获取的模型和模型字段的核心数据,属性id(主键)、model(模型标识)、tenant(租户标识)、service(微服务标识)当数据库表中不存在该字段时不参与写操作,读取时则根据传入的model、tenant、service或者表中存储的值进行赋值,属性id的值则用模型信息中的主键字段的值赋值,属性dynamiceattributes为键-值(key-value)属性,包含有该模型定义的且校验过的模型字段及其值。不同模型均使用该实体结构进行orm,对不同数据结构来说,核心变化的只是属性dynamiceattributes中的内容,该实体结构不变,orm绑定逻辑不变,代码不变。
64.综上所述,通过上述步骤,本实施例能够无需开发,在不生成代码、不编译的情况下,通过可视化建模、租户、权限控制,将不同的业务数据绑定到一个实体对象,基于分库分表规则将该实体对象同时绑定到不同种类的数据库的不同格式的表,动态适配不同数据格式,对不同种类数据库的数据进行处理,配置修改实时生效,同一种业务数据对不同租户、用户实现不同的存储方式。
65.实施例2:
66.基于上述实施例1提供的基于分库分表的动态数据处理方法,本实施例2举一个具体实施场景的例子来对该基于分库分表的动态数据处理方法进行更为详细的说明。
67.对于步骤100(接收输入数据并将输入数据与对应的模型标识绑定,根据绑定的模型标识以及当前用户标识获取相关数据),本实施例通过接口http://domain/purchaseorder接收用户user1提交的采购订单数据,其中接收的订单数据包含有orderno(订单编号)、type(采购类型)、supplier(供应商),paymentterms(付款条件),arrivaldate(到货日期),amount(总金额)等信息,将该订单数据与接口url中获取的模型标识purchaseorder绑定,根据绑定的模型标识purchaseorder获取相关数据,如:模型所在微服务的标识为purchase,模型包含的字段名orderno(订单编号,该字段为主键)、type(采购类型)、supplier(供应商)、paymentterms(付款条件)、amount(总金额)以及根据当前用户标识user1获取相关数据,如:user1的租户标识为0001、租户0001对应的字段权限中可用字段为orderno、type、supplier、paymentterms。对同一接口来说,通过切换不同模型标识、用户即可动态适配和接收不同格式的业务数据。在该步骤中,所述对应的模型标识通过url、cookie、header、body等方式获取模型标识model的值(如:http://域名/{model}、http://
域名/接口地址?model={model}、接收的数据中包含属性model、cookie、header中包含模型标识)。
68.对于步骤200(根据相关数据对输入数据进行效验,保留效验后符合要求的输入数据,并计算分库分表数据),本实施例首先根据租户和角色权限数据过滤模型字段数据并用过滤后的模型字段数据对输入数据进行效验,如:租户0001在数据库的t_purchaseorder表中定义了model、tenant、service、orderno、type、supplier、paymentterms七个字段,租户0002在数据库的t_purchaseorder表中定义了model、tenant、service、orderno、type、supplier、paymentterms、amount八个字段,采购订单模型purchaseorder定义了orderno(订单编号)、type(采购类型)、supplier(供应商)、paymentterms(付款条件)、amount(总金额)五个字段,实际传入orderno(订单编号)、type(采购类型)、supplier(供应商)、paymentterms(付款条件)、arrivaldate到货日期、amount(总金额)六个,但租户0001符合权限的只有orderno、type、supplier、paymentterms四个字段,所以仅保留效验后orderno、type、supplier、paymentterms这四个属性的输入数据,即:根据业务的差异,同一个模型对不同租户、权限实现不同的表结构进行存储。然后,本实施例根据模型和模型字段数据以及租户和角色权限数据来计算分库分表数据,这里的计算主要是通过定义计算规则或者计算表达式,将模型和模型字段数据以及租户和角色权限数据代入进行计算获取实际分库分表字段的值,如:已获取数据模型标识purchaseorder,模型类型default(如:default表示普通表,view表示视图),微服务标识purchase,用户的租户标识0001,当模型purchaseorder的分库规则为微服务标识 “_” 租户标识,分表规则为模型类型 “_” 数据模型标识时,表明不同租户的不同微服务的数据需要分库,表名根据模型类型和模型标识确定,即最终实际库名为purchase_0001,实际表名为t_purchaseorder(如:模型类型default对应的值为t,模型类型view对应的值为v),当模型purchaseorder的分库规则为微服务标识,分表规则为模型类型 “_” 数据模型标识 “_” 租户标识,表明不同微服务的数据需要分库,不同租户的数据在同一个库中需要分表,即最终实际库名为purchase,实际表名为t_purchaseorder_0001。根据业务的差异,同一个模型(业务数据)对不同租户、用户实现不同的数据库、表的存储方式。
69.对于步骤300,本实施例将效验后的输入数据以及分库分表数据赋值给实体对象,此实体对象含有model(模型标识)、tenant(租户标识)、service(微服务标识)、dynamicattributes(键-值属性),其中dynamicattributes包含orderno(订单编号)、type(采购类型)、supplier(供应商)、paymentterms(付款条件),由该实体对象进行orm,以生成如:insert into t_purchaseorder(model,tenant,service,orderno,type,supplier,payment_terms)values(?,?,?,?,?,?,?)的sql语句,其中“?”在执行时会由orm传入的参数值替代。该步骤的实体对象在面对不同格式的数据时均为同一种实体对象结构,当数据格式变化时,无需开发,无需生成代码、无需编译,通过模型、租户、权限等数据来控制和适配不同的数据格式,在将输入数据以及分库分表数据赋值给实体对象时,实体对象绑定对应的模型标识并含有分库分表属性以及可扩展的键-值(key-value)属性,该属性用于存储不同格式的业务数据,所有的orm都由该实体对象进行绑定。本优选实施例的该步骤在由实体对象进行orm,以生成sql的过程中,需要将分库分表属性和键-值属性展开扁平化,将键-值属性的key、value的层级和分库分表属性的层级保持一致,将所有的分库分表属性和键-值
属性的key绑定到sql的字段,将所有分库分表属性的值和键-值属性的value作为sql的参数,从而生成sql。
70.对于步骤400,本实施例先执行生成的sql,如:查询语句select orderno,type,supplier,paymentterms,amount,orderno as id,model,tenant,service from t_purchaseorder where model=

purchaseorder’and tenant=

0001’and service=

purchase’,根据不同微服务的数据需要分库,不同租户的数据在同一个库的分库分表规则条件,sql语句将被路由到purchase(service=’purchase’)库中的t_purchaseorder_0001(model=

purchaseorder’and tenant=

0001’)表中执行,这样通过不同的分库分表的值可以同时对多个库和表进行操作,而不用改变应用程序,sql执行完毕将返回的数据绑定到orm对应的实体对象,根据实体对象对应的相关数据对返回的数据进行效验,由于当前模型purchaseorder未定义model(模型标识)、tenant(租户标识)、service(微服务标识)字段,所以返回给调用方时只有orderno(订单编号)、type(采购类型)、supplier(供应商)、paymentterms(付款条件)四个字段的信息。sql执行完毕后,将返回的数据绑定到orm对应的实体对象,然后根据实体对象绑定的模型标识得到对应的相关数据,根据相关数据中的模型和模型字段数据以及租户和角色权限数据来对返回的数据进行效验,如:sql语句的查询字段是否符合模型定义的字段,数据类型是否和模型定义一致,该租户或者用户是否有该字段的权限,将符合效验条件的数据返回给调用方。
71.实施例3:
72.基于实施例1提供的基于分库分表的动态数据处理方法,本实施例3提供一种基于分库分表的动态数据处理系统,用于实现如实施例1所述的基于分库分表的动态数据处理方法。
73.如图3所示,本实施例2提供的系统包括数据建模、访问控制、解释执行服务以及分库分表中间件。
74.具体的,所述数据建模提供可视化建模能力,产生模型和模型字段数据,其中包含用于分库分表规则的相关配置数据。
75.所述访问控制提供可视化租户、角色权限配置能力,产生租户和角色权限数据,用于过滤模型和模型字段数据,租户和部分角色权限数据用于分库分表规则。
76.所述解释执行服务用于获得输入的不同格式数据,并将输入数据与对应的模型标识绑定,根据绑定的模型标识以及当前用户标识获取相关数据;根据相关数据对输入数据进行效验,保留效验后符合要求的输入数据,并计算分库分表数据;将效验后的输入数据以及分库分表数据赋值给实体对象,由该实体对象进行orm,以生成sql;当分库分表中间件返回执行sql后的数据时,将返回的数据绑定到orm对应的实体对象,根据实体对象对应的相关数据对返回的数据进行效验后返回给调用方。
77.所述分库分表中间件用于获取生成的sql,将sql经过分库分表规则路由到不同种类的数据库中执行,并返回数据库中的数据。
78.需说明的是,上述解释执行服务为本实施例对数据进行处理的主要服务模块。其在获得输入的不同格式数据后,先将输入数据绑定模型标识,并通过模型标识获取模型和模型字段数据,然后通过当前用户标识获取租户和角色权限数据,再对模型字段用租户和角色权限数据进行过滤,将输入的数据按照过滤完的字段数据进行校验,保留符合要求的
输入数据,然后将根据模型和模型字段数据、租户和角色权限数据计算得到的分库分表数据及校验后的输入数据赋值给实体对象,该实体类绑定模型标识并含有分库分表规则属性和可扩展的键-值(key-value)类型属性,由该实体对象进行orm以生成sql,在生成sql过程中将所有的分库分表属性和键-值属性的key绑定sql的字段,分库分表属性的值和键-值属性的value作为sql的参数,最后,当分库分表中间件返回数据时,将数据绑定到orm对应的实体对象,因为该实体对象含有模型标识,所以可以找到对应的相关数据并根据模型和字段数据、租户和角色权限数据校验后将返回的数据返回给调用方。
79.基于上述系统设计,数据建模、访问控制、解释执行服务、分库分表中间件可以采用不同的部署方式,通过分离成多个微服务或者合并成一个微服务来提供对应功能,其中当分库分表中间件独立部署时,由该分库分表中间件来连接不同种类的数据库并提供动态的增减数据库连接的功能,实现运行期间接入其他未连接的数据库。
80.如图4所示,例如在本实施例的一个实施方式中,系统包括数据配置服务和解释执行服务,数据配置服务包含数据建模和访问控制,提供可视化建模和租户、角色权限配置能力,生成模型和模型字段数据、租户和角色权限数据。而解释执行服务直接集成有分库分表中间件,由整个解释执行服务去连接不同数据库,动态适配不同结构数据,将输入数据经过模型和模型字段、租户和角色权限校验后,附加上分库分表信息,然后将产生的sql通过分库分表中间件的分库分表规则路由到已连接的不同种类的数据库中执行。
81.如图5所示,例如在本实施例的另一个实施方式中,数据建模服务为独立服务,提供有可视化建模能力,产生模型和模型字段数据。访问控制服务为独立服务,提供可视化租户、角色权限配置能力,产生租户和角色权限数据。解释执行服务为独立服务,提供动态适配不同结构/格式数据能力,将输入数据经过模型和模型字段、租户和角色权限校验后,附加上分库分表信息后产生的sql发送给分库分表中间件,当分库分表中间件执行完毕返回数据时,将返回数据绑定到orm对应的实体对象,该实体对象含有模型标识,根据模型和字段数据、租户和角色权限数据对返回数据校验后返回给调用方。分库分表中间件为独立应用,由该中间件去连接不同种类数据库,提供动态增减数据库连接和sql执行路由能力,将接收到的sql经过分库分表规则路由到不同种类的数据库中执行,并实现运行期间增加其他未连接的数据库的功能。
82.基于本实施例提供的上述系统,如图6所示,该系统功能的实现流程如下所示:
83.s01:接收数据绑定模型。该步骤用于接收输入数据,通过数据中含有的模型标识或者接口参数中传入的模型标识,将输入数据和模型标识绑定。
84.s02:获取模型和模型字段数据。该步骤根据绑定的模型标识,获取模型和模型字段数据。
85.s03:获取当前用户的租户和角色权限数据。该步骤根据当前用户标识,获取该用户的租户和绑定模型及其字段的角色权限数据。
86.s04:根据租户和角色权限过滤模型字段。该步骤根据租户和角色权限数据过滤该模型的字段,将输入的数据用过滤完保留的字段数据进行校验,保留符合要求的输入数据。
87.s05:根据模型和模型字段,租户和角色权限数据计算分库分表数据。
88.s06:将分库分表数据和业务数据合并生成实体对象。该步骤将分库分表数据的值和校验后的数据赋值给实体类的对象,该实体对象绑定模型标识并含有分库分表规则属性
和可扩展的键-值(key-value)类型属性,该属性用于存储不同格式的业务数据,所有的orm都由该实体对象进行绑定。
89.s07:通过同一实体对象的orm生成sql。该步骤在orm生成sql的过程中,将分库分表属性和键-值属性展开扁平化,将键-值属性的key、value的层级和分库分表属性的层级保持一致,将所有符合模型字段定义和权限的key和分库分表的属性绑定到sql的字段,所有的value和分库分表属性的值作为sql的参数,从而生成sql。
90.s08:将sql发送到分库分表中间件执行。该步骤将经过orm生成的sql发送到分库分表中间件中执行,分库分表中间件将sql的值根据提前配置的分库分表规则路由到不同的数据库中执行,当分库分表中间件为独立部署时,由该中间件提供动态的增减数据库连接的能力,实现运行期间接入其他未连接的数据库的功能。
91.s09:将返回的数据绑定模型后返回给调用方。该步骤在sql执行完毕后,将返回的数据绑定到orm的实体对象,根据实体对象绑定的模型,将符合要求的字段返回给调用方。
92.综上所述,本实施例采用同一个实体对象进行orm,可以在不生成代码、不编辑的情况下,动态的适配不同格式数据,在系统运行期间,数据格式修改实时生效,减少了编译、打包、发布的时间,对于数据格式不一样但逻辑相同的方法,无需开发即可适配,提高了开发和运维的效率。本实施例使用了orm和分库分表中间件,对开发人员屏蔽了数据层的读写操作,让开发人员无需关心数据层的适配,即可同时操作不同种类的数据库的读写,降低了开发难度。本实施例的同一种业务数据根据业务的差异,对不同租户、用户提供不同的数据存储方式,使得实际业务库、表和表字段由于租户、角色权限的不一样而不一样。
93.实施例4:
94.在上述实施例1-实施例3提供的基于分库分表的动态数据处理方法、系统的基础上,本发明还提供了一种可用于实现上述方法及系统的基于分库分表的动态数据处理装置,如图7所示,是本发明实施例的装置架构示意图。本实施例的基于分库分表的动态数据处理装置包括一个或多个处理器21以及存储器22。其中,图7中以一个处理器21为例。
95.处理器21和存储器22可以通过总线或者其他方式连接,图7中以通过总线连接为例。
96.存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1、2中的基于分库分表的动态数据处理方法、系统模块。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行基于分库分表的动态数据处理装置的各种功能应用以及数据处理,即实现实施例1-3的基于分库分表的动态数据处理方法、系统功能。
97.存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
98.程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1-3中的基于分库分表的动态数据处理方法、模块功能,例如,执行以上描述的图1、图6所示的各个步骤。
99.本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通
过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(readonlymemory,简写为:rom)、随机存取存储器(randomaccessmemory,简写为:ram)、磁盘或光盘等。
100.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献