掌桥专利:专业的专利平台
掌桥专利
首页

一种基于分组进行数据分库分表的方法及其系统

文献发布时间:2023-06-19 11:49:09


一种基于分组进行数据分库分表的方法及其系统

技术领域

本发明涉及计算机通讯技术领域,特别是一种基于分组进行数据分库分表的方法及其系统。

背景技术

中大型项目中,一旦遇到数据量比较大,就需要对数据进行拆分,一般有垂直和水平两种。垂直拆分一般从业务角度出发将原单库拆分多个库;水平拆分是将大数据拆分至多张表中,以缓解数据读写压力。目前分库分表方案中有常用的方案主要有:哈希(hash)取模的方案;其中,涉及的算法主要是路由算法,把路由的 key 按照指定的算法进行路由存放。

哈希(hash)取模方案,就是对指定的路由key(如:ID)对分表总数进行取模,数据可以均匀分配并存放到多张表中,这样此数据进行操作时,就不会有热点问题;但是缺点是扩容迁移数据较困难,重新做一个 hash 方案,放到新的规划分表中,有可能需要停机迁移,影响项目可用性。

发明内容

为克服上述问题,本发明的目的是提供一种基于分组进行数据分库分表的方法,既不需要迁移数据,又能解决数据热点的问题。

本发明采用以下方案实现:一种基于分组进行数据分库分表的方法,所述方法包括如下步骤:

步骤S1、设置一分组概念,即组中包括多个的分库和多个的分表的集合,每个组均对应多个的订单库,每个订单库均对应多个的订单表;

步骤S2、根据数据范围,将数据进行定位分组;

步骤S3、分组后,根据哈希取模的方式进行定位到具体的订单库;

步骤S4、根据数据的ID范围进行定位到具体的订单表,从而完成分库分表操作。

进一步的,所述分组是按照存放的数据范围进行划分,其中每个分组中的订单表的总数是固定的,且每个订单库中存放的订单表的数量也是固定的,每个订单表都设置有数据的ID数据范围;在接收到数据后,根据数据的ID的值进行路由分配到要划分的组中。

进一步的,所述步骤S3进一步具体为:每个组中的订单库都对应有编号,即订单库0、订单库1...订单库n;每个订单库中的订单表都对应有编号,即订单表0、订单表2...订单表m,其中n和m为整数;则订单表的编号是从小到大的顺序依次分配到订单库中,根据哈希取模的方式为:根据订单表的总数进行取模,即分组1,订单表的分表的总数为10,则数据的ID值按照10进行取模定位到对应的订单库,则设置订单库0中有4个订单表,即订单表0、订单表1、订单表2、订单表3存储在订单库0中,数据的ID值按照10进行取模后是0,1,2,3中的任意一个数值,则该数据定位到订单库0中,同理,设置订单库1中有3个订单表,即订单表4、订单表5、订单表6存储在订单库1中,数据的ID值按照10进行取模后是4,5,6中的任意一个数值,则该数据定位到订单库1中,依次类推,将数据进行定位到具体的订单库。

进一步的,所述步骤S4进一步具体为:将数据的ID值与订单表中数据的ID数据范围进行比对,要是数据的ID值落入订单表中数据的ID数据范围;则定位到具体的订单库中的订单表,从而完成分库分表操作。

本发明还提供了一种基于分组进行数据分库分表的系统,所述系统包括分组设定模块、分组定位模块、订单库定位模块、以及订单表定位模块;

所述分组设定模块,用于设置一分组概念,即组中包括多个的分库和多个的分表的集合,每个组均对应多个的订单库,每个订单库均对应多个的订单表;

所述分组定位模块,用于根据数据范围,将数据进行定位分组;

所述订单库定位模块,用于分组后,根据哈希取模的方式进行定位到具体的订单库;

所述订单表定位模块,根据数据的ID范围进行定位到具体的订单表,从而完成分库分表操作。

进一步的,所述分组是按照存放的数据范围进行划分,其中每个分组中的订单表的总数是固定的,且每个订单库中存放的订单表的数量也是固定的,每个订单表都设置有数据的ID数据范围;在接收到数据后,根据数据的ID的值进行路由分配到要划分的组中。

进一步的,所述订单库定位模块的实现方式进一步具体为:每个组中的订单库都对应有编号,即订单库0、订单库1...订单库n;每个订单库中的订单表都对应有编号,即订单表0、订单表2...订单表m,其中n和m为整数;则订单表的编号是从小到大的顺序依次分配到订单库中,根据哈希取模的方式为:根据订单表的总数进行取模,即分组1,订单表的分表的总数为10,则数据的ID值按照10进行取模定位到对应的订单库,则设置订单库0中有4个订单表,即订单表0、订单表1、订单表2、订单表3存储在订单库0中,数据的ID值按照10进行取模后是0,1,2,3中的任意一个数值,则该数据定位到订单库0中,同理,设置订单库1中有3个订单表,即订单表4、订单表5、订单表6存储在订单库1中,数据的ID值按照10进行取模后是4,5,6中的任意一个数值,则该数据定位到订单库1中,依次类推,将数据进行定位到具体的订单库。

进一步的,所述订单表定位模块的实现方式进一步具体为:将数据的ID值与订单表中数据的ID数据范围进行比对,要是数据的ID值落入订单表中数据的ID数据范围;则定位到具体的订单库中的订单表,从而完成分库分表操作。

本发明的有益效果在于:本发明提出了既不需要迁移数据,又能解决数据热点问题的分库分表的方法和系统,且支持根据服务器的性能以及存储高低,适当均匀调整存储,可使得服务器性能被更加充分的利用。

附图说明

图1是本发明的方法流程示意图。

图2是本发明的实施例一中数据进行分库分表的流程示意图。

图3是本发明的实施例二中数据进行分库分表的流程示意图。

图4是本发明的系统原理框图。

具体实施方式

下面结合附图对本发明做进一步说明。

请参阅图1所示,本发明的一种基于分组进行数据分库分表的方法,所述方法包括如下步骤:

步骤S1、设置一分组概念,即组中包括多个的分库和多个的分表的集合,每个组均对应多个的订单库,每个订单库均对应多个的订单表;

步骤S2、根据数据范围,将数据进行定位分组;所述分组是按照存放的数据范围进行划分,其中每个分组中的订单表的总数是固定的,且每个订单库中存放的订单表的数量也是固定的,每个订单表都设置有数据的ID数据范围;在接收到数据后,根据数据的ID的值进行路由分配到要划分的组中。

步骤S3、分组后,根据哈希取模的方式进行定位到具体的订单库;所述步骤S3进一步具体为:每个组中的订单库都对应有编号,即订单库0、订单库1...订单库n;每个订单库中的订单表都对应有编号,即订单表0、订单表2...订单表m,其中n和m为整数;则订单表的编号是从小到大的顺序依次分配到订单库中,根据哈希取模的方式为:根据订单表的总数进行取模,即分组1,订单表的分表的总数为10,则数据的ID值按照10进行取模定位到对应的订单库,则设置订单库0中有4个订单表,即订单表0、订单表1、订单表2、订单表3存储在订单库0中,数据的ID值按照10进行取模后是0,1,2,3中的任意一个数值,则该数据定位到订单库0中,同理,设置订单库1中有3个订单表,即订单表4、订单表5、订单表6存储在订单库1中,数据的ID值按照10进行取模后是4,5,6中的任意一个数值,则该数据定位到订单库1中,依次类推,将数据进行定位到具体的订单库。

下面结合一具体实施例对本发明做进一步说明:

一种基于分组进行数据分库分表的方法,所述方法为:

步骤1:设置一分组概念,即组中包括多个的分库和多个的分表的集合,每个组均对应多个的订单库,每个订单库均对应多个的订单表;

步骤2:根据数据范围定位分组

