CN110019125B - 数据库管理的方法和装置 - Google Patents
数据库管理的方法和装置 Download PDFInfo
- Publication number
- CN110019125B CN110019125B CN201711202644.9A CN201711202644A CN110019125B CN 110019125 B CN110019125 B CN 110019125B CN 201711202644 A CN201711202644 A CN 201711202644A CN 110019125 B CN110019125 B CN 110019125B
- Authority
- CN
- China
- Prior art keywords
- database
- data
- expanded
- module
- service
- 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.)
- Active
Links
Images
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
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库管理的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:确定数据库需要扩容时,为待扩容的数据库分配分片组;所述分片组包括至少两个分片;以所述分片组作为新增的数据库;其中,待写入所述数据库的每条业务数据按照ID自增的方式进行编码;任意两个所述数据库的ID增量区间不重叠。该实施方式能够在不进行数据迁移的条件下实现数据库动态扩容,解决数据库扩容过程中单节点扩容、数据分配不均衡、以及数据热点等问题,扩容效率高、步骤简单、成本低。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据库管理的方法和装置。
背景技术
针对读写比较频繁的系统,在线上运行一段时间后,随着业务的发展、访问量的增加,数据量也越来越大。用于存取系统业务数据的数据库将会成为系统发展的瓶颈,包括数据存储的存储瓶颈和数据查询的性能瓶颈。面对这两个问题,通用的解决办法是进行数据库扩容,实现分表、分库。但在进行数据库扩容,实现分表、分库的过程中,通常需要进行数据迁移。数据迁移不仅耗费较大的人力成本,在迁移过程中还有可能影响数据的正确性。
现有技术中,避免扩容时进行数据迁移的主流解决方法是按照增量区间规划存储数据的数据库分片,每次扩容时新增一个用于存储数据的分片。随着时间推移,数据自动被写入到不同分片中。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
1)若不同时间段内业务数据的数据量不相同,会导致各个分片的数据量分配不均衡;
2)按照增量区间划分数据库分片会导致某一段时间内业务数据的读写都集中在某一个分片上,产生数据热点问题,影响系统性能;
3)每次扩容时仅扩容一个分片,针对数据量写入比较频繁的系统,由于一个分片的存储量有限,必须频繁进行扩容,产生单节点扩容问题。
发明内容
有鉴于此,本发明实施例提供一种数据库管理的方法和装置,能够在不进行数据迁移的条件下实现数据库动态扩容,解决数据库扩容过程中单节点扩容、数据分配不均衡、以及数据热点等问题,扩容效率高、步骤简单、成本低。
为实现上述目的,根据本发明实施例的一个方面,提供了一种数据库管理的方法,包括:
确定数据库需要扩容时,为待扩容的数据库分配分片组;所述分片组包括至少两个分片;
以所述分片组作为新增的数据库;
其中,待写入所述数据库的每条业务数据按照ID自增的方式进行编码;任意两个所述数据库的ID增量区间不重叠。
可选地,所述至少两个分片分别设置在不同的数据库服务器上。
可选地,每个所述分片包括至少一个数据表,用于存储所述业务数据;
所述分片组内的所有ID均匀映射至所述分片组的各个数据表。
可选地,按照如下步骤将所述分片组内的所有ID均匀映射至所述分片组的各个数据表:对于每个所述ID:
根据所述ID以及每个分片组的ID增量区间,确定所述ID对应的分片组;
根据所述ID对应的分片组的分片数量、以及每个分片的数据表数量,确定所述ID对应的分片组的数据表总数N;
将所述ID映射至所述ID对应的分片组的第i个数据表;其中,i为所述ID除以N的余数,0≤i≤N-1;ID和N为正整数。
可选地,为待扩容的数据库分配分片组之后,还包括:
获取所述待扩容的数据库的剩余容量;根据所述待扩容的数据库的剩余容量,配置所述待扩容的数据库和所述新增的数据库的状态信息;所述状态信息包括:可写入状态和不可写入状态;
在向所述数据库插入数据之前,确认所述数据库的状态信息为可写入状态;
其中,当所述待扩容的数据库的剩余容量大于预设容量阈值时,将所述待扩容的数据库的状态信息配置为可写入状态、将所述新增的数据库的状态信息配置为不可写入状态;当所述待扩容的数据库的剩余容量小于或等于预设容量阈值时,将所述待扩容的数据库的状态信息配置为不可写入状态、将所述新增的数据库的状态信息配置为可写入状态。
根据本发明实施例的再一个方面,提供一种数据库管理的装置,包括:配置系统;所述配置系统包括:
扩容模块,用于:确定数据库需要扩容时,为待扩容的数据库分配分片组;以所述分片组作为新增的数据库;其中,所述分片组包括至少两个分片;
配置模块,用于为所述数据库配置配置信息;其中,所述配置信息包括所述分片组的ID增量区间;待写入所述数据库的每条业务数据按照ID自增的方式进行编码,任意两个所述数据库的ID增量区间不重叠。
可选地,每个所述分片包括至少一个数据表,用于存储所述业务数据;
所述装置还包括:业务系统;所述业务系统包括路由模块,用于将所述分片组内的所有ID均匀映射至所述分片组的各个数据表。
可选地,所述配置模块还用于:为待扩容的数据库分配分片组之后,获取所述待扩容的数据库的剩余容量;根据所述待扩容的数据库的剩余容量,配置所述待扩容的数据库和所述新增的数据库的状态信息;所述状态信息包括:可写入状态和不可写入状态;
所述业务系统还用于:在向所述数据库插入数据之前,确认所述数据库的状态信息为可写入状态;
其中,当所述待扩容的数据库的剩余容量大于预设容量阈值时,将所述待扩容的数据库的状态信息配置为可写入状态、将所述新增的数据库的状态信息配置为不可写入状态;当所述待扩容的数据库的剩余容量小于或等于预设容量阈值时,将所述待扩容的数据库的状态信息配置为不可写入状态、将所述新增的数据库的状态信息配置为可写入状态。
可选地,所述业务系统还包括业务模块和驱动模块;所述业务模块用于从数据操作请求中解析出业务数据,并获取所述业务数据的ID;所述路由模块还用于根据所述ID和所述配置系统的配置信息,将所述操作请求路由至与所述ID对应的分片组的数据表;所述驱动模块用于在所述数据表中执行所述操作请求;其中,所述配置信息还包括:每个分片组的分片数量,以及每个分片的数据表数量、服务器IP和端口。
可选地,所述业务系统还包括:ID生成模块,用于当所述业务数据为待插入数据时,为所述业务数据生成ID。
可选地,本发明实施例的数据库管理的装置还包括:配置数据库;所述业务系统还包括:配置信息模块;所述配置系统还包括:通知模块;
所述配置模块将配置好的配置信息更新至所述配置数据库,并通过所述通知模块向所述配置信息模块发送配置信息变更的通知;所述配置信息模块基于所述通知从所述配置数据库加载所述配置好的配置信息。
可选地,本发明实施例的数据库管理的装置还包括:数据库集群,以提供用于存储所述业务数据的数据库服务器,每台数据库服务器上包含一个或多个所述分片。
根据本发明实施例的另一个方面,提供一种数据库动态扩容的终端,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一个方面提供的数据库管理的方法。
根据本发明实施例的还一个方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一个方面提供的数据库管理的方法。
上述发明中的一个实施例具有如下优点或有益效果:通过以ID增量区间划分数据库的存储范围,当进行数据库服务器扩容时,无需进行数据迁移,极大的降低了研发成本和扩容复杂度;且可以通过配置的方式实现数据库扩容,配置后立即生效,无需停止业务修改代码,实现动态扩容。通过以分片组为单位进行扩容,能够避免频繁扩容,解决单节点扩容问题。通过将分片组内的所有ID均匀映射至分片组的各个数据表,能够避免各个分片的数据量分配不均匀以及数据热点问题。本发明实施例的数据库动态扩容方法,扩容效率高、步骤简单、成本低。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明一些实施例的数据库管理的方法的主要流程的示意图;
图2是基于本发明另一些实施例的数据库管理的方法的主要流程的示意图;
图3是根据本发明一些实施例的数据库管理的装置的主要模块的示意图;
图4是根据本发明另一些实施例的数据库管理的装置的主要模块的示意图;
图5是本发明实施例可以应用于其中的示例性系统架构图;
图6是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明一些实施例的数据库管理的方法的主要流程的示意图,如图1所示,数据库管理的方法包括:
S101、确定数据库需要扩容时,为待扩容的数据库分配分片组;分片组包括至少两个分片;
S102、以分片组作为新增的数据库。
本发明实施例中的ID(Identity)是指每条业务数据的编号,待写入数据库的每条业务数据按照ID自增的方式进行编码,ID从小到大增加且全局唯一。例如,每向数据库中新增一条业务数据时,对应的ID就加1,以确保ID是增量增加且不重复的。任意两个数据库的ID增量区间不重叠,例如,ID增量区间为1-10000的数据存储在数据库A中,ID增量区间为10001-30000的数据存储在在数据库B中,等等。通过以ID增量区间划分数据库的存储范围,当进行数据库服务器扩容时,无需进行数据迁移,极大的降低了研发成本和扩容复杂度;且可以通过配置的方式实现数据库扩容,配置后立即生效,无需在扩容时停止业务修改代码,实现动态扩容。
分片(sharding)是数据库分区的一种,它将大型数据库分成更小、更快、更容易管理的部分,每个分片相当于一个数据库节点。现有技术在进行数据库扩容时,往往采用单节点扩容的方式,即每次扩容时仅扩容一个分片。这种扩容方式会导致单节点扩容问题,比如:由于每个分片的容量有限,单次无法实现大容量扩容,当待存储的数据量较大时,需要频繁扩容;若每次扩容时采用容量较大的分片,当该分片内存储的数据较多时,会降低该分片内的数据读取速度,影响数据存储性能。本发明实施例中,每个分片组包括至少两个分片,通过以分片组为单位进行扩容,能够避免频繁扩容,解决单节点扩容问题。例如,一个分片的容量为5G,单节点扩容时每次只能扩容5G,当数据存储量较大时,需要频繁扩容,产生单节点扩容问题。若每次扩容5个分片,则每次可以扩容5×5G=25G,大大减少扩容次数,避免频繁扩容。通过适当设置每个分片的容量并选择合适的分片数量,能够在满足扩容需求的基础上提高每个分片的数据读取速度,进而提高数据存储性能。
在以ID自增的方式进行对待写入数据库的业务数据进行编码时,对于不同业务类型的数据,可以不根据各条业务数据插入数据库的时间顺序进行ID编码,而是以各个业务数据的业务类型为维度,分别以ID自增的方式进行编码,各个类型的ID之间以业务类型的标识进行区别。例如,在将业务类型A的业务数据和业务类型B的业务数据插入数据库时,对业务类型A的各条业务数据按照ID自增的方式从1开始进行编码,对业务类型B的各条业务数据也按照ID自增的方式从1开始进行编码,在数据库中分别对应设置业务类型A的业务标识Bussiness_A和业务类型B的业务标识Bussiness_B。对于不同业务类型的数据,以各个业务数据的业务类型为维度分别以ID自增的方式进行编码、各个类型的ID之间以业务类型的标识进行区别,便于进行数据查询和处理。
当某一数据库服务器出现故障时,该数据库服务器上的所有分片无法使用。基于上述情况,可以将分片组包括的至少两个分片分别设置在不同的数据库服务器上。例如,某一分片组包括3个分片,这3个分片分别设置在3个不同的数据库服务器上。每个数据库服务器上相同业务类型的分片最好只部署一个。如此,当一个数据库服务器故障时,其他数据库服务器上该业务类型的分片可以继续使用,从而避免由于数据库服务器故障导致的该业务类型的数据无法插入的技术问题。
若一个数据库服务器上只部署一个分片,会造成数据库服务器资源浪费,为此,对于不同业务类型的分片,可以部署在同一个数据库服务器上,从而交叉协作,提高数据库服务器的使用效率。例如,采用本发明实施例的数据库扩容方法对业务类型A的数据库进行扩容得到3个分片,3个分片分别存储在数据库服务器S1、数据库服务器S2和数据库服务器S3上;若采用本发明实施例的数据库扩容方法对业务类型B的数据库进行扩容得到3个分片,为了提高数据库服务器S1、数据库服务器S2和数据库服务器S3的使用效率,可以将与业务类型B对应的3个分片分别设置在数据库服务器S1、数据库服务器S2和数据库服务器S3上。
每个分片包括至少一个数据表,用于存储业务数据。在一些实施例中,分片组内的所有ID均匀映射至该分片组的各个数据表,从而能够避免各个分片的数据量分配不均匀以及数据热点问题。可选地,按照如下步骤将分片组内的所有ID均匀映射至该分片组的各个数据表:对于每个ID:
根据ID以及每个分片组的ID增量区间,确定该ID对应的分片组;
根据该ID对应的分片组的分片数量、以及每个分片的数据表数量,确定该ID对应的分片组的数据表总数N;
将该ID映射至该ID对应的分片组的第i个数据表;其中,i为该ID除以N的余数,0≤i≤N-1;ID和N为正整数。
以下以一个具体实施例示出数据库扩容的可选步骤:
初始化集群的配置信息如下:
初始化集群中,只有一个分片组ShardGroup_0,该分片组中有2个数据库分片shard_0和shard_1,分片组ShardGroup_0中共6个数据表,其中,分片shard_0中存储业务类型A的业务数据的数据表有3个,分别为:Table_0、Table_1、Table_2,分片shard_1中存储业务类型A的业务数据的数据表有3个,分别为:Table_0、Table_1、Table_2。当插入一条业务数据的ID=5时,这个ID属于1~60000000范围内,所以该业务数据应该存储在ShardGroup_0内,分片组内有6张数据表存储该业务类型的业务数据,然后将ID与6取模(ID除以6所得的余数为模)运算得到值为5,所以将ID=5的这一条数据存储在分片shard_1的Table_2表中。
当发现数据库容量不足时进行扩容,扩容后的集群配置如下表所示:
本次扩容了一个分片组ShardGroup_1,每个分片组中有3个数据库分片,每个分片中存储业务类型A的业务数据的数据表有3个,分别为shard_2、shard_3和shard_4,共9个表。当插入一条业务数据的ID=60000005时。这个ID=60000005属于60000001~150000000范围内,所以该业务数据应该存储在分片组ShardGroup_1的分片上,该分片组内有9张表存储该业务数据,然后将ID与9取模(ID除以9所得的余数为模)运算得到值为2,所以将ID=60000005的业务数据存储在分片shard_2的数据表Table_2中。
为待扩容的数据库分配分片组之后,还可以包括:
获取待扩容的数据库的剩余容量;根据待扩容的数据库的剩余容量,配置待扩容的数据库和新增的数据库的状态信息;状态信息包括:可写入状态和不可写入状态;
在向数据库插入数据之前,确认数据库的状态信息为可写入状态;
其中,当待扩容的数据库的剩余容量大于预设容量阈值时,将待扩容的数据库的状态信息配置为可写入状态、将新增的数据库的状态信息配置为不可写入状态;当待扩容的数据库的剩余容量小于或等于预设容量阈值时,将待扩容的数据库的状态信息配置为不可写入状态、将新增的数据库的状态信息配置为可写入状态。
根据待扩容的数据库的剩余容量配置待扩容的数据库和新增的数据库的状态信息,能够提前进行数据库扩容,从而在扩容后、使用新增数据库之前提供缓冲时间,防止由于将新增的数据库直接投入使用导致的隐患。
进一步地,可以按照如下方式配置待扩容的数据库和新增的数据库的状态信息:
实时监控第M个分片组的剩余容量,当第M个分片组的剩余容量小于或等于第一容量阈值(例如20%)时,判定第M个分片组需要扩容;
以分片组为单位对第M个分片组进行扩容得到第M+1个分片组,作为备用的新增数据库;此时,第M个分片组的状态信息为可写入状态,第M+1个分片组的状态信息为不可写入状态,即:向数据库插入数据时,将待插入数据插入第M个分片组;
随着插入数据的增加,第M个分片组的剩余容量越来越小,当第M个分片组的剩余容量小于或等于第二容量阈值(即预设容量阈值,例如10%)时,第M个分片组的状态信息为不可写入状态,第M+1个分片组为可写入状态,即:向数据库插入数据时,将待插入数据插入第M+1个分片组。
一般情况下,第一容量阈值和第二容量阈值的取值可以根据应用场景的实际情况进行设置,第一容量阈值大于第二容量阈值。
当然,本领域技术人员也可以按照如下方式配置待扩容的数据库和新增的数据库的状态信息:
实时监控第M个分片组的剩余容量,当第M个分片组的剩余容量小于或等于第三容量阈值(例如20%)时,判定第M个分片组需要扩容;
以分片组为单位对第M个分片组进行扩容得到第M+1个分片组,作为备用的新增数据库;此时,第M个分片组的状态信息为可写入状态,第M+1个分片组的状态信息为不可写入状态,即:向数据库插入数据时,将待插入数据插入第M个分片组;
随着插入数据的增加,第M个分片组的剩余容量越来越小。扩容得到第M+1个分片组之后,经过预设时长(例如10小时),将第M个分片组的状态信息配置为不可写入状态,第M+1个分片组配置为可写入状态,即:向数据库插入数据时,将待插入数据插入第M+1个分片组。
图2是基于本发明另一些实施例的数据库管理的方法的主要流程的示意图。如图2所示,数据库管理的方法包括:
从数据操作请求中解析业务数据;
判断该业务数据是否是插入数据:
若该业务数据是插入数据,则为业务数据生成ID;根据ID和配置信息(配置信息包括每个分片组的ID增量区间和分片组信息)获取该业务数据的分片组信息(分片组信息包括分片数量、以及每个分片的数据表数量);判断该分片组是否可写入:若该分片组不可写入,则记录数据写入错误日志;否则进入下一步;
若该业务数据不是插入数据,获取该业务数据的ID;根据ID和配置信息获取该业务数据的分片组信息;
根据ID和分片组信息,计算用于存储业务数据的数据表的编号;
数据表的编号加载对应数据库服务器(本实施例中,分片设置在数据库服务器上)的链接,例如指向数据表所在数据库服务器的IP、端口和数据库名;
向该数据库服务器发送数据操作请求;
数据库服务器接收请求、处理数据操作并返回处理结果。
本发明实施例还提供了实现上述数据库管理的方法的装置。图3是根据本发明一些实施例的数据库管理的装置的主要模块的示意图,如图3所示,数据库管理的装置300包括:配置系统。该配置系统包括:
扩容模块301,用于:确定数据库需要扩容时,为待扩容的数据库分配分片组;以该分片组作为新增的数据库;其中,分片组包括至少两个分片;
配置模块302,用于为数据库配置配置信息;其中,配置信息包括分片组的ID增量区间;待写入数据库的每条业务数据按照ID自增的方式进行编码,任意两个数据库的ID增量区间不重叠。
每个分片可以包括至少一个数据表,用于存储业务数据。本发明实施例的数据库管理的装置还可以包括:业务系统。该业务系统包括路由模块303,用于将分片组内的所有ID均匀映射至分片组的各个数据表。通过将分片组内的所有ID均匀映射至分片组的各个数据表,能够避免各个分片的数据量分配不均匀以及数据热点问题。
配置模块还可以用于:为待扩容的数据库分配分片组之后,获取待扩容的数据库的剩余容量;根据待扩容的数据库的剩余容量,配置待扩容的数据库和新增的数据库的状态信息;状态信息包括:可写入状态和不可写入状态;
业务系统还可以用于:在向数据库插入数据之前,确认数据库的状态信息为可写入状态;
其中,当待扩容的数据库的剩余容量大于预设容量阈值时,将待扩容的数据库的状态信息配置为可写入状态、将新增的数据库的状态信息配置为不可写入状态;当待扩容的数据库的剩余容量小于或等于预设容量阈值时,将待扩容的数据库的状态信息配置为不可写入状态、将新增的数据库的状态信息配置为可写入状态。
根据待扩容的数据库的剩余容量配置待扩容的数据库和新增的数据库的状态信息,能够提前进行数据库扩容,从而在扩容后、使用新增数据库之前提供缓冲时间,防止由于将新增的数据库直接投入使用导致的隐患。
业务系统还可以包括业务模块和驱动模块;业务模块用于从数据操作请求中解析出业务数据,并获取业务数据的ID;路由模块还可以用于根据ID和配置系统的配置信息,将操作请求路由至与ID对应的分片组的数据表;驱动模块用于在数据表中执行操作请求其中,配置信息还包括:每个分片组的分片数量,以及每个分片的数据表数量、服务器IP和端口。
业务系统还可以包括:ID生成模块,用于当业务数据为待插入数据时,为业务数据生成ID。
本发明实施例的数据库管理的装置还可以包括:配置数据库;业务系统还可以包括:配置信息模块;配置系统还可以包括:通知模块;
配置模块将配置好的配置信息更新至配置数据库,并通过通知模块向配置信息模块发送配置信息变更的通知;配置信息模块基于该通知从配置数据库加载配置好的配置信息。
本发明实施例的数据库管理的装置还可以包括:数据库集群,以提供用于存储业务数据的数据库服务器,每台数据库服务器上包含一个或多个分片。
图4是根据本发明另一些实施例的数据库管理的装置的主要模块的示意图,如图4所示,数据库管理的装置400包括:业务系统401、配置系统402、数据库集群403和配置数据库404。业务系统401包括:业务模块、路由模块、ID生成模块、配置信息模块和驱动模块。该配置系统402包括:管理模块(包括扩容模块和配置模块)和通知模块。
以下以数据读写为例说明本发明实施例的数据库管理的装置的主要工作流程:
确定数据库需要数据库扩容时,配置系统的扩容模块为待扩容的数据库分配分片组,以该分片组作为新增的数据库;其中,分片组包括至少两个分片。分配好分片组之后,配置系统的配置模块为数据库配置配置信息,将配置好的配置信息存入配置数据库404,并调用通知模块通知业务系统401的配置信息模块。业务系统401的配置信息模块根据该通知从配置数据库404加载配置好的配置信息。其中,配置信息包括分片组名、分片组的ID增量区间、是否可写入、分片数量、每个分片的服务器IP、端口、数据库名、数据表的编码、登录用户名和密码等信息。本实施例中,扩容前,数据库集群中只有一个分片组ShardGroup_0,该分片组中有2个数据库分片shard_0和shard_1,分片组ShardGroup_0中共6个数据表,其中,分片shard_0中存储业务类型A的业务数据的数据表有3个,分别为:Table_0、Table_1、Table_2,分片shard_1中存储业务类型A的业务数据的数据表有3个,分别为:Table_0、Table_1、Table_2。进行数据库扩容时,扩容了一个分片组ShardGroup_1,该分片组中有3个数据库分片shard_2、shard_3和shard_4,每个分片中存储业务类型A的业务数据的数据表有3个,共9个表。
接收到数据操作请求时,业务系统401的业务模块从数据操作请求中解析业务数据;
业务系统401的路由模块判断该业务数据是否是插入数据:若该业务数据是插入数据,则调用ID生成模块为该业务数据生成ID;若该业务数据不是插入数据,获取该业务数据的ID。
业务系统401的路由模块从配置信息模块获取配置信息,根据ID和配置信息计算用于存储业务数据的数据表的编号。
业务系统401的路由模块调用驱动模块建立与ID对应的数据表所在服务器的链接,实现业务数据的读写。
根据本发明实施例的另一个方面,提供一种数据库动态扩容的终端,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一个方面提供的数据库管理的方法。
根据本发明实施例的还一个方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一个方面提供的数据库管理的方法。
图5示出了可以应用本发明实施例的数据库管理的方法或数据库管理的装置的示例性系统架构500。
如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的数据库管理的方法一般由服务器X05执行,相应地,数据库管理的装置一般设置于服务器505中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本发明实施例的终端设备的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括发送模块、获取单元、确定模块和第一处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,发送模块还可以被描述为“向所连接的服务端发送图片获取请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:确定数据库需要扩容时,为待扩容的数据库分配分片组;分片组包括至少两个分片;以分片组作为新增的数据库;其中,待写入数据库的每条业务数据按照ID自增的方式进行编码;任意两个数据库的ID增量区间不重叠。
根据本发明实施例的技术方案,具有如下优点或有益效果:通过以ID增量区间划分数据库的存储范围,当进行数据库服务器扩容时,无需进行数据迁移,极大的降低了研发成本和扩容复杂度;且可以通过配置的方式实现数据库扩容,配置后立即生效,无需停止业务修改代码,实现进行动态扩容。通过以分片组为单位进行扩容,能够避免频繁扩容,解决单节点扩容问题。通过将分片组内的所有ID均匀映射至分片组的各个数据表,能够避免各个分片的数据量分配不均匀以及数据热点问题。本发明实施例的数据库动态扩容方法,扩容效率高、步骤简单、成本低。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (12)
1.一种数据库管理的方法,其特征在于,包括:
确定数据库需要扩容时,为待扩容的数据库分配分片组;所述分片组包括至少两个分片;所述至少两个分片分别设置在不同的数据库服务器上;
以所述分片组作为新增的数据库;
其中,以各个业务数据的业务类型为维度,待写入所述数据库的每条业务数据按照ID自增的方式进行编码;任意两个所述数据库的ID增量区间不重叠;
每个所述分片包括至少一个数据表,用于存储所述业务数据;所述分片组内的所有ID均匀映射至所述分片组的各个数据表。
2.如权利要求1所述的方法,其特征在于,所述至少两个分片分别设置在不同的数据库服务器上。
3.如权利要求1所述的方法,其特征在于,按照如下步骤将所述分片组内的所有ID均匀映射至所述分片组的各个数据表:对于每个所述ID:
根据所述ID以及每个分片组的ID增量区间,确定所述ID对应的分片组;
根据所述ID对应的分片组的分片数量、以及每个分片的数据表数量,确定所述ID对应的分片组的数据表总数N;
将所述ID映射至所述ID对应的分片组的第i个数据表;其中,i为所述ID除以N的余数,0≤i≤N-1;ID和N为正整数。
4.如权利要求1所述的方法,其特征在于,为待扩容的数据库分配分片组之后,还包括:
获取所述待扩容的数据库的剩余容量;根据所述待扩容的数据库的剩余容量,配置所述待扩容的数据库和所述新增的数据库的状态信息;所述状态信息包括:可写入状态和不可写入状态;
在向所述数据库插入数据之前,确认所述数据库的状态信息为可写入状态;
其中,当所述待扩容的数据库的剩余容量大于预设容量阈值时,将所述待扩容的数据库的状态信息配置为可写入状态、将所述新增的数据库的状态信息配置为不可写入状态;当所述待扩容的数据库的剩余容量小于或等于预设容量阈值时,将所述待扩容的数据库的状态信息配置为不可写入状态、将所述新增的数据库的状态信息配置为可写入状态。
5.一种数据库管理的装置,其特征在于,包括:配置系统;所述配置系统包括:
扩容模块,用于:确定数据库需要扩容时,为待扩容的数据库分配分片组;以所述分片组作为新增的数据库;其中,所述分片组包括至少两个分片;所述至少两个分片分别设置在不同的数据库服务器上;
配置模块,用于为所述数据库配置配置信息;其中,所述配置信息包括所述分片组的ID增量区间;以各个业务数据的业务类型为维度,待写入所述数据库的每条业务数据按照ID自增的方式进行编码,任意两个所述数据库的ID增量区间不重叠;
每个所述分片包括至少一个数据表,用于存储所述业务数据;
所述装置还包括:业务系统;所述业务系统包括路由模块,用于将所述分片组内的所有ID均匀映射至所述分片组的各个数据表。
6.如权利要求5所述的装置,其特征在于,所述配置模块还用于:为待扩容的数据库分配分片组之后,获取所述待扩容的数据库的剩余容量;根据所述待扩容的数据库的剩余容量,配置所述待扩容的数据库和所述新增的数据库的状态信息;所述状态信息包括:可写入状态和不可写入状态;
所述业务系统还用于:在向所述数据库插入数据之前,确认所述数据库的状态信息为可写入状态;
其中,当所述待扩容的数据库的剩余容量大于预设容量阈值时,将所述待扩容的数据库的状态信息配置为可写入状态、将所述新增的数据库的状态信息配置为不可写入状态;当所述待扩容的数据库的剩余容量小于或等于预设容量阈值时,将所述待扩容的数据库的状态信息配置为不可写入状态、将所述新增的数据库的状态信息配置为可写入状态。
7.如权利要求5所述的装置,其特征在于,所述业务系统还包括业务模块和驱动模块;所述业务模块用于从数据操作请求中解析出业务数据,并获取所述业务数据的ID;所述路由模块还用于根据所述ID和所述配置系统的配置信息,将所述操作请求路由至与所述ID对应的分片组的数据表;所述驱动模块用于在所述数据表中执行所述操作请求;其中,所述配置信息还包括:每个分片组的分片数量,以及每个分片的数据表数量、服务器IP和端口。
8.如权利要求7所述的装置,其特征在于,所述业务系统还包括:ID生成模块,用于当所述业务数据为待插入数据时,为所述业务数据生成ID。
9.如权利要求7所述的装置,其特征在于,还包括:配置数据库;所述业务系统还包括:配置信息模块;所述配置系统还包括:通知模块;
所述配置模块将配置好的配置信息更新至所述配置数据库,并通过所述通知模块向所述配置信息模块发送配置信息变更的通知;所述配置信息模块基于所述通知从所述配置数据库加载所述配置好的配置信息。
10.如权利要求7所述的装置,其特征在于,还包括:数据库集群,以提供用于存储所述业务数据的数据库服务器,每台数据库服务器上包含一个或多个所述分片。
11.一种数据库动态扩容的终端,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-4中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711202644.9A CN110019125B (zh) | 2017-11-27 | 2017-11-27 | 数据库管理的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711202644.9A CN110019125B (zh) | 2017-11-27 | 2017-11-27 | 数据库管理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019125A CN110019125A (zh) | 2019-07-16 |
CN110019125B true CN110019125B (zh) | 2021-12-14 |
Family
ID=67186620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711202644.9A Active CN110019125B (zh) | 2017-11-27 | 2017-11-27 | 数据库管理的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019125B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110445846A (zh) * | 2019-07-18 | 2019-11-12 | 福建星网智慧软件有限公司 | 一种智能充电桩与管理平台判断重复通信的方法及系统 |
CN110532243A (zh) * | 2019-08-20 | 2019-12-03 | 上海艾融软件股份有限公司 | 数据处理方法、装置和电子设备 |
CN111400273B (zh) * | 2019-11-19 | 2024-02-02 | 杭州海康威视系统技术有限公司 | 数据库扩容方法、装置、电子设备及机器可读存储介质 |
CN112835887A (zh) * | 2019-11-25 | 2021-05-25 | 航天信息股份有限公司 | 数据库管理方法、装置、计算设备和存储介质 |
CN110727738B (zh) * | 2019-12-19 | 2020-08-07 | 北京江融信科技有限公司 | 基于数据分片的全局路由系统、电子设备及存储介质 |
CN110968647A (zh) * | 2019-12-23 | 2020-04-07 | 广东电力交易中心有限责任公司 | 数据存储方法、装置、计算机设备和存储介质 |
CN111538718B (zh) * | 2020-04-22 | 2023-10-27 | 杭州宇为科技有限公司 | 分布式系统的实体id生成和定位方法、扩容方法及设备 |
CN111600799B (zh) * | 2020-05-20 | 2022-05-20 | 金蝶蝶金云计算有限公司 | 分片路由方法、服务器及计算机存储介质 |
CN113419859A (zh) * | 2021-06-30 | 2021-09-21 | 中国银行股份有限公司 | 主机作业均衡调度处理的方法及装置 |
CN113486023A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 数据库分库分表的方法及装置 |
CN114491197B (zh) * | 2022-04-18 | 2022-07-22 | 孔智科技(徐州)有限公司 | 一种基于大数据的数据库扩展方法和装置 |
CN115577148A (zh) * | 2022-12-08 | 2023-01-06 | 平安银行股份有限公司 | 批量数据处理方法、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095417A (zh) * | 2015-07-13 | 2015-11-25 | 小米科技有限责任公司 | 存储业务数据的方法、装置及数据库节点 |
CN106254470A (zh) * | 2016-08-08 | 2016-12-21 | 广州唯品会信息科技有限公司 | 分布式作业分片分配方法和装置 |
CN106775470A (zh) * | 2016-12-08 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种数据存储的方法及系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6978262B2 (en) * | 1999-01-05 | 2005-12-20 | Tsai Daniel E | Distributed database schema |
JP4700459B2 (ja) * | 2005-09-27 | 2011-06-15 | 株式会社日立製作所 | データ処理システム及びデータ管理方法並びにストレージシステム |
CN104252457B (zh) * | 2013-06-25 | 2018-11-23 | 北京百度网讯科技有限公司 | 一种用于对数据集合进行管理的方法与设备 |
CN103810265B (zh) * | 2014-01-27 | 2017-04-26 | 南京邮电大学 | 基于WiMAX本地路由下的数据库优化方法 |
CN104978232A (zh) * | 2014-04-09 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 用于实时流式计算的计算资源扩容、释放方法及其装置 |
CN104615657A (zh) * | 2014-12-31 | 2015-05-13 | 天津南大通用数据技术股份有限公司 | 一种节点支持多数据分片的分布式集群的扩容和缩容方法 |
CN106557427B (zh) * | 2015-09-25 | 2021-11-12 | 中兴通讯股份有限公司 | 共享内存数据库的内存管理方法及装置 |
CN106503058B (zh) * | 2016-09-27 | 2019-01-18 | 华为技术有限公司 | 一种数据加载方法、终端和计算集群 |
CN106844510B (zh) * | 2016-12-28 | 2021-01-15 | 北京五八信息技术有限公司 | 一种分布式数据库集群的数据迁移方法和装置 |
CN107368260A (zh) * | 2017-06-30 | 2017-11-21 | 北京奇虎科技有限公司 | 基于分布式系统的存储空间整理方法、装置及系统 |
-
2017
- 2017-11-27 CN CN201711202644.9A patent/CN110019125B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095417A (zh) * | 2015-07-13 | 2015-11-25 | 小米科技有限责任公司 | 存储业务数据的方法、装置及数据库节点 |
CN106254470A (zh) * | 2016-08-08 | 2016-12-21 | 广州唯品会信息科技有限公司 | 分布式作业分片分配方法和装置 |
CN106775470A (zh) * | 2016-12-08 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种数据存储的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110019125A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110019125B (zh) | 数据库管理的方法和装置 | |
CN113495921A (zh) | 一种数据库集群的路由方法和装置 | |
CN110727738B (zh) | 基于数据分片的全局路由系统、电子设备及存储介质 | |
CN105227489A (zh) | 一种带宽管理方法及电子设备 | |
CN111478781B (zh) | 一种消息广播的方法和装置 | |
CN105490843A (zh) | 一种信息处理方法及系统 | |
US20190384514A1 (en) | Storage management method, electronic device and computer program product | |
CN104468594A (zh) | 一种数据请求的方法、装置及系统 | |
CN106156044B (zh) | 数据库切换方法及装置 | |
CN109144991B (zh) | 动态分表的方法、装置、电子设备和计算机可存储介质 | |
CN112596897A (zh) | 一种用于多租户隔离的方法及系统 | |
CN113704245A (zh) | 一种数据库主键生成方法、分表定位方法和装置 | |
CN113541987A (zh) | 一种更新配置数据的方法和装置 | |
CN108810130B (zh) | 一种分配请求规划的方法和装置 | |
CN110347654B (zh) | 一种上线集群特性的方法和装置 | |
CN110798358A (zh) | 分布式服务标识方法、装置、计算机可读介质及电子设备 | |
CN111191256B (zh) | 用户权限配置的方法和装置 | |
US10712959B2 (en) | Method, device and computer program product for storing data | |
CN112506583A (zh) | 一种实例控制方法、装置、设备、存储介质以及程序产品 | |
CN108683608B (zh) | 分配流量的方法和装置 | |
CN109213815B (zh) | 控制执行次数的方法、装置、服务器终端以及可读介质 | |
CN110935168A (zh) | 用于全球同服架构的分布式id生成方法、装置及设备 | |
CN112711572A (zh) | 适用于分库分表的在线扩容方法和装置 | |
CN107454021B (zh) | 一种通信方法及装置 | |
CN112711588A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |