CN114116777A - 一种数据处理方法、装置、设备及存储介质 - Google Patents
一种数据处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114116777A CN114116777A CN202111476284.8A CN202111476284A CN114116777A CN 114116777 A CN114116777 A CN 114116777A CN 202111476284 A CN202111476284 A CN 202111476284A CN 114116777 A CN114116777 A CN 114116777A
- Authority
- CN
- China
- Prior art keywords
- database
- value
- data
- request
- determining
- 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.)
- Pending
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/24—Querying
- G06F16/245—Query processing
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据处理方法、装置、设备及存储介质,所述方法应用于第一组件,所述方法包括:获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;对所述请求对象进行解析,得到分库关键字的取值;至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;在所述目标数据库中,对所述请求对象执行所述第一操作。对于本申请的方案,一方面,以数据库为处理维度,实现数据的访问,实现过程简单,处理效率高。另一方面,可以基于分库关键字的取值确定目标数据库,处理过程不需重写JDBC协议,实现方便、灵活。
Description
技术领域
本申请涉及数据处理技术领域,涉及但不限于数据处理方法、装置、设备及存储介质。
背景技术
随着计算机技术的飞速发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性和实时性要求,也对技术提出了更高的要求。对于数据库的存储技术,目前是将一个应用的数据存储至多个数据库中。
相关技术中,一般通过切面Java数据库连接(sharding-JDBC)组件采用分库分表的方式实现数据的访问。具体实现主要包括:需要引入单独的配置文件,以重写底层Java数据库连接(Java Database Connectivity,JDBC)协议的方式,配置复杂的分库分表策略,以表为处理维度,实现数据的访问;从而导致实现过程复杂。
实际上,对于很多业务场景,可能只需要完成简单的分库功能即可。对于简单的分库场景,若采用sharding-JDBC组件以分库分表的方式进行处理,处理效率较低。
发明内容
本申请提供一种数据处理方法及装置、设备、存储介质,一方面,以数据库为处理维度,实现数据的访问,实现过程简单,处理效率高。另一方面,可以基于分库关键字的取值确定目标数据库,处理过程不需重写JDBC协议,实现方便、灵活。
本申请的技术方案是这样实现的:
本申请提供了一种数据处理方法,所述方法应用于第一组件,所述方法包括:
获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;
对所述请求对象进行解析,得到分库关键字的取值;
至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;
在所述目标数据库中,对所述请求对象执行所述第一操作。
本申请提供了一种数据处理装置,所述装置支持第一组件;所述装置包括:
获得单元,用于获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;
解析单元,用于对所述请求对象进行解析,得到分库关键字的取值;
确定单元,用于至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;
处理单元,用于在所述目标数据库中,对所述请求对象执行所述第一操作。
本申请还提供了一种电子设备,包括:存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据处理方法。
本申请还提供了一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述数据处理方法。
本申请所提供的数据处理方法、装置、设备及存储介质,包括:获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;对所述请求对象进行解析,得到分库关键字的取值;至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;在所述目标数据库中,对所述请求对象执行所述第一操作。对于本申请的方案,一方面,以数据库为处理维度,实现数据的访问,实现过程简单,处理效率高。另一方面,可以基于分库关键字的取值确定目标数据库,处理过程不需重写JDBC协议,实现方便、灵活。
附图说明
图1为本申请实施例提供的数据处理系统的一种可选的结构示意图;
图2为本申请实施例提供的数据处理方法的一种可选的流程示意图
图3为本申请实施例提供的数据处理方法的一种可选的流程示意图;
图4为本申请实施例提供的数据处理方法的一种可选的流程示意图;
图5为本申请实施例提供的数据处理方法的一种可选的流程示意图;
图6为本申请实施例提供的数据处理系统的一种可选的结构示意图;
图7为本申请实施例提供的数据处理方法的一种可选的流程示意图;
图8为本申请实施例提供的数据处理方法的一种可选的流程示意图;
图9为本申请实施例提供的数据处理方法的一种可选的流程示意图;
图10为本申请实施例提供的数据处理装置的一种可选的结构示意图;
图11为本申请实施例提供的电子设备的一种可选的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对申请的具体技术方案做进一步详细描述。以下实施例用于说明本申请,但不用来限制本申请的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅是为例区别不同的对象,不代表针对对象的特定排序,不具有先后顺序的限定。可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
本申请实施例可提供数据处理方法及装置、设备和存储介质。实际应用中,数据处理方法可由数据处理装置实现,数据处理装置中的各功能实体可以由电子设备的硬件资源,如处理器等计算资源、通信资源(如用于支持实现光缆、蜂窝等各种方式通信)协同实现。
本申请实施例提供的数据处理方法应用于数据处理系统,数据处理系统包括至少一个电子设备。电子设备包括至少一个服务,以及第一组件,至少一个服务可以用于生成第一请求,电子设备通过第一组件执行:获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;对所述请求对象进行解析,得到分库关键字的取值;至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;在所述目标数据库中,对所述请求对象执行所述第一操作。
作为一示例,数据处理系统10的结构可如图1所示,包括:电子设备101、电子设备101包括第一服务1011,以及第一组件1012。
第一服务1011,用于生成第一请求。其中,第一服务1011可以为任一服务。示例性的,第一服务1011可以为具体的业务服务。
电子设备101通过第一组件1012执行:获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;对所述请求对象进行解析,得到分库关键字的取值;至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;在所述目标数据库中,对所述请求对象执行所述第一操作。其中,第一组件1012也可以称为自分布架构组件,或者分库组件或者sharding-JDBC组件。
电子设备101可以包括移动终端设备(例如手机、平板电脑等),或者非移动终端设备(例如台式电脑、服务器等)。
下面,结合图1所示的数据处理系统的示意图,对本申请实施例提供的数据处理方法及装置、设备和存储介质的各实施例进行说明。
第一方面,本申请实施例提供一种数据处理方法,该方法应用于数据处理装置;其中,该数据处理装置可以部署于图1中的电子设备101。下面,对本申请实施例提供的数据处理过程进行说明。
图2示意了一种可选的一种数据处理方法的流程示意图,本申请实施例提供的数据处理方法,该方法可以包括但不限于图2所示的S201至S204。
S201、电子设备获得第一服务的第一请求。
第一服务为电子设备支持的任一个服务。
电子设备通过第一组件拦截第一服务的第一请求。
本申请实施例对第一请求的具体内容不作唯一限定,可以根据实际需求进行配置。
在一示例中,第一请求可以包括请求对象和第一操作。
请求对象指第一请求的数据访问对象。本申请实施例对请求对象不作唯一限定,可以根据实际需求进行配置。例如,请求对象可以为一个数据库,请求对象还可以为一个数据库中的某一个表格数据。
第一操作指第一请求指示的具体操作。本申请实施例对第一操作的具体操作类型不作唯一限定,可以根据实际需求进行配置。例如,第一操作可以包括:增加、删除、修改或者查询等操作。
可以理解的,第一请求还可以包括请求时间等其他内容。
S202、电子设备对所述请求对象进行解析,得到分库关键字的取值。
分库关键字为用于分库的参考信息。本申请实施例对分库关键字的具体内容不作限定,可以根据实际需求进行配置。例如,分库关键字可以为客户号。再例如分库关键字还可以为请求时间。
电子设备对请求对象进行解析,得到分库关键字,然后基于分库关键字确定分库关键字的取值。
示例性的,假设预先配置的分库关键字为客户号(ecifNo),则电子设备解析请求对象,找到客户号,作为分库关键字;然后基于客户号,得到ecifNo=112233,确定分库关键字的取值为112233。
S203、电子设备至少基于所述分库关键字的取值,确定目标数据库。
其中,目标数据库为请求对象所属的数据库。
在一示例中,请求对象为表格1,表格1位于数据库1中,则目标数据库为数据库1。
在一种可能的实施方式中,电子设备可以基于分库关键字的取值,确定目标数据库。
在另一种可能的实施方式中,电子设备可以基于分库关键字的取值、偏移量确定目标数据库。
在再一种可能的实施方式中,电子设备可以基于分库关键字的取值,以及第一次数和第二次数,确定目标数据库。其中,第一次数为通过第一数据库访问请求对象的次数,第二次数为通过第二数据库访问请求对象的次数。
S204、电子设备在所述目标数据库中,对所述请求对象执行所述第一操作。
电子设备在目标数据库中查找该请求对象对应的数据,并对该请求对象对应的数据执行第一操作。
本申请实施例对电子设备在目标数据库中查找该请求对象对应的数据的过程不作具体限定,可以根据实际需求进行配置。例如,可以通过遍历的方式进行查找。再例如,还可以通过关键字搜索的方式进行查找。
本申请实施例提供的数据处理方案包括:获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;对所述请求对象进行解析,得到分库关键字的取值;至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;在所述目标数据库中,对所述请求对象执行所述第一操作。对于本申请的方案,一方面,以数据库为处理维度,实现数据的访问,实现过程简单,处理效率高。另一方面,可以基于分库关键字的取值确定目标数据库,处理过程不需重写JDBC协议,实现方便、灵活。
如图3所示,本申请实施例提供的数据处理方法,在执行S203电子设备至少基于所述分库关键字的取值,确定目标数据库之前,还可以先执行下述S203A。
S203A、电子设备基于所述分库关键字的取值,确定针对所述第一请求是否存在偏移量。
其中,一个分库关键字的取值对应一个偏移量的记录;本申请实施例对偏移量的记录形式不作唯一限定,可以根据实际需求进行配置。例如,可以通过文字形式表征偏移量的记录,也可以通过表格的形式表征偏移量的记录。
本申请实施例对偏移记录中的具体内容也不作唯一限定,可以根据实际需求进行配置。例如,一个偏移量的记录可以包括:分库关键字的取值,偏移量的取值。再例如,一个偏移量的记录可以包括分库关键字、分库关键字的取值、偏移量记录序号、原始数据库(偏移前的数据库)、目标数据库、偏移量、创建时间。
S203A可以实施为:电子设备以分库关键字的取值作为查找依据,确定目标偏移量记录,在目标偏移量记录中读取偏移量的取值,若偏移量的取值为0,则确定针对第一请求不存在偏移量,若偏移量的取值不是0,则确定针对第一请求存在偏移量。
需要说明的是,在针对第一请求不存在偏移量的情况下,执行下述S203B,在针对第一请求存在偏移量的情况下,执行下述S203C。
S203B、电子设备基于所述分库关键字的取值确定所述目标数据库。
S203C、电子设备基于所述分库关键字的取值,以及所述偏移量确定所述目标数据库。
下面,对S203B电子设备基于所述分库关键字的取值确定所述目标数据库的过程进行说明。该过程可以包括但不限于图4所示的S203B1至S203B4。
电子设备配置至少两个数据库作为存储第一服务的数据的数据库,并给每个数据库配置一个对应的分库区间。
示例1,存储第一服务的数据的数据库包括:数据库D1、数据库D2、数据库D3、数据库D4,其中,数据库D1对应的分库区间为[1-10],数据库D2对应的分库区间为[11-20],数据库D3对应的分库区间为[21-30],数据库D4对应的分库区间为[31-40]。
S203B1、电子设备将所述分库关键字的取值,转换为长整型类型的第一数值。
电子设备将分库关键字的取值转换为长整型类型的第一数值。本申请实施例对具体的转换方式不作具体限定,可以根据实际需求进行配置。例如,可以利用循环冗余校验(Cyclic Redundancy Check,CRC)16工具算法对分库关键字的取值进行转换,从而得到一个长整型类型的数值,作为第一数值。
S203B2、电子设备对所述第一数值进行取余计算,得到第二数值。
其中,第二数值小于或等于分库区间的最大取值。在示例1中,分库区间的最大取值为40。
电子设备将第一数值针对分库区间的最大取值进行计算,得到第一数值。
示例2,在第一数值为62,分库区间的最大取值为40的情况下,S203B2可以实施为:电子设备将62除以40后取余数,得到22,则将22作为第二数值。
S203B3、电子设备在至少两个分库区间中,确定目标分库区间。
目标分库区间为第二数值所属的分库区间;其中,至少两个分库区间中的每个分库区间对应一个存储第一服务的数据的数据库。
电子设备在至少两个分库区间中,确定第二数值所属的分库区间为目标分库区间。
基于示例1和示例2,S203B3可以实施为示例3,电子设备在分库区间[1-10],分库区间[11-20],分库区间[21-30],分库区间[31-40]中,确定第二数值22所属的分库区间为分库区间[21-30],则将分库区间[21-30]作为目标分库区间。
S203B4、电子设备确定所述目标数据库为所述目标分库区间对应的数据库。
示例性的,电子设备配置当前线程的访问数据库为该目标分库区间对应的数据库。
基于示例3,S203B4的实施可以为:电子设备确定分库区间[21-30]对应的数据库D3为目标数据库。
下面,对S203C电子设备基于所述分库关键字的取值,以及所述偏移量确定所述目标数据库的过程进行说明。该过程可以包括但不限于S203C1至S203C3。
S203C1、电子设备基于所述分库关键字的取值,确定第二数值;所述第二数值小于或等于分库区间的最大取值。
S203C1的具体实施可以参考上述S203B1电子设备将所述分库关键字的取值,转换为长整型类型的第一数值和S203B2电子设备对所述第一数值进行取余计算,得到第二数值的具体描述,此处不再一一赘述。
S203C2、电子设备对所述第二数值进行大小为所述偏移量的偏移,得到偏移后第二数值。
示例4,在第二数值为22,偏移量为10的情况下,S203C2的实施可以为:电子设备对22进行10个单位的偏移,得到32,将该32作为偏移后的第二数值。
S203C3、电子设备基于所述偏移后的第二数值确定偏移后的目标分库区间。
S203C3的具体实施可以参考上述S203B3电子设备在至少两个分库区间中,确定目标分库区间的具体描述,此处不再一一赘述。
基于上述示例4,电子设备基于偏移后的第二数值32,确定偏移后的目标分库区间为[31-40]。
S203C4、电子设备确定所述目标数据库为所述偏移后的目标分库区间对应的数据库。
S203C4的具体实施可以参考上述S203B4电子设备确定所述目标数据库为所述目标分库区间对应的数据库的具体描述,此处不再一一赘述。
基于上述示例4,电子设备确定数据库D4为目标数据库。
本申请实施例提供的数据处理方法,还可以对热点数据进行存储。在请求对象为热点数据的情况下,还可以包括但不限于下述S205和S206。
其中,热点数据为在第一时间段内,数据访问次数大于或等于第一访问阈值的数据。
第一时间段是用于判断一个数据是否为热点数据的时间判断指标。本申请实施例对第一时间段的具体不作唯一限定,可以根据实际需求进行配置。例如,第一时间段可以为一分钟、一个小时、一天或者一个月等等。
第一访问阈值是用于判断一个数据是否为热点数据的访问次数指标。本申请实施例对第一访问阈值的具体取值不作限定,可以根据实际需求进行配置。示例性的,第一访问阈值可以为2500000次。
本申请实施例对热点数据的具体数据类型不作限定,可以根据实际需求进行配置。
在一示例中,热点数据可以为配置表,其中配置表在每个数据库中的内容均相同。
S205、电子设备确定在所述第一时间段内,通过第一数据库访问所述热点数据的第一次数,以及通过第二数据库访问所述热点数据的第二次数。
其中,第一数据库与第二数据库属于不同的数据库。
电子设备统计在第一时间段内,通过第一数据库访问该热点数据的次数,并将该通过第一数据库访问该热点数据的次数作为第一次数;统计在第一时间段内,通过第二数据库访问该热点数据的次数,并将该通过第二数据库访问该热点数据的次数作为第二次数。
S206、电子设备判断第一次数是否大于或等于第一访问阈值,第二次数是否大于或等于第一访问阈值。
若第一次数大于或等于第一访问阈值,且第二次数小于第一访问阈值,则S203电子设备至少基于所述分库关键字的取值,确定目标数据库可以实现为下述S203D。
若第一次数小于第一访问阈值,且第二次数大于或等于第一访问阈值,则将第一次数与第二次数进行互换,第一数据库与第二数据库进行互换后,执行下述S203D。
若第一次数大于或等于第一访问阈值,且第二次数大于或等于第一访问阈值,则将通过第一数据库和第二数据库访问该热点数据的概率降低。
若第一次数小于第一访问阈值,且第二次数小于第一访问阈值,则按原有的访问原则继续访问该热点数据。
S203D、在所述第一请求的请求时间属于所述第一时间段的情况下,电子设备基于所述分库关键字的取值、所述第一次数和所述第二次数,确定所述目标数据库。
下面,对S203D电子设备基于所述分库关键字的取值、所述第一次数和所述第二次数,确定所述目标数据库的过程进行说明。该过程可以包括但不限于下述S203D1至S203D5。
S203D1、电子设备基于所述第一次数和所述第二次数,确定第一访问概率和第二访问概率。
其中,第一访问概率为通过第一数据库访问该热点数据的概率;第二访问概率为通过第二数据库访问该热点数据的概率;第一访问概率与第二访问概率的第一比值,与第一次数与第二次数的第二比值负相关。
电子设备基于第一次数和第二次数,确定第一次数与第二次数的第二比值,将第二比值的反比确定为第一比值,并基于第一比值确定第一访问概率和第二访问概率。
示例5,第一次数为3000000,第二次数为2000000,则确定第一比值为3:2;则第二比值为2:3;则第一访问概率为0.4,第二访问概率为0.6。
S203D2、电子设备基于所述第一访问概率和所述第二访问概率,确定第一预测区间和第二预测区间。
其中,第一预测区间对应第一数据数据库,第二预测区间对应第二数据库。
基于示例5,S203D2可以为示例6:电子设备确定预测区间的最大取值为10,则第一预测区间为[0,5],第二预测区间为[6,9]。
S203D3、电子设备基于所述分库关键字的取值,确定第三数值。
其中,第三数值小于或等于预测区间的最大取值。
电子设备将分库关键字的取值针对预测区间的最大取值进行取余计算,将得到的余数,作为第三数值。
S203D4、电子设备在所述第一预测区间和所述第二预测区间中,确定目标预测区间。
其中,目标预测区间为第三数值所属的预测区间。
电子设备将第三数值所属的预测区间确定为目标预测区间。
S203D5、电子设备确定所述目标数据库为所述目标预测区间对应的数据库。
S203D5的具体实施可以参考S203B4电子设备确定所述目标数据库为所述目标分库区间对应的数据库的具体描述,此处不再一一赘述。
进一步的,如图5所示,本申请实施例提供的数据处理方法,在执行S202电子设备对所述请求对象进行解析,得到分库关键字的取值之前,还可以先执行下述S207。
S207、电子设备判断是否通过第二服务预先对请求对象所属的数据库进行配置。
其中,第二服务与第一服务可以相同,或者第二服务与第一服务也可以不同。
本申请实施例对电子设备判断是否通过第二服务预先对请求对象所属的数据库进行配置的具体判断方式不作具体限定,可以根据实际需进行配置。
在一示例中,电子设备可以通过注解的方式判断是否通过第二服务预先对请求对象所属的数据库进行配置。
需要说明的是,若电子设备确定通过第二服务预先对请求对象所属的数据库进行配置,则执行下述S208,若未通过所述第二服务预先对请求对象所属的数据库进行配置,则执行上述S202。
S208、电子设备通过第一接口获取所述请求对象所属的目标数据库。
第一接口为第二服务与第一组件之间的接口。
本申请实施例对通过第一接口获取请求对象所属的目标数据库的实现方式不作具体限定,可以根据实际需求进行配置。例如,可以通过get DB Name的方法获取请求对象所属的目标数据库。
下面,以第一组件为自分布架构组件为例,对本申请实施例提供的数据处理方法进行说明。
为了便于理解,先对部分技术名词进行解释。
数据库(database,DB):是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
自分布架构:部署于一台或多台应用程序的实例(以下简称为应用实例),每个应用实例之间具有相同的代码和配置,相互独立互不影响。其中,每个应用实例拥有储存该应用程序(以下简称应用)的相关数据的数据库的连接信息,每个数据库中的数据库管理系统(Database Management System,DBMS)信息一致。
水平切分:若一个数据库中的数据量过大,将该数据库的数据按照某种规则进行划分,然后存储到多个结构相同的数据库中。
mybatis框架拦截器:mybatis是一款持久层框架,支持定制化结构化查询语言(Structured Query Language,SQL)、存储过程以及高级映射。mybatis避免了几乎所有的Java数据库连接(Java Database Connectivity,JDBC)代码、手动设置参数以及获取结果集。其中,mybatis拦截器在应用请求数据库,对数据进行新增、删除、改动、查询操作时,可以拦截具体的SQL请求语句和请求映射的数据传输对象(Data Transfer Object,DTO)。
Spring框架:Spring框架广泛应用于软件工程领域。其中,本实施例中涉及Spring框架中的面向切面编程(aspect-oriented programming,AOP)拦截器技术,SpringAbstract Routing Data Source动态设置数据源技术等等。
对于切面Java数据库连接(sharding-JDBC),相关技术中需要通过复杂的配置,实现分库分表功能,需要开发人员配置大量的xml来实现分库分表,虽然功能比较健全,但框架臃肿,实现复杂。
实际上,对于很多业务场景,可能只需要完成分库功能即可。在通过相关技术中的sharding-JDBC实现分库功能时,具有以下缺点:
1、配置复杂。
相关技术中的sharding-JDBC组件做分库分表时,需要单独引入配置文件,需要配置复杂的分库分表策略;实现过程复杂,人力物力消耗较大。尤其是在数据库和表比较多的情况下,实现更加复杂,且出错的可能性也较大。
2、现有分库分表组件的执行效率不高。
相关技术中的sharding-JDBC组件做分库分表时,需要重写底层JDBC协议,在SQL执行过程中需要根据配置策略进行计算和实现分库分表策略,导致SQL的执行耗时增加,性能会有所下降。
本申请的该实施例与相关技术相比具有以下优点:
1、相关技术中sharding-JDBC组件配置复杂,框架很重,效率得不到保障;本申请的该实施例配置简单明了。
2、相关技术中sharding-JDBC非原创,开源组件有问题难以定位,维护成本高,安全性、稳定性得不到保障;本申请的该实施例代码简单高效、易维护。
3、本申请的该实施例针对大量业务请求测试,采用动态分配技术,保证数据分布均匀性。
4、本申请的该实施例支持细粒度、方法级别的方案,灵活性高。
5、本申请的该实施例利用数据分析技术分散热点数据请求,减少热点数据源的输入输出(in out,IO)压力。
下面对该实施例的具体实现过程进行说明。
该实施例可以应用于如图6所示的数据处理系统中,如图6所示,该数据处理系统60中部署了多了应用601,以及与每个应用对应的数据库602。其中,一个应用601包括业务代码6011和自分布架构分库组件6012。
本申请实施例通过应用601中的自分布架构分库组件6012,实现本申请中的数据处理方法。
自分布架构分库组件(sharding-datasource),参考图7所示的内容,路由数据库的思路有两种:
方式一sharding Key:通过数据请求对象和配置的分库关键字(sharding Key),从数据请求对象中解析sharding Key的值,并基于sharding Key的值设置数据库名称(DBName);
方式二程序接口:通过框架暴露的程序接口(相当于第一接口),让应用通过其他服务或者组件处理并设置数据库名称(DB Name),并将设置好的DB Name发送至自分布架构分库组件。
如图7所示,本申请实施例提供的数据处理方法,在对数据库进行增删改查的时候,可以简单概括为S1至S7:
S1、mybatis框架的拦截器会拦截到具体的请求。
S2、检查是否已经设查DB Name。
具体的,自分布架构分库组件首先会检查是否已经设置过DB Name。如果检查结果为设置过DB Name,则可知道是通过程序接口设置的细粒度的请求,直接执行S5(路由到具体的DB Name),后续无需再解析sharding Key直接通过程序接口设置的DB Name请求对应的数据库;如果检查没有设置DB Name,执行S3。
S3、解析shardingKey的值。
具体的,框架会根据请求的数据对象,从数据对象中根据配置的sharding Key自动解析sharding Key的值。
S4、得到DB Name。
利用循环冗余校验(Cyclic Redundancy Check,CRC)16工具算法计算得到一个长整型(Long)值(相当于第一数值),将sharding Key的值对配置区间最大值取模(相当于第二数值),根据模的值对应与数据源配置的对应关系得到具体的DB Name。
S5、路由到具体的DB Name。
根据DB Name和数据资源(Data Source)的配置关系得到具体的Data Source对象,最后在对数据库进行增删改查数据的操作的时候Spring框架的Abstract RoutingData Source会根据前面设置DB Name拿到并设置具体请求的Data Source,起到路由数据的效果,达到自分布的分库的效果。
S6、请求数据库。
根据具体的DB Name请求数据库,并设置当前线程的数据库的名称为该DB Name。
S7、清除DB Name。
在数据访问完成后,清楚当前线程设置的DB Name。
本申请实施例提供的数据处理过程具体可以包括但不限于下述步骤1至步骤6。
步骤1、业务系统引用sharding-datasource组件(相当于第一组件)数据包。
步骤2、给每一个应用配置多个数据库(data base,DB)的连接信息以及DB Name与DB的对应关系。
其中,一个应用可以配置多个数据库的连接信息,一个DB Name对应一个数据库。
步骤3、配置区间(相当于分库区间)与DB Name之间的对应关系。
步骤4、配置用于表示分库的sharding Key。
步骤5、在业务系统的程序入口是否使用路由数据源(@RouteDataSource)注解进行细粒度的DB Name设置,如果使用了该注解进行了设置,Spring框架会根据AOP拦截器自动拦截到具体的请求(相当于第一请求),再调用业务系统与sharding-datasource组件之间的接口,通过get DB Name的方法得到该请求对应的DB Name,通过Thread Local.set(DBName)设置当前线程的数据库名称为该请求对应的DB Name,Spring AOP拦截器调用process方法将设置的DB Name交给后面的mybatis拦截器处理。mybatis拦截器拦截到请求以后,通过Thread Local.get方法判断当前线程已经存在DB Name,则根据已经设置的DBName设置数据源并进行访问(Spring Abstract Routing Data Source通过ThreadLocal.get的方法获取到具体的DB Name,然后根据DB Name与data base的对应关系得到对应的数据库,并请求数据库),访问完成后,Spring AOP拦截器调用Thread Local.remove函数清除当前线程的数据库名称。
这种设置方法利用程序接口与业务系统的方式属于细粒度的设置方式,这种方式非常灵活。其结合Spring AOP在切面,实现数据源的获取、设置、清理等功能,没有业务入侵同时对业务系统开放扩展,充分体现对扩展开发的软件设计原则。
步骤6、如果在业务系统程序入口没有使用@RouteDataSource注解进行细粒度的设置DBName,那么框架的AOP拦截器将不会拦截程序入口处的请求,也不存在提前设置的DBName,但是mybatis拦截器仍然会拦截到数据库请求,mybatis拦截器检查到当前线程没有设置DB Name会根据配置的sharding Key来定位具体的DB Name,根据已经设置的DB Name设置数据源并进行访问,访问完成后,Spring AOP拦截器调用Thread Local.remove函数清除当前线程的数据库名称。
其中,根据配置的sharding Key来定位具体的DB Name的处理流程可以包括但不限于下述子步骤1至子步骤4。
子步骤1、通过mybati框架中的分库拦截器(Sharding Data SourceInterceptor)拦截到数据库请求的操作(相当于第一操作)和数据请求对象。
其中,该操作可以包括:增加、删除、修改或者查询等等。
子步骤2、基于数据请求对象,找到配置的与该请求对应的sharding Key的值。
比如,基于数据请求对象得到配置的与该请求对应的sharing Key为ecifNo,数据请求对象实例为Customer,Customer中有一个字段为ecifNo=112233,通过Objectsharding Value=Customer.getClass得到customer对象在运行时的类型信息;通过getDeclared Field(sharding Key)在该类型信息中得到sharding Key的值(shardingValue);从而得到sharding Value为112233。
子步骤3、根据步骤2中获取的sharding Value定位具体的DB(相当于目标数据库)Name。
示例性的,假设有四台数据库服务器,DB Name分别为:a、b、c、d分别对应数据库为D1、D2、D3、D4,配置了区间与DB Name之间的对应关系如下:a对应区间[1-10],b对应区间[11-20],c对应区间[21-30],d对应区间[31-40]。
可以分析到区间最大值为40,对步骤2得到的sharding Value(112233),利用CRC16算法得到一个Long型数值,然后将Long型数值对40取余数得到最终的区间定位值,即:区间定位值为CRC 16(sharding Value)%40。
为方便理解,假设通过计算得到的值是22。在不考虑数据均匀分布的情况下,根据c对应区间[21-30]可知,该数据请求应该落于名称为c的数据库上。
在需要考虑数据分布均匀问题的情况下,则须考虑数据的offset偏移的情况。初期,由于数据量不大,将偏移开关标识位(data Offset Flag)置为false,其中,false表示不开启数据偏移。使用一段时间以后,统计各个数据库的数据量情况,假设a、b、c、d数据库中的数据使用量分别为1000万、2000万、3000万、4000万,由于数据量分布不均匀,将dataOffset Flag置为true,其中,true表示开启数据偏移。对后续请求插入数据库库的数据做偏移处理防止部分数据库数据量过载。
根据分析可知a,b,c,d数据使用量比为1:2:3:4,根据量化关系可知,需要调整落在a,b,c,d数据库的目标概率比为12:6:4:3,然后根据该目标概率比进行动态调整。
首先,计算预测区间大小为12+6+4+3=25,利用int val=new Random next Int(25);产生一个[0,25)之间的随机数val作为概率值(相当于第三数值),由于得到的区间定位值为22,如果0<=val<12则表示需要插入到a库,在该情况下,需要将左偏移两个区间单位,由于实际总区间大小为40,则的偏移量(offset)=-20;如果12<=val<18表示需要插入到b数据库,需要左偏移一个区间单位,则offset=-10;如果18<=val<22表示需要落在c库,不需要偏移则offset=0;如果22<=val<25表示要落在d库,需要右偏移一个区间单位offset=10。
如图8所示,得到的区间定位值为22(相当于第二数值),在偏移量为-20的情况下,区间定位实际值为22-20=2,由于数据库a对应区间[1-10],该数据落于数据库a;在偏移量为-10的情况下,区间定位实际值为22-10=12,由于数据库b对应区间[11-20],该数据落于数据库b;在偏移量为0的情况下,区间定位实际值为22,由于数据库c对应区间[21-30],该数据落于数据库c;在偏移量为10的情况下,区间定位实际值为22+10=32,由于数据库d对应区间[31-40],该数据落于数据库d。
可选的,还可以将offset记录下来,以便后期查询、更新、删除操作的时候可以定位到真实的数据库。例如,如表1所示,新建一张用于记录offset的表(TM_DATA_OFFSET_RECORD)。
表1Offset记录表示例:
Sharding Key | 用于分库的关键字(键) |
Sharding Value | 用于分库的关键字的值 |
Table Name | 表名 |
Range Value | 计算得到的区间定位值 |
Ori DB | 原始数据库的DB |
Offset | 偏移量 |
Target DB | 目标数据库的DB |
Created Time | 数据创建时间 |
对应表1,示例性的,Sharding Key的取值可以为‘ecifNo’,ShardingValue的取值可以为‘112233’,TableName的取值可以为‘TM_CUSTOMER’,RangeValue的取值可以为‘22’,OriDB的取值可以为‘c’,Offset的取值可以为‘-20’,TargetDB的取值可以为‘a’,CreatedTime的取值可以为‘now’)。
这样,可以根据Target DB设置当前线程的DB Name。当对表TM_CUSTOMER执行查询、更新、删除操作的时候,首先通过Sharding Key、Sharding Value、Table Name查询TM_DATA_OFFSET_RECORD表,如果没有查询到数据偏移,则按照原流程设置目标数据源继续处理,如果查询到偏移数据,则根据记录的Target DB设置目标数据源继续处理。
可选的,可以通过框架中的定时任务,每天监测各个数据库的数据使用量比,如果监测到各数据库的数据使用量有较大偏差,则将data Offset Flag置为true并进行动态调整。首先,找到各个数据库的数据使用量的比,然后找到数据使用量的比的最小公倍数为随机数的最大值,利用数据使用量的反比构造随机数数据区间,将数据量少的区间放大,数据量多的区间缩小已达到动态平衡。
其中,数据量比为:v1:v2:v3:v4;最小公倍数为K=最小公倍数(v1,v2,v3,v4),对应的随机数区间为[0,K/v1+K/v2+K/v3+K/v4);设置的随机数概率区间为:[0,K/v1),[K/v1,K/v1+K/v2),[K/v1+K/v2,K/v1+K/v2+K/v3),[K/v1+K/v2+K/v3,K/v1+K/v2+K/v3+K/v4)。
若采用一致性哈希(hash)算法确定数据库,这个算法虽然通用但是不能动态的调整数据量的大小,在一定情况下容易造成部分数据库数据量出现“撑死”状态,并严重影响数据库的性能;而部分数据库出现“饿死”现象,资源又得不到充分利用,导致数据库资源的浪费。该实施例可以根据偏移量对数据库数据量进行动态调整,避免分布式数据库出现的“撑死”“饿死”现象。
子步骤4、通过异步线程收集请求数据,作为分析热点数据源、热点数据表的依据,并利用收集的请求数据,分析动态调整数据库的请求,减缓热点数据库、数据表的压力。
例如,可以通过下述表2的方式记录收集的请求数据。
表2收集的请求数据表示例(TM_DATA_REQ_RECORD)
DB_NAME | 数据库名 |
TABLE_NAME | 数据库对应的表名 |
EXEC_SQL | 请求的SQL语句 |
REQ_TIME | 记录请求时间 |
对应表2,示例性的,DB_NAME的取值可以为‘DB1’,TABLE_NAME的取值可以为‘TM_CUSTOMER’,EXEC_SQL的取值可以为‘SELECT AA FROM TM_CUSTOMER’,REQ_TIME的取值可以为‘NOW’。
按照热点数据源的热点数据表统计每小时(相当于第一时间段)请求次数,为请求次数配置一个最大次数阈值(max ReqCount)(相当于第一访问阈值)例如(max ReqCount=1000000),当请求次数超过最大次数阈值表示高频请求,需要为该数据源的打散请求数据请求。
比如经过统计得知,数据源DB1(相当于第一数据库)的Table1(相当于请求对象)表在9:00-10:00这个时间段请求次数超过了最大次数阈值,而DB2(相当于第二数据库)的Table1表单位时间请求次数远没有达到最大次数阈值,假设统计次数比为3:2,并且Table1是一张数据无差别表(数据内容在各数据中保持一致,例如为配置表)。
这样,在mybatis拦截器中配置时间在9:00-10:00这个区间,产生一个随机数intval=new Random.next Int(10);根据数据访问量与概率反比的性质可知,如果概率值0<=val<6,则需要修改查询请求DB1的Table1的数据转移到DB2的Table1上。例如,具体修改为实例为:SELECT AA FROM DB1.Table1改为SELECT AA FROM DB2.Table1。如果概率值6<=val<10;则不发生请求修改,依然让查询请求落到DB1的Table1表上。从而实现根据数据库表的请求次数打散热点数据的请求。
例如,如图9所示,热点数据的访问可以包括但不限于图9所示的S91至S96。
S91、获得查询DB1的Table1中的数据请求。
S92、判断该请求的时间段是否为9:00-10:00。
若该请求的时间段属于9:00-10:00,则执行S93;若该请求的时间段不属于9:00-10:00,则执行S95。
S93、根据数据比例产生随机数。
若随机数属于区间[0,6),则执行S94;若随机数属于区间[6,10),则执行S95。
S94、将请求转换至DB2的Table1。
替换当前线程的数据库名程设置为DB2,以将请求转换至DB2的Table1。
S95、将请求设置至DB1的Table1。
将当前线程的数据库名称设置为DB1,以将请求设置至DB1的Table1。
S96、查询完毕。
该实施例具有以下技术效果:
1、配置简单,思路清晰,使用简单,无须进行复杂的配置和代码调试,代码执行效率高。
2、结合数据分析、概率论,动态调整数据入库的概率,解决了数据分布不均匀的痛点。
3、结合数据分析技术,通过大数据分析结合概率论决策热点数据和热点请求,可以自动将热点请求分发到非热点数据库上,降低热点数据库的IO压力,提高了热点数据库的性能。
4、提供业务系统与sharding-datasource组件之间的接口,可以通过实现接口的方式实现想要扩展的功能。
5、短小精悍,满足将业务数据水平切分的需求,给分布式系统的分库带来一种便捷的解决方案。
6、通过大批数据量的测试,发现数据分布均匀。
例如,用10台数据库经过一段时间测试与入库数据概率的动态调整,测试数据的分布情况,具体如下表3所示:
表3测试数据分布表
数据库名称 | 对应的数据使用量 |
DB1 | 996854 |
DB2 | 994726 |
DB3 | 1016342 |
DB4 | 985680 |
DB5 | 1017596 |
DB6 | 1015023 |
DB7 | 982652 |
DB8 | 984710 |
DB9 | 1006421 |
DB10 | 999996 |
通过上述表3可以看出:通过动态分配,各数据库的使用量分布相对均匀,避免了分库造成数据分布不均的情况。
为实现上述数据处理方法,本申请实施例的一种数据处理装置,下面结合图10所示的数据处理装置的结构示意图进行说明。
如图10所示,数据处理装置100包括:获得单元1001、解析单元1002、确定单元1003(为了便于区分,也称为第一确定单元)和处理单元1004。其中:
获得单元1001,用于获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;
解析单元1002,用于对所述请求对象进行解析,得到分库关键字的取值;
确定单元1003,用于至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;
处理单元1004,用于在所述目标数据库中,对所述请求对象执行所述第一操作。
在一些实施例中,数据处理装置100还可以包括第二确定单元,在解析单元1002对所述请求对象进行解析,得到分库关键字的取值之前,第二确定单元用于:基于所述分库关键字的取值,确定针对所述第一请求是否存在偏移量;
在针对所述第一请求不存在所述偏移量的情况下,确定单元1003,用于基于所述分库关键字的取值确定所述目标数据库;
在针对所述第一请求存在所述偏移量的情况下,确定单元1003,用于基于所述分库关键字的取值,以及所述偏移量确定所述目标数据库。
在一些实施例中,确定单元1003还用于:
将所述分库关键字的取值,转换为长整型类型的第一数值;
对所述第一数值进行取余计算,得到第二数值;所述第二数值小于或等于分库区间的最大取值;
在至少两个分库区间中,确定目标分库区间;所述目标分库区间为所述第二数值所属的分库区间;其中,所述至少两个分库区间中的每个所述分库区间对应一个存储第一服务的数据的数据库;
确定所述目标数据库为所述目标分库区间对应的数据库。
在一些实施例中,确定单元1003还用于:
基于所述分库关键字的取值,确定第二数值;所述第二数值小于或等于分库区间的最大取值;
对所述第二数值进行大小为所述偏移量的偏移,得到偏移后第二数值;
基于所述偏移后的第二数值确定偏移后的目标分库区间;
确定所述目标数据库为所述偏移后的目标分库区间对应的数据库。
在一些实施例中,数据处理装置100还可以包括第三确定单元,第三确定单元用于:在所述请求对象为热点数据的情况下,所述热点数据为在第一时间段内,数据访问次数大于或等于第一访问阈值的数据;执行:
确定在所述第一时间段内,通过第一数据库访问所述热点数据的第一次数,以及通过第二数据库访问所述热点数据的第二次数;
在所述第一次数大于或等于所述第一访问阈值,第二次数小于所述第一访问阈值的情况下,所述至少基于所述分库关键字的取值,确定目标数据库,包括:
基于所述分库关键字的取值、所述第一次数和所述第二次数,确定所述目标数据库。
在一些实施例中,基于所述分库关键字的取值、所述第一次数和所述第二次数,确定所述目标数据库,包括:
基于所述第一次数和所述第二次数,确定第一访问概率和第二访问概率;其中,所述第一访问概率为通过所述第一数据库访问所述热点数据的概率;所述第二访问概率为通过所述第二数据库访问所述热点数据的概率;所述第一访问概率与所述第二访问概率的第一比值,与所述第一次数与所述第二次数的第二比值负相关;
基于所述第一访问概率和所述第二访问概率,确定第一预测区间和第二预测区间;其中,所述第一预测区间对应第一数据数据库,所述第二预测区间对应第二数据库;
基于所述分库关键字的取值,确定第三数值;所述第三数值小于或等于预测区间的最大取值;
在所述第一预测区间和所述第二预测区间中,确定目标预测区间;所述目标预测区间为所述第三数值所属的预测区间;
确定所述目标数据库为所述目标预测区间对应的数据库。
在一些实施例中,数据处理装置100还可以包括判断单元,判断单元用于:在所述对所述请求对象进行解析,得到分库关键字的取值之前,执行:判断是否通过第二服务预先对请求对象所属的数据库进行配置;所述第二服务与所述第一服务相同,或者所述第二服务与所述第一服务不同;
若通过所述第二服务预先对请求对象所属的数据库进行配置,则通过第一接口获取所述请求对象所属的目标数据库;所述第一接口为所述第二服务与所述第一组件之间的接口;
若未通过所述第二服务预先对请求对象所属的数据库进行配置,则执行所述对所述请求对象进行解析,得到分库关键字的取值。
需要说明的是,本申请实施例提供的数据处理装置包括所包括的各单元,可以通过电子设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU,Central Processing Unit)、微处理器(MPU,Micro ProcessorUnit)、数字信号处理器(DSP,Digital Signal Processor)或现场可编程门阵列(FPGA,Field-Programmable Gate Array)等。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的数据处理方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read OnlyMemory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
为实现上述数据处理方法,本申请实施例提供一种电子设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例中提供的数据处理方法中的步骤。
下面结合图11所示的电子设备110,对电子设备的结构图进行说明。
在一示例中,电子设备110可以为上述电子设备。如图11所示,所述电子设备110包括:一个处理器1101、至少一个通信总线1102、用户接口1103、至少一个外部通信接口1104和存储器1105。其中,通信总线1102配置为实现这些组件之间的连接通信。其中,用户接口1103可以包括显示屏,外部通信接口1104可以包括标准的有线接口和无线接口。
存储器1105配置为存储由处理器1101可执行的指令和应用,还可以缓存待处理器1101以及电子设备中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random AccessMemory,RAM)实现。
第四方面,本申请实施例提供一种存储介质,也就是计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中提供的数据处理方法中的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一些实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种数据处理方法,其特征在于,所述方法应用于第一组件,所述方法包括:
获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;
对所述请求对象进行解析,得到分库关键字的取值;
至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;
在所述目标数据库中,对所述请求对象执行所述第一操作。
2.根据权利要求1所述的方法,其特征在于,在所述至少基于所述分库关键字的取值,确定目标数据库之前,所述方法还包括:
基于所述分库关键字的取值,确定针对所述第一请求是否存在偏移量;
所述至少基于所述分库关键字的取值,确定目标数据库,包括:
在针对所述第一请求不存在所述偏移量的情况下,基于所述分库关键字的取值确定所述目标数据库;
在针对所述第一请求存在所述偏移量的情况下,基于所述分库关键字的取值,以及所述偏移量确定所述目标数据库。
3.根据权利要求2所述的方法,其特征在于,所述基于所述分库关键字的取值确定所述目标数据库,包括:
将所述分库关键字的取值,转换为长整型类型的第一数值;
对所述第一数值进行取余计算,得到第二数值;所述第二数值小于或等于分库区间的最大取值;
在至少两个分库区间中,确定目标分库区间;所述目标分库区间为所述第二数值所属的分库区间;其中,所述至少两个分库区间中的每个所述分库区间对应一个存储第一服务的数据的数据库;
确定所述目标数据库为所述目标分库区间对应的数据库。
4.根据权利要求2所述的方法,其特征在于,所述基于所述分库关键字的取值,以及所述偏移量确定所述目标数据库,包括:
基于所述分库关键字的取值,确定第二数值;所述第二数值小于或等于分库区间的最大取值;
对所述第二数值进行大小为所述偏移量的偏移,得到偏移后第二数值;
基于所述偏移后的第二数值确定偏移后的目标分库区间;
确定所述目标数据库为所述偏移后的目标分库区间对应的数据库。
5.根据权利要求1所述的方法,其特征在于,在所述请求对象为热点数据的情况下,所述热点数据为在第一时间段内,数据访问次数大于或等于第一访问阈值的数据;所述方法还包括:
确定在所述第一时间段内,通过第一数据库访问所述热点数据的第一次数,以及通过第二数据库访问所述热点数据的第二次数;
在所述第一次数大于或等于所述第一访问阈值,第二次数小于所述第一访问阈值的情况下,所述至少基于所述分库关键字的取值,确定目标数据库,包括:
在所述第一请求的请求时间属于所述第一时间段的情况下,基于所述分库关键字的取值、所述第一次数和所述第二次数,确定所述目标数据库。
6.根据权利要求5所述的方法,其特征在于,所述基于所述分库关键字的取值、所述第一次数和所述第二次数,确定所述目标数据库,包括:
基于所述第一次数和所述第二次数,确定第一访问概率和第二访问概率;其中,所述第一访问概率为通过所述第一数据库访问所述热点数据的概率;所述第二访问概率为通过所述第二数据库访问所述热点数据的概率;所述第一访问概率与所述第二访问概率的第一比值,与所述第一次数与所述第二次数的第二比值负相关;
基于所述第一访问概率和所述第二访问概率,确定第一预测区间和第二预测区间;其中,所述第一预测区间对应第一数据数据库,所述第二预测区间对应第二数据库;
基于所述分库关键字的取值,确定第三数值;所述第三数值小于或等于预测区间的最大取值;
在所述第一预测区间和所述第二预测区间中,确定目标预测区间;所述目标预测区间为所述第三数值所属的预测区间;
确定所述目标数据库为所述目标预测区间对应的数据库。
7.根据权利要求1所述的方法,其特征在于,在所述对所述请求对象进行解析,得到分库关键字的取值之前,所述方法还包括:
判断是否通过第二服务预先对请求对象所属的数据库进行配置;所述第二服务与所述第一服务相同,或者所述第二服务与所述第一服务不同;
若通过所述第二服务预先对请求对象所属的数据库进行配置,则通过第一接口获取所述请求对象所属的目标数据库;所述第一接口为所述第二服务与所述第一组件之间的接口;
若未通过所述第二服务预先对请求对象所属的数据库进行配置,则执行所述对所述请求对象进行解析,得到分库关键字的取值。
8.一种数据处理装置,其特征在于,所述装置支持第一组件;所述装置包括:
获得单元,用于获得第一服务的第一请求;所述第一请求包括请求对象和第一操作;
解析单元,用于对所述请求对象进行解析,得到分库关键字的取值;
确定单元,用于至少基于所述分库关键字的取值,确定目标数据库;所述目标数据库为所述请求对象所属的数据库;
处理单元,用于在所述目标数据库中,对所述请求对象执行所述第一操作。
9.一种电子设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1至7任一项所述数据处理方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现权利要求1至7任一项所述的数据处理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111476284.8A CN114116777A (zh) | 2021-12-06 | 2021-12-06 | 一种数据处理方法、装置、设备及存储介质 |
PCT/CN2022/100533 WO2023103338A1 (zh) | 2021-12-06 | 2022-06-22 | 一种数据处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111476284.8A CN114116777A (zh) | 2021-12-06 | 2021-12-06 | 一种数据处理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114116777A true CN114116777A (zh) | 2022-03-01 |
Family
ID=80366977
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111476284.8A Pending CN114116777A (zh) | 2021-12-06 | 2021-12-06 | 一种数据处理方法、装置、设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114116777A (zh) |
WO (1) | WO2023103338A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023103338A1 (zh) * | 2021-12-06 | 2023-06-15 | 深圳前海微众银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN116610532A (zh) * | 2023-07-17 | 2023-08-18 | 山东浪潮数字商业科技有限公司 | Redis客户端监测方法、系统、电子设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106202441A (zh) * | 2016-07-13 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 基于关系型数据库的数据处理方法、装置和系统 |
CN107918642A (zh) * | 2017-10-26 | 2018-04-17 | 深圳市金立通信设备有限公司 | 数据查询方法、服务器及计算机可读存储介质 |
CN113704245A (zh) * | 2020-05-22 | 2021-11-26 | 北京沃东天骏信息技术有限公司 | 一种数据库主键生成方法、分表定位方法和装置 |
CN113094262B (zh) * | 2021-03-29 | 2022-10-18 | 四川新网银行股份有限公司 | 一种基于数据库分库分表的生产数据进行测试的方法 |
CN112862613A (zh) * | 2021-03-29 | 2021-05-28 | 中国建设银行股份有限公司 | 一种交易数据处理方法和装置 |
CN114116777A (zh) * | 2021-12-06 | 2022-03-01 | 深圳前海微众银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
-
2021
- 2021-12-06 CN CN202111476284.8A patent/CN114116777A/zh active Pending
-
2022
- 2022-06-22 WO PCT/CN2022/100533 patent/WO2023103338A1/zh unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023103338A1 (zh) * | 2021-12-06 | 2023-06-15 | 深圳前海微众银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN116610532A (zh) * | 2023-07-17 | 2023-08-18 | 山东浪潮数字商业科技有限公司 | Redis客户端监测方法、系统、电子设备及存储介质 |
CN116610532B (zh) * | 2023-07-17 | 2023-10-27 | 山东浪潮数字商业科技有限公司 | Redis客户端监测方法、系统、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023103338A1 (zh) | 2023-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11249969B2 (en) | Data storage method and apparatus, and storage medium | |
KR101994021B1 (ko) | 파일 조작 방법 및 장치 | |
US20180239800A1 (en) | Data query method and apparatus | |
WO2023103338A1 (zh) | 一种数据处理方法、装置、设备及存储介质 | |
WO2017016423A1 (zh) | 一种实时新增数据更新方法和装置 | |
JP2021500649A (ja) | シャード・データベースのシャード・テーブルにレコードを記憶するためのコンピュータ実装方法、コンピュータ・プログラム製品、およびシステム、シャード・データベースのシャード・テーブルからレコードを検索するためのコンピュータ実装方法、コンピュータ・プログラム製品、およびシステム、ならびにシャード・データベースを記憶するためのシステム | |
US20180293257A1 (en) | Method for accessing distributed database and distributed data service apparatus | |
CN111339171B (zh) | 数据查询的方法、装置及设备 | |
KR101764674B1 (ko) | 침해 자원에 대한 그래프 데이터베이스 생성 방법 및 그 장치 | |
US10496645B1 (en) | System and method for analysis of a database proxy | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
CN112925859A (zh) | 数据存储方法和装置 | |
US11308058B1 (en) | Building and using combined multi-type sub-indices to search NoSQL databases | |
CN111488594A (zh) | 一种基于云服务器的权限检查方法、装置、存储介质及终端 | |
CN109388729A (zh) | 音频子指纹的检索方法、装置以及音频查询系统 | |
CN111026709A (zh) | 基于集群访问的数据处理方法及装置 | |
CN114139040A (zh) | 一种数据存储及查询方法、装置、设备及可读存储介质 | |
CN113297266B (zh) | 数据处理方法、装置、设备及计算机存储介质 | |
CN110837499B (zh) | 数据访问处理方法、装置、电子设备和存储介质 | |
CN104636474A (zh) | 构建音频指纹库及检索音频指纹的方法和设备 | |
CN111782634B (zh) | 数据分布式存储方法、装置、电子设备及存储介质 | |
WO2019109538A1 (zh) | 一种分布式数据存储方法及装置 | |
CN115794806A (zh) | 金融数据的网格化处理系统及方法、装置、计算设备 | |
CN114238264A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN112862613A (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 |