CN109213761A - 一种自由扩展免迁移的分库分表方法 - Google Patents
一种自由扩展免迁移的分库分表方法 Download PDFInfo
- Publication number
- CN109213761A CN109213761A CN201810882434.7A CN201810882434A CN109213761A CN 109213761 A CN109213761 A CN 109213761A CN 201810882434 A CN201810882434 A CN 201810882434A CN 109213761 A CN109213761 A CN 109213761A
- Authority
- CN
- China
- Prior art keywords
- shardingkey
- modulus
- group
- data
- library
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种自由扩展免迁移的分库分表方法,包括以下步骤:步骤一、先确定分库或分表的shardingKey;步骤二、再根据该shardingKey的范围,对数据库集群进行分组,某一个shardingKey对应的值只能映射到一个组;步骤三、映射分组后,分别对组内进行二次划分,划分采取shardingKey取模或hash后取模的方式进行;通常从未扩容前的数据库为单库,此时可以直接映射;新扩展的组,如果为单库,也采取直接映射;如果新扩展的组包含多个数据库,则组内通过对shardingKey取模或者hash后取模的方式。本发明的有益效果时结合了区间划分和取模划分两种方式,提出一种区间分组、组内取模的数据划分策略,解决了数据量增长后数据库分库后数据需要迁移或数据热点问题,实现了数据的平滑扩容。
Description
技术领域
本发明涉及互联网技术领域,具体涉及一种自由扩展免迁移的分库分表方法。
背景技术
关系型数据库由于单机容量、连接数和处理能力等有限,当单表数据量达到5000万或100G之后,容易达到性能瓶颈,此时就需要考虑对其进行数据切分,切分的目的就是减少数据库负担,缩短查询时间。数据切分就是将数据分散到多个数据库中,从而减少单一数据库的数据量,通过增加数据库实例数量的方式实现数据库的分布式扩展,从而达到提升数据库性能的目的。从切分类型可分为两种方式:垂直(纵向)和水平(横向)切分;垂直切分通常根据业务场景的将表拆分到不同的数据库中,但依然存在单表数据库过大的问题(需要水平切分);水平切分分为库内分表和分库分表,是根据表内数据间的逻辑关系,将同一个表按照不同的条件分散到多个数据库或多个表中,每个表只包含一部分数据,达到分布式的效果。典型的数据分片规则分为:根据数值范围切分和根据数值取模切分,两种方式普遍存在热点数据或扩容需要迁移旧的数据问题。
现有技术一、请参阅图1,按照时间区间或ID区间来切分,例如按照不同的时间段、或者按照日期不同的月份将数据分散到不同的数据库中;将id为1~100000记录分到第一个库,100001~200000分到第二个库,依次类推;
现有技术一的缺点在于:1、存在典型的数据热点问题,新增加数据和近期频繁修改数据会集中到的单一数据库结点,消除了单表数据量问题,但数据库的单点访问量聚集,容易引发并发访问的瓶颈;例如按时间字段分片,有些分片存储最近时间段内的数据,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询。
2、扩容只能逐个结点扩容,业务量高时需要定期扩容。例如按照时间段分片,业务初期数据量少,业务量是单个数据库表可满足一年数据量;后来业务量激增12倍,则单个数据库只能满足一个月的数量,则需要每个月定期扩容。
现有技术二、请参阅图2,按照id取模或者采用hash取模的方式进行数据切分,例如:将Order表根据order字段切分到4个库中,余数为0的放到db_0,余数为1的放在db_1,以此类推;
现有技术二的缺点在于:1、数据库前期数据较少,所有数据库遍历查询消耗资源多;
2、前期数据量少,数据库数量多占用过多计算资源和硬件投入;
3、每次数据分片集群扩容,均需要迁移旧的数据,当数据量非常大时,数据迁移工作将会十分繁琐;
4、考虑到集群扩容需要数据迁移,每次扩容需要全面谨慎预测今后数据量,并给出分库的数量,从而减少扩容频次。
发明内容
为实现上述目的,本发明提供如下技术方案:
一种自由扩展免迁移的分库分表方法,包括以下步骤:
步骤一、先确定分库或分表的shardingKey;
步骤二、再根据该shardingKey的范围,对数据库集群进行分组,某一个shardingKey对应的值只能映射到一个组;
步骤三、映射分组后,分别对组内进行二次划分,划分采取shardingKey取模或hash后取模的方式进行;通常从未扩容前的数据库为单库,此时可以直接映射;新扩展的组,如果为单库,也采取直接映射;如果新扩展的组包含多个数据库,则组内通过对shardingKey取模或者hash后取模的方式,映射到不同的库中;同上一步骤,shardingKey对应的值只能映射到一个数据库上;
步骤四、当需要再次扩容时,只需要新增一个区间分组,并采用步骤二和步骤三的方式进行映射,从而实现水平无迁移自由扩展。
作为本发明的进一步技术方案是:所述shardingKey必须是数字型id或者时间或者可以比较大小的值,且shardingKey必须是增长型的值,例如自增长id、增长型流水号、时间戳。
作为本发明的再进一步技术方案是:在步骤二中,不同的组代表一个映射区间,区间范围不能存在重叠。
本发明的有益效果是结合了区间划分和取模划分两种方式,提出一种区间分组、组内取模的数据划分策略,解决了数据量增长后数据库分库后数据需要迁移或数据热点问题,实现了数据的平滑扩容。
附图说明
图1为本发明现有技术一的处理方法流程图;
图2为本发明现有技术二的处理方法流程图;
图3为本发明的设计方案框图;
图4为本发明的软件架构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图3和图4,本发明实施例中,一种自由扩展免迁移的分库分表方法,包括以下步骤:
步骤一、先确定分库或分表的shardingKey;
步骤二、再根据该shardingKey的范围,对数据库集群进行分组,某一个shardingKey对应的值只能映射到一个组;
步骤三、映射分组后,分别对组内进行二次划分,划分采取shardingKey取模或hash后取模的方式进行;通常从未扩容前的数据库为单库,此时可以直接映射;新扩展的组,如果为单库,也采取直接映射;如果新扩展的组包含多个数据库,则组内通过对shardingKey取模或者hash后取模的方式,映射到不同的库中;同上一步骤,shardingKey对应的值只能映射到一个数据库上;
步骤四、当需要再次扩容时,只需要新增一个区间分组,并采用步骤二和步骤三的方式进行映射,从而实现水平无迁移自由扩展。
所述shardingKey必须是数字型id或者时间或者可以比较大小的值,且shardingKey必须是增长型的值,例如自增长id、增长型流水号、时间戳。
在步骤二中,不同的组代表一个映射区间,区间范围不能存在重叠。
按照数据流的流向描述实例的具体实现方式:
1、项目周期起初一般无法评估数据量,大部分可不考虑分库,或分少量的库。假设规划该库中的数据库单表提供5000万条记录的存储能力,且id递增增长。标记该组为第1组,可接受数据id范围为1至5000万之间;
2、随着业务的增长,无法满足业务需求,当原表总数量逼近5000万条数据时,评估当前的每天数据量以及最高每天数据量,预测需要承载的数据量。假设规划扩容后,数据库表提供2亿条记录的存储能力,则需要新增3个数据库,并标记为第2组,第二组id范围为5000万至2亿之间。该组中的数据库再次根据id取模的方式进行数据划分;
3、随着业务进一步增长,当表总数据量逼近2亿条数据时,按照上一步的扩容模式,进行进一步的增量扩容;以此类推,以达到不迁移数据、动态扩容。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
Claims (3)
1.一种自由扩展免迁移的分库分表方法,其特征在于,包括以下步骤:
步骤一、先确定分库或分表的shardingKey;
步骤二、再根据该shardingKey的范围,对数据库集群进行分组,某一个shardingKey对应的值只能映射到一个组;
步骤三、映射分组后,分别对组内进行二次划分,划分采取shardingKey取模或hash后取模的方式进行;通常从未扩容前的数据库为单库,此时可以直接映射;新扩展的组,如果为单库,也采取直接映射;如果新扩展的组包含多个数据库,则组内通过对shardingKey取模或者hash后取模的方式,映射到不同的库中;同上一步骤,shardingKey对应的值只能映射到一个数据库上;
步骤四、当需要再次扩容时,只需要新增一个区间分组,并采用步骤二和步骤三的方式进行映射,从而实现水平无迁移自由扩展。
2.根据权利要求1所述的一种自由扩展免迁移的分库分表方法,其特征在于,所述shardingKey必须是数字型id或者时间或者可以比较大小的值,且shardingKey必须是增长型的值,例如自增长id、增长型流水号、时间戳。
3.根据权利要求1所述的一种自由扩展免迁移的分库分表方法,其特征在于,在步骤二中,不同的组代表一个映射区间,区间范围不能存在重叠。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810882434.7A CN109213761A (zh) | 2018-08-06 | 2018-08-06 | 一种自由扩展免迁移的分库分表方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810882434.7A CN109213761A (zh) | 2018-08-06 | 2018-08-06 | 一种自由扩展免迁移的分库分表方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109213761A true CN109213761A (zh) | 2019-01-15 |
Family
ID=64987487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810882434.7A Pending CN109213761A (zh) | 2018-08-06 | 2018-08-06 | 一种自由扩展免迁移的分库分表方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109213761A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800270A (zh) * | 2019-01-22 | 2019-05-24 | 青岛聚好联科技有限公司 | 一种数据存储和查询的方法及物联网系统 |
CN110347513A (zh) * | 2019-07-15 | 2019-10-18 | 中国工商银行股份有限公司 | 热点数据批量调度方法及装置 |
CN110941602A (zh) * | 2019-11-20 | 2020-03-31 | 中国建设银行股份有限公司 | 数据库的配置方法、装置、电子设备及存储介质 |
CN110955666A (zh) * | 2019-12-17 | 2020-04-03 | 用友网络科技股份有限公司 | 数据处理方法和数据处理装置 |
CN111274228A (zh) * | 2020-02-21 | 2020-06-12 | 泰康保险集团股份有限公司 | 保单数据迁移存储方法、系统、设备及可读存储介质 |
CN111538718A (zh) * | 2020-04-22 | 2020-08-14 | 杭州宇为科技有限公司 | 分布式系统的实体id生成和定位方法、扩容方法及设备 |
CN113111070A (zh) * | 2021-05-08 | 2021-07-13 | 福建天晴数码有限公司 | 一种基于分组进行数据分库分表的方法及其系统 |
CN113486023A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 数据库分库分表的方法及装置 |
CN113505176A (zh) * | 2021-07-08 | 2021-10-15 | 中国工商银行股份有限公司 | 分布式系统集群在线分片扩容方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063486A (zh) * | 2014-07-03 | 2014-09-24 | 四川中亚联邦科技有限公司 | 一种大数据分布式存储方法和系统 |
CN104731864A (zh) * | 2015-02-26 | 2015-06-24 | 国家计算机网络与信息安全管理中心 | 一种海量非结构化数据的数据存储方法 |
CN104794249A (zh) * | 2015-05-15 | 2015-07-22 | 乐得科技有限公司 | 一种数据库的实现方法和设备 |
-
2018
- 2018-08-06 CN CN201810882434.7A patent/CN109213761A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063486A (zh) * | 2014-07-03 | 2014-09-24 | 四川中亚联邦科技有限公司 | 一种大数据分布式存储方法和系统 |
CN104731864A (zh) * | 2015-02-26 | 2015-06-24 | 国家计算机网络与信息安全管理中心 | 一种海量非结构化数据的数据存储方法 |
CN104794249A (zh) * | 2015-05-15 | 2015-07-22 | 乐得科技有限公司 | 一种数据库的实现方法和设备 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800270B (zh) * | 2019-01-22 | 2020-12-04 | 青岛聚好联科技有限公司 | 一种数据存储和查询的方法及物联网系统 |
CN109800270A (zh) * | 2019-01-22 | 2019-05-24 | 青岛聚好联科技有限公司 | 一种数据存储和查询的方法及物联网系统 |
CN110347513A (zh) * | 2019-07-15 | 2019-10-18 | 中国工商银行股份有限公司 | 热点数据批量调度方法及装置 |
CN110941602A (zh) * | 2019-11-20 | 2020-03-31 | 中国建设银行股份有限公司 | 数据库的配置方法、装置、电子设备及存储介质 |
CN110941602B (zh) * | 2019-11-20 | 2023-05-12 | 建信金融科技有限责任公司 | 数据库的配置方法、装置、电子设备及存储介质 |
CN110955666A (zh) * | 2019-12-17 | 2020-04-03 | 用友网络科技股份有限公司 | 数据处理方法和数据处理装置 |
CN110955666B (zh) * | 2019-12-17 | 2023-10-03 | 用友网络科技股份有限公司 | 数据处理方法和数据处理装置 |
CN111274228A (zh) * | 2020-02-21 | 2020-06-12 | 泰康保险集团股份有限公司 | 保单数据迁移存储方法、系统、设备及可读存储介质 |
CN111274228B (zh) * | 2020-02-21 | 2023-09-05 | 泰康保险集团股份有限公司 | 保单数据迁移存储方法、系统、设备及可读存储介质 |
CN111538718A (zh) * | 2020-04-22 | 2020-08-14 | 杭州宇为科技有限公司 | 分布式系统的实体id生成和定位方法、扩容方法及设备 |
CN111538718B (zh) * | 2020-04-22 | 2023-10-27 | 杭州宇为科技有限公司 | 分布式系统的实体id生成和定位方法、扩容方法及设备 |
CN113111070A (zh) * | 2021-05-08 | 2021-07-13 | 福建天晴数码有限公司 | 一种基于分组进行数据分库分表的方法及其系统 |
CN113505176A (zh) * | 2021-07-08 | 2021-10-15 | 中国工商银行股份有限公司 | 分布式系统集群在线分片扩容方法及装置 |
CN113486023A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 数据库分库分表的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109213761A (zh) | 一种自由扩展免迁移的分库分表方法 | |
CN103577440B (zh) | 一种非关系型数据库中的数据处理方法和装置 | |
US5943677A (en) | Sparsity management system for multi-dimensional databases | |
CN102968503B (zh) | 数据库系统的数据处理方法以及数据库系统 | |
US9355134B1 (en) | Facilitating data redistribution in database sharding | |
CN102682108B (zh) | 一种行列混合的数据库存储方法 | |
CN105389367B (zh) | 基于Mongo数据库的电网图形多时态多级分布式存储方法 | |
CN102930062A (zh) | 一种数据库快速水平扩展的方法 | |
CN104112008A (zh) | 一种多表数据关联查询优化方法和装置 | |
CN107766374B (zh) | 一种海量小文件存储读取的优化方法和系统 | |
CN105488231A (zh) | 一种基于自适应表维度划分的大数据处理方法 | |
CN104750740A (zh) | 数据更新的方法及装置 | |
CN104519103B (zh) | 网络数据的同步处理方法、服务器及相关系统 | |
CN107665246B (zh) | 基于图数据库的动态数据迁移方法及图数据库集群 | |
US10296656B2 (en) | Managing database | |
CN104407879A (zh) | 一种电网时序大数据并行加载方法 | |
CN106682077A (zh) | 一种基于Hadoop技术的海量时序数据存储实现方法 | |
CN110941602B (zh) | 数据库的配置方法、装置、电子设备及存储介质 | |
CN109408590A (zh) | 分布式数据库的扩容方法、装置、设备及存储介质 | |
CN102890721A (zh) | 基于列存储技术的数据库建立方法及系统 | |
CN110019111A (zh) | 数据处理方法、装置、存储介质以及处理器 | |
CN106407191A (zh) | 一种数据处理方法及服务器 | |
CN104021088B (zh) | 日志存储方法和装置 | |
CN106960020A (zh) | 一种创建索引表的方法及设备 | |
CN101419600A (zh) | 基于面向对象文件系统的数据副本映射方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190115 |
|
RJ01 | Rejection of invention patent application after publication |