CN108062314B - 动态分表数据处理方法和装置 - Google Patents
动态分表数据处理方法和装置 Download PDFInfo
- Publication number
- CN108062314B CN108062314B CN201610978409.XA CN201610978409A CN108062314B CN 108062314 B CN108062314 B CN 108062314B CN 201610978409 A CN201610978409 A CN 201610978409A CN 108062314 B CN108062314 B CN 108062314B
- Authority
- CN
- China
- Prior art keywords
- data
- tables
- dynamic sub
- written
- information
- 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.)
- Active
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种动态分表数据处理方法和装置,所述方法包括:解析动态分表策略,获取动态分表配置信息;查询数据库,获取空数据表的数量和数据表实例信息;在检验周期内,检验当前空数据表的数量是否大于或等于所述预分表数量;如果空数据表的数量小于所述预分表数量,根据配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息,以使当前空数据表的数量大于或等于所述预分表数量;和根据新的数据表的实例信息更新所述数据实体的数据表实例信息。所述装置包括解析模块、数据表实例信息获取模块、检验模块、动态数据表创建模块和更新模块。本发明有效地控制了单个数据表的尺寸,降低了数据库IO压力,提升了系统性能。
Description
技术领域
本发明涉及数据库技术领域,具体地说,涉及一种动态分表数据处理方法和装置。
背景技术
在使用关系型数据库存储数据的大型业务系统中,随着时间的推移和业务的发展,要处理的数据通常会达到几十GB,有的业务系统甚至达到TB级别。虽然存储介质和数据处理技术也在发展,但是仍无法满足用户对系统性能的要求。
对于此类业务系统,在相同的软硬件条件(如服务器集群、固态磁盘、数据库索引等等)下,为了能够进一步提升数据库读写性能,通常需要减小单个数据库表的尺寸。在数据表逻辑设计不变的前提下,通常通过减少单个数据表的数据行数来实现该目标。
为了实现对海量业务数据进行快速地增、删、改、查,很多业务系统采取了数据归档或者数据水平拆分的技术方案。
在数据归档技术方案中,根据业务特点,将业务数据划分为生产数据和历史数据两种类型,分别使用生产数据表和历史数据表进行存储。在业务数据处理过程中,将业务上认定为不再参与生产的数据从生产数据表中删除并转存至历史数据表,保证生产数据表的尺寸最小化,从而提升生产数据表的读写性能。
尽管上述的数据归档技术方案能够提升生产数据表的读写性能,但是仍然有以下几方面的缺陷:
1.适用范围小。该技术方案要求业务数据必须可以划归为历史数据,即不再参与生产,才有可能进行归档。并非所有的业务数据都能进行如此界限分明的归类。另外,如果某时刻生产数据过多,那么此项技术对性能的提升效果不明显。
2.在业务数据处理过程中需要增加归档逻辑,因而代码侵入性较强。如果不增加归档逻辑,则需要定期手工归档,无法实现无人值守,从而增大了运维的压力。
3.历史数据表的尺寸会不断增大,对历史数据表的处理需要增加额外的业务逻辑。
关于数据水平拆分技术方案,其针对某种业务数据,预先创建固定数量的数据表和路由规则,在业务数据处理过程中,先计算业务数据符合的路由规则,然后根据规则定向到目标表进行读写。由于数据表的数量是固定的,所以无法彻底解决单个数据表中业务数据累积增长的问题。随着时间的推移,单个数据表中的数据量很有可能带来性能问题。另一个问题是:为了实现数据的均匀分布,需要针对不同的业务数据制定不同的路由规则和计算方式,导致拆分逻辑和业务逻辑无法解耦。
发明内容
本发明要解决的技术问题在于,针对现有技术的不足,提供一种动态分表数据处理方法和装置,有效地控制每个数据表的尺寸,在避免业务数据累积带来的性能问题的同时,不影响业务数据的生产逻辑。
为解决上述技术问题,根据本发明的一个方面,提供了一种动态分表数据处理方法,其中,包括以下步骤:
解析动态分表策略,获取动态分表配置信息,所述动态分表配置信息至少包括预分表数量、检验周期和创建分表策略;
查询数据库,获取对应于数据实体的空数据表的数量和数据表实例信息;
在检验周期内,检验当前空数据表的数量是否大于或等于所述预分表数量;
如果当前空数据表的数量小于所述预分表数量,根据动态分表配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息,以使当前空数据表的数量大于或等于所述预分表数量;和
根据新数据表的实例信息更新所述数据实体的数据表实例信息。
优选地,根据动态分表配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息的步骤具体包括:
读取动态分表配置信息中的所述创建分表策略,获取指定的数据表表名前缀、创建语句和单表最大行数;
根据所述数据表表名前缀和创建语句生成相应的数据表;
根据所述数据表得到对应的数据表实例,其中,所述数据表实例的信息至少包括主键范围和写入表标识,其中,主键范围为N-M,N为主键范围最小值,N=上一个相邻数据表实例主键范围的最大值+1,M为主键范围最大值,M=N+单表最大行数,写入表标识设置为无效。
优选地,在解析动态分表策略之前,以在所述数据实体定义中增加注解的方式于配置所述动态分表策略;
在解析动态分表策略时,通过解析所述注解,获得所述动态分表配置信息。
优选地,所述动态分表策略还包括主键生成策略,在解析所述动态分表策略获得的所述动态分表配置信息中,还包括所述主键生成策略;
当有数据写请求时,识别所述待写入的数据实体类型;
根据所述数据实体类型,从对应类型的数据实体的动态分表配置信息中获取主键生成策略;
根据所述主键生成策略生成待写入数据的主键;
根据所述待写入数据的主键和数据表实例信息计算得到写入表;
将待写入数据插入到所述写入表中,并更新所述数据实体的数据表实例信息。
优选地,所述根据所述待写入数据的主键和数据表实例信息计算得到写入表的步骤包括:
根据数据表实例信息中数据表的写入表标识,将写入表标识有效的数据表确定为预写入表;
判断生成的主键是否位于所述预写入表的主键范围内;
如果所述主键位于所述预写入表的主键范围内,将所述预写入表确定为用于插入数据的写入表;
如果所述主键超出了所述预写入表的主键范围,将预写入表的写入表标识设置为无效,将预写入表的下一个数据表的实例信息中的写入表标识设置为有效,并将与其对应的数据表作为插入数据的写入表。
优选地,当有数据读请求时,识别待查询数据的数据实体类型;
根据所述数据实体类型,读取所述数据实体的数据表实例信息;
当所述数据读请求中包括待查询数据的主键时,根据所述主键和所述数据表实例信息,确定对应的数据表;
在所述数据表中查询得到相应的数据;
将查询结果返回给用户;
当所述数据读请求中包括查询条件时,根据所述数据表实例信息确定所述数据实体的所有数据表;
根据所述查询条件查询所述所有数据表;
统计根据所述查询条件查询后得到的数据数量;
根据所述数据数量及预设的分页信息,确定目标数据表;
查询所述目标数据表,读取查询结果。
为解决上述技术问题,根据本发明的另一个方面,提供了一种动态分表数据处理装置,其中,包括:
解析模块,用于解析动态分表策略,获取动态分表配置信息,所述动态分表配置信息包括预分表数量、检验周期和创建分表策略;
数据表实例信息获取模块,用于通过查询数据库,获取对应于数据实体的已经存在的、空数据表的数量和数据表实例信息;
检验模块,用于在检验周期内,检验当前已经存在的、空数据表的数量是否大于或等于预分表数量;
动态数据表创建模块,用于在当前已经存在的、空数据表的数量小于预分表数量时,根据配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息,以使当前空数据表的数量大于或等于所述预分表数量;和
更新模块,用于在当前数据表发生变化时,根据变化的数据表实例信息更新所述数据实体的数据表实例信息。
优选地,所述动态分表数据处理装置还包括:
配置模块,用于在所述数据实体定义中以增加注解的方式配置动态分表策略;
对应地,所述解析模块通过解析所述注解获得所述动态分表配置信息。
优选地,所述动态分表策略还包括主键生成策略,在解析所述动态分表策略获得的所述动态分表配置信息中,还包括所述主键生成策略;对应地,所述动态分表数据处理装置还包括:
写数据处理模块,用于根据数据写请求,将待写入数据插入到对应的写入表中,并发送更新通知给所述的更新模块,用于更新所述数据实体的数据表实例信息。
优选地,所述写数据处理模块包括:
数据实体类型识别单元,用于根据数据写请求识别所述待写入的数据实体类型;
主键生成单元,用于根据所述主键生成策略生成待写入数据的主键;
写入表计算单元,用于根据所述待写入数据的主键和数据表实例信息计算得到写入表;和
数据插入单元,用于将待写入数据插入到所述写入表中,并发送更新通知给所述的更新模块,用于更新所述数据实体的数据表实例信息。
优选地,所述的动态分表数据处理装置还包括:
读数据处理模块,用于根据数据读请求,从对应的数据表中查询得到对应的数据,并返回给用户。
优选地,所述读数据处理模块包括:
数据实体类型识别单元,用于根据数据读请求识别所述待查询的数据实体类型;
数据表确定单元,用于根据数据读请求中的主键或查询条件确定需要查询的数据表;
数据查询单元,用于根据数据读请求中的主键或查询条件在确定的数据表中查询得到数据;和
结果返回单元,读取根据主键查询得到数据,将所述数据返回给用户。
优选地,当数据读请求中包括查询条件时,所述读数据处理模块还包括:
数量统计单元,用于统计根据数据查询条件查询得到的数据的数量;
目标数据表确定单元,用于根据所述数据数量及预设的分页信息确定目标数据表;
对应于,所述数据查询单元根据确定的目标数据表,根据查询条件在目标数据表中查询得到数据;
所述的结果返回单元将所述数据查询单元查询得到数据返回给用户。
为解决上述技术问题,根据本发明的又一个方面,提供了一种动态分表数据处理装置,包括存储器和处理器,其中,所述存储器用于存储数据、信息和指令,所述处理器执行所指令,用于实现以下步骤:
解析动态分表策略,获取动态分表配置信息,所述动态分表配置信息包括预分表数量和创建分表策略;
查询数据库,获取对应于数据实体的空数据表的数量和数据表实例信息;
在检验周期内,检验当前空数据表的数量是否大于或等于所述预分表数量;
如果当前空数据表的数量小于所述预分表数量,根据配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息,以使当前空数据表的数量大于或等于所述预分表数量;和
根据新的数据表的实例信息更新所述数据实体的数据表实例信息。
根据本发明的第三方面,提供一种动态分表数据处理的装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行上述动态分表数据处理的方法。
根据本发明的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述指令被处理器执行时实现上述动态分表数据处理的方法。
本发明通过动态创建数据表的方式,在固定数据行数的数据表中进行业务数据的读写,不再需要在数据写入的同时创建数据表,实现了建表逻辑与写逻辑的解耦。
本发明通过对数据实体增加注解的方式进行分表配置,由于数据实体是业务逻辑模型,在数据实体上进行配置,有效地屏蔽了数据库物理模型的复杂性。
本发明在海量业务数据场景中,有效地控制了单个数据表的尺寸,降低了数据库IO压力,提升了系统性能。使用业务开发人员专注于业务逻辑,而不用担心业务数据过大会带来性能问题。
附图说明
通过参照以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1为本发明所述的动态分表数据处理方法的流程示意图;
图2为本发明所述的创建数据表的流程示意图;
图3为本发明所述写数据处理的方法流程示意图;
图4为本发明计算写入表的流程示意图;
图5为本发明读数据时的处理流程示意图;
图6为本发明所述动态分表数据处理装置的原理框图;
图7为本发明写数据处理模块的原理框图;和
图8为本发明读数据处理模块的原理框图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。
如图1所示,为本发明提供的一种动态分表数据处理方法的流程示意图,其中,包括以下步骤:
步骤S1,解析动态分表策略,获取动态分表配置信息,所述动态分表配置信息至少包括预分表数量和创建分表策略。
其中,所述预分表为在数据库中预设的空白数据表,预分表数量为在数据库保持空白数据表的最少数量,具体数量值可以根据数据实体的类型不同而设置不同的数值。无论何种操作,如前面所述的数据归档技术方案、数据水平拆分技术方案,在将数据插入到数据表中时,如果当前数据表不够,需要在插入数据的同时创建数据表,因而数据的写入与数据表的创建同时进行,将业务逻辑与分表逻辑混在一起,降低了数据的处理速度。本发明在数据库中始终保持足够用的数据表,不再出现在数据写入的同时创建数据表的情况,实现了业务逻辑和分表逻辑的解耦。
步骤S2,查询数据库,获取数据实体的数据表实例信息和已经存在的、用于存储数据的空数据表数量。其中,数据库中的每一个物理存在的数据表对应一个数据表实例,所述数据表实例为一些用于描述数据表的数据,例如数据实体名称、数据表名、主键范围和写入表标识等信息,这些信息统称为数据表实例信息。
在众多数据表中,只有一个数据表实例中的写入表标识为有效,即表明,在同一时刻只有一个数据表可以作为写入表写入数据,即与写入表标识有效的那个数据表实例对应的数据表可以写入数据。通常,在系统启动、加载所有数据表实例信息时,将第一个有数据且主键未达到最大值的数据表实例赋值写入标识,将其设定为有效。
步骤S3,在检验周期内,检验当前已经存在的、用于存储数据的空数据表的数量是否大于或等于预分表数量。其中,检验周期为配置信息中的一个参数,可以根据实际情况进行修改。
步骤S4,如果当前已经存在的、用于存储数据的空数据表的数量小于所述预分表数量,说明数据库中存在的用于写入数据的空数据表没有达到足够的数量,则根据配置信息中的所述创建分表策略创建数据表,以使当前已经存在的、用于读写数据的空数据表的数量大于或等于所述预分表数量。
步骤S5,当数据库的数据表发生变化时,如有新表生成,有数据写入等,根据变更的数据表实例信息更新所述数据实体的数据表实例信息。
作为一个实施例,系统中维护有数据表实例清单,针对每一种类型的数据实体,都有相应的数据表实例清单。在上述步骤S2中,在获取数据实体的数据表实例信息时,可通过所述数据实体的数据表实例清单获取所述数据表实例信息。在所述数据实体的数据表发生变化时,根据发生变化的数据表的实例信息,对所述数据表实例清单进行添加或修改,从而更新了所述数据实体的数据表实例信息。
在步骤S4中,创建数据表的过程如图2所示,具体步骤如下:
步骤S41,读取动态分表配置信息,获取所述创建分表策略,如指定的数据表表名前缀、创建语句和单表最大行数。
步骤S42,根据数据表表名前缀拼装数据库创建语句。
步骤S43,执行所述创建语句,从而得到新数据表。
步骤S44,获取新数据表的实例信息。如数据实体名称、数据表名、主键范围和写入表标识等信息。其中,根据所述单表最大行数及上一个数据表实例的主键范围,生成所述新数据表的主键范围N-M,即N为主键范围最小值,N=上一个数据表实例主键范围的最大值+1,M为主键范围最大值,M=N+单表最大行数。将新数据表写入表标识设置为无效。
在执行所述创建语句时,可以一次创建多个数据表,也可以每执行一次只创建一个数据表,当需要创建多个数据表时,可以反复执行多次,从而达到创建多个数据表的目的。
步骤S45,得到新的数据表后,将新数据表实例信息发送给更新模块(请见后面的装置说明)进行数据实体数据表实例信息的更新。
本发明在创建数据表时,通过单表最大行数这一创建参数限定了本发明中的数据表不至于过大,从而保证了读写效率。
本发明在所述数据实体的定义中增加注解,用于配置系统动态分表策略,在解析动态分表策略时,通过解析所述注解,获得预分表数量、创建分表策略检验周期以及进行写数据处理时应用到的主键生成策略。
如图3所示,为写数据处理的方法流程图。当有数据写请求时,进行写数据处理,具体地,包括如下步骤:
步骤S61,识别所述待写入的数据实体类型。由于数据实体类型有多种,对于每一种类型的数据实体的动态分表配置信息不同,因而,在有数据写请求时,首先要识别出所述待写入的数据实体类型。
步骤S62,根据所述数据实体类型,从对应类型的数据实体的动态分表配置信息中获取主键生成策略。
步骤S63,根据所述主键生成策略生成待写入数据的主键。在一个具体实施例中,在主键生成策略中规定采用数据库序列或者类似数据库序列的方式来生成主键。其中,序列是数据库的一个组件,通过API进行读取,每次读取后,读数自行递增。在本实施例中,要求数据表主键是整数,且连续递增。如:写入第一条数据时,主键为1,写入第二条数据时,主键为2,写入第N条数据时,主键为N。数据库序列可以很好的满足此项需求,如数据库DB2、Oracle都具备序列功能,对于没有此项功能的数据库,如MySQL数据库,可以使用自身的数据表实现此功能。
步骤S64,读取所述数据实体数据表实例信息,如数据表名、写入表标识、主键范围等信息。
步骤S65,根据所述待写入数据的主键和数据表实例信息计算得到写入表。
步骤S66,将待写入数据插入到所述写入表中。
步骤S67,根据当前已变化的数据表实例信息更新所述数据实体的数据表实例信息。
如图4所示,为计算写入表的流程图,其中,步骤S65中所述根据所述待写入数据的主键和数据表实例信息计算得到写入表的步骤包括:
步骤S651,根据数据表实例信息中数据表的写入表标识,将写入表标识有效的数据表确定为预写入表。
步骤S652,判断生成的主键是否位于所述预写入表的主键范围内;如果所述主键位于所述预写入表的主键范围内,转到步骤S653;如果所述主键超出了所述预写入表的主键范围,将预写入表的写入表标识设置为无效,转到步骤S654。
转到步骤S653,将所述预写入表确定为用于插入数据的写入表。
步骤S654,将所述预写入表的下一个数据表的写入表标识设置为有效,并作为插入数据的写入表。
其中,在判断生成的主键是否位于所述预写入表的主键范围时,先从所述预写入表的数据表实例信息中获取所述预写入表的主键范围上限Kmax;比较生成的主键是否大于所述主键范围上限Kmax,如果生成的主键大于所述主键范围上限Kmax,则生成的主键超出了所述预写入表的主键范围;如果生成的主键小于或等于所述主键范围上限Kmax,则生成的主键位于当前写入表的主键范围内。
如图5所示,为本发明读数据时的处理流程示意图。当有数据读请求时,通过以下步骤完成数据的读取:
步骤S71,识别待查询数据的数据实体类型。
步骤S72,根据所述数据实体类型,读取所述数据实体的数据表实体信息。
当所述数据读请求中包括待查询数据的主键时,在步骤S73,根据所述主键和所述数据表实例信息,确定对应的数据表。例如,通过查询所述主键位于哪个数据表实例信息中的主键范围内,从而确定具体的数据表实例,当确定了数据表实例,也就确定了物理数据表。
步骤S74,在所述物理数据表中查询得到相应的数据。
步骤S75,将查询结果返回给用户。
当所述数据读请求中包括查询条件时,在步骤S80,根据所述数据表实体确定所有数据表。
步骤S81,根据所述查询条件查询所述所有数据表。
步骤S82,统计步骤S81中查询后得到的数据数量,具体地,可以针对每个数据表拼装统计数据数量的查询语句,利用多线程技术并发执行查询。在主线程中等待结果,并获得总的经过条件查询后得到的符合所述条件的数据的数量。
步骤S83,根据统计出来的数据数量及预设的分页信息确定读取数据的目标数据表。其中,所述的分页信息是指可以一次读取的数据数量,对应于查询结果,是指查询结果的一个子集。
步骤S84,针对目标数据表,再次拼装条件查询语句,执行查询操作,从所述目标数据表查询出符合条件的数据,并读取数据,通过步骤S75将查询结果返回给用户。
其中,读取和将返回查询结果给用户的操作在数据量较大时会发生多次。
例如,在一个学校的学生清单中,一共有20000个学生,每个数据表中记录有100个学生的信息,因而一共有200个数据表。学校要查询期中考试成绩在80分以上的学生。读取出期中考试成绩在80分以上的学生的信息的过程如下:
根据所述查询条件“期中考试成绩在80分以上”查询所述200个数据表;
统计每个数据表中符合所述查询条件的数据的数量及一共的数据量,例如第一个数据表有80个,第二数据表有75个……,最后统计一共有8000条数据。
假设设定分页信息为1000条,即每次可以读取1000条。根据所述分页信息中的数据量1000,确定目标数据表,如第一个数据表、第二个数据表……,直到得到1000条数据的数据表,假设为前12个数据表,即需要在前12个数据表中读取这1000条数据。
针对这12个数据表,再次根据查询条件进行查询,并读取出这1000条数据。以此类推,直到将所述的8000条数据全部读取出来。
本发明在读取数据时,不是将符合条件的数据一次性的全部读取出来,而是根据预设的分页信息,将查询结果分为多个子集,分批读取,从而减小了服务器及内存的压力。
本发明还提供了一种动态分表数据处理装置,其中,如图6所示,主要包括:解析模块1、数据表实例信息获取模块2、检验模块3、动态数据表创建模块4和更新模块5。其中,所述解析模块1用于解析动态分表策略,获取预分表数量、创建分表策略、主键生成策略和检验周期等动态分表配置信息。所述数据表实例信息获取模块2通过查询数据库7,获取数据实体的数据表实例信息和已经存在的、用于存储数据的空数据表数量。所述检验模块3在检验周期内,检验当前已经存在的、用于存储数据的空数据表的数量是否大于或等于预分表数量。所述动态数据表创建模块4在当前已经存在的、用于存储数据的空数据表的数量小于预分表数量时,根据配置信息中的所述创建分表策略创建数据表。所述更新模块5在当前数据表发生变化时,根据变化的数据表实例信息更新更新所述数据实体数据表实例信息。
其中,还包括配置模块6,用户或管理员根据数据实体的类型,通过配置模块6在数据实体定义中增加注解,用以配置系统动态分表策略,经过解析模块1的解析,得到所述动态分表配置信息。
本发明所述系统还包括写数据处理模块8,用于根据数据写请求,将待写入数据插入到对应的写入表中,并发送更新通知给所述的更新模块5,用于更新所述数据实体的数据表实例信息。
具体地,所述写数据处理模块8如图7所示,包括数据实体类型识别单元81、主键生成单元82、写入表计算单元83和数据插入单元84。其中,所述数据实体类型识别单元81用于根据数据写请求识别所述待写入的数据实体类型;所述主键生成单元82读取动态分表配置信息,根据其中的所述主键生成策略生成待写入数据的主键;所述写入表计算单元83读取数据表实例信息,根据所述待写入数据的主键和数据表实例信息计算得到写入表;所述数据插入单元84将待写入数据插入到数据库7中对应的所述写入表中,并发送更新通知给所述的更新模块5,用于更新所述数据实体的数据表实例信息。
其中,所述写入表计算单元83包括预写入表确定单元、比较单元和写入表确定单元,其中,所述预写入表确定单元通过查询数据表实例信息中数据表的写入表标识,将写入表标识有效的数据表确定为预写入表,并获取所述预写入表的主键范围;比较单元比较生成的主键是否大于所述主键范围上限Kmax;写入表确定单元根据所述比较单元的比较结果,确定写入表。即:如果生成的主键小于或等于所述主键范围上限Kmax,则生成的主键位于当前写入表的主键范围内,将所述预写入表确定为用于插入数据的写入表;如果生成的主键大于所述主键范围上限Kmax,则生成的主键超出了所述预写入表的主键范围;将当前预写入表的写入表标识设置为无效,将当前预写入表的下一个数据表的写入表标识设置为有效,并作为插入数据的写入表。
本发明所述的动态分表数据处理装置还包括读数据处理模块9,用于根据数据读请求,从对应的数据表中查询得到对应的数据,并返回给用户。其中,所述读数据处理模块9如图8所示,包括数据实体类型识别单元91、数据表确定单元92、查询单元93和结果返回单元94。其中,所述数据实体类型识别单元91用于根据数据读请求识别所述待待查询的数据实体类型;所述数据表确定单元92用于根据数据读请求中的主键确定需要查询的数据表;所述查询单元93根据数据读请求中的主键在确定的数据表中查询得到数据;所述结果返回单元94将查询得到的数据返回给用户。
当数据读请求中包括查询条件时,所述读数据处理模块9还包括数量统计单元95,用于统计根据数据查询条件查询得到的数据的数量。具体地,可以针对每个数据表拼装按条件查询的数量语句,通过执行该语句还获得每个数据表的符合查询条件的查询结果数据。当数据表较多时,可以采用多线程处理方式。所述目标数据表确定单元96根据所述数据数量及预设的分页信息确定目标数据表。其中,所述分页信息可以在查询条件中设置。
对应地,所述数据查询单元93根据确定的目标数据表,根据查询条件在目标数据表中查询并读取符合查询条件的数据;通过所述的结果返回单元94将查询结果返回给用户。
本发明还提供了一种动态分表数据处理装置,包括存储器和处理器,其中,所述存储器用于存储数据、信息和指令,所述处理器执行所述指令,用于实现前述图1-5所示的处理方法和图7-8所示的处理装置。由于前面已进行了详细说明,在此不再赘述。
本发明动态地创建数据表,并在数据库中针对对应类型的数据实体设置足够数量的数据表,在数据写入时,不再需要同时创建数据表实现了解耦。并且,本发明通过对数据实体增加注解的方式进行分表配置,由于数据实体是业务逻辑模型,在数据实体上进行配置,有效地屏蔽了数据库物理模型的复杂性。本发明在海量业务数据场景中,有效地控制了单个数据表的尺寸,降低了数据库IO压力,提升了系统性能。使用业务开发人员专注于业务逻辑,而不用担心业务数据过大会带来性能问题。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种动态分表数据处理方法,其中,包括以下步骤:
解析动态分表策略,获取动态分表配置信息,所述动态分表配置信息至少包括预分表数量、检验周期和创建分表策略;
查询数据库,获取对应于数据实体的空数据表的数量和数据表实例信息;
在检验周期内,检验当前空数据表的数量是否大于或等于所述预分表数量;
如果当前空数据表的数量小于所述预分表数量,根据动态分表配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息,以使当前空数据表的数量大于或等于所述预分表数量;和
根据新数据表的实例信息更新所述数据实体的数据表实例信息。
2.如权利要求1所述的动态分表数据处理方法,其中,根据动态分表配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息的步骤具体包括:
读取动态分表配置信息中的所述创建分表策略,获取指定的数据表表名前缀、创建语句和单表最大行数;
根据所述数据表表名前缀和创建语句生成相应的数据表;和
根据所述数据表得到对应的数据表实例,其中,所述数据表实例的信息至少包括主键范围和写入表标识,其中,主键范围为N-M,N为主键范围最小值,N=上一个相邻数据表实例主键范围的最大值+1,M为主键范围最大值,M=N+单表最大行数,写入表标识设置为无效。
3.如权利要求1或2所述的动态分表数据处理方法,其中,在解析动态分表策略之前,以在所述数据实体定义中增加注解的方式于配置所述动态分表策略;
在解析动态分表策略时,通过解析所述注解,获得所述动态分表配置信息。
4.如权利要求1所述的动态分表数据处理方法,其中,所述动态分表策略还包括主键生成策略,在解析所述动态分表策略获得的所述动态分表配置信息中,还包括所述主键生成策略;
当有数据写请求时,识别待写入的数据实体类型;
根据所述数据实体类型,从对应类型的数据实体的动态分表配置信息中获取主键生成策略;
根据所述主键生成策略生成待写入数据的主键;
根据所述待写入数据的主键和数据表实例信息计算得到写入表;和
将待写入数据插入到所述写入表中,并更新所述数据实体的数据表实例信息。
5.如权利要求4所述的动态分表数据处理方法,其中,所述根据所述待写入数据的主键和数据表实例信息计算得到写入表的步骤包括:
根据数据表实例信息中数据表的写入表标识,将写入表标识有效的数据表确定为预写入表;
判断生成的主键是否位于所述预写入表的主键范围内;
如果所述主键位于所述预写入表的主键范围内,将所述预写入表确定为用于插入数据的写入表;和
如果所述主键超出了所述预写入表的主键范围,将预写入表的写入表标识设置为无效,将预写入表的下一个数据表的实例信息中的写入表标识设置为有效,并将与其对应的数据表作为插入数据的写入表。
6.如权利要求1所述的动态分表数据处理方法,其中,当有数据读请求时,识别待查询数据的数据实体类型;
根据所述数据实体类型,读取所述数据实体的数据表实例信息;
当所述数据读请求中包括待查询数据的主键时,根据所述主键和所述数据表实例信息,确定对应的数据表;
在所述数据表中查询得到相应的数据;和
将查询结果返回给用户;
当所述数据读请求中包括查询条件时,根据所述数据表实例信息确定所述数据实体的所有数据表;
根据所述查询条件查询所述所有数据表;
统计根据所述查询条件查询后得到的数据数量;
根据所述数据数量及预设的分页信息,确定目标数据表;和
查询所述目标数据表,读取查询结果。
7.一种动态分表数据处理装置,其中,包括:
解析模块,用于解析动态分表策略,获取动态分表配置信息,所述动态分表配置信息包括预分表数量、检验周期和创建分表策略;
数据表实例信息获取模块,用于通过查询数据库,获取对应于数据实体的已经存在的、空数据表的数量和数据表实例信息;
检验模块,用于在检验周期内,检验当前已经存在的、空数据表的数量是否大于或等于预分表数量;
动态数据表创建模块,用于在当前已经存在的、空数据表的数量小于预分表数量时,根据配置信息中的所述创建分表策略创建数据表并获得新数据表的实例信息,以使当前空数据表的数量大于或等于所述预分表数量;和
更新模块,用于在当前数据表发生变化时,根据变化的数据表实例信息更新所述数据实体的数据表实例信息。
8.如权利要求7所述的动态分表数据处理装置,其中,还包括:
配置模块,用于在所述数据实体定义中以增加注解的方式配置动态分表策略;
对应地,所述解析模块通过解析所述注解获得所述动态分表配置信息。
9.如权利要求7所述的动态分表数据处理装置,其中,所述动态分表策略还包括主键生成策略,在解析所述动态分表策略获得的所述动态分表配置信息中,还包括所述主键生成策略;
所述装置还包括写数据处理模块,用于根据数据写请求,将待写入数据插入到对应的写入表中,并发送更新通知给所述的更新模块,用于更新所述数据实体的数据表实例信息。
10.如权利要求7所述的动态分表数据处理装置,其中,还包括:
读数据处理模块,用于根据数据读请求,从对应的数据表中查询得到对应的数据,并返回给用户。
11.一种动态分表数据处理的装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如权利要求1至10中任一项所述的动态分表数据处理的方法。
12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述指令被处理器执行时实现如权利要求1至10中任一项所述的动态分表数据处理的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610978409.XA CN108062314B (zh) | 2016-11-07 | 2016-11-07 | 动态分表数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610978409.XA CN108062314B (zh) | 2016-11-07 | 2016-11-07 | 动态分表数据处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108062314A CN108062314A (zh) | 2018-05-22 |
CN108062314B true CN108062314B (zh) | 2021-09-14 |
Family
ID=62137867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610978409.XA Active CN108062314B (zh) | 2016-11-07 | 2016-11-07 | 动态分表数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108062314B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109359060B (zh) * | 2018-10-24 | 2023-06-16 | 三六零科技集团有限公司 | 数据抽取方法、装置、计算设备及计算机存储介质 |
CN110795431B (zh) * | 2019-10-28 | 2020-12-01 | 天津同阳科技发展有限公司 | 环境监测数据处理方法、装置、设备及存储介质 |
CN111209284B (zh) * | 2020-01-10 | 2023-12-29 | 北京仁科互动网络技术有限公司 | 基于元数据的分表方法及装置 |
CN111797108A (zh) * | 2020-07-17 | 2020-10-20 | 西安数据如金信息科技有限公司 | 一种更新分析数据库的方法及装置 |
CN112328600A (zh) * | 2020-11-16 | 2021-02-05 | 北京首汽智行科技有限公司 | 一种电子优惠券管理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1217540A1 (en) * | 2000-11-29 | 2002-06-26 | Lafayette Software Inc. | Methods of organizing data and processing queries in a database system, and database system and software product for implementing such method |
CN104035928A (zh) * | 2013-03-04 | 2014-09-10 | 杭州华三通信技术有限公司 | 一种tcam表空间回收的方法及装置 |
CN105095393A (zh) * | 2015-06-30 | 2015-11-25 | 努比亚技术有限公司 | 一种数据存储方法及装置 |
CN105335477A (zh) * | 2015-10-10 | 2016-02-17 | 北京京东尚科信息技术有限公司 | 一种数据库的操作方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013200685A (ja) * | 2012-03-23 | 2013-10-03 | Toshiba Corp | メモリ管理方法および情報処理装置 |
-
2016
- 2016-11-07 CN CN201610978409.XA patent/CN108062314B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1217540A1 (en) * | 2000-11-29 | 2002-06-26 | Lafayette Software Inc. | Methods of organizing data and processing queries in a database system, and database system and software product for implementing such method |
CN104035928A (zh) * | 2013-03-04 | 2014-09-10 | 杭州华三通信技术有限公司 | 一种tcam表空间回收的方法及装置 |
CN105095393A (zh) * | 2015-06-30 | 2015-11-25 | 努比亚技术有限公司 | 一种数据存储方法及装置 |
CN105335477A (zh) * | 2015-10-10 | 2016-02-17 | 北京京东尚科信息技术有限公司 | 一种数据库的操作方法及装置 |
Non-Patent Citations (1)
Title |
---|
数据库系统应用分片中间件;王亚玲;《计算机系统应用》;20151031;第24卷(第10期);第74-79页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108062314A (zh) | 2018-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108062314B (zh) | 动态分表数据处理方法和装置 | |
CN108733681B (zh) | 信息处理方法及装置 | |
US20170083573A1 (en) | Multi-query optimization | |
CN111708804B (zh) | 数据处理方法、装置、设备及介质 | |
CN110659282B (zh) | 数据路由的构建方法、装置、计算机设备和存储介质 | |
CN115964374B (zh) | 一种基于预计算场景的查询处理方法及其装置 | |
CN105989015B (zh) | 一种数据库扩容方法和装置以及访问数据库的方法和装置 | |
CN111143368A (zh) | 一种关系型数据库数据对比方法及系统 | |
CN110413631B (zh) | 一种数据查询方法及装置 | |
CN103810219A (zh) | 一种基于行存储数据库的数据处理方法及装置 | |
US8583687B1 (en) | Systems and methods for indirect algebraic partitioning | |
CN110609839A (zh) | 区块链数据处理的方法、装置、设备及可读存储介质 | |
CN110321388B (zh) | 一种基于Greenplum的快速排序查询方法及系统 | |
US8832157B1 (en) | System, method, and computer-readable medium that facilitates efficient processing of distinct counts on several columns in a parallel processing system | |
CN114610959B (zh) | 数据处理方法、装置、设备及存储介质 | |
US20220215021A1 (en) | Data Query Method and Apparatus, Computing Device, and Storage Medium | |
CN113360551B (zh) | 一种靶场中时序数据的存储与快速统计方法及系统 | |
CN112069172B (zh) | 一种电网数据处理方法及装置、电子设备及存储介质 | |
CN114461675A (zh) | 基于kv存储的部分索引实现方法及系统 | |
CN113486023A (zh) | 数据库分库分表的方法及装置 | |
CN115470355A (zh) | 轨道交通信息查询方法、装置、电子设备和存储介质 | |
WO2017019889A1 (en) | Maintaining performance in the presence of insertions, deletions, and streaming queries | |
CN111831622A (zh) | 数据索引生成方法、装置、电子设备和可读存储介质 | |
US11550793B1 (en) | Systems and methods for spilling data for hash joins | |
US10749764B2 (en) | Device for generating and searching sensor tag data in real time |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |