数据分库存储方法及装置与流程

文档序号:12734020阅读:348来源:国知局
数据分库存储方法及装置与流程

本发明涉及数据库技术领域,具体涉及一种数据分库存储方法及装置。



背景技术:

随着信息化的普及,信息系统承载的业务越来越多,需要储存的数据也越来越多。由于单台服务器的资源(CPU、磁盘、内存、IO、带宽)是有限的,在数据的储存和使用上很容易达到瓶颈。

用更多的服务器组合来完成更多数据的储存和使用是当前有效的一种解决办法,数据库的分库分表技术应运而生。

现有技术中常见的分库策略有两种:

一种是基于自增的int策略,其优点是:数据存储位数少、作为数据库主键性能表现好、分库策略容易;缺点是:需要单独的id server、系统复杂度高、存在性能瓶颈、数据分拆迁移存在风险。

另一种是基于UUID策略,其优点是:id不会重复、数据拆库容易;缺点是:数据存储位数多、较占储存空间、插入性能表现不好、分库策略不好处理。

因此,需要提供一种实现简单、数据存储空间占用少、便于扩展的数据分库存储方法。



技术实现要素:

针对现有技术中的缺陷,本发明提供一种数据分库存储方法及装置,以解决现有技术中的上述缺陷。

第一方面,本发明提供的一种数据分库存储方法,包括:

获取待分库存储的目标数据;

采用预设的分类算法确定所述目标数据对应的类;

将所述目标数据存储到所述类对应的数据库中,完成对该目标数据的分库存储。

可选的,所述采用预设的分类算法确定所述目标数据对应的类,包括:

获取所述目标数据的标识码;

根据数据库的数量采用取模算法对所述标识码进行取模,根据计算获得的模确定所述目标数据对应的类。

可选的,所述标识码为N进制数字,N为大于1的整数;

所述根据数据库的数量采用取模算法对所述标识码进行取模,包括:

将N进制的所述标识码转换为十进制的标识码;

采用数据库的数量对所述十进制的标识码进行取模。

可选的,所述目标数据具有标识码,所述标识码为N进制数字,N为大于1的整数;

在获取待分库存储的目标数据的步骤前,还包括:

设置N的因数个或倍数个数据库。

可选的,所述数据分库存储方法,还包括:

在需要对数据库进行扩容时,根据扩容后的数据库的数量对所述分类算法进行调整;

采用调整后的分类算法重新确定所述目标数据对应的新类;

将所述目标数据转存到所述新类对应的数据库中。

可选的,所述采用调整后的分类算法重新确定所述目标数据对应的新类,包括:

采用扩容后的数据库的数量对所述目标数据的标识码进行取模,根据计算获得的模确定所述目标数据对应的新类。

第二方面,本发明提供一种数据分库存储系统,包括:

目标数据获取模块,用于获取待分库存储的目标数据;

分类模块,用于采用预设的分类算法确定所述目标数据对应的类;

存储模块,用于将所述目标数据存储到所述类对应的数据库中,完成对该目标数据的分库存储。

可选的,所述分类模块,包括:

标识码获取单元,用于获取所述目标数据的标识码;

取模计算单元,用于根据数据库的数量采用取模算法对所述标识码进行取模,根据计算获得的模确定所述目标数据对应的类。

可选的,所述标识码为N进制数字,N为大于1的整数;

所述取模计算单元,包括:

进制转换子单元,用于将N进制的所述标识码转换为十进制的标识码;

十进制取模子单元,用于采用数据库的数量对所述十进制的标识码进行取模。

可选的,所述目标数据具有标识码,所述标识码为N进制数字,N为大于1的整数;

所述数据分库存储装置,还包括:

数据库设置模块,用于设置N的因数个或倍数个数据库。

可选的,所述数据分库存储装置,还包括:

算法调整模块,用于在需要对数据库进行扩容时,根据扩容后的数据库的数量对所述分类算法进行调整;

新类计算模块,用于采用调整后的分类算法重新确定所述目标数据对应的新类;

新类存储模块,用于将所述目标数据转存到所述新类对应的数据库中。

可选的,所述新类计算模块,包括:

新类取模单元,用于采用扩容后的数据库的数量对所述目标数据的标识码进行取模,根据计算获得的模确定所述目标数据对应的新类。

由上述技术方案可知,本发明提供的一种数据分库存储方法,首先获取待分库存储的目标数据;然后采用预设的分类算法确定所述目标数据对应的类;最后将所述目标数据存储到所述类对应的数据库中,完成对该目标数据的分库存储。相较于现有技术,本申请只需要计算确定目标数据的类,即可将目标数据存储到所述类对应的数据库中。方法简单,而且在分库过程中可以不引入新的id等辅助分类项,从而在不增加原目标数据存储大小或不需要额外的存储空间的情况下实现分库存储,相较于现有技术存储空间占用较少,另外,本申请采用类与数据库进行关联的方式实现分库,因此在数据库扩容或数据迁移时,只需要增加相应的类或改变类与数据库的关联即可简单实现,便于扩展扩容。

