CN108399258A - 一种数据库的分库分表扩容方法 - Google Patents
一种数据库的分库分表扩容方法 Download PDFInfo
- Publication number
- CN108399258A CN108399258A CN201810194709.8A CN201810194709A CN108399258A CN 108399258 A CN108399258 A CN 108399258A CN 201810194709 A CN201810194709 A CN 201810194709A CN 108399258 A CN108399258 A CN 108399258A
- Authority
- CN
- China
- Prior art keywords
- database
- data
- key
- tables
- dilatation
- 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.)
- Withdrawn
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/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库的分库分表扩容方法,其包括有如下步骤:步骤S1,设定每个数据库表的唯一标识值为key;步骤S2,设定数据库的数量为m个,设定数据库表的数量为n个,则有:m=2^k1;n=2^k2;k1≤k2;步骤S3,计算数据表的存储位置为:Nt=key%n=key%(2^k2);步骤S4,计算数据库的存储位置为:Nd=Nt%m=[key%(2^k2)]%(2^k1)=key%(2^k1)。基于上述方法,在程序中寻找数据存储位置时,只需掌握数据库、数据表的数量,即可快速计算出存储位置,无需读取配置文件,其次,在扩容时,分裂数据的过程在同一台机器的数据库中进行,因此具有速度快、停止服务时间小的优势,此外,在迁移到新库时,可实现整表迁移,进而方便了迁移和验证。
Description
技术领域
本发明涉及数据库,尤其涉及一种数据库的分库分表扩容方法。
背景技术
数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
现有技术中,数据库扩容方法是发现表的行数太大时,直接把表在数据库内分割成两个表,然后在程序的配置文件中修改新表负责的数据范围。同理,当一台服务器上的数据库容量不够时,再添加一台数据库服务器,把数据库和数据表迁移到另外一台,再修改程序中的数据分布配置文件。其缺陷是,当数据经过一些次扩容后,程序的配置文件会越来越长,寻找一条数据库的库、表位置变得繁琐。程序效率和人工查找都变得麻烦。同时,几次的数据库扩容,会移动大部分的数据,有些甚至会又移动回从前的表,造成重复迁移数据。
发明内容
本发明要解决的技术问题在于,针对现有技术的不足,提供一种数据库的分库分表扩容方法,用以实现快速扩容、减少数据拷贝量以及缩短扩容时间。
为解决上述技术问题,本发明采用如下技术方案。
一种数据库的分库分表扩容方法,其包括有如下步骤:步骤S1,设定每个数据库表的唯一标识值为key;步骤S2,设定数据库的数量为m个,设定数据库表的数量为n个,则有:m=2^k1;n=2^k2;k1≤k2;步骤S3,计算数据表的存储位置为:Nt=key%n=key%(2^k2);步骤S4,计算数据库的存储位置为:Nd=Nt%m=[key%(2^k2)]%(2^k1)=key%(2^k1)。
优选地,所述步骤S1中,将数据库的主键作为唯一标识值key。
优选地,每次扩容时,先扩容数据表,将每个数据表分成两个,并且原数据表与扩容得到的新数据表包含在同一个数据库内。
优选地,若继续扩容,则新增数据库,并将对应的数据表整体导入新的数据库中。
本发明公开的数据库的分库分表扩容方法,在程序中寻找数据存储位置时,只需掌握数据库、数据表的数量,即可快速计算出存储位置,无需读取配置文件,其次,在扩容时,分裂数据的过程在同一台机器的数据库中进行,因此具有速度快、停止服务时间小的优势,此外,在迁移到新库时,可实现整表迁移,进而方便了迁移和验证。
附图说明
图1为数据库的分布示意图。
具体实施方式
下面结合附图和实施例对本发明作更加详细的描述。
本发明公开了一种数据库的分库分表扩容方法,其包括有如下步骤:
步骤S1,设定每个数据库表的唯一标识值为key;
步骤S2,设定数据库的数量为m个,设定数据库表的数量为n个,则有:
m=2^k1;
n=2^k2;
k1≤k2;
步骤S3,由于n=2^k2,所以计算数据表的存储位置为:
Nt=key%n=key%(2^k2);
步骤S4,计算数据库的存储位置为:
Nd=Nt%m=[key%(2^k2)]%(2^k1)=key%(2^k1)。
本实施例中,各算式所涉及的“%”、“^”等符号,均为计算机程序(如C语言、C++)算法中的运算符,其中,“^”为乘方运算,“%”为除法取余运算。K1、k2是正的自然数,均大于0,表示数据库分为2的k1次方的个数,数据表分为2的k2次方的个数。关于步骤S4中算式的解释:由于k2大于k1,所以[key%(2^k2)]后再模(2^k1)与key%(2^k1)直接模是相等的,由此导出。
上述数据库的分库分表扩容方法,在程序中寻找数据存储位置时,只需掌握数据库、数据表的数量,即可快速计算出存储位置,无需读取配置文件,其次,在扩容时,分裂数据的过程在同一台机器的数据库中进行,因此具有速度快、停止服务时间小的优势,此外,在迁移到新库时,可实现整表迁移,进而方便了迁移和验证。
上述方法的步骤S1中,将数据库的主键作为唯一标识值key。
作为一种优选方式,每次扩容时,先扩容数据表,将每个数据表分成两个,并且原数据表与扩容得到的新数据表包含在同一个数据库内。
本实施例中,若继续扩容,则新增数据库,并将对应的数据表整体导入新的数据库中。
本发明公开的数据库的分库分表扩容方法,其实际应用过程中,可参考如下实施例:请参照图1,设每个数据库表的唯一标识值为key,通常用数据库的主键,共有m个数据库db,共有n个数据库表table。并且有:m=2^k1;n=2^k2;k1<=k2。数据存储在的哪一数据表、哪一数据库,由key值决定。
存储的数据表id为Nt=key%n=key%(2^k2);
存储的数据库id为Nd=Nt%m=[key%(2^k2)]%(2^k1)=key%(2^k1)。
每次扩容时,先扩容数据表,数据表的扩容是每个表都一分为二,并且新表也都在同一个数据库内,可以快速扩容。如果还需要扩容db,那么新增一倍的db,把对应的数据表整体导入到新的数据库中,就完成了扩容。
基于上述原理,在程序中寻找数据存储的位置时,只需要知道数据库、表的数量,就快速计算出存储的位置,而不用读取配置文件。扩容时,分裂数据都是在同一台机器的数据库中进行,速度快,停止服务时间小。迁移到新库时,也是整表迁移,方便迁移和验证。
以上所述只是本发明较佳的实施例,并不用于限制本发明,凡在本发明的技术范围内所做的修改、等同替换或者改进等,均应包含在本发明所保护的范围内。
Claims (4)
1.一种数据库的分库分表扩容方法,其特征在于,包括有如下步骤:
步骤S1,设定每个数据库表的唯一标识值为key;
步骤S2,设定数据库的数量为m个,设定数据库表的数量为n个,则有:
m=2^k1;
n=2^k2;
k1≤k2;
步骤S3,计算数据表的存储位置为:
Nt=key%n=key%(2^k2);
步骤S4,计算数据库的存储位置为:
Nd=Nt%m=[key%(2^k2)]%(2^k1)=key%(2^k1)。
2.如权利要求1所述的数据库的分库分表扩容方法,其特征在于,所述步骤S1中,将数据库的主键作为唯一标识值key。
3.如权利要求1所述的数据库的分库分表扩容方法,其特征在于,每次扩容时,先扩容数据表,将每个数据表分成两个,并且原数据表与扩容得到的新数据表包含在同一个数据库内。
4.如权利要求1所述的数据库的分库分表扩容方法,其特征在于,若继续扩容,则新增数据库,并将对应的数据表整体导入新的数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810194709.8A CN108399258A (zh) | 2018-03-09 | 2018-03-09 | 一种数据库的分库分表扩容方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810194709.8A CN108399258A (zh) | 2018-03-09 | 2018-03-09 | 一种数据库的分库分表扩容方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108399258A true CN108399258A (zh) | 2018-08-14 |
Family
ID=63091676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810194709.8A Withdrawn CN108399258A (zh) | 2018-03-09 | 2018-03-09 | 一种数据库的分库分表扩容方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108399258A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061737A (zh) * | 2019-12-12 | 2020-04-24 | 税友软件集团股份有限公司 | 一种分布式数据库快速扩容装置 |
-
2018
- 2018-03-09 CN CN201810194709.8A patent/CN108399258A/zh not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061737A (zh) * | 2019-12-12 | 2020-04-24 | 税友软件集团股份有限公司 | 一种分布式数据库快速扩容装置 |
CN111061737B (zh) * | 2019-12-12 | 2023-05-09 | 税友软件集团股份有限公司 | 一种分布式数据库快速扩容装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10740308B2 (en) | Key_Value data storage system | |
CN110209728B (zh) | 一种分布式异构数据库同步方法、电子设备及存储介质 | |
CN105824849A (zh) | 一种数据导入方法及适配器 | |
CN106302843B (zh) | 一种ip地址库更新方法及装置 | |
CN109002474A (zh) | 一种数据迁移方法及装置 | |
CN107704597A (zh) | 关系型数据库至Hive的ETL脚本创建方法 | |
CN104714957A (zh) | 一种表结构的变更方法及装置 | |
CN107067200B (zh) | 一种物料清单数据的操作方法及装置 | |
CN108764667A (zh) | 风险数据确定方法及装置 | |
CN107818114A (zh) | 一种数据处理方法、装置及数据库 | |
CN108595324A (zh) | 测试案例复用管理方法及系统 | |
CN107943542A (zh) | 一种配置信息管理方法、装置、可读介质及存储控制器 | |
CN109033365A (zh) | 一种数据处理方法及相关设备 | |
CN107609011A (zh) | 一种数据库记录的维护方法和装置 | |
CN108073595A (zh) | 一种在olap数据库实现数据更新和快照的方法及装置 | |
CN108399258A (zh) | 一种数据库的分库分表扩容方法 | |
CN111190814A (zh) | 软件测试用例的生成方法、装置、存储介质及终端 | |
CN109978513A (zh) | 获得技术标准的方法和装置、项目任务管理设备和介质 | |
CN109446268A (zh) | 一种数据同步方法及装置 | |
CN110109867A (zh) | 改进在线模式检测的方法、装置和计算机程序产品 | |
JP6130645B2 (ja) | 生産計画生成装置、生産計画生成方法、プログラム、及び記録媒体 | |
CN109710698A (zh) | 一种数据汇聚方法、装置、电子设备及介质 | |
CN114118944A (zh) | 一种取证实验室分级管理方法、终端设备及存储介质 | |
CN113791594A (zh) | 一种分散控制系统的组态创建方法、系统、设备及介质 | |
CN107636652A (zh) | Rdb系统 |
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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20180814 |
|
WW01 | Invention patent application withdrawn after publication |