CN107229688A - 一种数据库水平分库分表方法及系统、服务器 - Google Patents
一种数据库水平分库分表方法及系统、服务器 Download PDFInfo
- Publication number
- CN107229688A CN107229688A CN201710334450.8A CN201710334450A CN107229688A CN 107229688 A CN107229688 A CN 107229688A CN 201710334450 A CN201710334450 A CN 201710334450A CN 107229688 A CN107229688 A CN 107229688A
- Authority
- CN
- China
- Prior art keywords
- database
- data
- cluster
- data record
- record
- 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
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
- G06F16/213—Schema design and management with details for schema evolution support
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)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据库水平分库分表方法及系统、服务器,包括以下步骤:设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数;基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中;基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。本发明的数据库水平分库分表方法及系统、服务器基于单表的行数,将数据库水平分割为若干分库,每个分库再分割为若干分表,从而减少单表的记录数量,提高查询所需要的响应时间,且易于扩展。
Description
技术领域
本发明涉及数据库的技术领域,特别是涉及一种数据库水平分库分表方法及系统、服务器。
背景技术
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。通常,数据库是一个单位或是一个应用领域的通用数据处理系统,它存储的是属于企业和事业部门、团体和个人的有关数据的集合。数据库中的数据是从全局观点出发建立的,按一定的数据模型进行组织、描述和存储;其结构基于数据间的自然联系,从而可提供一切必要的存取路径,且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。
随着业务不断发展,应用系统的业务数据也随着日积月累。相应的性能指标不断提升,日渐精细,例如信用审核自动化,用户全维度画像信息的掘取。这些业务需求上的升级,对响应时间的要求是越来越快,导致对系统性能的要求越来越高。
垂直分库按照业务领域将原数据库划分为若干分数据库,从而解决业务系统之间的耦合,也能一定程度提升性能,有利于系统维护。垂直分表即通常所说的大表拆小表,拆分是基于关系型数据库中的列进行的。当某个表中的字段比较多,可以新建立一张扩展表,将不经常使用或者长度较大的字段拆分出去放到扩展表。因此,在字段特别多的情况下,垂直分表确实便于开发和维护,某种意义上可能表面“跨页”访问的问题。
如图1所示,现有技术中的垂直分库分表后的数据库架构通常采用master-slave模式,只能对数据库的读操作进行扩展,而对数据库写入操作还是集中在master上,单个master上挂载slave的数量,也受到master性能的限制。
垂直分库分表的方式缓解了原来单集群的压力,但不能解决秒杀等在线查询场景。例如需要判断一个用户,在某个活动期间内,只允许下一单。这样的场景对订单表的查询,响应时间的要求就非常苛刻。对订单这样的高表来说,性能就会成为查询瓶颈。关系型数据库在大于一定数据量的情况下检索性能会急剧下降。在面对互联网海量数据情况时,所有数据都存于一张表,显然会轻易超过数据库表可承受的数据量阀值。
对于互联网应用来说,数据库单表的记录行数,可能达到千万级别,甚至是以亿级别,故会对实时业务查询造成严重影响。因此,对数据库进行分库分表是必须进行的。对于访问极为频繁、数据量巨大的单表来说,首要就是减少单表的记录条数,以减少查询所需要的响应时间,提高数据吞吐。而现有的数据库垂直分库分表方法无法解决这一问题。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种数据库水平分库分表方法及系统、服务器,基于单表的行数,将数据库水平分割为若干分库,每个分库再分割为若干分表,从而减少单表的记录数量,提高查询所需要的响应时间,且易于扩展。
为实现上述目的及其他相关目的,本发明提供一种数据库水平分库分表方法,包括以下步骤:设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数;基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中;基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。
于本发明一实施例中,所述集群所包含的数据库个数与所述数据库所包含的表格的个数的取值相同。
于本发明一实施例中,基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中包括以下步骤:
计算数据库线性扩展倍增因子Factor=Round(userId/scope),其中,Round表示向下取整运算,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,scope表示一个集群的数据记录容量数;
计算hash切分因子Remainder=userId mod scope,其中,mod表示取余数操作;
计算Remainder mod n+Factor x n,得到数据记录所处数据库在其所处集群中的编号,以将该数据记录分配至该编号对应的数据库中,其中,n为一个集群所包含的数据库个数。
于本发明一实施例中,基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中包括以下步骤:
获取数据库中的数据记录遵循某一规则的编号值;
将该编号值对数据库所包含的表格的个数进行取余操作,得到数据记录所处表格在其所处数据库中的编号,以将该数据记录分配至该编号对应的表格中。
于本发明一实施例中,所述该编号值采用数据记录的useId值或orderId值;其中,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,orderId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的订单编号。
同时,本发明还提供一种数据库水平分库分表系统,包括设置模块、数据库拆分模块和表格拆分模块;
所述设置模块用于设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数;
所述数据库拆分模块用于基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中;
所述表格拆分模块用于基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。
于本发明一实施例中,所述设置模块设定所述集群所包含的数据库个数与所述数据库所包含的表格的个数的取值相同。
于本发明一实施例中,所述数据库拆分模块执行以下操作::
计算数据库线性扩展倍增因子Factor=Round(userId/scope),其中,Round表示向下取整运算,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,scope表示一个集群的数据记录容量数;
计算hash切分因子Remainder=userId mod scope,其中,mod表示取余数操作;
计算Remainder mod n+Factor x n,得到数据记录所处数据库在其所处集群中的编号,以将该数据记录分配至该编号对应的数据库中,其中,n为一个集群所包含的数据库个数。
于本发明一实施例中,所述表格拆分模块执行以下操作:
获取数据库中的数据记录遵循某一规则的编号值;
将该编号值对数据库所包含的表格的个数进行取余操作,得到数据记录所处表格在其所处数据库中的编号,以将该数据记录分配至该编号对应的表格中。
另外,本发明还提供一种服务器,包括上述任一所述的数据库水平分库分表系统。
如上所述,本发明的数据库水平分库分表方法及系统、服务器,具有以下有益效果:
(1)基于单表的行数,将数据库水平分割为若干分库,每个分库再分割为若干分表,从而减少单表的记录数量,提高查询所需要的响应时间;
(2)部署方便、开发集成等成本低、无代码侵入性;
(3)支持数据库线性扩展,无数据迁移痛苦,扩容成本低;
(4)能够根据设定的存储量的大小主动扩容,而不是在数据库出现瓶颈时才实施,保证了数据库的安全可靠性;
(5)只需迁移一次数据,即可实现原数据库到水平分库分表后的数据库的更新。
附图说明
图1显示为现有技术中数据库垂直分库的示意图;
图2显示为本发明的数据库水平分库分表方法的流程图;
图3显示为本发明的数据库水平分库分表系统的结构示意图;
图4显示为本发明的服务器的结构示意图。
元件标号说明
1 设置模块
2 数据库拆分模块
3 表格拆分模块
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的数据库水平分库分表方法及系统、服务器基于单表的行数,将数据库水平分割为若干分库,每个分库再分割为若干分表,从而减少单表的记录数量,提高查询所需要的响应时间,且支持数据库线性扩展,无数据迁移痛苦,扩容成本低。
参照图2,本发明的数据库水平分库分表方法包括以下步骤:
步骤S1、设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数。
具体地,根据实际产生的数据记录的条数,确定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数。在实际使用中,可根据实际的数据记录的条数进行数据库的线性扩展。需要说明的是,线性扩展的原则是保障单表响应性能的前提下,同时兼顾效益。
以订单数据记录为例,假定目前订单表包括700万条记录。如表1所示,采用4x4拆分的集群时,单表存放记录为625万。
表1、不同库维度和不同表维度下对应的单表存放容量
总容量(亿) | 库维度 | 表维度 | 集群内表数量 | 单表存放记录数(万) |
100,000,000 | 4 | 4 | 16 | 6,250,000 |
1,000,000,000 | 8 | 8 | 64 | 15,625,000 |
10,000,000,000 | 16 | 16 | 256 | 39,062,500 |
100,000,000,000 | 32 | 32 | 1024 | 97,656,250 |
按每月200万订单计算(目前月平均70万),十年订单可达到2.47亿条记录。散列到8x 8个表存放,每张表存放的记录数为386万条记录不到,则单表的性能应该处在年轻状态,可满足实际查询等应用的需求。对于十年后的2.47亿条记录,如表2所示,十年中间扩容二次即可,即从4x4扩容至8x8,再扩容至16x16。
表2、不同库维度和不同表维度下对应的单表存放容量
总容量(亿) | 库维度 | 表维度 | 集群内表数量 | 单表存放记录数(万) |
500,000,000 | 4 | 4 | 16 | 31,250,000 |
500,000,000 | 8 | 8 | 64 | 7,812,500 |
500,000,000 | 16 | 16 | 256 | 1,953,125 |
500,000,000 | 32 | 32 | 1024 | 488,281 |
优选地,集群所包含的数据库个数与数据库所包含的表格的个数的取值相同。
步骤S2、基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中。
具体地,基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中包括以下步骤:
21)计算数据库线性扩展倍增因子Factor=Round(userId/scope),其中,Round表示向下取整运算,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,scope表示一个集群的数据记录容量数。
其中,数据库线性扩展倍增因子Factor也就是数据记录所处集群的编号。集群的编号从0开始,依次递增1。
22)计算hash切分因子Remainder=userId mod scope,其中,mod表示取余数操作。
其中,Remainder作为useId的hash值,用于后续的hash切分。
23)计算Remainder mod n+Factor x n,得到数据记录所处数据库在其所处集群中的编号以将该数据记录分配至该编号对应的数据库中,其中,n为一个集群所包含的数据库个数。
例如,需要将一个集群切分成4个数据库时,就用4这个数字对useId的hash值Remainder进行取余数运算,也就是Remainder mod 4。这样的话每次运算就有四种可能:结果为0的时候,对应DB1;结果为1的时候对应DB2;结果为2的时候对应DB3;结果为3的时候对应DB4。这样一来就非常均匀的将数据分配到4个数据库中,有利于后续的数据检索。
需要说明的是,数据库编号在各个集群中线性扩展,具有连续性。
因此,通过上述步骤,实现了数据库的线性扩展,集群的线性扩容。同时,由于在集群内采用hash切分算法,使得分配至各个数据库的记录非常均匀。
步骤S3、基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。
具体地,基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中包括以下步骤:
31)获取数据库中的数据记录遵循某一规则的编号值。
具体地,该编号值可以为上述的useId值,也可以是数据记录的orderId值。其中,orderId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的订单编号。
需要说明的是,表格拆分路由规则和数据库拆分路由规则并不相关,故表格拆分路由可以采用orderId等参数。这是因为,在实际应用中,订单查询是常见的场景。按orderId查询的场景频率也很高。当然,也可以继续用userId值做Hash切分。
32)将该编号值对数据库所包含的表格的个数进行取余操作,得到数据记录所处表格在其所处数据库中的编号,以将该数据记录分配至该编号对应的表格中。
在表格拆分路由规则中,仍然采用hash切分,从而保证了与数据库拆分路由规则的一致性。这使得数据记录水平切分后,易于进行水平扩展,同时还能兼顾按照orderId查询的性能,故极大地提升了用户体验。
下面通过具体实施例来进一步阐述本发明的数据库水平分库分表方法。
设定包括两个集群,每个集群包括四个数据库,每个数据库包括四个表格。每个集群所包含的数据记录的容量为10000。在该实施例中,具体的数据库水平分库分表方法如表3所示。
表3、数据库水平分库分表方法的特定实施例
当useId分别为9900、9901、19900和19901时,对应的数据记录分配结果如表4所示。
表4、数据记录分配结果
因此,通过本发明的数据库水平分库分表方法能够将各个数据记录对应地分配至各个具体的表格,实现了对原始数据库的数据记录的水平分库分表,且数据库线性扩展,无数据迁移痛苦,扩容成本低。
另外,对于现有的数据库,需要通过数据迁移的方式将数据记录存储至水平分库分表后的数据库。该数据迁移只需进行一次,具体包括以下步骤:
阶段一
确定订单号等编码规则,在新老数据库插入时,判断新老数据库的订单号生成规则是否一致,若不一致就不能作为数据迁移截点,可以以时间为截点。
在原有业务代码中,添加新分片的数据源写入,实现数据双落地。查询读取保持走老数据库源。事务成功判断以老数据库为准。
确定迁移数据截点,原则上使得双落地和迁移这个时间窗口造成的数据差异性越小越好。比如拿双落功能上线时间点2016.12.31 23.59.59,作为迁移历史数据的截点,这个时间点之前的数据,需要迁移。
阶段二
数据迁移结束,补偿时间窗口内新订单(还有出错补偿),插入前需要检查是否存在。
运行一段时间,定时检查新老数据源中的数据一致性,及时发现原因,进行处理,以及补偿。
历时一段时间,确定无差异性后切换读数据源变更,变更到分片数据源。事务成功以新数据库为准。
阶段三
切换对老数据源依赖的应用,关闭老数据源写,变成单落,只落分片的新数据库。老数据库可以作废。
需要说明的是,进行数据迁移的工作需要满足以下要求:
(1)需要对接老数据库和分片的新数据库;
(2)能支持按输入SQL语句迁移,即支持按时间或者ID分段迁移;
(3)导入出错时,记录orderId,以便补偿;
(4)补偿迁移,需要在插入前做Exists检查。刚开始大批量迁移,不需要做Exists检查,否则会很影响效率。通过增加配置参数判断是否要判断。
参照图3,本发明的数据库水平分库分表系统包括依次相连的设置模块1、数据库拆分模块2和表格拆分模块3。
设置模块1用于设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数。
具体地,根据实际产生的数据记录的条数,确定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数。在实际使用中,可根据实际的数据记录的条数进行数据库的线性扩展。需要说明的是,线性扩展的原则是保障单表响应性能的前提下,同时兼顾效益。
以订单数据记录为例,假定目前订单表包括700万条记录。如表1所示,采用4x4拆分的集群时,单表存放记录为625万。
表1、不同库维度和不同表维度下对应的单表存放容量
总容量(亿) | 库维度 | 表维度 | 集群内表数量 | 单表存放记录数(万) |
100,000,000 | 4 | 4 | 16 | 6,250,000 |
1,000,000,000 | 8 | 8 | 64 | 15,625,000 |
10,000,000,000 | 16 | 16 | 256 | 39,062,500 |
100,000,000,000 | 32 | 32 | 1024 | 97,656,250 |
按每月200万订单计算(目前月平均70万),十年订单可达到2.47亿条记录。散列到8x 8个表存放,每张表存放的记录数为386万条记录不到,则单表的性能应该处在年轻状态,可满足实际查询等应用的需求。对于十年后的2.47亿条记录,如表2所示,十年中间扩容二次即可,即从4x4扩容至8x8,再扩容至16x16。
表2、不同库维度和不同表维度下对应的单表存放容量
总容量(亿) | 库维度 | 表维度 | 集群内表数量 | 单表存放记录数(万) |
500,000,000 | 4 | 4 | 16 | 31,250,000 |
500,000,000 | 8 | 8 | 64 | 7,812,500 |
500,000,000 | 16 | 16 | 256 | 1,953,125 |
500,000,000 | 32 | 32 | 1024 | 488,281 |
优选地,集群所包含的数据库个数与数据库所包含的表格的个数的取值相同。
数据库拆分模块2用于基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中。
具体地,数据库拆分模块2执行以下操作:
21)计算数据库线性扩展倍增因子Factor=Round(userId/scope),其中,Round表示向下取整运算,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,scope表示一个集群的数据记录容量数。
其中,数据库线性扩展倍增因子Factor也就是数据记录所处集群的编号。集群的编号从0开始,依次递增1。
22)计算hash切分因子Remainder=userId mod scope,其中,mod表示取余数操作。
其中,Remainder作为useId的hash值,用于后续的hash切分。
23)计算Remainder mod n+Factor x n,得到数据记录所处数据库在其所处集群中的编号以将该数据记录分配至该编号对应的数据库中,其中,n为一个集群所包含的数据库个数。
例如,需要将一个集群切分成4个数据库时,就用4这个数字对useId的hash值Remainder进行取余数运算,也就是Remainder mod 4。这样的话每次运算就有四种可能:结果为0的时候,对应DB1;结果为1的时候对应DB2;结果为2的时候对应DB3;结果为3的时候对应DB4。这样一来就非常均匀的将数据分配到4个数据库中,有利于后续的数据检索。
需要说明的是,数据库编号在各个集群中线性扩展,具有连续性。
因此,通过上述步骤,实现了数据库的线性扩展,集群的线性扩容。同时,由于在集群内采用hash切分算法,使得分配至各个数据库的记录非常均匀。
表格拆分模块3用于基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。
具体地,表格拆分模块执行以下操作:
31)获取数据库中的数据记录遵循某一规则的编号值。
具体地,该编号值可以为上述的useId值,也可以是数据记录的orderId值。其中,orderId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的订单编号。
需要说明的是,表格拆分路由规则和数据库拆分路由规则并不相关,故表格拆分路由可以采用orderId等参数。这是因为,在实际应用中,订单查询是常见的场景。按orderId查询的场景频率也很高。当然,也可以继续用userId值做Hash切分。
32)将该编号值对数据库所包含的表格的个数进行取余操作,得到数据记录所处表格在其所处数据库中的编号,以将该数据记录分配至该编号对应的表格中。
在表格拆分路由规则中,仍然采用hash切分,从而保证了与数据库拆分路由规则的一致性。这使得数据记录水平切分后,易于进行水平扩展,同时还能兼顾按照orderId查询的性能,故极大地提升了用户体验。
如图4所示,本发明还提供一种服务器,包括上述的数据库水平分库分表系统。
综上所述,本发明的数据库水平分库分表方法及系统、服务器基于单表的行数,将数据库水平分割为若干分库,每个分库再分割为若干分表,从而减少单表的记录数量,提高查询所需要的响应时间;部署方便、开发集成等成本低、无代码侵入性;支持数据库线性扩展,无数据迁移痛苦,扩容成本低;能够根据设定的存储量的大小主动扩容,而不是在数据库出现瓶颈时才实施,保证了数据库的安全可靠性;只需迁移一次数据,即可实现原数据库到水平分库分表后的数据库的更新。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
Claims (10)
1.一种数据库水平分库分表方法,其特征在于:包括以下步骤:
设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数;
基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中;
基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。
2.根据权利要求1所述的数据库水平分库分表方法,其特征在于:所述集群所包含的数据库个数与所述数据库所包含的表格的个数的取值相同。
3.根据权利要求1所述的数据库水平分库分表方法,其特征在于:基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中包括以下步骤:
计算数据库线性扩展倍增因子Factor=Round(userId/scope),其中,Round表示向下取整运算,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,scope表示一个集群的数据记录容量数;
计算hash切分因子Remainder=userId mod scope,其中,mod表示取余数操作;
计算Remainder mod n+Factor x n,得到数据记录所处数据库在其所处集群中的编号,以将该数据记录分配至该编号对应的数据库中,其中,n为一个集群所包含的数据库个数。
4.根据权利要求1所述的数据库水平分库分表方法,其特征在于:基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中包括以下步骤:
获取数据库中的数据记录遵循某一规则的编号值;
将该编号值对数据库所包含的表格的个数进行取余操作,得到数据记录所处表格在其所处数据库中的编号,以将该数据记录分配至该编号对应的表格中。
5.根据权利要求4所述的数据库水平分库分表方法,其特征在于:所述该编号值采用数据记录的useId值或orderId值;其中,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,orderId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的订单编号。
6.一种数据库水平分库分表系统,其特征在于:包括设置模块、数据库拆分模块和表格拆分模块;
所述设置模块用于设定集群的个数、一个集群所包含的数据库个数以及一个数据库所包含的表格的个数;
所述数据库拆分模块用于基于预设数据库拆分路由规则,将数据记录分配至各个集群所包含的各个数据库中;
所述表格拆分模块用于基于预设表格拆分路由规则,将各个数据库中的数据记录分配至该数据库所包含的各个表格中。
7.根据权利要求6所述的数据库水平分库分表系统,其特征在于:所述设置模块设定所述集群所包含的数据库个数与所述数据库所包含的表格的个数的取值相同。
8.根据权利要求6所述的数据库水平分库分表系统,其特征在于:所述数据库拆分模块执行以下操作::
计算数据库线性扩展倍增因子Factor=Round(userId/scope),其中,Round表示向下取整运算,useId表示与数据记录唯一对应且随数字记录逐个递增的数字记录的用户编号,scope表示一个集群的数据记录容量数;
计算hash切分因子Remainder=userId mod scope,其中,mod表示取余数操作;
计算Remainder mod n+Factor x n,得到数据记录所处数据库在其所处集群中的编号,以将该数据记录分配至该编号对应的数据库中,其中,n为一个集群所包含的数据库个数。
9.根据权利要求6所述的数据库水平分库分表系统,其特征在于:所述表格拆分模块执行以下操作:
获取数据库中的数据记录遵循某一规则的编号值;
将该编号值对数据库所包含的表格的个数进行取余操作,得到数据记录所处表格在其所处数据库中的编号,以将该数据记录分配至该编号对应的表格中。
10.一种服务器,其特征在于:包括权利要求6-9之一所述的数据库水平分库分表系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710334450.8A CN107229688A (zh) | 2017-05-12 | 2017-05-12 | 一种数据库水平分库分表方法及系统、服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710334450.8A CN107229688A (zh) | 2017-05-12 | 2017-05-12 | 一种数据库水平分库分表方法及系统、服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107229688A true CN107229688A (zh) | 2017-10-03 |
Family
ID=59933374
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710334450.8A Pending CN107229688A (zh) | 2017-05-12 | 2017-05-12 | 一种数据库水平分库分表方法及系统、服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107229688A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109344161A (zh) * | 2018-12-04 | 2019-02-15 | 大唐网络有限公司 | 一种基于mongodb的海量数据存储方法 |
CN109783577A (zh) * | 2019-01-05 | 2019-05-21 | 咪付(广西)网络技术有限公司 | 一种基于策略的云端数据库弹性伸缩方法 |
CN109918442A (zh) * | 2019-01-24 | 2019-06-21 | 中国联合网络通信集团有限公司 | 一种数据的处理方法及装置 |
CN110134742A (zh) * | 2019-04-25 | 2019-08-16 | 上海淇毓信息科技有限公司 | 一种基于金融客户的动态全局水平分群方法、装置、系统 |
CN110222030A (zh) * | 2019-05-13 | 2019-09-10 | 福建天泉教育科技有限公司 | 数据库动态扩容的方法、存储介质 |
CN111199386A (zh) * | 2019-12-27 | 2020-05-26 | 天阳宏业科技股份有限公司 | 一种工作流引擎及其实现方法 |
CN111753019A (zh) * | 2019-03-26 | 2020-10-09 | 北京沃东天骏信息技术有限公司 | 一种应用于数据仓库的数据分区方法和装置 |
CN112181985A (zh) * | 2020-09-30 | 2021-01-05 | 银盛支付服务股份有限公司 | 一种基于数据库的文档管理方法 |
CN112184204A (zh) * | 2020-09-30 | 2021-01-05 | 银盛支付服务股份有限公司 | 一种基于数据路由规则、分库分表的数据操作方法及系统 |
CN114564501A (zh) * | 2022-02-28 | 2022-05-31 | 天翼安全科技有限公司 | 一种数据库数据存储、查询方法、装置、设备及介质 |
CN117473071A (zh) * | 2023-12-27 | 2024-01-30 | 珠海格力电器股份有限公司 | 数据检索方法、装置、设备及计算机可读介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541997A (zh) * | 2011-11-23 | 2012-07-04 | 苏州阔地网络科技有限公司 | 一种自动分库的数据库执行方法及系统 |
CN102930062A (zh) * | 2012-11-30 | 2013-02-13 | 南京富士通南大软件技术有限公司 | 一种数据库快速水平扩展的方法 |
CN102999526A (zh) * | 2011-09-16 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种数据库关系表的拆分、查询方法及系统 |
US8429162B1 (en) * | 2011-09-27 | 2013-04-23 | Amazon Technologies, Inc. | Facilitating data redistribution in database sharding |
CN105930387A (zh) * | 2016-04-14 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种基于数据路由、分库分表的数据操作系统及方法 |
CN106528579A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种基于分库分表结构数据库的查询方法、装置及系统 |
-
2017
- 2017-05-12 CN CN201710334450.8A patent/CN107229688A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999526A (zh) * | 2011-09-16 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种数据库关系表的拆分、查询方法及系统 |
US8429162B1 (en) * | 2011-09-27 | 2013-04-23 | Amazon Technologies, Inc. | Facilitating data redistribution in database sharding |
CN102541997A (zh) * | 2011-11-23 | 2012-07-04 | 苏州阔地网络科技有限公司 | 一种自动分库的数据库执行方法及系统 |
CN102930062A (zh) * | 2012-11-30 | 2013-02-13 | 南京富士通南大软件技术有限公司 | 一种数据库快速水平扩展的方法 |
CN106528579A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种基于分库分表结构数据库的查询方法、装置及系统 |
CN105930387A (zh) * | 2016-04-14 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种基于数据路由、分库分表的数据操作系统及方法 |
Non-Patent Citations (2)
Title |
---|
ZHENGDL126: "数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器", 《ITEYE》 * |
天梯梦: "大数据量的存储分表常见算法", 《ITEYE》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109344161A (zh) * | 2018-12-04 | 2019-02-15 | 大唐网络有限公司 | 一种基于mongodb的海量数据存储方法 |
CN109783577A (zh) * | 2019-01-05 | 2019-05-21 | 咪付(广西)网络技术有限公司 | 一种基于策略的云端数据库弹性伸缩方法 |
CN109783577B (zh) * | 2019-01-05 | 2021-10-08 | 咪付(广西)网络技术有限公司 | 一种基于策略的云端数据库弹性伸缩方法 |
CN109918442A (zh) * | 2019-01-24 | 2019-06-21 | 中国联合网络通信集团有限公司 | 一种数据的处理方法及装置 |
CN111753019A (zh) * | 2019-03-26 | 2020-10-09 | 北京沃东天骏信息技术有限公司 | 一种应用于数据仓库的数据分区方法和装置 |
CN111753019B (zh) * | 2019-03-26 | 2024-07-16 | 北京沃东天骏信息技术有限公司 | 一种应用于数据仓库的数据分区方法和装置 |
CN110134742B (zh) * | 2019-04-25 | 2023-11-14 | 上海淇毓信息科技有限公司 | 一种基于金融客户的动态全局水平分群方法、装置、系统 |
CN110134742A (zh) * | 2019-04-25 | 2019-08-16 | 上海淇毓信息科技有限公司 | 一种基于金融客户的动态全局水平分群方法、装置、系统 |
CN110222030A (zh) * | 2019-05-13 | 2019-09-10 | 福建天泉教育科技有限公司 | 数据库动态扩容的方法、存储介质 |
CN111199386A (zh) * | 2019-12-27 | 2020-05-26 | 天阳宏业科技股份有限公司 | 一种工作流引擎及其实现方法 |
CN112184204A (zh) * | 2020-09-30 | 2021-01-05 | 银盛支付服务股份有限公司 | 一种基于数据路由规则、分库分表的数据操作方法及系统 |
CN112181985A (zh) * | 2020-09-30 | 2021-01-05 | 银盛支付服务股份有限公司 | 一种基于数据库的文档管理方法 |
CN114564501A (zh) * | 2022-02-28 | 2022-05-31 | 天翼安全科技有限公司 | 一种数据库数据存储、查询方法、装置、设备及介质 |
CN114564501B (zh) * | 2022-02-28 | 2024-08-06 | 天翼安全科技有限公司 | 一种数据库数据存储、查询方法、装置、设备及介质 |
CN117473071A (zh) * | 2023-12-27 | 2024-01-30 | 珠海格力电器股份有限公司 | 数据检索方法、装置、设备及计算机可读介质 |
CN117473071B (zh) * | 2023-12-27 | 2024-04-05 | 珠海格力电器股份有限公司 | 数据检索方法、装置、设备及计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107229688A (zh) | 一种数据库水平分库分表方法及系统、服务器 | |
Venkatraman et al. | SQL versus NoSQL movement with big data analytics | |
US10860598B2 (en) | Systems and methods for interest-driven business intelligence systems including event-oriented data | |
US9767427B2 (en) | Modeling multi-dimensional sequence data over streams | |
CN103577440B (zh) | 一种非关系型数据库中的数据处理方法和装置 | |
CN104199986A (zh) | 基于hbase和geohash的矢量数据空间索引方法 | |
US10114846B1 (en) | Balanced distribution of sort order values for a multi-column sort order of a relational database | |
US10061834B1 (en) | Incremental out-of-place updates for datasets in data stores | |
WO2012012968A1 (zh) | 一种分布式并行数据库系统的数据分区方法 | |
CN107423422A (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
CN103631912B (zh) | 一种利用非关系数据库存储海量工业设备监测数据的方法 | |
CN105408857A (zh) | 通过针对选择性交织数据位生成用于关系数据库的多列索引 | |
AU2014207599A1 (en) | Efficient query processing using histograms in a columnar database | |
CN104933112A (zh) | 分布式互联网交易信息存储处理方法 | |
CN103955502A (zh) | 一种可视化olap的应用实现方法及系统 | |
CN107807787B (zh) | 一种分布式数据存储方法和系统 | |
CN105631003A (zh) | 支持海量数据分组统计的智能索引构建、查询及维护方法 | |
US9189489B1 (en) | Inverse distribution function operations in a parallel relational database | |
CN102982186B (zh) | 基于oracle数据库系统的range分区表的维护方法和系统 | |
CN102193990A (zh) | 一种图形数据库及其实现方法 | |
CN102737123B (zh) | 一种多维数据分布方法 | |
CN111737393A (zh) | 一种web环境下矢量数据自适管理方法及系统 | |
CN105786877B (zh) | 一种数据存储方法、系统及查询方法 | |
CN108009290A (zh) | 一种轨道交通指挥中心线网大数据的数据建模和存储方法 | |
CN104991741B (zh) | 一种基于键值模型的情境适配电网大数据存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 200080 room 1050, No. 901-908 East Daming Road, Shanghai, Hongkou District Applicant after: Shanghai pre long Mdt InfoTech Ltd Address before: 200080 room 1050, No. 901-908 East Daming Road, Shanghai, Hongkou District Applicant before: Shanghai long ago Financial Information Service Co., Ltd. |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20210223 |