首页> 中国专利> 分库分表方法、分库分表装置、分库分表设备及存储介质

分库分表方法、分库分表装置、分库分表设备及存储介质

摘要

本发明公开了一种分库分表方法,通过在接收到待存储数据时,根据待存储数据的数据标识判断目标存储系统的已有数据库中是否存在与待存储数据具有同样数据标识的关联数据,如果存在则根据数据标识将待存储数据存入关联数据所在的已有数据表实现关联存储,如果不存在再按照预设平均分布规则将待存储数据存入已有数据表,从而在分库分表的过程中,在实现数据平均分布的基础上,进一步实现数据的关联存储,使得用户在需要查看、修改数据时可以更快、更方便地找到目标数据。本发明还公开了一种分库分表装置、分库分表设备及存储介质,具有上述有益效果。

著录项

  • 公开/公告号CN112395293A

    专利类型发明专利

  • 公开/公告日2021-02-23

    原文格式PDF

  • 申请/专利权人 浙江诺诺网络科技有限公司;

    申请/专利号CN202011363595.9

  • 发明设计人 徐佳磊;谢贤益;伞兴;

    申请日2020-11-27

  • 分类号G06F16/22(20190101);G06F16/27(20190101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人史翠

  • 地址 310000 浙江省杭州市西湖区双龙街199号金色西溪商务中心A座8层

  • 入库时间 2023-06-19 09:58:59

说明书

技术领域

本发明涉及存储技术领域,特别是涉及一种分库分表方法、分库分表装置、分库分表设备及存储介质。

背景技术

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

现有的分库分表方法,通常以平均分布为原则,根据已有的数据库和已有的数据表制定分配规则,将数据均匀分布在各数据库、各数据表中。这种分库分表方法虽然实现了数据在数据库中的平均分布,但是数据的分布没有规则,导致一些关联数据很可能分布在不同的数据表乃至不同的数据库中,在需要对已存储的数据进行查看、修改时,则需要对所有的数据库、数据表进行全局搜索,非常不便。

发明内容

本发明的目的是提供一种分库分表方法、分库分表装置、分库分表设备及存储介质,用于在实现数据的平均分布的基础上进一步实现数据的关联存储,使得用户在需要查看、修改数据时可以更快、更方便地找到目标数据。

为解决上述技术问题,本发明提供一种分库分表方法,包括:

当接收到待存储数据时,获取所述待存储数据的数据标识;

若目标存储系统的已有数据库中存在与所述待存储数据相同数据标识的关联数据,则将所述待存储数据存入所述关联数据所在的已有数据表;

若所述已有数据库中不存在所述关联数据,则按预设平均分布规则将所述待存储数据存入已有数据表。

可选的,所述获取所述待存储数据的数据标识,具体为:

识别所述待存储数据的预设字段,得到所述待存储数据的数据标识。

可选的,所述按预设平均分布规则将所述待存储数据存入已有数据表,具体包括:

根据所述待存储数据的数据标识确定所述待存储数据的数据类型,并根据预设的权重基准,由所述待存储数据的数据类型确定所述待存储数据的权重;

获取所述已有数据表中的数据的权重总和,将所述待存储数据存入所述权重总和最小的已有数据表;

其中,所述权重基准根据所述数据类型的数据的数量越多、所述数据类型的权重越大的原则建立。

可选的,将所述待存储数据存入所述权重总和最小的已有数据表,具体包括:

若有且仅有一个所述权重总和最小的已有数据表,则将所述待存储数据存入所述权重总和最小的已有数据表;

若存在两个或两个以上所述权重总和最小的已有数据表,则将所述待存储数据存入所述权重总和最小的已有数据表中数据最少的已有数据表。

可选的,还包括:

定时检查各所述已有数据表中的数据的数量;

对于任意两个所述数据类型,若权重较大的数据类型的数据的数量与权重较小的数据类型的数据的数量的差值小于第一预设值,则缩减所述权重较大的数据类型与所述权重较小的数据类型之间的权重差值;若权重较大的数据类型的数据的数量与权重较小的数据类型的数据的数量的差值大于第二预设值,则增加所述权重较大的数据类型与所述权重较小的数据类型之间的权重差值;

其中,所述第一预设值小于所述第二预设值。

可选的,还包括:

存储各所述已有数据表的权重总和。

可选的,还包括:

若各所述已有数据表均无法存入所述待存储数据,则创建新数据表,并记录建表时间为所述新数据表接收待存储数据的起始时间;

若各所述已有数据库均无法创建所述新数据表,则创建新数据库,并记录建库时间为所述新数据库接收待存储数据的起始时间。

为解决上述技术问题,本发明还提供一种分库分表装置,包括:

接收单元,用于当接收到待存储数据时,获取所述待存储数据的数据标识;

分配单元,用于若存在与所述待存储数据相同数据标识的关联数据,则将所述待存储数据存入所述关联数据所在的已有数据表;若不存在所述关联数据,则按预设平均分布规则将所述待存储数据存入已有数据表。

为解决上述技术问题,本发明还提供一种分库分表设备,包括:

存储器,用于存储指令,所述指令包括上述任意一项所述分库分表方法的步骤;

处理器,用于执行所述指令。

为解决上述技术问题,本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项所述分库分表方法的步骤。

本发明所提供的分库分表方法,通过在接收到待存储数据时,根据待存储数据的数据标识判断目标存储系统的已有数据库中是否存在与待存储数据具有同样数据标识的关联数据,如果存在则根据数据标识将待存储数据存入关联数据所在的已有数据表实现关联存储,如果不存在再按照预设平均分布规则将待存储数据存入已有数据表,从而在分库分表的过程中,在实现数据平均分布的基础上,进一步实现数据的关联存储,使得用户在需要查看、修改数据时可以更快、更方便地找到目标数据。

本发明还提供一种分库分表装置、分库分表设备及存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种分库分表方法的流程图;

图2为本发明实施例提供的一种图1中步骤S104的具体实施方式的流程图;

图3为本发明实施例提供的一种分库分表装置的结构示意图;

图4为本发明实施例提供的一种分库分表设备的结构示意图。

具体实施方式

本发明的核心是提供一种分库分表方法、分库分表装置、分库分表设备及存储介质,用于在实现数据的平均分布的基础上进一步实现数据的关联存储,使得用户在需要查看、修改数据时可以更快、更方便地找到目标数据。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的一种分库分表方法的流程图。

如图1所示,本发明实施例提供的分库分表方法包括:

S101:当接收到待存储数据时,获取待存储数据的数据标识。

S102:判断目标存储系统的已有数据库中是否存在与待存储数据相同数据标识的关联数据;如果是,则进入步骤S103;如果否,则进入步骤S104。

S103:将待存储数据存入关联数据所在的已有数据表。

S104:按预设平均分布规则将待存储数据存入已有数据表。

需要说明的是,本发明实施例中提到的“待存储数据”、“数据”和“已存储数据”均指数据表中占据一行的一条数据,通常由多个字段组成,不同的数据占据的存储空间大致相同。

在具体实施中,当存储系统接收到待存储数据时,识别待存储数据的内容确定待存储数据的数据标识。“数据标识”指用于划分关联数据标识,可以预先设定以一条数据中预定位置的字段为该数据的数据标识,可以是一个字段或多个字段。一条数据也可以包括多个数据标识,根据各数据标识的组合对数据进行精细分类。则步骤S101中确定待存储数据的数据标识,具体为:识别待存储数据的预设字段,得到待存储数据的数据标识。

在确定待存储数据的数据标识后,检查各已有数据库的各已有数据表中是否存储有同样数据标识的数据,即与待存储数据的关联数据,如果存在,则将待存储数据存入关联数据所在的已有数据表中,如果不存在,则按照预设平均分布规则将待存储数据存入已有数据表。该预设平均分布规则可以为将待存储数据存入数据数量最少的数据表,或者按照待存储数据的标号(如订单号)对存储系统中包含的已有数据表的数量进行取余运算,按照余数将待存储数据放入已有数据表中。

在此基础上,若各已有数据表已满,则在已有数据库允许的情况下需要建立新数据表,或者在已有数据库已满的情况下建立新的数据库,则本发明实施例提供的分库分表方法还可以包括:

若各已有数据表均无法存入待存储数据,则创建新数据表,并记录建表时间为新数据表接收待存储数据的起始时间;

若各已有数据库均无法创建新数据表,则创建新数据库,并记录建库时间为新数据库接收待存储数据的起始时间。

其中,若存在未满的已有数据表,但待存储数据的关联数据所在的已有数据表已满,以及未满的已有数据表虽然可以存放待存储数据但不利于存放与待存储数据关联的数据时,也可以认为是各已有数据表均无法存入待存储数据。在已有数据表建立时,均记录其建表时间,在已有数据表已满或未满但无法存入待存储数据时,则记录其终止时间,则该已有数据表可以存放的数据是生成时间在建表时间和终止时间之间的数据。同理,在已有数据库建立时,记录其建库时间,在已有数据库已满或未满但无法存入待存储数据时,则记录其终止时间,则该已有数据库可以存放的数据是生成时间在建库时间和终止时间之间的数据。通过时间管理,便于根据数据生成时间确定数据大致的存放位置,减少数据检索用时。

由于不同类型的数据具有不同的性质,如生成的频率,为在关联存储的基础上尽可能地实现数据的平均分布,可以针对不同数据类型的数据建立不同的平均分布规则。

其中,数据类型是数据标识上一级的划分依据,可以根据用户需要进行划分。

本发明实施例提供的分库分表方法,通过在接收到待存储数据时,根据待存储数据的数据标识判断目标存储系统的已有数据库中是否存在与待存储数据具有同样数据标识的关联数据,如果存在则根据数据标识将待存储数据存入关联数据所在的已有数据表实现关联存储,如果不存在再按照预设平均分布规则将待存储数据存入已有数据表,从而在分库分表的过程中,在实现数据平均分布的基础上,进一步实现数据的关联存储,使得用户在需要查看、修改数据时可以更快、更方便地找到目标数据。

图2为本发明实施例提供的一种图1中步骤S104的具体实施方式的流程图。

现有技术中为了实现数据平均分布到数据表、数据库中,通常是根据已有数据库和已有数据表制定的分布规则。例如对于订单数据,按照订单号进行取余分表,若共有四个数据表,则将待存储数据的订单号按照四进行取余以均分到四张表。而当已有数据表均存满,当接收到待存储数据,需要新增数据表(例如增至八个数据表),此时则将各已有数据表中的已存储数据和待存储数据一同按照八进行取余,即为了实现数据平均分配,需要将已存储数据进行重新分配。新建数据库时同理。可见,现有的分库分表方法基于已有数据表和已有数据库建立的数据平均分配方式,为实现数据的平均分配,需要在新建数据表、新建数据库时将所有的数据进行重新分配,在分配过程中还需要对已存储数据进行数据迁移,非常不便;而在不需要新建数据表、数据库时,这种分库分表方式,例如采用订单号对数据表总数取余的方式进行分配,由于订单号不一定是连续的,也往往无法保证将数据平均分配到各数据库、各数据表中。

因此在上述实施例的基础上,本发明实施例提供一种无需数据迁移而能够使数据平均分配的分库分表的方法。在本发明实施例提供的分库分表方法中,步骤S104:按预设平均分布规则将待存储数据存入已有数据表,具体包括:

S201:根据待存储数据的数据标识确定待存储数据的数据类型,并根据预设的权重基准,由待存储数据的数据类型确定待存储数据的权重。

S202:获取已有数据表中的数据的权重总和,将待存储数据存入权重总和最小的已有数据表。

其中,权重基准根据数据类型的数据的数量越多、数据类型的权重越大的原则建立。

在具体实施中,可以预先统计在其他存储系统中各数据类型的已存储数据的数量,按照数据类型的数据的数量越多、数据类型的权重越大的原则确定各数据类型的权重,如可以按照各类型的已存储数据的数量从大到小进行排序,而后依次递减划分权重,或按照比例确定权重的具体数值。

对于步骤S201来说,对于不存在关联数据的待存储数据,按照数据标识检索其上一级的数据类型,进而得到待存储数据对应的权重。例如,数据类型包括“企业商户”、“个人商户”等,数据标识包括“企业商户A”、“企业商户B”、“个人商户C”等。假设预先设定“企业商户”的权重为10,“个人商户”的权重为1。识别到接收的第一条待存储数据的数据标识为“企业商户A”,则识别上一级的数据类型确定第一条待存储数据的数据类型为“企业商户”,进而确定第一条待存储数据的权重为10;同理,在识别到接收的第二条待存储数据的数据标识为“个人商户C”后,确定第二条待存储数据的权重为1;在识别到接收的第三条待存储数据的数据标识为“企业商户B”后,确定第三条待存储数据的权重为10。

对于步骤S202来说,计算已有数据表中已经存储的数据的权重的总和,即已有数据表的权重总和,将各已有数据表的权重总和进行比较,从而将待存储数据存入权重总和最小的已有数据表。若出现多个权重总和最小的已有数据表,则可以按照已有数据表的标号进行划分,例如,优先将待存储数据存入标号最小的已有数据表;或者,可以按照各已有数据表中的数据的数量来将待存储数据存入数据数量最少的权重总和最小的已有数据表。则步骤S202具体可以包括:

若有且仅有一个权重总和最小的已有数据表,则将待存储数据存入权重总和最小的已有数据表;

若存在两个或两个以上权重总和最小的已有数据表,则将待存储数据存入权重总和最小的已有数据表中数据最少的已有数据表。

为避免在每次接收到待存储数据时均要进行各已有数据表的权重总和的计算,本发明实施例提供的分库分表方法还包括:存储各已有数据表的权重总和。可以建立分表规则表如表1所示,其中,table_serial_num为分表序号,data_volume为权重综合,orders_count为订单表统计数量。

表1本发明实施例提供的一种分表规则表

同理,针对各已有数据库也可以建立分库规则表,如表2所示。其中,db_serial_num为分库序号,start_time为分库数据保存开始时间,end_time为分库数据保存结束时间。

表2本发明实施例提供的一种分库规则表

注:上述表1、表2仅是对分表规则表和分库规则表的举例,且与本发明实施例中假设的例子并非同一实例。

假设在接收到第一条待存储数据之前,有且仅有两个已有数据表0表和1表,且其中均无已存储数据,则0表和1表的权重总和均为0。当接收到第一条待存储数据“企业商户A”时,按照标号将第一条待存储数据存入0表,此时0表的权重总和变更为10,1表的权重总和仍为0。当接收到第二条待存储数据“个人商户C”时,按照权重总和的比较,将第二条待存储数据存入1表,此时1表权重总和变更为1。当接收到第三条待存储数据“企业商户B”时,由于1表的权重总和仍小于0表的权重总和,则将第三条待存储数据存入1表。

本发明实施例建立的权重基准,实质上是在关联存储的基础上,通过预测各数据类型的数据的数量,预先在第一次存储某个数据类型的数据时,在已有数据表中预先为该数据预留关联数据的存储空间,有助于在关联存储的基础上更好的实现数据平均分布,方便查询与管理。

在此基础上,本发明实施例提供的分库分表方法还可以包括:

定时检查各已有数据表中的数据的数量;

对于任意两个数据类型,若权重较大的数据类型的数据的数量与权重较小的数据类型的数据的数量的差值小于第一预设值,则缩减权重较大的数据类型与权重较小的数据类型之间的权重差值;若权重较大的数据类型的数据的数量与权重较小的数据类型的数据的数量的差值大于第二预设值,则增加权重较大的数据类型与权重较小的数据类型之间的权重差值;

其中,第一预设值小于第二预设值。

随着时间的推移,预先设定的权重基准可能会不符合各数据类型的数据数量的实际情况,故可以定时对权重基准进行更新,更新工作可以在每天的闲时进行。

上文详述了分库分表方法对应的各个实施例,在此基础上,本发明还公开了与上述方法对应的分库分表装置、分库分表设备及存储介质。

图3为本发明实施例提供的一种分库分表装置的结构示意图。

如图3所示,本发明实施例提供的分库分表装置包括:

接收单元301,用于当接收到待存储数据时,获取待存储数据的数据标识;

分配单元302,用于若存在与待存储数据相同数据标识的关联数据,则将待存储数据存入关联数据所在的已有数据表;若不存在关联数据,则按预设平均分布规则将待存储数据存入已有数据表。

进一步的,本发明实施例提供的分库分表装置还可以包括:

检查单元,用于定时检查各已有数据表中的数据的数量;

更新单元,用于对于任意两个数据类型,若权重较大的数据类型的数据的数量与权重较小的数据类型的数据的数量的差值小于第一预设值,则缩减权重较大的数据类型与权重较小的数据类型之间的权重差值;若权重较大的数据类型的数据的数量与权重较小的数据类型的数据的数量的差值大于第二预设值,则增加权重较大的数据类型与权重较小的数据类型之间的权重差值;

其中,第一预设值小于第二预设值。

本发明实施例提供的分库分表装置还可以包括:

存储单元,用于存储各已有数据表的权重总和。

本发明实施例提供的分库分表装置还可以包括:

创建单元,用于若各已有数据表均无法存入待存储数据,则创建新数据表,并记录建表时间为新数据表接收待存储数据的起始时间;若各已有数据库均无法创建新数据表,则创建新数据库,并记录建库时间为新数据库接收待存储数据的起始时间。

由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

图4为本发明实施例提供的一种分库分表设备的结构示意图。

如图4所示,本发明实施例提供的分库分表设备包括:

存储器410,用于存储指令,所述指令包括上述任意一项实施例所述的分库分表方法的步骤;

处理器420,用于执行所述指令。

其中,处理器420可以包括一个或多个处理核心,比如3核心处理器、8核心处理器等。处理器420可以采用数字信号处理DSP(Digital Signal Processing)、现场可编程门阵列FPGA(Field-Programmable Gate Array)、可编程逻辑阵列PLA(Programmable LogicArray)中的至少一种硬件形式来实现。处理器420也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器CPU(CentralProcessing Unit);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器420可以集成有图像处理器GPU(Graphics Processing Unit),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器420还可以包括人工智能AI(Artificial Intelligence)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器410可以包括一个或多个存储介质,该存储介质可以是非暂态的。存储器410还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器410至少用于存储以下计算机程序411,其中,该计算机程序411被处理器420加载并执行之后,能够实现前述任一实施例公开的分库分表方法中的相关步骤。另外,存储器410所存储的资源还可以包括操作系统412和数据413等,存储方式可以是短暂存储或者永久存储。其中,操作系统412可以为Windows。数据413可以包括但不限于上述方法所涉及到的数据。

在一些实施例中,分库分表设备还可包括有显示屏430、电源440、通信接口450、输入输出接口460、传感器470以及通信总线480。

本领域技术人员可以理解,图4中示出的结构并不构成对分库分表设备的限定,可以包括比图示更多或更少的组件。

本申请实施例提供的分库分表设备,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如上所述的分库分表方法,效果同上。

需要说明的是,以上所描述的装置、设备实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本发明各个实施例所述方法的全部或部分步骤。

为此,本发明实施例还提供一种存储介质,该存储介质上存储有计算机程序,计算机程序被处理器执行时实现如分库分表方法的步骤。

该存储介质可以包括:U盘、移动硬盘、只读存储器ROM(Read-Only Memory)、随机存取存储器RAM(Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

本实施例中提供的存储介质所包含的计算机程序能够在被处理器执行时实现如上所述的分库分表方法的步骤,效果同上。

以上对本发明所提供的一种分库分表方法、装置、设备及存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备及存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号