CN112965956A - 数据库水平扩容方法、装置、设备和存储介质 - Google Patents

数据库水平扩容方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN112965956A
CN112965956A CN202110290547.XA CN202110290547A CN112965956A CN 112965956 A CN112965956 A CN 112965956A CN 202110290547 A CN202110290547 A CN 202110290547A CN 112965956 A CN112965956 A CN 112965956A
Authority
CN
China
Prior art keywords
database
library
data
slave
capacity expansion
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
Application number
CN202110290547.XA
Other languages
English (en)
Inventor
杨周龙
肖广明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dongpu Software Co Ltd
Original Assignee
Dongpu Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dongpu Software Co Ltd filed Critical Dongpu Software Co Ltd
Priority to CN202110290547.XA priority Critical patent/CN112965956A/zh
Publication of CN112965956A publication Critical patent/CN112965956A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据库水平扩容方法、装置、设备和存储介质,针对分库分表的水平扩容,传统方法一般都需要进行数据迁移,需要停机,对于数据量巨大的系统,会使业务停止时间过长及容易出现数据混乱,从而导致用户体验感差甚至业务系统瘫痪的问题,通过在建立初始数据库时,一次性给足表数量,避免后期进行表扩容及表数据的重新分布;同时通过建立从库的方法初始化分库的表结构以及数据,经过短暂的停机将分库配置到业务应用中,实现扩容。整体上扩容的停机时间相当于一次小型发布的耗时,不影响业务,无数据迁移的风险,解决了现有技术中因分库分表扩容及数据迁移造成用户体验感差甚至业务系统瘫痪的问题。

Description