本发明提供的一种数据分库存储装置,与上述数据分库存储方法出于相同的发明构思,具有相同的有益效果。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。

图1示出了本发明第一实施例所提供的一种数据分库存储方法的流程图;

图2示出了本发明第二实施例所提供的一种数据分库存储装置的示意图。

具体实施方式

下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只是作为示例,而不能以此来限制本发明的保护范围。

需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。

本发明提供一种数据分库存储方法和装置。下面结合附图对本发明的实施例进行说明。

图1示出了本发明第一实施例所提供的一种数据分库存储方法的流程图。如图1所示,本发明第一实施例提供的一种数据分库存储方法包括以下步骤:

步骤S101:获取待分库存储的目标数据。

本发明第一实施例中,所述待分库存储的目标数据,可以是从客户端获取的新的待存储的数据,也可以是既有的数据库中存储的待分库存储的数据,上述两种应用场景均适用。

本发明第一实施例的分库存储方法属于水平分库方法,即将数据库表中的数据元素作为操作对象,将各个数据元素分库存储到各个数据库中。

步骤S102:采用预设的分类算法确定所述目标数据对应的类。

对于数据元素而言,有多种分类方法(也称分类算法),举例来说:一种分类方法是可以根据实际需求将所述数据元素的任一个数据项作为分类依据进行分类,比如某一个数据项的属性值为数字,那么可以将该数据项分为几个区间,每个区间代表一个类,那么在获取到目标数据后,即可根据相应的属性值属于哪个区间而快速、简单的判断该目标数据属于哪个类;又如,某一个数据项的属性值为归属地,那么可以根据归属地的不同设置相应的数据库并设置相应的类,那么在获取到目标数据后,即可根据归属地的属性值而快速、简单的判断该目标数据属于哪个类。另一种分类方法是可以采用机器学习算法预先训练分类模型,则本步骤在执行时只需要将目标数据输入该分类模型,即可输出相应的分类结果。此外,在数据元素中含有标识码(例如用户ID、数据对象ID、自增序列号等)的情况下,还可以采用取模算法对标识码取模,根据计算确定的模进行分类。

在本申请提供的一个实施例中,所述采用预设的分类算法确定所述目标数据对应的类,包括:

获取所述目标数据的标识码;

根据数据库的数量采用取模算法对所述标识码进行取模,根据计算获得的模确定所述目标数据对应的类。

例如在目标数据有自增序列号(由计数器根据数据的生成顺序或存储顺序自动生成的序号)的情形下,采用数据库的数量对标识码进行取模,而类与数据库是一一对应的,因此,根据取得的模即可确定该目标数据对应的类,进而分配到相应的数据库中。本方法可以按照自增序列号的顺序有序、均匀的对数据进行分库存储,保证各数据库的负载均衡。

考虑到,由于系统环境要求或其他原因,数据的标识码可能采用不同的进制(5进制、16进制等),例如采用16进制可以采用更少的字节存储更多的信息量,从而减少标识码的存储空间占用,因此在本申请提供的一个实施例中,若所述标识码为N进制数字,N为大于1的整数;

所述根据数据库的数量采用取模算法对所述标识码进行取模,包括:

将N进制的所述标识码转换为十进制的标识码;

采用数据库的数量对所述十进制的标识码进行取模。

采用上述方法,可以解决在非十进制的情况下不便于取模计算的问题。

除上述进行进制转换的方法外,对于所述标识码为N进制数字的情形,还可以通过设置N的因数个或倍数个数据库,进而在不取模的情况下通过建立N进制数字与数据库编号(类的一种)的对应关系而进行直接分库,例如,若所述标识码为16进制,可以设置4个数据库,那么,末尾字符为1、5、9、c的标识码可以对应到第1个数据库,末尾字符为2、6、0、d的标识码可以对应到第2个数据库,以此类推;又如,若所述标识码为16进制,可以设置32个数据库,那么,可以将该32个数据库分成两组,而根据标识符倒数第2个字符为奇数或偶数(a、c、e视为奇数)可以对应到上述两个组,对于每个组,再根据标识符的末尾字符按照上述方法进行分库。根据上述方法,可以在不进行取模的情况下,快速准确的根据目标数据的标识符对目标数据进行分类。

步骤S103:将所述目标数据存储到所述类对应的数据库中,完成对该目标数据的分库存储。

如前所述,在设置数据库时,确定类与数据库的一一对应关系,从而根据步骤S102确定的类将所述目标数据存储到所述类对应的数据库中,完成对该目标数据的分库存储。

此外,考虑到数据库扩容的情形,在本申请提供的一个实施例中,所述的数据分库存储方法,还包括:

在需要对数据库进行扩容时,根据扩容后的数据库的数量对所述分类算法进行调整;

采用调整后的分类算法重新确定所述目标数据对应的新类;

将所述目标数据转存到所述新类对应的数据库中。

