数据库数据分片存储方法和装置、数据查询方法和装置的制造方法_2

文档序号:9326963阅读:来源:国知局
一实施例中的基于数据分片存储的数据库数据查询装置的结构示意图。
【具体实施方式】
[0086]如图1A所示,一种数据库数据分片存储方法,包括以下步骤:
[0087]步骤S102,生成数据库主机中存储的各个数据表对应的多个子表。
[0088]其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠。
[0089]本申请文件中所述的多个可以理解为两个或两个以上。
[0090]在一个实施例中,每一个子表存储对应数据表中一段连续主键值范围对应的数据。例如,子表1存储数据表的主键值为1?500的记录,子表2存储数据表的主键值为501?1000的记录。
[0091 ] 在一个实施例中,生成的每一个子表的数据量不超过预设大小。
[0092]在一个实施例中,可复制数据库主机中存储的数据表,得到数据表副本;进一步的,将数据表拆分成多个子表。
[0093]在一个实施例中,可获取数据表中数据量小于预设大小的记录集最多可包含的记录条数,记为最大记录条数,按照该最大记录条数将数据表副本拆分成多个子表。拆分得到的子表中包含一个或零个记录条数小于该最大记录条数的子表,该子表之外的其它子表的记录条数都等于该最大记录条数。可以理解的,当数据表的记录条数为该最大记录条数的整数倍时,拆分得到的子表的记录条数全部等于该最大记录条数,否则,拆分得到的子表中包含一个记录条数小于该最大记录条数的子表。
[0094]例如,某一数据表包含1001条记录,计算得到数据表中数据量小于预设大小的记录集最多可包含的记录条数为500条,即最大记录条数为500。可将数据表副本按照每一个子表500条记录进行拆分,可以得到两个记录条数为500的子表和一个记录条数为1的子表。
[0095]步骤S104,将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表。
[0096]在一个实施例中,可将各个数据表对应的多个子表随机分配到所存在的多个数据库备机上进行存储。在这种方式下,一些数据表对应的所有子表有可能都分配到同一台数据库备机上进行存储,但总有一些数据表对应的子表被分配到多个不同的数据库备机上进行存储。
[0097]在一个实施例中,可将每一个数据表对应的多个子表分配到尽可能多的数据库备机上进行存储。
[0098]步骤S106,维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
[0099]在一个实施例中,数据表的子表在数据库备机上的分布信息用于描述数据表的子表在数据库备机上的分布。
[0100]在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识。
[0101]在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。数据表的子表在数据库备机上的分布信息描述了数据表、数据表对应的子表所存储的数据库备机,以及数据库备机所存储的数据表的子表的主键值范围之间的对应关系,其中每一个数据表用数据表标识表示,每一个数据库备机用数据库备机标识表示。
[0102]上述数据库数据分片存储方法,生成数据库主机中存储的各个数据表对应的子表,将子表存储到多个数据库备机上,而且,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表,对该类数据表的读数据请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,可以加快查询速度;而且,每一个数据库备机上都只是存储该类数据表的一部分数据,需要查询的数据量变得更少,从而可以进一步加快查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
[0103]在一个实施例中,步骤S104将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上的过程中,使得各数据库备机上的数据存储量相对均衡。
[0104]各数据库备机上的数据存储量相对均衡,可以理解为,两两数据库备机的数据存储量之间的绝对差值不超过预设范围。
[0105]在一个实施例中,可将各个数据表对应的多个子表平均分配到所存在的多个数据库备机上进行存储,各数据库备机所存储的子表数量的绝对差值不超过1。
[0106]本实施例中,由于各数据库备机上的数据存储量相对均衡,因此,不会导致一些数据库备机的数据读取压力过大,而一些数据库备机的数据读取压力过小,各数据库备机可以相对均衡的分摊读数据请求,因此,可以提高数据库备机整体的对读数据请求的响应速度。
[0107]在一个实施例中,数据库主机中存储完整的数据库。完整的数据库包含多个数据表。
[0108]本实施例中,由于数据库主机中存储完整的数据库,从而针对涉及到多个数据表的数据读取请求可以分配到数据库主机上,而不是分配到数据库备机上,从而可提高这类型的数据读取请求的响应速度,以至于提高整体的响应速度。
[0109]在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。
[0110]本实施例中,可以查询到数据库备机上存储的数据表子表的主键值范围,从而,当可以获取到所需要读取的数据的主键值需要满足的条件时,可以仅在满足该条件的主键值落入所存储的数据表子表的主键值范围的数据库备机上查询数据,而不需要在所有的数据库备机上或者对应数据表(需要读取的数据所在的数据表)的子表所分布的所有数据库备机上查询,从而可提高查询速度。
[0111]在一个实施例中,同一个子表被存储到多个不同的数据库备机上。
[0112]在一个实施例中,可将每一个子表存储到预设数量的多个不同的数据库备机上。例如,将每一个子表存储到3个不同的数据库备机上。
[0113]本实施例中,同一个子表被存储到多个不同的数据库备机上,可增加数据冗余,提高数据存储安全性,即使一个数据库备机上的数据被破坏了,该数据库备机上的数据还可以在其它数据库备机上找到,从而可提高数据存储安全性。而且,对于同一数据的多个读取请求,可以分配到不同的存储了该数据的数据库备机上进行并发处理,提高处理速度;而对于某一个数据的一个读取请求,可以将读取请求分配到存储了该数据的数据库备机中当前访问压力较小的数据库备机上,从而提高处理速度。
[0114]图1B示出子一个实施例中的数据库数据分片存储方法的子表生成即存储示意图。
[0115]如图1B所示,tableO和tablel为数据库主机中存储的两个数据表,tableO的主键值范围为1?1000,tablel的主键值范围也为1?1000。
[0116]子表1、子表2、子表3和子表4为tableO对应的4个子表,其中,子表1存储tableO的主键值范围1?250的记录,子表2存储tableO的主键值范围251?500的记录,子表3存储tableO的主键值范围501?750的记录,子表4存储tableO的主键值范围751?1000的记录。
[0117]子表5和子表6为tablel对应的2个子表,其中,子表5存储tablel的主键值范围1?500的记录,子表6存储tablel的主键值范围501?100的记录。
[0118]各个子表的数据存储量不超过预设大小。
[0119]子表1、子表2、子表3、子表4、子表5和子表6被分配到4个数据库备机上进行存储,每一个子表存储3份,4个数据库备机上存储的子表数据存储量相对均衡。
[0120]在一个实施例中,上述数据库数据分片存储方法,还包括每间隔预设时长在数据库备机上进行负载均衡处理的过程。
[0121]如图2所示,在一个实施例中,每次在数据库备机上进行负载均衡处理的过程包括以下步骤:
[0122]步骤S202,获取数据库备机中数据存储量相对较小的数据库备机。
[0123]步骤S204,获取数据库备机中数据存储量相对较大的数据库备机。
[0124]步骤S206,将数据存储量相对较大的数据库备机上的部分子表迀移到数据存储量相对较小的数据库备机上,使得各数据库备机上的数据存储量相对均衡。
[0125]在将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上之后,各数据库备机所存储的数据量之间的绝对差值不超过预设范围。
[0126]在一个实施例中,可以计算各数据库备机的平均数据存储量,获取各数据库备机中数据存储量小于平均数据存储量的数据库备机,以及获取各数据库备机中数据存储量大于平均数据存储量的数据库备机,进一步的,将数据存储量大于平均数据存储量的数据库备机上的部分子表迀移到数据存储量小于平均数据存储量的数据库备机上。
[0127]在一个实施例中,可以优先迀移超额数据存储量最大的数据库备机上的子表至差额数据量最大的数据库备机上;其中,超额数据存储量指的是数据库备机的数据存储量超出平均数据存储量的额度,差额数据存储量指的是数据库备机的数据存储量低于平均数据存储量的额度。
[0128]例如,可以将各数据库备机按照数据存储量进行排序,计算各数据库备机的超额存储量或者差额存储量,将超额存储量最大的数据库备机上的部分子表迀移到差额存储量最大的数据库备机上,使得子表迀移后该超额存储量最大的数据库备机的数据存储量不低于平均数据存储量,并且在此基础上使得该差额存储量最大的数据库备机的数据存储量尽量接近或达到平均数据存储量。
[0129]步骤S208,根据子表迀移情况更新数据库主机中的各数据表的子表在备机上的分布fg息。
[0130]上述实施例,每间隔预设时长在数据库备机上进行负载均衡处理,使得各数据库备机上的数据存储量相对均衡,可以提高数据库备机整体的对读数据请求的响应速度。
[0131]在一个实施例中,上述数据库数据分片存储方法,还包括拆分子表的过程;如图3所示,在一个实施例中,拆分子表的过程包括以下步骤:
[0132]步骤S302,每间隔预设时长检查数据库备机上的子表的数据存储量是否超过第一阈值。
[0133]步骤S304,将数据存储量超过第一阈值的子表拆分成两个以上的子表,使得拆分后的子表的数据存储量不超过第一阈值。
[0134]在一个实施例中,按照预设大小拆分子表。
[0135]在数据库运行期间,某些子表可能随着数据的插入而变得数据存储量过大。本实施例中,将数据存储量过大的子表进行拆分,可以方便将子表从一个数据库备机迀移到另一个数据库备机,以平衡数据库备机之间的负载。
[0136]在一个实施例中,上述数据库数据分片存储方法,还包括合并子表的过程;如图4所示,在一个实施例中,合并子表的过程包括以下步骤:
[0137]步骤S402,每间隔预设时长检查数据库备机上是否存在同一数据表对应的多个数据存储量小于第二阈值的子表。
[0138]步骤S404,若存在同一数据表对应的多个数据存储量小于第二阈值的子表,则将同一数据表对应的多个数据存储量小于第二阈值的子表进行合并。
[0139]在一个实施例中,可将同一数据表对应的多个数据存储量小于第二阈值的子表合并成一个或多个子表,使得合并处理后同一数据库备机上的同一数据表对应的子表数量减少,且每一个子表的数据存储量不超过第一阈值。
[0140]数据库运行期间,某些子表可能随着数据的删除而变得数据存储量过少,以及,在数据表拆分以及子表拆分过程中,可能产生数据存储量较少的一个子表;而同一数据库备机上存储的同一数据表对应的子表数量过多,可能增加查询时间,本实施例中,将同一数据库备机上同一数据表对应的多个数据存储量较小的子表合并,可以提高数据查询速度。
[0141]在一个实施例中,同一个子表被存储到多个不同的数据库备机上,同一数据表对应的每一个子表所存储的数据库备机台数相同,也可以理解为同一数据表对应的每一个子表所存储的份数相同。
[0142]基于上述实施例中,在上述拆分子表过程中,若将某一台数据库备机上的子表进行拆分,则将其它数据库备机上的该子表按照相同的方式进行拆分。以及在上述合并子表过程中,若将某一台数据库备机上的多个子表进行合并,则将其它数据库备机上的该多个子表也按照相同的方式进行合并,若该多个子表分散存储在其它数据库备机上,则将该多个子表迀移到一个数据库备机上,并将该多个子表进行合并,所迀移至的数据库备机可为数据存储量相对较小的数据库备机。
[0143]上述实施例,可以确保数据库主机存储的数据表对应的不同的子表之间的数据不重叠,可以方便维护数据库主机中存储的数据表的子表在数据库备机上的分布信息。
[0144]在一个实施例中,上述数据库数据分片存储方法,还包括写数据过程;如图5所示,在一个实施例中,写数据过程包括以下步骤:
[0145]步骤S502,接收写数据请求。
[0146]写数据请求用于请求对某一数据表中的数据进行写操作。写操作包含修改操作、删除操作和插入操作中的一种或几种。
[0147]步骤S504,将写数据请求发送给数据库主机,以请求数据库主机根据写数据请求更新对应数据表中的数据。
[0148]步骤S506,接收数据库主机返回的数据更新结果。
[0149]步骤S508,向写数据请求的发送方返回数据更新结果。
[015
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1