CN103324732A - Mysql数据库水平切分方法、mysql连接建立方法及装置 - Google Patents
Mysql数据库水平切分方法、mysql连接建立方法及装置 Download PDFInfo
- Publication number
- CN103324732A CN103324732A CN2013102668766A CN201310266876A CN103324732A CN 103324732 A CN103324732 A CN 103324732A CN 2013102668766 A CN2013102668766 A CN 2013102668766A CN 201310266876 A CN201310266876 A CN 201310266876A CN 103324732 A CN103324732 A CN 103324732A
- Authority
- CN
- China
- Prior art keywords
- data
- database
- mysql
- scope
- new
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种MYSQL数据库水平切分方法,包括:基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围的最小边界值,以及Max(n)是第n个数据库的数据ID范围的最大边界值;以及根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中。利用该方法,可以实现对MYSQL数据库的灵活切分和迁移,提高扩展性。
Description
技术领域
本发明涉及MYSQL数据存储领域,更为具体地,涉及MYSQL数据库水平切换方法、MYSQL连接建立方法及装置。
背景技术
随着MYSQL存储的数据越来越大,导致一个MYSQL数据库无法存储所有数据,因而数据必然会被存储在若干个MYSQL数据库中,由此需要进行数据库切分(sharding)。
数据库切分方法主要包含两种:垂直切分和水平切分。直切分是指将数据库中的不同列切分出来,然后分别存储到不同的MYSQL数据库中。水平切分是指将数据库中的不同行切分出来,然后分别存储到不同的数据库中。由于垂直切分不具有良好的扩展性,所以在进行MYSQL数据库切分时,通常采用水平切分。
目前比较有代表性的开源水平切分MYSQL方案是Amoeba和hiveDB。在这两种方案中都自建MYSQL代理。所有对MYSQL的访问都需要通过自建的MYSQL代理进行。它们的优点是切分对于应用程序是透明的,但是缺点是由于建立了MYSQL代理,对于SQL语句的支持有限。
为了支持所有MYSQL,在进行水平切分时,需要在应用程序内部写死切分规则。这样,由于客户端程序直连MYSQL,所以支持所有MYSQL的SQL语句。但是,在这种情况下,由于客户端切分规则被写死,在对MYSQL数据库进行再切分时,需要更改所有的客户端切分规则,从而使得几乎无法对MYSQL数据库进行再切分。
此外,无论采用带分派规则的MYSQL代理方案还是客户端分派方案,都会导致数据迁移困难。并且,在迁移过程中,需要停止整个数据库集群的服务,对业务影响较大。
发明内容
鉴于上述,本发明提出了一种MYSQL数据库水平切分方法及装置,该方法及装置能够实现对MYSQL数据库的灵活切分以及迁移,具有良好的扩展性以及防灾性。
本发明还提出了一种MYSQL连接建立方法及装置,该方法及装置能够利用下载到本地的数据路由表和数据库连接信息表,建立MYSQL连接。
根据本发明的一个方面,提供了一种MYSQL数据库水平切分方法,包括:基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围的最小边界值,以及Max(n)是第n个数据库的数据ID范围的最大边界值;以及根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中,其中,所述预定的数据ID范围分配策略包括使得Min(1)小于等于要存储的MYSQL数据中的最小数据ID,MAX(N)大于等于要存储的MYSQL数据中的最大数据ID,Min(n+1)=Max(n)+1,Max(n+1)=Min(n+2)-1。
在上述方面的一个或多个示例中,所述MYSQL数据库切分方法还可以包括:基于所述数据库的标识符以及为各个数据库分配的数据ID范围,生成数据路由表。
在上述方面的一个或多个示例中,所述MYSQL数据库切分方法还可以包括:将数据库连接信息表以及数据路由表存储在路由服务器中,所述数据库连接信息表包括所有数据库的连接信息。
在上述方面的一个或多个示例中,所述MYSQL数据库切分方法还可以包括:在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;以及将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库。
在上述方面的一个或多个示例中,所述MYSQL数据库切分方法还可以包括:在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;利用分配给所选择的数据库以及所述新数据库的数据ID范围以及对应数据库的标识符,更新所述数据路由表;将所选择的数据库的路由置为无效;将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库;以及将更新后的数据路由表中的所选择的数据库和新数据库的路由置为有效。
根据本发明的另一方面,提供了一种MYSQL连接建立方法,包括:在如上所述进行MYSQL数据水平切分且接收到访问具有特定数据ID的数据的请求后,利用从路由服务器中获取的数据路由表,确定该特定数据ID所在的数据库;以及利用数据库连接信息表中的所确定出的数据库的连接信息,建立与所确定出的数据库之间的连接。
在上述方面的一个或多个示例中,所述MYSQL连接建立方法还可以包括:监听所述路由服务器中的数据路由表和/或数据库连接信息表是否发生更新;以及在监听到所述数据路由表和/或数据库连接信息表发生更新时,从所述路由服务器下载更新后的数据路由表和/或数据库连接信息表。
在上述方面的一个或多个示例中,所述MYSQL连接建立方法还可以包括:在已经建立的连接的数目达到最大连接数时,拒绝建立新的连接。
在上述方面的一个或多个示例中,所述MYSQL连接建立方法还可以包括:记录所建立的连接的未被使用的持续时间;以及在所记录的未被使用的持续时间超过预定时间时,断开该连接,直到所建立的连接数据达到最小连接数为止。
根据本发明的另一方面,提供了一种MYSQL数据库水平切分装置,包括:数据ID范围分配单元,用于基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是所述数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围中的最小边界值,以及Max(n)是第n个数据库的数据ID范围中的最大边界值;以及存储单元,用于根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中,其中,所述预定的数据ID范围分配策略包括使得Min(1)小于等于要存储的MYSQL数据中的最小数据ID,MAX(N)大于等于要存储的MYSQL数据中的最大数据ID,Min(n+1)=Max(n)+1,Max(n+1)=Min(n+2)-1。
在上述方面的一个或多个示例中,所述MYSQL数据库切分装置还可以包括:数据路由表生成单元,用于基于所述数据库的标识符以及为各个数据库分配的数据ID范围,生成数据路由表。
在上述方面的一个或多个示例中,所述存储单元还被配置为将数据库连接信息表以及数据路由表存储在路由服务器中,所述数据库连接信息表包括所有数据库的连接信息。
在上述方面的一个或多个示例中,所述MYSQL数据库切分装置还可以包括:数据库选择单元,用于在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;数据ID范围重新分配单元,用于基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;以及迁移单元,用于将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库。
在上述方面的一个或多个示例中,所述MYSQL数据库切分装置还可以包括:数据库选择单元,用于在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;数据ID范围重新分配单元,用于基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;更新单元,用于利用分配给所选择的数据库以及所述新数据库的数据ID范围以及对应数据库的标识符,更新所述数据路由表;迁移单元,用于将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库;以及路由有效性设置单元,用于在所述迁移单元完成数据迁移之前,将所选择的数据库的路由置为无效,以及在所述迁移单元完成数据迁移之后,将更新后的数据路由表中的所选择的数据库和新数据库的路由置为有效。
根据本发明的另一方面,提供了一种MYSQL连接建立装置,包括:数据库确定单元,用于在如上所述进行MYSQL数据水平切分且接收到访问具有特定数据ID的数据的请求后,利用从路由服务器中获取的数据路由表,确定该特定数据ID所在的数据库;以及连接建立单元,用于利用数据库连接信息表中的所确定出的数据库的连接信息,建立与所确定出的数据库之间的连接。
利用上述方法及装置,通过基于MYSQL数据的数据ID来进行水平切分,可以实现对MYSQL数据的灵活切分以及迁移,良好的扩展性以及防灾性。
为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。
附图说明
根据下述参照附图进行的详细描述,本发明的上述和其他目的、特征和优点将变得更加显而易见。在附图中:
图1示出了根据本发明的MYSQL数据水平切分方法的流程图;
图2A示出了要被存储的数据信息,图2B示出了数据库集群中的数据库连接表信息,图2C示出了数据库的路由表信息以及图2D示出了MYSQL数据的分配结果示意图;
图3示出了根据本发明的MYSQL数据迁移方法的一个示例的流程图;
图4示出了根据本发明的MYSQL数据迁移方法的另一示例的流程图;
图5A示出了增加新数据库后的数据库连接表信息,图5B示出了更新后的路由表信息;
图6示出了根据本发明的MYSQL数据水平切分装置的方框示意图;
图7示出了根据本发明的MYSQL数据迁移单元的方框示意图;
图8示出了根据本发明的MYSQL连接建立方法的流程图;和
图9示出了根据本发明的MYSQL连接建立装置的方框示意图。
在所有附图中相同的标号指示相似或相应的特征或功能。
具体实施方式
下面描述本公开的各个方面。应该明白的是,本文的教导可以以多种多样形式具体体现,并且在本文中公开的任何具体结构、功能或两者仅仅是代表性的。基于本文的教导,本领域技术人员应该明白的是,本文所公开的一个方面可以独立于任何其它方面实现,并且这些方面中的两个或多个方面可以按照各种方式组合。例如,可以使用本文所阐述的任何数目的方面,实现装置或实践方法。另外,可以使用其它结构、功能、或除了本文所阐述的一个或多个方面之外或不是本文所阐述的一个或多个方面的结构和功能,实现这种装置或实践这种方法。此外,本文所描述的任何方面可以包括权利要求的至少一个元素。
下面将参照附图描述本发明的各个实施例。
图1示出了根据本发明的MYSQL数据水平切分方法的流程图。
如图1所示,首先,在步骤S110,基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围的最小边界值,以及Max(n)是第n个数据库的数据ID范围的最大边界值。其中,所述预定的数据ID范围分配策略包括使得Min(1)小于等于要存储的MYSQL数据中的最小数据ID,MAX(N)大于等于要存储的MYSQL数据中的最大数据ID,Min(n+1)=Max(n)+1,Max(n+1)=Min(n+2)-1。
例如,在要将图2A中示出的MYSQL数据水平切分到图2B中所示的数据库的情况下,按照预定的数据ID范围分配策略,为图2B中的数据库001、002和003分配数据ID范围。由于图2A中的MYSQL数据的最小数据ID为1,最大数据ID为9357,所以将数据ID范围[1,50]分配给数据库001,将数据ID范围[51,650]分配给数据库002,以及将数据ID范围[651,10000000]分配给数据库003,如图2C所示。
然后,在步骤S120,根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中。针对图2A中示出的MYSQL数据进行的水平切分后的结果如图2D所示。
在本发明的其它优选实施例中,所述MYSQL数据水平切分方法还可以包括步骤S130,在步骤S130,基于所述数据库的标识符以及为各个数据库分配的数据ID范围,生成数据路由表。如图2C中所示,所述数据路由表包括每个数据库的数据库ID以及对应的数据ID范围。
此外,在更为优选的实施例中,所述MYSQL数据水平切分方法还可以包括:将数据库连接信息表以及数据路由表存储在路由服务器中,所述数据库连接信息表包括所有数据库的连接信息(步骤S140)。
此外,在如上对MYSQL数据进行水平切分后,在检测到数据库集群中增加了新数据库后,根据需要,还可以对所存储的MYSQL数据进行数据迁移,从而将部分数据迁移到新数据库中。
图3示出了根据本发明的MYSQL数据迁移过程的一个示例的流程图。
如图3所示,在检测到所述数据库集群中增加新数据库时,在步骤S310,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库。例如,如图5A所示,在数据库集群中增加了数据库004,假设图2D中的数据库001中存储的数据量最大,则选择数据库001。
然后,在步骤S320,基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围。在为所选择的数据库以及所述新数据库重新分配数据ID范围时,优选地,将原先分配给所选择的数据库的数据ID范围平分给所选择的数据库和新数据库。例如,根据原先分配给数据库001的数据ID范围[1,50],将数据ID范围[1,25]分配给数据库001,以及将数据ID范围[26,50]分配给新数据库004。
接着,在步骤S330,将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的数据迁移到新数据库。在图5B的示例中,将数据ID范围[26,50]内的数据迁移到新数据库004。
图4示出了根据本发明的MYSQL数据迁移方法的另一示例的流程图。
如图4所示,在检测到所述数据库集群中增加新数据库时,在步骤S410,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库。例如,如图5A所示,在数据库集群中增加了数据库004,假设图2D中的数据库001中存储的数据量最大,则选择数据库001。
然后,在步骤S420,基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围。例如,根据原先分配给数据库001的数据ID范围[1,50],将数据ID范围[1,25]分配给数据库001,以及将数据ID范围[26,50]分配给新数据库004。
接着,在步骤S430,利用分配给所选择的数据库以及所述新数据库的数据ID范围以及对应数据库的标识符,更新所述数据路由表。图5B示出了更新后的路由表信息。
然后,在步骤S440,将所选择的数据库的路由置为无效。这里,被置为路由无效的仅仅是所选择的数据库,而其它数据库的路由仍然保持为有效。在这种情况下,客户端仍然可以从路由保持为有效的数据库中访问数据。
接着,在步骤S450,将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的数据迁移到新数据库。在完成上述数据迁移后,在步骤S460,将更新后的数据路由表中的所选择的数据库和新数据库的路由置为有效,由此实现数据迁移过程,并且由于所选择的数据库和新数据库的路由被置为有效,所以客户端可以访问该所选择的数据库和新数据库。
这里要说明的是,在路由服务器中,提供有4个网络接口:getRouteInfo接口,用于将数据库连接信息表和数据路由表下载到客户端本地;modifyRouteInfo接口,用于修改目前拥有的数据库连接信息表或数据路由信息;disableRouteInfo接口,用于将某条路由信息置为失效;以及enableRouteInfo接口,用于将某条路由信息置为有效。
图6示出了根据本发明的MYSQL数据库水平切分装置600的方框示意图。如图6所示,MYSQL数据库水平切分装置600包括数据ID范围分配单元610和存储单元620。
数据ID范围分配单元610用于基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是所述数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围中的最小边界值,以及Max(n)是第n个数据库的数据ID范围中的最大边界值。这里,所述预定的数据ID范围分配策略包括使得Min(1)小于等于要存储的MYSQL数据中的最小数据ID,MAX(N)大于等于要存储的MYSQL数据中的最大数据ID,Min(n+1)=Max(n)+1,Max(n+1)=Min(n+2)-1。
存储单元620用于根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中。
在其它优选的实施例中,MYSQL数据库切分装置600还可以包括数据路由表生成单元630,用于基于所述数据库的标识符以及为各个数据库分配的数据ID范围,生成数据路由表。
此外,在更为优选的实施例中,存储单元620还被配置为将数据库连接信息表以及数据路由表存储在路由服务器中,所述数据库连接信息表包括所有数据库的连接信息。
另外,根据本发明的MYSQL数据库切分装置600还可以包括MYSQL数据迁移单元640。图7示出了根据本发明的MYSQL数据迁移单元640的方框示意图。
如图7所示,MYSQL数据迁移单元640包括数据库选择模块641、数据ID范围重新分配模块643和迁移单元647。
数据库选择单元641用于在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库。
数据ID范围重新分配单元643用于基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围。
迁移单元647用于将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的数据迁移到新数据库。
此外,在更为优选的示例中,MYSQL数据迁移单元640还可以包括更新模块645,用于利用分配给所选择的数据库以及所述新数据库的数据ID范围以及对应数据库的标识符,更新所述数据路由表。
此外,MYSQL数据迁移单元640还可以包括路由有效性设置单元649,用于在所述迁移单元完成数据迁移之前,将所选择的数据库的路由置为无效,以及在所述迁移单元完成数据迁移之后,将更新后的数据路由表中的所选择的数据库和新数据库的路由置为有效。
图8示出了根据本发明的MYSQL连接建立方法的流程图,该方法由客户端执行。
如图8所示,在如上所述进行MYSQL数据水平切分后,如果接收到访问具有特定数据ID的数据的请求,即,建立客户端与数据库之间的连接的请求,则在步骤S810,判断已经建立的数据库连接数是否已经达到最大连接数。如果已经达到最大连接数,则在步骤S820,拒绝建立该连接。
如果没有达到最大连接数,则在步骤S830,利用本地存储的从路由服务器中获取的数据路由表,确定该特定数据ID所在的数据库。然后,在步骤S840,利用本地中存储的数据库连接信息表中的所确定出的数据库的连接信息,建立与所确定出的数据库之间的连接,由此建立起与数据库之间的连接。例如,利用客户端中提供的下述接口,确定出特定数据ID所在的数据库,并且返回MYSQL连接:
mysql * getMysqlConn(int dataID);
其中,dataID为数据ID,mysql*为mysql连接。
此外,在更为优选的示例中,在如上建立起连接后,还可以包括步骤S850,在步骤S850,记录所建立的连接的未被使用的持续时间。接着,在步骤S860,判断所记录的未被使用的持续时间是否超过预定时间。如果所记录的未被使用的持续时间超过预定时间,则在步骤S870,断开该连接,重复进行上述过程,直到所建立的连接数达到最小连接数为止。如果所记录的未被使用的持续时间未超过预定时间,则返回到步骤S850,继续进行记录。
此外,在上述MYSQL连接建立方法中,还可以包括监听步骤,用于监听所述路由服务器中的数据路由表和/或数据库连接信息表是否发生更新。并且,在监听到所述数据路由表和/或数据库连接信息表发生更新时,从所述路由服务器下载更新后的数据路由表和/或数据库连接信息表。例如,一旦监听到路由服务器中的数据库连接信息表或数据路由表发生更新,客户端就会触发路由下载过程,使用getRouteInfo接口下载数据库连接信息表或数据路由表。
利用上述方法,在客户端可以实现路由信息侦听,路由信息下载,动态连接池管理以及数据路由功能。
路由信息侦听是值客户端侦听路由服务器,一旦路由服务器中的数据库连接信息表或数据路由信息表发生改变,客户端就会触发路由下载过程,使用getRouteInfo接口下载路由信息。
动态连接池管理功能的目的在于防止数据库过多的连接从而造成性能下降。利用该功能,动态连接池设置最大连接数max和最小连接数min。当连接池中无连接,而存在连接请求时,客户端会建立新的连接。但是如果此时连接数已经达到max,则客户端拒绝建立连接。此外,针对客户端已经建立的连接,会记录连接的持续使用时间,每次重新使用该连接都会重新记录该时间,如果在持续预定时间内该连接没有被使用,则客户端断掉该连接,直到连接数等于min。
数据路由功能是指利用已经下载到本地的数据路由表,确定出特定数据ID所在的数据库,从而建立MYSQL连接。
图8中示出的仅仅是根据本发明的MYSQL连接建立方法的一个示例。在本发明的其它示例中,还可以对图8中示出的示例进行修改。例如,可以删除步骤S810和S820。换言之,可以去除动态连接池管理功能。
图9示出了根据本发明的MYSQL连接建立装置900的方框示意图。如图9所示,MYSQL连接建立装置900包括数据库确定单元910和连接建立单元920。
数据库确定单元910用于在如上所述进行MYSQL数据水平切分且接收到访问具有特定数据ID的数据的请求后,利用从路由服务器中获取的数据路由表,确定该特定数据ID所在的数据库。然后,连接建立单元920利用数据库连接信息表中的所确定出的数据库的连接信息,建立与所确定出的数据库之间的连接。
在本发明的其它示例中,MYSQL连接建立装置900还可以包括连接数设置单元(未示出),用于设置数据库最大连接数。一旦达到该数据库最大连接数,就拒绝建立新的连接。此外,该连接数设置单元还可以设置数据库最小连接数。该数据库最小连接数可以是初始创建数据库连接时的最小连接数。
在本发明的其它示例中,MYSQL连接建立装置900还可以包括监听单元(未示出),用于监听所述路由服务器中的数据路由表和/或数据库连接信息表是否发生更新;以及下载单元(未示出),用于在监听到所述数据路由表和/或数据库连接信息表发生更新时,从所述路由服务器下载更新后的数据路由表和/或数据库连接信息表。
此外,MYSQL连接建立装置900还可以包括判断单元(未示出),用于判断已经建立的连接的数目是否已经超过最大连接数。在被判断为已经建立的连接的数目达到最大连接数时,不建立新的连接。
此外,MYSQL连接建立装置900还可以包括记录单元(未示出),用于记录所建立的连接的未被使用的持续时间;以及断开连接单元(未示出),用于在所记录的未被使用的持续时间超过预定时间时,断开该连接,直到所建立的连接数达到最小连接数为止。
利用上述方法及装置,可以产生下述技术效果:
1)避免开始部署时预估太多的数据库。由于数据增长的不可预估,如果使用客户端写死分布规则或者使用带有分派功能的MYSQL代理,通常需要部署比较多的数据库,以便防止存储瓶颈。利用本发明的MYSQL数据库水平切分方法,由于数据迁移的灵活性,无需担心存储瓶颈。
2)能够随心所欲地使用MYSQL语句。由于在根据本发明的方法中使用了数据库直连模式,所以只要是MYSQL支持的SQL语句,都可以在程序中使用。
3)扩展性强。当路由表发生改变,无需整个数据库集群停机。只需要停止变化部分的数据库的MYSQL服务。而客户端写死路由规则或者带分派规则的MYSQL代理则不具备该优点。
4)防灾性好。带分派规则的MYSQL代理是中心节点,一旦该MYSQL代理宕机,则整个数据库集群瘫痪。而在根据本发明的方法中,假设路由服务器宕机,则由于客户端缓存有数据路由表,数据库集群依然能够正常工作。因此,与带分派规则的MYSQL代理相比,根据本发明的方法具有更好的防灾性能。
此外,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的方法中限定的上述功能的计算机程序。
此外,上述方法步骤以及***单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储设备实现。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个***的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现所述的功能,但是这种实现决定不应被解释为导致脱离本发明的范围。
尽管前面公开的内容示出了本发明的示例性实施例,但是应当注意,在不背离权利要求限定的本发明的范围的前提下,可以进行多种改变和修改。根据这里描述的发明实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明的元素可以以个体形式描述或要求,但是也可以设想多个,除非明确限制为单数。
虽然如上参照图描述了根据本发明的各个实施例进行了描述,但是本领域技术人员应当理解,对上述本发明所提出的各个实施例,还可以在不脱离本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。
Claims (15)
1.一种MYSQL数据库水平切分方法,包括:
基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围的最小边界值,以及Max(n)是第n个数据库的数据ID范围的最大边界值;以及
根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中,
其中,所述预定的数据ID范围分配策略包括使得Min(1)小于等于要存储的MYSQL数据中的最小数据ID,MAX(N)大于等于要存储的MYSQL数据中的最大数据ID,Min(n+1)=Max(n)+1,Max(n+1)=Min(n+2)-1。
2.如权利要求1所述的MYSQL数据库切分方法,还包括:
基于所述数据库的标识符以及为各个数据库分配的数据ID范围,生成数据路由表。
3.如权利要求2所述的MYSQL数据库切分方法,还包括:
将数据库连接信息表以及数据路由表存储在路由服务器中,所述数据库连接信息表包括所有数据库的连接信息。
4.如权利要求1所述的MYSQL数据库水平切分方法,还包括:
在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;
基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;以及
将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库。
5.如权利要求2所述的MYSQL数据库水平切分方法,还包括:
在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;
基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;
利用分配给所选择的数据库以及所述新数据库的数据ID范围以及对应数据库的标识符,更新所述数据路由表;
将所选择的数据库的路由置为无效;
将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库;以及
将更新后的数据路由表中的所选择的数据库和新数据库的路由置为有效。
6.一种MYSQL连接建立方法,包括:
在如权利要求2所述进行MYSQL数据水平切分且接收到访问具有特定数据ID的数据的请求后,利用从路由服务器中获取的数据路由表,确定该特定数据ID所在的数据库;以及
利用数据库连接信息表中的所确定出的数据库的连接信息,建立与所确定出的数据库之间的连接。
7.如权利要求6所述的MYSQL连接建立方法,还包括:
监听所述路由服务器中的数据路由表和/或数据库连接信息表是否发生更新;以及
在监听到所述数据路由表和/或数据库连接信息表发生更新时,从所述路由服务器下载更新后的数据路由表和/或数据库连接信息表。
8.如权利要求6所述的MYSQL连接建立方法,还包括:
在已经建立的连接的数目达到最大连接数时,拒绝建立新的连接。
9.如权利要求6所述的MYSQL连接建立方法,还包括:
记录所建立的连接的未被使用的持续时间;以及
在所记录的未被使用的持续时间超过预定时间时,断开该连接,直到所建立的连接数据达到最小连接数为止。
10.一种MYSQL数据库水平切分装置,包括:
数据ID范围分配单元,用于基于预定的数据ID范围分配策略,为数据库集群中的数据库分配数据ID范围[Min(n),Max(n)],其中,N是所述数据库集群中的数据库的总数,Min(n)是第n个数据库的数据ID范围中的最小边界值,以及Max(n)是第n个数据库的数据ID范围中的最大边界值;以及
存储单元,用于根据所述MYSQL数据的数据ID,将所述MYSQL数据分别存储到所具有的数据ID范围包含该数据ID的数据库中,
其中,所述预定的数据ID范围分配策略包括使得Min(1)小于等于要存储的MYSQL数据中的最小数据ID,MAX(N)大于等于要存储的MYSQL数据中的最大数据ID,Min(n+1)=Max(n)+1,Max(n+1)=Min(n+2)-1。
11.如权利要求10所述的MYSQL数据库切分装置,还包括:
数据路由表生成单元,用于基于所述数据库的标识符以及为各个数据库分配的数据ID范围,生成数据路由表。
12.如权利要求11所述的MYSQL数据库切分装置,其中,所述存储单元还被配置为将数据库连接信息表以及数据路由表存储在路由服务器中,所述数据库连接信息表包括所有数据库的连接信息。
13.如权利要求10所述的MYSQL数据库水平切分装置,还包括:
数据库选择单元,用于在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;
数据ID范围重新分配单元,用于基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;以及
迁移单元,用于将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库。
14.如权利要求11所述的MYSQL数据库水平切分装置,还包括:
数据库选择单元,用于在检测到所述数据库集群中增加新数据库时,从已经存储有MYSQL数据的数据库中选择所存储的数据量最大的数据库;
数据ID范围重新分配单元,用于基于原先分配给所选择的数据库的数据ID范围的最大和最小边界值,为所选择的数据库以及所述新数据库重新分配数据ID范围;
更新单元,用于利用分配给所选择的数据库以及所述新数据库的数据ID范围以及对应数据库的标识符,更新所述数据路由表;
迁移单元,用于将所选择的数据库中的与分配给所述新数据库的数据ID范围对应的部分数据迁移到新数据库;以及
路由有效性设置单元,用于在所述迁移单元完成数据迁移之前,将所选择的数据库的路由置为无效,以及在所述迁移单元完成数据迁移之后,将更新后的数据路由表中的所选择的数据库和新数据库的路由置为有效。
15.一种MYSQL连接建立装置,包括:
数据库确定单元,用于在如权利要求2所述进行MYSQL数据水平切分且接收到访问具有特定数据ID的数据的请求后,利用从路由服务器中获取的数据路由表,确定该特定数据ID所在的数据库;以及
连接建立单元,用于利用数据库连接信息表中的所确定出的数据库的连接信息,建立与所确定出的数据库之间的连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310266876.6A CN103324732B (zh) | 2013-06-29 | 2013-06-29 | Mysql数据库水平切分方法、mysql连接建立方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310266876.6A CN103324732B (zh) | 2013-06-29 | 2013-06-29 | Mysql数据库水平切分方法、mysql连接建立方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103324732A true CN103324732A (zh) | 2013-09-25 |
CN103324732B CN103324732B (zh) | 2016-06-29 |
Family
ID=49193475
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310266876.6A Expired - Fee Related CN103324732B (zh) | 2013-06-29 | 2013-06-29 | Mysql数据库水平切分方法、mysql连接建立方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103324732B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426487A (zh) * | 2015-11-20 | 2016-03-23 | 北京京东尚科信息技术有限公司 | 分布式数据库访问控制方法和设备、分布式数据库***及其扩容方法 |
CN105589960A (zh) * | 2015-12-22 | 2016-05-18 | 北京奇虎科技有限公司 | 基于多个数据库集群的数据请求处理方法及装置 |
CN108710621A (zh) * | 2018-03-12 | 2018-10-26 | 广东睿江云计算股份有限公司 | 一种基于ceph实现MySQL数据库水平扩展的方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032766A (zh) * | 2018-06-14 | 2018-12-18 | 阿里巴巴集团控股有限公司 | 一种事务处理方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145158A (zh) * | 2007-06-06 | 2008-03-19 | 中兴通讯股份有限公司 | 一种数据库表分区的方法 |
EP2234022A1 (fr) * | 2009-03-24 | 2010-09-29 | Infovista SA | Procédé de gestion d'une base de données relationnelle de type SQL |
CN102799628A (zh) * | 2012-06-21 | 2012-11-28 | 新浪网技术(中国)有限公司 | 在key-value数据库中进行数据分区的方法和装置 |
CN102810116A (zh) * | 2012-06-29 | 2012-12-05 | 安科智慧城市技术(中国)有限公司 | 一种基于数据库连接的自动路由和负载均衡的方法及*** |
-
2013
- 2013-06-29 CN CN201310266876.6A patent/CN103324732B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145158A (zh) * | 2007-06-06 | 2008-03-19 | 中兴通讯股份有限公司 | 一种数据库表分区的方法 |
EP2234022A1 (fr) * | 2009-03-24 | 2010-09-29 | Infovista SA | Procédé de gestion d'une base de données relationnelle de type SQL |
CN102799628A (zh) * | 2012-06-21 | 2012-11-28 | 新浪网技术(中国)有限公司 | 在key-value数据库中进行数据分区的方法和装置 |
CN102810116A (zh) * | 2012-06-29 | 2012-12-05 | 安科智慧城市技术(中国)有限公司 | 一种基于数据库连接的自动路由和负载均衡的方法及*** |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426487A (zh) * | 2015-11-20 | 2016-03-23 | 北京京东尚科信息技术有限公司 | 分布式数据库访问控制方法和设备、分布式数据库***及其扩容方法 |
CN105589960A (zh) * | 2015-12-22 | 2016-05-18 | 北京奇虎科技有限公司 | 基于多个数据库集群的数据请求处理方法及装置 |
CN108710621A (zh) * | 2018-03-12 | 2018-10-26 | 广东睿江云计算股份有限公司 | 一种基于ceph实现MySQL数据库水平扩展的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103324732B (zh) | 2016-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108287660B (zh) | 数据存储方法和设备 | |
JP2008090195A5 (zh) | ||
CN103294675A (zh) | 一种分布式存储***中的数据更新方法及装置 | |
CN105550371A (zh) | 一种面向大数据环境的元数据组织方法和*** | |
CN110008665B (zh) | 一种区块链的权限控制方法及装置 | |
CN103246549B (zh) | 一种数据转存的方法及*** | |
CN105635311A (zh) | 一种云管理平台中资源池信息同步的方法 | |
CN103324732A (zh) | Mysql数据库水平切分方法、mysql连接建立方法及装置 | |
CN104469392A (zh) | 一种视频文件存储方法及装置 | |
CN102202087A (zh) | 一种标识存储设备的方法及*** | |
CN105554121A (zh) | 实现分布式缓存***负载均衡的方法及*** | |
CN104113606B (zh) | 一致性动态均衡的分布式元数据节点架构的工作方法 | |
CN110727738B (zh) | 基于数据分片的全局路由***、电子设备及存储介质 | |
CN104283970A (zh) | 一种云计算服务装置、***和云计算方法 | |
CN107070645A (zh) | 比较数据表的数据的方法和*** | |
CN110493060A (zh) | 一种虚拟ip分配方法及相关装置 | |
CN112988065A (zh) | 数据迁移方法、装置、设备及存储介质 | |
CN106973091B (zh) | 分布式内存数据重分布方法及***、主控服务器 | |
CN104793981A (zh) | 一种虚拟机集群的在线快照管理方法及装置 | |
CN103905512B (zh) | 一种数据处理方法和设备 | |
CN112351106B (zh) | 一种含事件网格的服务网格平台及其通信方法 | |
CN106502757A (zh) | 一种插件管理方法及装置 | |
CN105354312A (zh) | 一种文件存储方法、下载方法及*** | |
CN105141418A (zh) | 认证鉴权方法及*** | |
CN112486664A (zh) | 一种节点扩容方法、***、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160629 Termination date: 20200629 |
|
CF01 | Termination of patent right due to non-payment of annual fee |