本发明支持扩容的方式是通过定义分组实现,如分组1(图2,存放的数据范围是0-4000万)、分组2(图3,存放的数据范围是4000万-8000万)等等,所以在定位分组的时候,需要根据ID的值进行路由即可,如ID=15000,则路由到分组1。

步骤3:根据哈希取模的方式定位具体数据库

为了实现根据服务器性能情况,针对性地分配存储容量,如性能高、存储高,就可以安排多存放些数据,有些性能低的就少放点数据,因此本发明的哈希取模是根据分表的总数进行取模,如分组1,分表总数为10,数据ID按照10进行取模定位到对应的数据库。图2中,对10 进行取模,如果值为【0,1,2,3】就路由到订单库0,【4,5,6】路由到订单库1,【7,8,9】路由到订单库2。订单库0承担了 4/10 的数据量,订单库1承担了 3/10 的数据量,订单库2也承担了 3/10 的数据量。即解决了热点的问题,以及可以按照服务器指标,设计数据量的分配。其中,数据ID进行订单表的总数进行取模后得到的值,实质是与订单表的编号进行对比判断。

步骤4:根据数据范围定位表

定位到数据库后,根据ID的范围,可以路由至具体的订单表;即将数据的ID值与订单表中数据的ID数据范围进行比对,要是数据的ID值落入订单表中数据的ID数据范围;则定位到具体的订单库中的订单表,从而完成分库分表操作。

请参阅图4所示,本发明还提供了一种基于分组进行数据分库分表的系统,所述系统包括分组设定模块、分组定位模块、订单库定位模块、以及订单表定位模块;

所述分组设定模块,用于设置一分组概念,即组中包括多个的分库和多个的分表的集合,每个组均对应多个的订单库,每个订单库均对应多个的订单表;

所述分组定位模块,用于根据数据范围,将数据进行定位分组;

所述订单库定位模块,用于分组后,根据哈希取模的方式进行定位到具体的订单库;

所述订单表定位模块,根据数据的ID范围进行定位到具体的订单表,从而完成分库分表操作。

其中,所述分组是按照存放的数据范围进行划分,其中每个分组中的订单表的总数是固定的,且每个订单库中存放的订单表的数量也是固定的,每个订单表都设置有数据的ID数据范围;在接收到数据后,根据数据的ID的值进行路由分配到要划分的组中。

所述订单库定位模块的实现方式进一步具体为:每个组中的订单库都对应有编号,即订单库0、订单库1...订单库n;每个订单库中的订单表都对应有编号,即订单表0、订单表2...订单表m,其中n和m为整数;则订单表的编号是从小到大的顺序依次分配到订单库中,根据哈希取模的方式为:根据订单表的总数进行取模,即分组1,订单表的分表的总数为10,则数据的ID值按照10进行取模定位到对应的订单库,则设置订单库0中有4个订单表,即订单表0、订单表1、订单表2、订单表3存储在订单库0中,数据的ID值按照10进行取模后是0,1,2,3中的任意一个数值,则该数据定位到订单库0中,同理,设置订单库1中有3个订单表,即订单表4、订单表5、订单表6存储在订单库1中,数据的ID值按照10进行取模后是4,5,6中的任意一个数值,则该数据定位到订单库1中,依次类推,将数据进行定位到具体的订单库。

另外,所述订单表定位模块的实现方式进一步具体为:将数据的ID值与订单表中数据的ID数据范围进行比对,要是数据的ID值落入订单表中数据的ID数据范围;则定位到具体的订单库中的订单表,从而完成分库分表操作。

总之,本发明先定义一个分组(group)概念,组里面包括了一些分库和分表的集合,然后根据哈希取模定位分库,再根据数据范围定位分表,最终找到要访问的数据介质,进行相关数据的操作。

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

相关技术
  • 一种基于分组进行数据分库分表的方法及其系统
  • 一种基于数据路由规则、分库分表的数据操作方法及系统
技术分类

06120113066835