数据库水平扩容方法、装置、设备和存储介质
技术领域
本发明属于数据库的技术领域,尤其涉及一种数据库水平扩容方法、装置、设备和存储介质。
背景技术
交易类的系统特别是数据量大、并发高的系统,随着业务的发展、访问量的增加,数据量也越来越大。用于存取系统业务数据的数据库将会成为系统发展的瓶颈,包括数据存储的存储瓶颈和数据查询的性能瓶颈。面对这两个问题,一般会采用数据库水平分库分表的技术方案。
传统的设计方法,在需要进行分库和分表水平扩容时会比较痛苦。其原因有以下几点:扩容后,分库分表的数量发生变化,就需要重新哈希取模将存量数据按新的表数和库数进行迁移分布,这个过程对于数据量巨大的系统来说,停机时间有可能会持续几个小时到几十个小时,绝大部分业务是无法承受如此长的停机时间的。另外,迁移数据时,可能会涉及到几个到几十个关联表的数据迁移,一旦迁移漏写脚本或者其他原因迁移不成功,会导致数据混乱,系统群有可能直接瘫痪。
发明内容
本发明的目的是提供一种数据库水平扩容方法、装置、设备和存储介质,一方面可避免数据迁移导致的数据错乱的风险,另一方面无需停机、停业务,只要极短的重启时间,类似一般迭代发布,基本可以说是在线扩容,用户无感知。
为解决上述问题,本发明的技术方案为:
一种数据库水平扩容方法,包括:
在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量;
根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容,若需要扩容,则对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中,并保持整个数据库的表数量不变。
根据本发明一实施例,所述在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量进一步包括:
获取历史年业务量数据及相关业务影响因素;
分析历史年业务量数据与相关业务影响因素之间的相关性,得到相关系数;
根据相关系数对历史年业务量数据和相关业务影响因素进行筛选;
利用多元线性回归方法对筛选后的历史业务数据和相关业务影响因素进行数据拟合,对第i年的业务量数据进行预测;
统计i年内的业务总量。
根据本发明一实施例,所述根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量进一步包括:
预计数据表的数量=业务总量/每张数据表的业务量;
将预计数据表的数量与2的指数倍进行比较,当预计数据表的数量小于2n时,将2n作为初始数据库的表数量。
根据本发明一实施例,所述根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容进一步包括:
获取初始数据库的监控信息,统计初始数据库的查询及写入的并发量;
比较并发量与预设阈值的大小,若并发量大于预设阈值,则判定初始数据库需要扩容,发出扩容提示。
根据本发明一实施例,所述对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中进一步包括:
获取初始数据库实例对象的备份数据;
采用备份数据生成从库的实例对象;
建立主库与从库的主从关系;
从上一次初始数据库备份的时间节点开启主库与从库的数据同步;
将从库作为分库配置到业务应用中。
根据本发明一实施例,所述采用备份数据生成从库的实例对象进一步包括:
创建从库的实例对象,在实例对象中对备份数据进行恢复。
根据本发明一实施例,所述保持整个数据库的表数量不变进一步包括:
基于2的倍数对初始数据库进行扩容,扩容后形成2m个库;其中,m为主库的数量;
扩容前,m个主库共包括2n个数据表,每个主库包括
Figure BDA0002982364510000031
个数据表;扩容后,2m个库共包括2n个数据表,每个库包括
Figure BDA0002982364510000032
个数据表。
一种数据库水平扩容装置,包括:
表数量规划模块,用于在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量;
扩容模块,用于根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容,若需要扩容,则对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中,并保持整个数据库的表数量不变。
一种数据库水平扩容设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述处理器执行计算机可读指令时,实现本发明一实施例中的数据库水平扩容方法。
一种计算机可读介质,存储计算机程序,所述计算机程序被一个或多个处理器执行时,实现本发明一实施例中的数据库水平扩容方法。
本发明由于采用以上技术方案,使其与现有技术相比具有以下的优点和积极效果:
1)本发明一实施例中的数据库水平扩容方法,针对分库分表的水平扩容,传统方法一般都需要进行数据迁移,需要停机,对于数据量巨大的系统,会使业务停止时间过长及容易出现数据混乱,从而导致用户体验感差甚至业务系统瘫痪的问题,通过在建立初始数据库时,一次性给足表数量,避免后期进行表扩容及表数据的重新分布;同时通过建立从库的方法初始化分库的表结构以及数据,经过短暂的停机将分库配置到业务应用中,实现扩容。整体上扩容的停机时间相当于一次小型发布的耗时,不影响业务,无数据迁移的风险,解决了现有技术中因分库分表扩容及数据迁移造成用户体验感差甚至业务系统瘫痪的问题。
2)本发明一实施例中的数据库水平扩容方法,在对未来的业务量进行预测时,采用兼顾内部(历史业务数据)与外部影响因素(相关业务影响因素)来预测长期业务量,可靠性强;并且将相关业务影响因素进行量化分析,通过数学建模的方式进行预测,使得到的业务量准确性高。
3)本发明一实施例中的数据库水平扩容装置,通过表数量规划模块在建立初始数据库时,一次性给足表数量,避免后期进行表扩容及表数据的重新分布;同时通过扩容模块以建立从库的方法初始化分库的表结构以及数据,经过短暂的停机将分库配置到业务应用中,实现扩容。整体上扩容的停机时间相当于一次小型发布的耗时,不影响业务,无数据迁移的风险,解决了现有技术中因分库分表扩容及数据迁移造成用户体验感差甚至业务系统瘫痪的问题。
附图说明
图1为本发明一实施例中的数据库水平扩容方法的流图;
图2为本发明一实施例中的数据库水平扩容装置的框图;
图3为本发明一实施例中的数据库水平扩容设备的示意图。
具体实施方式
以下结合附图和具体实施例对本发明提出的一种数据库水平扩容方法、装置、设备和存储介质作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。
实施例一
本实施例针对分库分表的水平扩容,传统方法一般都需要进行数据迁移,需要停机,对于数据量巨大的系统,会使业务停止时间过长及容易出现数据混乱,从而导致用户体验感差甚至业务系统瘫痪的问题,提出了一种数据库水平扩容(也可以称为横向扩容)方法,通过在建立初始数据库时,一次性给足表数量,避免后期进行表扩容及表数据的重新分布;同时通过建立从库的方法初始化分库的表结构以及数据,经过短暂的停机将分库配置到业务应用中,实现扩容。整体上扩容的停机时间相当于一次小型发布的耗时,不影响业务,无数据迁移的风险,解决了现有技术中因分库分表扩容及数据迁移造成用户体验感差甚至业务系统瘫痪的问题。
具体的,请参看图1,该数据库水平扩容方法,包括:
S1:在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量;
S2:根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容,若需要扩容,则对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中,并保持整个数据库的表数量不变。
在步骤S1中,在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量进一步包括:
S21:获取历史年业务量数据及相关业务影响因素;
S22:分析历史年业务量数据与相关业务影响因素之间的相关性,得到相关系数;
S23:根据相关系数对历史年业务量数据和相关业务影响因素进行筛选;
S24:利用多元线性回归方法对筛选后的历史业务数据和相关业务影响因素进行数据拟合,对第i年的业务量数据进行预测;
S25:统计i年内的业务总量。
上述方法摒弃了时间序列模型,采用兼顾内部(历史业务数据)与外部影响因素(相关业务影响因素)来预测长期业务量,可靠性强;并且将相关业务影响因素进行量化分析,通过数学建模的方式进行预测,使得到的业务量准确性高。
在步骤S21中,获取历史年业务量数据(内部因素),是指前几年的业务量,如前三年的业务量。相关业务影响因素(外部因素)包括统计年鉴中城市宏观经济与产业结构数据,即城市各产业的GDP。
在步骤S22中,分析业务量与内部因素及外部因素的相关系数。
首先定义内部因素:上一年业务量,其中,对于第i+1年业务量Vi+1来说,其上一年业务量数据为Vi;对于第i年业务量Vi来说,其上一年业务量数据为Vi-1。在本实施例以预测第i年业务量Vi进行说明,其上一年业务量数据为Vi-1
定义外部因素:城市宏观经济与产业结构数据,即城市各产业的GDP。定义各产业:第一产业(农业、林业、牧业和渔业)GDP,即GDP1;第二产业(轻工业、重工业),即GDP21、GDP22;第三产业(批发和零售业、交通运输、仓储和邮政业、住宿和餐饮业、信息传输、软件和信息技术服务业、金融业、房地产业、租赁和商务服务业、科学研究、技术服务业、水利环境和公共设施管理业、居民服务、修理和其他服务业、教育、卫生和社会工作、文化、体育和娱乐业、公共管理、社会保障和社会组织),即GDP31、…GDP3j,其中j代表第三产业中各细分产业个数。至此,每个细分产业都对应唯一的GDP标识。
依次分析城市维度的历年业务量数据与对应城市的上一年业务量,及各产业GDP的相关性,该相关性公式为:
Figure BDA0002982364510000061
其中,r为相关系数,Cov为协方差,X为输入各内外部因素(包括上一年业务量、各产业GDP),Y为输入历年业务量V,
Figure BDA0002982364510000062
为X的均方差或标准差,
Figure BDA0002982364510000063
为Y的均方差或标准差。
每一项内部因素及外部因素均需要分别计算其相关系数,因此,X需要分别输入各个内外部因素,即上一年业务量及城市各产业GDP,Y为历年业务量数据。
在步骤S23中,根据相关系数对历史年业务量数据和相关业务影响因素进行筛选。在统计学上,相关系数取值范围在0.6≤r≤1时,(进一步可优选0.7≤r≤1)代表两变量间高度线性相关。因此,根据相关性分析结果,筛选出相关系数不低于0.6的内外部因素;删除相关系数低于0.6的内外部因素。
在步骤S4中,利用多元线性回归方法对筛选后的历史业务数据和相关业务影响因素进行数据拟合,对第i年的业务量数据进行预测之前,先确定自变量。例如:上一年业务量Vi-1,其中i表示第i年;第一产业GDP,即GDP1;第二产业GDP,即GDP21……GDP2k,其中k代表第二产业中符合相关性要求的细分产业个数;第三产业GDP,即GDP31、GDP32……GDP3j,其中j代表第三产业中符合相关性要求的细分产业个数。
然后,采用多元线性回归方法,分析历年业务量数据与上一年业务量Vi-1,及各产业GDP的定量关系,确定各自变量的相关系数r;根据各自变量与对应的相关系数,确定多元线性回归方程:
Vi=r0*Vi-1+r1*GDP1+r2*GDP21+...+r1+k*GDP2k+r2+k*GDP31+r1+k+j*GDP3j
根据上述多元线性回归方程,预测第i年各城市的业务量,其中第i年的各城市产业GDP可通过经济发展相关数据得到。
在步骤S25中,统计i年内的业务总量。也就是统计当前所在年份到未来i年内,企业的业务总量。假设当前所在年份为P,则需要根据上述多元线性回归方程计算出P+1、P+2...P+i年的业务量,再计算这i年内所有的业务总量。
在步骤S1中,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量进一步包括:
S31:预计数据表的数量=业务总量/每张数据表的业务量;
S32:将预计数据表的数量与2的指数倍进行比较,当预计数据表的数量小于2n时,将2n作为初始数据库的表数量。
以订单表为例,假设5-10年的订单总数评估为60亿(业务总量),超过这个时间会清理归档,那么:
60亿订单/1000万/表=600表<1024表(即2的10次方)
因此,在创建初始数据库时,订单表可做成1024张分表。如:order_1、order_2…order_1024。
在步骤S2中,根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容进一步包括:
S41:获取初始数据库的监控信息,统计初始数据库的查询及写入的并发量;
S42:比较并发量与预设阈值的大小,若并发量大于预设阈值,则判定初始数据库需要扩容,发出扩容提示。
在步骤S41中,若采用mysql作为数据库系统,那么可通过输入命令showprocesslist来获取数据库的并发量。若采用Oracle作为数据库系统,那么可通过输入命令Select count(*)from v$session where status='ACTIVE'来获取数据库的并发量。
本实施例以数据库并发量的多少作为判断是否需要扩容的条件,是因为通常对数据库的性能评价是通过衡量其吞吐量来表示的。而与数据库的吞吐量有关的是数据库的响应时间及并发量。其中,响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。并发量:同时处理的查询或写入请求的数量。
在步骤S42中,数据库并发量的预设阈值可根据TPC-H标准来设置数据库每秒处理的事务量,根据该事务量设置并发量的预设阈值。
获取初始数据库的并发量,比较并发量与预设阈值的大小,若并发量大于预设阈值,则判定初始数据库需要扩容,发出扩容提示。该扩容提示可通过网络发送给数据库管理员,提醒数据库管理员可以进行数据库水平扩容了。
在步骤S2中,对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中进一步包括:
S51:获取初始数据库实例对象的备份数据;
S52:采用备份数据生成从库的实例对象;
S53:建立主库与从库的主从关系;
S54:从上一次初始数据库备份的时间节点开启主库与从库的数据同步;
S55:将从库作为分库配置到业务应用中。
上述方法以建立从库的方法初始化分库的表结构以及数据,经过短暂的停机将分库配置到业务应用中,实现扩容。整体上扩容的停机时间相当于一次小型发布的耗时,不影响业务。
具体的,在步骤S51中,获取初始数据库实例对象的备份数据。
具体的,通过向主库发送备份指令来获取实例对象的备份数据。如获取主库的IP地址和端口号,根据主库的IP地址和端口号向主库发送备份指令。在本实施例中,所执行的其他操作都可以以脚本的方式来实现,用户只需要提供主库的IP地址和端口号即可。例如,通过前端页面获取用户输入的IP地址和端口号,脚本根据IP地址和端口号就可以确定待备份的主库。
获取主库的备份数据并保存到建立从库的相应位置,通过采用Rsync方式将主库的已完成的备份数据传到从库的对应位置进行保存;或者,采用即备即传的方式将主库的备份数据传输到从库的对应位置进行保存。在对主库执行备份操作时,可以考虑主库的当前容量来选择使用何种方式进行备份,包括将备份保存在主库本地,或者,直接将备份保存到从库的对应位置,也就是即备即传。在实际应用中,可以在主库接收到备份指令后,先进行主库容量的查看,如果容量充足,则可以将主库的备份数据保存在主库本地,当备份完成后,再通过Rsync方式将主库的已完成的备份数据传到从库的对应位置进行保存。如果容量不足,那么就采取即备即传的方式,在执行备份操作时,直接将主库的备份数据传输到从库的对应位置进行保存(例如,利用xtrabackup工具对主库进行备份数据,并利用ssh命令将其传输到从库的对应位置进行保存)。此时可以循环判断将主库的备份数据传输到从库的对应位置的进程是否存在,若存在则不启动Rsync进程,以及在判断该进程不再存在后,确定备份已完成,可以执行后续的修改数据库配置文件的操作。
在步骤S52中,采用备份数据生成从库的实例对象。具体的,可通过创建从库的实例对象,在实例对象中对备份数据进行恢复的方式实现。在对备份数据进行恢复前,需保证从库的data和log目录为空,用从库的my.cnf进行恢复。恢复时可能也会将主库备份的binlog和my.cnf直接恢复到data目录下,可以清理掉。以mysql为例,可输入一下命令进行恢复:
mysqlbackup--defaults-file=/xxx/my.cnf--backup-dir=/xxx/
在步骤S53中,建立主库与从库的主从关系。配置主从关系,其意为在主库修改数据,从库的数据也发生改变,确保数据产品的稳定性。以mysql为例,创建主库与从库的同步信息文件。
例如,主库的ip:192.168.8.157,从库的ip:192.168.8.129。配置主从关系的步骤如下:
1、首先修改主库MySQL配置文件my.ini:
[mysqld]
log-bin=mysql-bin//启用二进制日志
server-id=1//服务器唯一ID,默认是1,
配置完成后重启MySQL服务。
2、授权给从库(slave)同步数据的账号密码
找到mysql安装路径,bin下面,cmd mysql-uroot-p123qwe//通过cmd进入mysql数据库,
执行sql语句
GRANT REPLICATION SLAVE ON*.*TO'root'@'192.168.8.129'
IDENTIFIED BY'123qwe';//给从库授权
GRANT REPLICATION SLAVE ON*.*TO'root'@'192.168.8.157'
IDENTIFIED BY'123qwe';//给主库授权
执行命令showmaster status\G,得到:
|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
|mysql-bin.000003|750|||
注意结果中的File和Position,配置从库(slave)时会用到。
3、修改从库MySQL配置文件my.ini
[mysqld]
log-bin=mysql-bin
server-id=2
4、设置连接主库(master)的信息
change masterto
master_host='192.168.8.157',master_user='root',master_port=3306,master_p
assword='123qwe',master_log_file='mysql-bin.000003',master_log_pos='75
0'。
参数说明:
master_host:master IP;
master_user:master数据库通过GRANT授权的账号;
master_port:master数据库使用的端口号;
master_password:master数据库通过GRANT授权的密码;
master_log_file:master数据库中通过show master status\G显示的File名称;
master_log_pos:master数据库中通过show master status\G显示的Position数据。
5、重启MySql服务。
执行命令:start slave。
执行命令:show slave status\G。
当Slave_IO_Running与Slave_SQL_Running都为Yes时才算配置成功。
此时,主库里的数据就能同步到从库中。
在步骤S54中,从上一次初始数据库备份的时间节点开启主库与从库的数据同步。获取主库和从库之间的主从同步信息,在启动从库之后,根据主从同步信息将主库的数据同步到从库中。
例如在利用xtrabackup工具来备份主库时,就可以将主库的IP、端口号、binlog、master_log_pos等信息输出到同步信息文件中,这样,在获取主库和从库之间的主从同步信息时,就可以从保存到从库的备份数据中查找出同步信息文件并从中获取到主库和从库之间的主从同步信息。
对于mysql数据库来说,在进行数据同步之前,可判断指定的同步信息文件中是否存在GTID,如果存在,则采用第一方式进行主从数据同步处理;如果不存在,则采用第二方式进行主从数据同步处理。GTID(G1obal Transaction Identification,全局事务身份标识符),是在mysql数据库5.6版本中新增的内容。在整个主从同步架构中每任何两个事务的GTID号都不会相同。因此在5.6版本的mysql数据库进行数据备份时,同步信息文件中就会包含GTID,而在5.5版本的mysql数据库进行数据备份时,同步信息文件中不包含GTID。因此在利用5.5版本的mysql主库进行从库恢复时,可以直接获取同步信息文件中的主从同步信息在从库中执行。而利用5.6版本的mysql主库进行从库恢复时,需要先利用获取到的GTID进行同步设置,再将同步信息中的其他主从同步信息在从库中执行。
在步骤S55中,将从库作为分库配置到业务应用中。该操作可选择夜间业务较少时间段进行。具体的,先停止应用,断开新增的从库,将从库作为新的分库配置到应用中。启动应用,这个过程如果协调的好,十分钟以内即可完成,相当于一次小的上线部署。测试数据库稳定无问题后,删除主库与分库中多余的表即可。
在步骤S2中,保持整个数据库的表数量不变进一步包括:
基于2的倍数对初始数据库进行扩容,扩容后形成2m个库;其中,m为主库的数量;
扩容前,m个主库共包括2n个数据表,每个主库包括
Figure BDA0002982364510000121
个数据表;扩容后,2m个库共包括2n个数据表,每个库包括
Figure BDA0002982364510000122
个数据表。
例如,初始数据库中有2个主库,共1024张数据表。假设2年后,用户量大增,2个库不足以支持大量用户的并发访问,此时就会考虑进行水平扩容。扩容一般考虑2的倍数,假设此次需从2个库扩容到4个库。
请看扩容前后的变化:
扩容前:
1库order_1,order_3,…order_1023 512张表
2库order_2,order_4,…order_1024 512张表
扩容后:
1库order_1,order_5,…order_1021 256张表
2库order_2,order_6,…order_1022 256张表
3库order_3,order_7,…order_1023 256张表
4库order_4,order_8,…order_1024 256张表
本实施例中的数据库水平扩容方法,针对分库分表的水平扩容,传统方法一般都需要进行数据迁移,需要停机,对于数据量巨大的系统,会使业务停止时间过长及容易出现数据混乱,从而导致用户体验感差甚至业务系统瘫痪的问题,通过在建立初始数据库时,一次性给足表数量,避免后期进行表扩容及表数据的重新分布;同时通过建立从库的方法初始化分库的表结构以及数据,经过短暂的停机将分库配置到业务应用中,实现扩容。整体上扩容的停机时间相当于一次小型发布的耗时,不影响业务,无数据迁移的风险,解决了现有技术中因分库分表扩容及数据迁移造成用户体验感差甚至业务系统瘫痪的问题。
实施例二
本实施例提供了一种数据库水平扩容装置,请参看图2,该数据库水平扩容装置包括:
表数量规划模块1,用于在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量;
扩容模块2,用于根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容,若需要扩容,则对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中,并保持整个数据库的表数量不变。
上述表数量规划模块1和扩容模块2的功能及实现方法均如上述实施例一中所述,在此不再赘述。
实施例三
上述实施例二从模块化功能实体的角度对本发明数据库水平扩容装置进行详细描述,下面从硬件处理的角度对本发明数据库水平扩容设备进行详细描述。
请参看图3,该数据库水平扩容设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据库水平扩容设备500中的一系列指令操作。
进一步地,处理器510可以设置为与存储介质530通信,在数据库水平扩容设备500上执行存储介质530中的一系列指令操作。
数据库水平扩容设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如Windows Serve、Vista等等。
本领域技术人员可以理解,图3示出的数据库水平扩容设备结构并不构成对数据库水平扩容设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质。该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行实施例一中的数据库水平扩容方法中的步骤。
实施例二中的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件的形式体现出来,该计算机软件存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-only memory,ROM)、随机存取存储器(Random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置及设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式。即使对本发明作出各种变化,倘若这些变化属于本发明权利要求及其等同技术的范围之内,则仍落入在本发明的保护范围之中。

Claims (10)

1.一种数据库水平扩容方法,其特征在于,包括:
在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量;
根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容,若需要扩容,则对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中,并保持整个数据库的表数量不变。
2.如权利要求1所述的数据库水平扩容方法,其特征在于,所述在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量进一步包括:
获取历史年业务量数据及相关业务影响因素;
分析历史年业务量数据与相关业务影响因素之间的相关性,得到相关系数;
根据相关系数对历史年业务量数据和相关业务影响因素进行筛选;
利用多元线性回归方法对筛选后的历史业务数据和相关业务影响因素进行数据拟合,对第i年的业务量数据进行预测;
统计i年内的业务总量。
3.如权利要求1所述的数据库水平扩容方法,其特征在于,所述根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量进一步包括:
预计数据表的数量=业务总量/每张数据表的业务量;
将预计数据表的数量与2的指数倍进行比较,当预计数据表的数量小于2n时,将2n作为初始数据库的表数量。
4.如权利要求1所述的数据库水平扩容方法,其特征在于,所述根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容进一步包括:
获取初始数据库的监控信息,统计初始数据库的查询及写入的并发量;
比较并发量与预设阈值的大小,若并发量大于预设阈值,则判定初始数据库需要扩容,发出扩容提示。
5.如权利要求1所述的数据库水平扩容方法,其特征在于,所述对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中进一步包括:
获取初始数据库实例对象的备份数据;
采用备份数据生成从库的实例对象;
建立主库与从库的主从关系;
从上一次初始数据库备份的时间节点开启主库与从库的数据同步;
将从库作为分库配置到业务应用中。
6.如权利要求5所述的数据库水平扩容方法,其特征在于,所述采用备份数据生成从库的实例对象进一步包括:
创建从库的实例对象,在实例对象中对备份数据进行恢复。
7.如权利要求1所述的数据库水平扩容方法,其特征在于,所述保持整个数据库的表数量不变进一步包括:
基于2的倍数对初始数据库进行扩容,扩容后形成2m个库;其中,m为主库的数量;
扩容前,m个主库共包括2n个数据表,每个主库包括
Figure FDA0002982364500000021
个数据表;扩容后,2m个库共包括2n个数据表,每个库包括
Figure FDA0002982364500000022
个数据表。
8.一种数据库水平扩容装置,其特征在于,包括:
表数量规划模块,用于在建立初始数据库时,根据企业历史年业务量,预测并统计若干年后的业务总量,根据业务总量,计算得到预计数据表的数量,基于预计数据表的数量,计算得到初始数据库的表数量;
扩容模块,用于根据对初始数据库的查询及写入的并发量,确定初始数据库是否需要扩容,若需要扩容,则对初始数据库中的主库添加从库,将从库作为分库配置到业务应用中,并保持整个数据库的表数量不变。
9.一种数据库水平扩容设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述处理器执行计算机可读指令时,实现如权利要求1至7中任意一项所述的数据库水平扩容方法。
10.一种计算机可读介质,存储计算机程序,其特征在于,所述计算机程序被一个或多个处理器执行时,实现如权利要求1至7中任意一项所述的数据库水平扩容方法。
CN202110290547.XA 2021-03-18 2021-03-18 数据库水平扩容方法、装置、设备和存储介质 Pending CN112965956A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110290547.XA CN112965956A (zh) 2021-03-18 2021-03-18 数据库水平扩容方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110290547.XA CN112965956A (zh) 2021-03-18 2021-03-18 数据库水平扩容方法、装置、设备和存储介质

Publications (1)

Publication Number Publication Date
CN112965956A true CN112965956A (zh) 2021-06-15

Family

ID=76279149

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110290547.XA Pending CN112965956A (zh) 2021-03-18 2021-03-18 数据库水平扩容方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN112965956A (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016091069A1 (zh) * 2014-12-12 2016-06-16 北京奇虎科技有限公司 一种数据操作方法及装置
WO2017045472A1 (zh) * 2015-09-16 2017-03-23 华为技术有限公司 资源预测方法、系统和容量管理装
WO2017097124A1 (zh) * 2015-12-07 2017-06-15 阿里巴巴集团控股有限公司 基于分库分表的任务传输方法、装置及系统
CN107563560A (zh) * 2017-09-07 2018-01-09 顺丰速运有限公司 一种业务量预测方法、装置、设备、存储介质
CN110489494A (zh) * 2019-08-27 2019-11-22 中国工商银行股份有限公司 分布式数据库在线扩容方法及装置
CN110858194A (zh) * 2018-08-16 2020-03-03 北京京东尚科信息技术有限公司 一种数据库扩容的方法和装置
CN110941602A (zh) * 2019-11-20 2020-03-31 中国建设银行股份有限公司 数据库的配置方法、装置、电子设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016091069A1 (zh) * 2014-12-12 2016-06-16 北京奇虎科技有限公司 一种数据操作方法及装置
WO2017045472A1 (zh) * 2015-09-16 2017-03-23 华为技术有限公司 资源预测方法、系统和容量管理装
WO2017097124A1 (zh) * 2015-12-07 2017-06-15 阿里巴巴集团控股有限公司 基于分库分表的任务传输方法、装置及系统
CN107563560A (zh) * 2017-09-07 2018-01-09 顺丰速运有限公司 一种业务量预测方法、装置、设备、存储介质
CN110858194A (zh) * 2018-08-16 2020-03-03 北京京东尚科信息技术有限公司 一种数据库扩容的方法和装置
CN110489494A (zh) * 2019-08-27 2019-11-22 中国工商银行股份有限公司 分布式数据库在线扩容方法及装置
CN110941602A (zh) * 2019-11-20 2020-03-31 中国建设银行股份有限公司 数据库的配置方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN105608086A (zh) 分布式数据库系统的事务处理方法及装置
US11301446B1 (en) System and method for interacting with a plurality of data sources
US9830372B2 (en) Scalable coordination aware static partitioning for database replication
US20130110873A1 (en) Method and system for data storage and management
Santos et al. Real-time data warehouse loading methodology
CN107209704A (zh) 检测丢失的写入
US20060190460A1 (en) Method and mechanism of handling reporting transactions in database systems
US11126641B2 (en) Optimized data distribution system
US7519636B2 (en) Key sequenced clustered I/O in a database management system
US11449550B2 (en) Ad-hoc graph definition
CN111708895A (zh) 一种知识图谱系统的构建方法及装置
US20170270149A1 (en) Database systems with re-ordered replicas and methods of accessing and backing up databases
US11625503B2 (en) Data integrity procedure
US20230409431A1 (en) Data replication with cross replication group references
US10503752B2 (en) Delta replication
Abdelhafiz Distributed database using sharding database architecture
Cohen et al. Online expansion of large-scale data warehouses
Chen et al. A performance evaluation of distributed database architectures
CN112965956A (zh) 数据库水平扩容方法、装置、设备和存储介质
US20190179930A1 (en) Optimistic concurrency control for database transactions
US10019472B2 (en) System and method for querying a distributed dwarf cube
US11301341B2 (en) Replication system takeover with handshake
CN114398334A (zh) 基于ZNBase集群的Prometheus远程存储方法及系统
US11232095B2 (en) Composite metadata objects for database systems
Mekterović et al. Delta view generation for incremental loading of large dimensions in a data warehouse

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