其中,可以根据具体采用的分类算法对所述分类算法进行相应的调整,如重新建立分类映射表、重新划分数字区间、重新训练分类模型等,对于取模算法而言,可以采用扩容后的数据库的数量对所述目标数据的标识码进行取模,根据计算获得的模确定所述目标数据对应的新类。以上均在本申请的保护范围之内,此处不再一一赘述。

至此,通过步骤S101至步骤S103,完成了本发明第一实施例所提供的一种数据分库存储方法的流程。相较于现有技术,本申请只需要计算确定目标数据的类,即可将目标数据存储到所述类对应的数据库中。方法简单,而且在分库过程中可以不引入新的id等辅助分类项,从而在不增加原目标数据存储大小或不需要额外的存储空间的情况下实现分库存储,相较于现有技术存储空间占用较少,另外,本申请采用类与数据库进行关联的方式实现分库,因此在数据库扩容或数据迁移时,只需要增加相应的类或改变类与数据库的关联即可简单实现,便于扩展扩容。

在本申请提供的一个具体的实施例中,基于mongodb数据库系统实施上述技术方案,系统对存储的每条数据创建ObjectId类型的"ID"键,以对各数据进行唯一性区分,ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串,其结构组成如下表所示:

其中,time:该4个字节是一个unix的时间戳。时间戳位于字符的最前面,这就意味着ObjectId大致会按照插入进行排序,这对于某些方面起到很大作用,如作为索引提高搜索效率等等。

machine:该3个字节是u所在主机的唯一标识符。

pid:该2个字节是进程id。

inc:该3个字节是一个自动增加的计数器,用来确保在同一秒内产生的objectid也不会发现冲突。

结合第一实施例的说明,可以将该整个ObjectId视为目标数据的标识码,也可以将其中的inc部分视为该目标数据的标识码进行处理,相应的分库策略为:

分库数量原则:分库的数量为2的N次方,推荐初始化分库数量为4或者8为佳。

id切分策略:借助objectId中的inc值,将3位字节的inc值转换为10进制称为idNumer。

对idNumer按照分库数量取模,dbCheck=idNumer%dbNumer。

dbCheck=0,表示选择第一个数据库。依次类推,dbCheck=N,表示选择第(N+1) 个数据库。

相应的,在对数据库扩容时,可以采用以下策略:

扩容原则:分库的数量为2的N次方,每次扩容建议扩容2倍。

数据迁移原则:获取扩容前数据id的idNumer,使用idNumer对扩容后的数据库数量取模,将olddbNumer=<dbCheck<newdbNumer的数据进行迁移即可。

采用上述具体实施例提供的方法,可以在不增加系统复杂度的情况下实现分库存储,其中id切分策略具有无中心化的优点,因此系统不存在性能瓶颈和单点问题,此外,id中包含时间属性,便于开发人员排查问题。

在上述的第一实施例中,提供了一种数据分库存储方法,与之相对应的,本申请还提供一种数据分库存储装置。请参考图2,其为本发明第二实施例提供的一种数据分库存储装置的示意图。由于系统实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的系统实施例仅仅是示意性的。

本发明第二实施例提供的一种数据分库存储装置,包括:

目标数据获取模块101,用于获取待分库存储的目标数据;

分类模块102,用于采用预设的分类算法确定所述目标数据对应的类;

存储模块103,用于将所述目标数据存储到所述类对应的数据库中,完成对该目标数据的分库存储。

可选的,所述分类模块102,包括:

标识码获取单元,用于获取所述目标数据的标识码;

取模计算单元,用于根据数据库的数量采用取模算法对所述标识码进行取模,根据计算获得的模确定所述目标数据对应的类。

可选的,所述标识码为N进制数字,N为大于1的整数;

所述取模计算单元,包括:

进制转换子单元,用于将N进制的所述标识码转换为十进制的标识码;

十进制取模子单元,用于采用数据库的数量对所述十进制的标识码进行取模。

可选的,所述目标数据具有标识码,所述标识码为N进制数字,N为大于1的整数;

所述数据分库存储装置,还包括:

数据库设置模块,用于设置N的因数个或倍数个数据库。

可选的,所述数据分库存储装置,还包括:

算法调整模块,用于在需要对数据库进行扩容时,根据扩容后的数据库的数量对所述分类算法进行调整;

新类计算模块,用于采用调整后的分类算法重新确定所述目标数据对应的新类;

新类存储模块103,用于将所述目标数据转存到所述新类对应的数据库中。

可选的,所述新类计算模块,包括:

新类取模单元,用于采用扩容后的数据库的数量对所述目标数据的标识码进行取模,根据计算获得的模确定所述目标数据对应的新类。

以上,为本发明第二实施例提供的一种数据分库存储装置的实施例说明。

本发明提供的一种数据分库存储装置与上述数据分库存储方法出于相同的发明构思,具有相同的有益效果,此处不再赘述。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

需要说明的是,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本发明实施例所提供的数据分库存储装置可以是计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、系统和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、系统和方法,可以通过其它的方式实现。以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1