CN105045877B - 数据库数据分片存储方法和装置、数据查询方法和装置 - Google Patents
数据库数据分片存储方法和装置、数据查询方法和装置 Download PDFInfo
- Publication number
- CN105045877B CN105045877B CN201510428470.2A CN201510428470A CN105045877B CN 105045877 B CN105045877 B CN 105045877B CN 201510428470 A CN201510428470 A CN 201510428470A CN 105045877 B CN105045877 B CN 105045877B
- Authority
- CN
- China
- Prior art keywords
- data
- database
- tables
- host
- sublist
- 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
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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1464—Management of the backup or restore process for networked environments
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本发明涉及一种数据库数据分片存储方法,包括以下步骤:生成数据库主机中存储的各个数据表对应的多个子表,其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;维护数据库主机中的各数据表的子表在数据库备机上的分布信息。上述方法对于读数据请求的响应速度。此外,还提供一种数据库数据分片存储装置,以及提供一种基于数据分片存储的数据库数据查询方法和装置。
Description
技术领域
本发明涉及数据库技术领域,特别是涉及一种数据库数据分片存储方法和装置,以及涉及一种基于数据分片存储的数据库数据查询方法和装置。
背景技术
近年来,随着互联网技术的发展,互联网应用越来越普及。随着互联网应用所拥有的客户数量的增加,互联网应用积累的数据量也越来越巨大,而且由于产品之间竞争激烈,用户体验对于互联网应用至关重要,这些针对互联网应用对于数据查询的响应速度以及并发处理能力提出了更高的要求。
为了适应用户需求以及在互联网竞争中取得优势,互联网应用提供商致力于提高数据查询的响应速度以及并发处理能力。传统的方案中,一般采用加强数据库服务器的硬件配置的措施,以提高数据库处理服务器的处理性能,这种提升数据库处理服务器的处理性能的方式称为纵向扩展;还是一种方式,称为横向扩展,即是,增加数据库服务器的数量,将一个数据库服务器中的数据全量拷贝到其它的数据库服务器,多个数据库服务器共同提供数据读写服务。
上述的纵向扩展方式和横向扩展方式,虽然可以减轻单个数据库服务器的数据查询压力,提高对多个数据查询请求的并发处理能力,可以减少用户等待服务器处理其它用户的数据查询请求的时间,从而一定程度上可以提高数据查询的整体响应速度。但是,在数据查询请求较少的情况下,上述的纵向扩展方式和横向扩展方式对于用户的数据查询请求的响应速度的提高,几乎没有贡献。一个数据查询请求至少会涉及到一张表,对于一个数据查询请求,数据库服务器有可能需要在对应的数据表中遍历整张表,从而可能需要较长的遍历时间。
尤其是当一个数据表中的数据量巨大时,查询该整个数据表可能需要花费用户不希望等待的时间。
发明内容
基于此,有必要针对上述查询数据时有可能需要遍历整张数据表从而延长响应速度的问题,提供一种数据库数据分片存储方法和装置。
此外,还有必要针对上述查询数据时有可能需要遍历整张数据表从而延长响应速度的问题,提供一种基于数据分片存储的数据库数据查询方法和装置。
一种数据库数据分片存储方法,包括以下步骤:
生成数据库主机中存储的各个数据表对应的多个子表,其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;
将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
在其中一个实施例中,所述数据库主机中存储完整的数据库。
在其中一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。
在其中一个实施例中,同一个子表被存储到多个不同的数据库备机上。
在其中一个实施例中,还包括每间隔预设时长在数据库备机上进行负载均衡处理的过程,所述在数据库备机上进行负载均衡处理的过程包括以下步骤:
获取数据库备机中数据存储量相对较小的数据库备机,
以及获取数据库备机中数据存储量相对较大的数据库备机;
将数据存储量相对较大的数据库备机上的部分子表迁移到数据存储量相对较小的数据库备机上,使得各数据库备机上的数据存储量相对均衡;
根据子表迁移情况更新数据库主机中的各数据表的子表在备机上的分布信息。
在其中一个实施例中,还包括以下步骤:
每间隔预设时长检查数据库备机上的子表的数据存储量是否超过第一阈值;
将数据存储量超过第一阈值的子表拆分成两个以上的子表,使得拆分后的子表的数据存储量不超过第一阈值。
在其中一个实施例中,还包括以下步骤:
每间隔预设时长检查数据库备机上是否存在同一数据表对应的多个数据存储量小于第二阈值的子表;
若存在同一数据表对应的多个数据存储量小于第二阈值的子表,则将同一数据表对应的多个数据存储量小于第二阈值的子表进行合并。
在其中一个实施例中,还包括以下步骤:
接收写数据请求;
将所述写数据请求发送给数据库主机,以请求数据库主机根据写数据请求更新对应数据表中的数据;
接收数据库主机返回的数据更新结果;
向所述写数据请求的发送方返回所述数据更新结果;
以及,所述方法还包括以下步骤:
每间隔预设时长将数据库主机中的数据同步到数据库备机中。
一种基于数据分片存储的数据库数据查询方法,包括以下步骤:
接收数据查询请求;
获取所述数据查询请求所涉及的数据库主机中存储的数据表,其中,数据库主机中存储的各个数据表对应多个子表,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;而且数据库主机中存储的各个数据表对应的多个子表存储在多个数据库备机上,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询所述数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机;
向所述所分布的数据库备机发送所述数据查询请求对应的子查询请求;
接收所述所分布的数据库备机返回的子查询结果;
向所述数据查询请求发送方返回所述子查询结果对应的数据查询结果。
在其中一个实施例中,所述数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围;
若所述数据查询请求中指定了主键值需要满足的条件,则向所述所分布的数据库备机发送所述数据查询请求对应的子查询请求的步骤包括:
根据数据表的子表在数据库备机上的分布信息查询满足对应条件的主键值落入所存储的数据表子表的主键值范围的数据库备机,向查询得到的数据库备机发送所述数据查询请求对应的子查询请求。
在其中一个实施例中,所述数据查询请求中包含目标字段和查询条件、以及可省略的对满足查询条件的目标字段值需进行的汇总计算操作的描述;
当需要向多台数据库备机发送所述子查询请求时,所述子查询请求包含所述目标字段和所述查询条件,以使得接收到所述子查询请求的数据库备机返回满足所述查询条件的所述目标字段的值,即所述子查询结果;
若所述数据查询请求中还包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,则所述方法还包括以下步骤:
将接收到所述子查询请求的数据库备机返回的满足所述查询条件的所述目标字段的值进行所述描述对应的汇总计算操作,得到所述数据查询结果。
在其中一个实施例中,同一个子表被存储到多个不同的数据库备机上;
所述子查询请求用于请求数据库备机返回子查询结果,该子查询结果所包含的数据满足所述数据查询请求的查询条件,且子查询结果中的数据对应有主键值;
所述方法还包括步骤:根据主键值对各数据库备机返回的子查询结果进行去重处理,得到所述数据查询结果。
在其中一个实施例中,所述数据库主机中存储完整的数据库;
在所述获取所述数据查询请求所涉及的数据库主机中存储的数据表的步骤之后,所述方法还包括以下步骤:
判断所述数据查询请求所涉及的数据库主机中存储的数据表是否包含多个数据表;
若是,则将所述数据查询请求发送给所述数据库主机,接收所述数据库主机返回的数据查询结果,向所述数据查询请求发送方返回所述数据查询结果;
否则,进入所述查询所述数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机的步骤。
一种数据库数据分片存储装置,包括:
子表生成模块,用于生成数据库主机中存储的各个数据表对应的多个子表,其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;
子表分配模块,用于将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
分布信息维护模块,用于维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
一种基于数据分片存储的数据库数据查询装置,包括:
查询请求接收模块,用于接收数据查询请求;
数据表获取模块,用于获取所述数据查询请求所涉及的数据库主机中存储的数据表,其中,数据库主机中存储的各个数据表对应多个子表,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;而且数据库主机中存储的各个数据表对应的多个子表存储在多个数据库备机上,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
分布备机查询模块,用于查询所述数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机;
子查询请求发送模块,用于向所述所分布的数据库备机发送所述数据查询请求对应的子查询请求;
子查询结果接收模块,用于接收所述所分布的数据库备机返回的子查询结果;
查询结果返回模块,用于向所述数据查询请求发送方返回所述子查询结果对应的数据查询结果。
上述数据库数据分片存储方法和装置,生成数据库主机中存储的各个数据表对应的子表,将子表存储到多个数据库备机上,而且,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表,对该类数据表的读数据请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,可以加快查询速度;而且,每一个数据库备机上都只是存储该类数据表的一部分数据,需要查询的数据量变得更少,从而可以进一步加快查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
上述基于数据分片存储的数据库数据查询方法和装置中,数据库主机中存储的数据表对应的多个子表存储在多个数据库备机上,而且,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;接收到数据查询请求后,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机,在所分布的数据库备机上进行查询,得到数据查询结果;当某一数据表对应的子表被存储到不同的数据库备机上时,对该数据表的数据查询请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,加快对这类数据表的数据查询速度。而且,每一个数据库备机上都只是存储该类数据表的一部分数据,每一数据库备机需要查询的数据量变得更少,从而可以进一步加快该类数据表的数据查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
附图说明
图1A为一个实施例中的数据库数据分片存储方法的流程示意图;
图1B为一个实施例中的数据库数据分片存储方法的子表生成即存储示意图;
图2为一个实施例中每次在数据库备机上进行负载均衡处理的过程的流程示意图;
图3为一个实施例中拆分子表的过程的流程示意图;
图4为一个实施例中合并子表的过程的流程示意图;
图5为一个实施例中写数据过程的流程示意图;
图6为一个实施例中的基于数据分片存储的数据库数据查询方法的流程示意图;
图7为另一实施例中的基于数据分片存储的数据库数据查询方法的流程示意图;
图8为又一实施例中的基于数据分片存储的数据库数据查询方法的流程示意图;
图9为再一实施例中的基于数据分片存储的数据库数据查询方法的流程示意图;
图10为一个实施例的基于数据分片存储的数据库数据查询方法中管理服务器与数据库主机以及数据库备机之间的交互时序示意图;
图11为一个实施例中的数据库数据分片存储装置的结构示意图;
图12为另一实施例中的数据库数据分片存储装置的结构示意图;
图13为又一实施例中的数据库数据分片存储装置的结构示意图;
图14为再一实施例中的数据库数据分片存储装置的结构示意图;
图15为其它一个实施例中的数据库数据分片存储装置的结构示意图;
图16为一个实施例中的基于数据分片存储的数据库数据查询装置的结构示意图;
图17为另一实施例中的基于数据分片存储的数据库数据查询装置的结构示意图。
具体实施方式
如图1A所示,一种数据库数据分片存储方法,包括以下步骤:
步骤S102,生成数据库主机中存储的各个数据表对应的多个子表。
其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠。
本申请文件中所述的多个可以理解为两个或两个以上。
在一个实施例中,每一个子表存储对应数据表中一段连续主键值范围对应的数据。例如,子表1存储数据表的主键值为1~500的记录,子表2存储数据表的主键值为501~1000的记录。
在一个实施例中,生成的每一个子表的数据量不超过预设大小。
在一个实施例中,可复制数据库主机中存储的数据表,得到数据表副本;进一步的,将数据表拆分成多个子表。
在一个实施例中,可获取数据表中数据量小于预设大小的记录集最多可包含的记录条数,记为最大记录条数,按照该最大记录条数将数据表副本拆分成多个子表。拆分得到的子表中包含一个或零个记录条数小于该最大记录条数的子表,该子表之外的其它子表的记录条数都等于该最大记录条数。可以理解的,当数据表的记录条数为该最大记录条数的整数倍时,拆分得到的子表的记录条数全部等于该最大记录条数,否则,拆分得到的子表中包含一个记录条数小于该最大记录条数的子表。
例如,某一数据表包含1001条记录,计算得到数据表中数据量小于预设大小的记录集最多可包含的记录条数为500条,即最大记录条数为500。可将数据表副本按照每一个子表500条记录进行拆分,可以得到两个记录条数为500的子表和一个记录条数为1的子表。
步骤S104,将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表。
在一个实施例中,可将各个数据表对应的多个子表随机分配到所存在的多个数据库备机上进行存储。在这种方式下,一些数据表对应的所有子表有可能都分配到同一台数据库备机上进行存储,但总有一些数据表对应的子表被分配到多个不同的数据库备机上进行存储。
在一个实施例中,可将每一个数据表对应的多个子表分配到尽可能多的数据库备机上进行存储。
步骤S106,维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
在一个实施例中,数据表的子表在数据库备机上的分布信息用于描述数据表的子表在数据库备机上的分布。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。数据表的子表在数据库备机上的分布信息描述了数据表、数据表对应的子表所存储的数据库备机,以及数据库备机所存储的数据表的子表的主键值范围之间的对应关系,其中每一个数据表用数据表标识表示,每一个数据库备机用数据库备机标识表示。
上述数据库数据分片存储方法,生成数据库主机中存储的各个数据表对应的子表,将子表存储到多个数据库备机上,而且,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表,对该类数据表的读数据请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,可以加快查询速度;而且,每一个数据库备机上都只是存储该类数据表的一部分数据,需要查询的数据量变得更少,从而可以进一步加快查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
在一个实施例中,步骤S104将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上的过程中,使得各数据库备机上的数据存储量相对均衡。
各数据库备机上的数据存储量相对均衡,可以理解为,两两数据库备机的数据存储量之间的绝对差值不超过预设范围。
在一个实施例中,可将各个数据表对应的多个子表平均分配到所存在的多个数据库备机上进行存储,各数据库备机所存储的子表数量的绝对差值不超过1。
本实施例中,由于各数据库备机上的数据存储量相对均衡,因此,不会导致一些数据库备机的数据读取压力过大,而一些数据库备机的数据读取压力过小,各数据库备机可以相对均衡的分摊读数据请求,因此,可以提高数据库备机整体的对读数据请求的响应速度。
在一个实施例中,数据库主机中存储完整的数据库。完整的数据库包含多个数据表。
本实施例中,由于数据库主机中存储完整的数据库,从而针对涉及到多个数据表的数据读取请求可以分配到数据库主机上,而不是分配到数据库备机上,从而可提高这类型的数据读取请求的响应速度,以至于提高整体的响应速度。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。
本实施例中,可以查询到数据库备机上存储的数据表子表的主键值范围,从而,当可以获取到所需要读取的数据的主键值需要满足的条件时,可以仅在满足该条件的主键值落入所存储的数据表子表的主键值范围的数据库备机上查询数据,而不需要在所有的数据库备机上或者对应数据表(需要读取的数据所在的数据表)的子表所分布的所有数据库备机上查询,从而可提高查询速度。
在一个实施例中,同一个子表被存储到多个不同的数据库备机上。
在一个实施例中,可将每一个子表存储到预设数量的多个不同的数据库备机上。例如,将每一个子表存储到3个不同的数据库备机上。
本实施例中,同一个子表被存储到多个不同的数据库备机上,可增加数据冗余,提高数据存储安全性,即使一个数据库备机上的数据被破坏了,该数据库备机上的数据还可以在其它数据库备机上找到,从而可提高数据存储安全性。而且,对于同一数据的多个读取请求,可以分配到不同的存储了该数据的数据库备机上进行并发处理,提高处理速度;而对于某一个数据的一个读取请求,可以将读取请求分配到存储了该数据的数据库备机中当前访问压力较小的数据库备机上,从而提高处理速度。
图1B示出子一个实施例中的数据库数据分片存储方法的子表生成即存储示意图。
如图1B所示,table0和table1为数据库主机中存储的两个数据表,table0的主键值范围为1~1000,table1的主键值范围也为1~1000。
子表1、子表2、子表3和子表4为table0对应的4个子表,其中,子表1存储table0的主键值范围1~250的记录,子表2存储table0的主键值范围251~500的记录,子表3存储table0的主键值范围501~750的记录,子表4存储table0的主键值范围751~1000的记录。
子表5和子表6为table1对应的2个子表,其中,子表5存储table1的主键值范围1~500的记录,子表6存储table1的主键值范围501~100的记录。
各个子表的数据存储量不超过预设大小。
子表1、子表2、子表3、子表4、子表5和子表6被分配到4个数据库备机上进行存储,每一个子表存储3份,4个数据库备机上存储的子表数据存储量相对均衡。
在一个实施例中,上述数据库数据分片存储方法,还包括每间隔预设时长在数据库备机上进行负载均衡处理的过程。
如图2所示,在一个实施例中,每次在数据库备机上进行负载均衡处理的过程包括以下步骤:
步骤S202,获取数据库备机中数据存储量相对较小的数据库备机。
步骤S204,获取数据库备机中数据存储量相对较大的数据库备机。
步骤S206,将数据存储量相对较大的数据库备机上的部分子表迁移到数据存储量相对较小的数据库备机上,使得各数据库备机上的数据存储量相对均衡。
在将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上之后,各数据库备机所存储的数据量之间的绝对差值不超过预设范围。
在一个实施例中,可以计算各数据库备机的平均数据存储量,获取各数据库备机中数据存储量小于平均数据存储量的数据库备机,以及获取各数据库备机中数据存储量大于平均数据存储量的数据库备机,进一步的,将数据存储量大于平均数据存储量的数据库备机上的部分子表迁移到数据存储量小于平均数据存储量的数据库备机上。
在一个实施例中,可以优先迁移超额数据存储量最大的数据库备机上的子表至差额数据量最大的数据库备机上;其中,超额数据存储量指的是数据库备机的数据存储量超出平均数据存储量的额度,差额数据存储量指的是数据库备机的数据存储量低于平均数据存储量的额度。
例如,可以将各数据库备机按照数据存储量进行排序,计算各数据库备机的超额存储量或者差额存储量,将超额存储量最大的数据库备机上的部分子表迁移到差额存储量最大的数据库备机上,使得子表迁移后该超额存储量最大的数据库备机的数据存储量不低于平均数据存储量,并且在此基础上使得该差额存储量最大的数据库备机的数据存储量尽量接近或达到平均数据存储量。
步骤S208,根据子表迁移情况更新数据库主机中的各数据表的子表在备机上的分布信息。
上述实施例,每间隔预设时长在数据库备机上进行负载均衡处理,使得各数据库备机上的数据存储量相对均衡,可以提高数据库备机整体的对读数据请求的响应速度。
在一个实施例中,上述数据库数据分片存储方法,还包括拆分子表的过程;如图3所示,在一个实施例中,拆分子表的过程包括以下步骤:
步骤S302,每间隔预设时长检查数据库备机上的子表的数据存储量是否超过第一阈值。
步骤S304,将数据存储量超过第一阈值的子表拆分成两个以上的子表,使得拆分后的子表的数据存储量不超过第一阈值。
在一个实施例中,按照预设大小拆分子表。
在数据库运行期间,某些子表可能随着数据的插入而变得数据存储量过大。本实施例中,将数据存储量过大的子表进行拆分,可以方便将子表从一个数据库备机迁移到另一个数据库备机,以平衡数据库备机之间的负载。
在一个实施例中,上述数据库数据分片存储方法,还包括合并子表的过程;如图4所示,在一个实施例中,合并子表的过程包括以下步骤:
步骤S402,每间隔预设时长检查数据库备机上是否存在同一数据表对应的多个数据存储量小于第二阈值的子表。
步骤S404,若存在同一数据表对应的多个数据存储量小于第二阈值的子表,则将同一数据表对应的多个数据存储量小于第二阈值的子表进行合并。
在一个实施例中,可将同一数据表对应的多个数据存储量小于第二阈值的子表合并成一个或多个子表,使得合并处理后同一数据库备机上的同一数据表对应的子表数量减少,且每一个子表的数据存储量不超过第一阈值。
数据库运行期间,某些子表可能随着数据的删除而变得数据存储量过少,以及,在数据表拆分以及子表拆分过程中,可能产生数据存储量较少的一个子表;而同一数据库备机上存储的同一数据表对应的子表数量过多,可能增加查询时间,本实施例中,将同一数据库备机上同一数据表对应的多个数据存储量较小的子表合并,可以提高数据查询速度。
在一个实施例中,同一个子表被存储到多个不同的数据库备机上,同一数据表对应的每一个子表所存储的数据库备机台数相同,也可以理解为同一数据表对应的每一个子表所存储的份数相同。
基于上述实施例中,在上述拆分子表过程中,若将某一台数据库备机上的子表进行拆分,则将其它数据库备机上的该子表按照相同的方式进行拆分。以及在上述合并子表过程中,若将某一台数据库备机上的多个子表进行合并,则将其它数据库备机上的该多个子表也按照相同的方式进行合并,若该多个子表分散存储在其它数据库备机上,则将该多个子表迁移到一个数据库备机上,并将该多个子表进行合并,所迁移至的数据库备机可为数据存储量相对较小的数据库备机。
上述实施例,可以确保数据库主机存储的数据表对应的不同的子表之间的数据不重叠,可以方便维护数据库主机中存储的数据表的子表在数据库备机上的分布信息。
在一个实施例中,上述数据库数据分片存储方法,还包括写数据过程;如图5所示,在一个实施例中,写数据过程包括以下步骤:
步骤S502,接收写数据请求。
写数据请求用于请求对某一数据表中的数据进行写操作。写操作包含修改操作、删除操作和插入操作中的一种或几种。
步骤S504,将写数据请求发送给数据库主机,以请求数据库主机根据写数据请求更新对应数据表中的数据。
步骤S506,接收数据库主机返回的数据更新结果。
步骤S508,向写数据请求的发送方返回数据更新结果。
本实施例中,上述数据库数据分片存储方法还包括以下步骤:
每间隔预设时长将数据库主机中的数据同步到数据库备机中。
上述实施例中,在数据库主机中更新对应数据表中的数据后,即向写数据请求的发送方返回数据更新结果,而不是等到数据库备机中的对应数据也更新完后才返回数据更新结果,可以提高对写数据请求的响应速度。
上述实施例采用将写数据请求统一发送给数据库主机、由数据库主机更新数据表中的数据的策略,进一步的,每间隔预设时长将数据库主机的数据同步到数据库备机中,可避免在多个数据库备机上直接更新数据而产生的数据不一致的问题。
如图6所示,在一个实施例中,一种基于数据分片存储的数据库数据查询方法,包括以下步骤:
步骤S602,接收数据查询请求。
数据查询请求可以理解为读数据请求,用于读取某一数据表或一些数据表中的数据,这一数据表或这些数据表即为数据查询请求所涉及的数据表。数据查询请求可以理解为用于读取其所涉及的数据表中的数据。
步骤S604,获取数据查询请求所涉及的数据库主机中存储的数据表。
其中,数据库主机中存储的各个数据表对应多个子表,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;而且数据库主机中存储的各个数据表对应的多个子表存储在多个数据库备机上,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表。
在一个实施例中,数据查询请求所涉及的数据表可称为目标数据表;数据查询请求中包含目标数据表的标识。
本申请文件中的数据查询请求对应的相关数据查询默认都是在目标数据表或者目标数据表对应的子表中所进行的数据查询。该目标数据表即本申请文件所述的数据查询请求所涉及的数据表。
步骤S606,根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机。
在一个实施例中,预先存储了数据库主机中存储的数据表的子表在数据库备机上的分布信息。
在一个实施例中,数据表的子表在数据库备机上的分布信息用于描述数据表的子表在数据库备机上的分布。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。数据表的子表在数据库备机上的分布信息描述了数据表、数据表对应的子表所存储的数据库备机,以及数据库备机所存储的数据表的子表的主键值范围之间的对应关系,其中每一个数据表用数据表标识表示,每一个数据库备机用数据库备机标识表示。
步骤S608,向所分布的数据库备机发送数据查询请求对应的子查询请求。
步骤S610,接收所分布的数据库备机返回的子查询结果。
步骤S612,向数据查询请求发送方返回子查询结果对应的数据查询结果。
上述基于数据分片存储的数据库数据查询方法中,数据库主机中存储的数据表对应的多个子表存储在多个数据库备机上,而且,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;接收到数据查询请求后,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机,在所分布的数据库备机上进行查询,得到数据查询结果;当某一数据表对应的子表被存储到不同的数据库备机上时,对该数据表的数据查询请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,加快对这类数据表的数据查询速度。而且,每一个数据库备机上都只是存储该类数据表的一部分数据,每一数据库备机需要查询的数据量变得更少,从而可以进一步加快该类数据表的数据查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
在一个实施例中,每一个子表存储对应数据表中一段连续主键值范围对应的数据。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围;
本实施例中,若数据查询请求中指定了主键值需要满足的条件,则向数据查询请求所涉及的数据表的子表所分布的数据库备机发送数据查询请求对应的子查询请求的步骤包括:
根据数据表的子表在数据库备机上的分布信息查询满足对应条件的主键值落入所存储的数据表子表的主键值范围的数据库备机,向查询得到的数据库备机发送数据查询请求对应的子查询请求。
例如,子表1存储某一数据表的主键值为1~500的记录,子表2存储该数据表的主键值为501~1000的记录,子表3存储该数据表的主键值为1001~1500的记录,子表1存储在数据库备机1上,子表2存储在数据库备机2上,子表3存储在数据库备机3上。
若数据查询请求中指定了主键值必须等于200,而200落入1~500的范围,数据库备机1存储主键值为1~500的记录,因此,可以向数据库备机1发送数据查询请求对应的子查询请求。
若数据查询请求中指定了主键值大于等于200而小于等于800,则可以向数据库备机1和数据库备机2发送数据查询请求对应的子查询请求。
本实施例中,可以查询到数据库备机上存储的数据表子表的主键值范围,从而,当数据查询请求中指定了所需要读取的数据的主键值需要满足的条件时,仅在满足该条件的主键值落入所存储的数据表子表的主键值范围的数据库备机上查询数据,而不需要在所有的数据库备机上或者对应数据表(需要读取的数据所在的数据表)的子表所分布的所有数据库备机上查询,从而可提高查询速度。
图7示出了上述实施例中的基于数据分片存储的数据库数据查询方法的一种执行流程。如图7所示,在一个实施例中,一种基于数据分片存储的数据库数据查询方法,包括以下步骤:
步骤S702,接收数据查询请求。
步骤S704,获取数据查询请求所涉及的数据库主机中存储的数据表。
步骤S706,根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机。
步骤S707,判断数据查询请求中是否指定了主键值需要满足的条件,若否,则执行步骤S708,若是,执行步骤S709。
步骤S708,向所分布的数据库备机中的所有数据库备机发送数据查询请求对应的子查询请求。
步骤S709,根据数据表的子表在数据库备机上的分布信息,查询满足对应条件的主键值落入所存储的数据表子表的主键值范围的数据库备机,向查询得到的数据库备机发送数据查询请求对应的子查询请求。
步骤S710,接收数据库备机返回的子查询结果。
数据库备机根据子查询请求查询数据得到子查询结果。
步骤S712,向数据查询请求发送方返回所述子查询结果对应的数据查询结果。
在一个实施例中,数据查询请求中包含目标字段和查询条件、以及可省略的对满足查询条件的目标字段值需进行的汇总计算操作的描述。其中,目标字段表示数据查询请求所涉及的数据表中需要读取的字段,查询条件用于表示需要读取的目标字段的值必须满足的条件。
数据查询请求中包含可省略的对满足查询条件的目标字段值需进行的汇总计算操作的描述,可以理解为,数据查询请求中可包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,也可以不包含对满足查询条件的目标字段值需进行的汇总计算操作的描述。
汇总计算操作包括求和操作、求最大值操作、求最小值操作、求平均值操作、统计数量操作以及代数运算中的一种或几种。在一个实施例中,求和操作对应SQL select语句中的sum()运算;求最大值操作对应SQL select语句中的max()运算;求最小值操作对应SQL select语句中的min()运算;求平均值操作对应SQL select语句中的avg()运算;统计数量对应SQL select语句中的count()运算;代数运算包括加、减、乘、除以及幂运算等等。
例如,某一数据查询请求中包含SQL SELECT语句,SQL SELECT语句的具体内容为:select age from student_table where student_ID>200。其中,student_table为一数据表的表名,age和student_ID为该数据表student_table的字段名。该SQL SELECT语句用于查询数据表student_table中student_ID>200的记录中的age的值。age即为该数据查询请求的目标字段,student_ID>200即为该数据查询请求的查询条件,该数据查询请求中缺省对满足查询条件的目标字段值需进行的汇总计算操作的描述。
若某一数据查询请求中包含的SQL SELECT语句的具体内容为:select sum(age)from student_table where student_ID>200。其中,sum()表示求和操作,其它符号的释义与上一SQL SELECT语句相同。该SQL SELECT语句用于查询数据表student_table中student_ID>200的记录中的age的值的总和。该数据查询请求中包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,且该描述表示对满足查询条件的目标字段值需进行的求和操作。
上述实施例中,当需要向多台数据库备机发送数据查询请求对应的子查询请求时,子查询请求包含数据查询请求中包含的目标字段和查询条件,以使得接收到子查询请求的数据库备机返回满足查询条件的目标字段的值,即子查询结果;
若数据查询请求中还包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,则上述基于数据分片存储的数据库数据查询方法还包括以下步骤:
将接收到子查询请求的数据库备机返回的满足查询条件的目标字段的值进行上述描述对应的汇总计算操作,得到数据查询结果。
本申请文件所述的多台可以理解为两台或两台以上。
在一个实施例中,若只需要向一台数据备机发送子查询请求,则子查询请求即为数据查询请求本身,或者说,子查询请求与数据查询请求相同。
图8示出了上述实施例中的基于数据分片存储的数据库数据查询方法的一种执行流程。如图8所示,在一个实施例中,一种基于数据分片存储的数据库数据查询方法,包括以下步骤:
步骤S802,接收数据查询请求。
步骤S804,获取数据查询请求所涉及的数据库主机中存储的数据表。
步骤S806,根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机。
步骤S807,判断所分布的数据库备机是否包含多台,以及判断数据查询请求中除了包含目标字段和查询条件外是否还包含对满足查询条件的目标字段值需要进行的汇总计算操作的描述,若所分布的数据库备机包含多台,且数据查询请求中除了包含目标字段和查询条件外还包含对满足查询条件的目标字段值需要进行的汇总计算操作的描述,则执行步骤S807-1,否则,执行步骤S808。
步骤S807-1,生成包含数据查询请求中所包含的目标字段和查询条件的子查询请求,该子查询请求用于请求接收到该子查询请求的数据库备机返回满足查询条件的目标字段的值,即子查询结果。
步骤S807-2,向所分布的数据库备机发送生成的子查询请求。
步骤S807-3,接收所分布的数据库备机返回的子查询结果,子查询结果中包含满足查询条件的目标字段的值。
步骤S807-4,将返回的子查询结果所包含的满足查询条件的目标字段的值进行上述描述对应的汇总计算操作,得到数据查询结果。
步骤S808,向所分布的数据库备机转发数据查询请求。
步骤S810,接收所分布的数据库备机返回的数据查询结果。
若所分布的数据库备机包含多台,则需要将多台数据库备机返回的数据查询结果进行聚集。可以理解为将多台数据库备机返回的数据查询结果进行累积。
例如,一台数据库备机返回一条记录,另一台数据库备机也返回一条记录,可以累积该两条记录,将该两条记录返回给数据查询请求发送方。
步骤S812,向数据查询请求发送方返回数据查询结果。
上述实施例中,当所分布的数据库备机包含多台,且数据查询请求表示需要对满足查询条件的目标字段的值进行汇总计算操作时,则将数据查询请求进行拆分,得到子查询请求,其中,子查询请求只包含数据查询请求中的目标字段的查询条件,而不包含对满足查询条件的目标字段值需要进行的汇总计算操作的描述,从而获得的子查询结果是还没有进行汇总计算操作的满足查询条件的目标字段的值,进一步的,统计对各数据库备机返回的子查询结果进行对应的汇总计算操作。
而若所分布的数据库备机只包含一台,或者,数据查询请求不包含对满足查询条件的目标字段的值进行汇总计算操作的描述,则可以直接向所分布的数据库备机转发数据查询请求。
在一个实施例中,同一个子表被存储到多个不同的数据库备机上;
本实施例中,子查询请求用于请求数据库备机返回子查询结果,该子查询结果所包含的数据满足数据查询请求的查询条件,且子查询结果中的数据对应有主键值;
即,子查询请求中相对于数据查询请求添加了主键作为目标字段。若数据查询请求的目标字段不包含主键,则可在数据查询请求中添加主键作为一个目标字段,得到子查询请求。
上述基于数据分片存储的数据库数据查询方法还包括步骤:根据主键值对各数据库备机返回的子查询结果进行去重处理,得到数据查询结果。若数据查询请求的目标字段不包含主键,则可将数据查询结果中的主键字段去除。
本实施例中,同一个子表被存储到多个不同的数据库备机上,可增加数据冗余,提高数据存储安全性,即使一个数据库备机上的数据被破坏了,该数据库备机上的数据还可以在其它数据库备机上找到,从而可提高数据存储安全性。而且,对于同一数据的多个读取请求,可以分配到不同的存储了该数据的数据库备机上进行并发处理,提高处理速度;而对于某一个数据的一个读取请求,可以将读取请求分配到存储了该数据的数据库备机中当前负载压力较小的数据库备机上,从而提高处理速度。
在一个实施例中,数据库主机中存储完整的数据库。完整的数据库包含多个数据表。
上述基于数据分片存储的数据库数据查询方法,在获取所述数据查询请求所涉及的数据库主机中存储的数据表的步骤之后,还包括以下步骤:
判断数据查询请求所涉及的数据库主机中存储的数据表是否包含多个数据表;
若是,则将数据查询请求发送给数据库主机,接收数据库主机返回的数据查询结果,向数据查询请求发送方返回数据查询结果;
否则,进入上述查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机的步骤。
图9示出了上述实施例中的基于数据分片存储的数据库数据查询方法的一种执行流程。如图9所示,在一个实施例中,一种基于数据分片存储的数据库数据查询方法,包括以下步骤:
步骤S902,接收数据查询请求。
步骤S904,获取数据查询请求所涉及的数据库主机中存储的数据表。
步骤S905,判断数据查询请求所涉及的数据库主机中存储的数据表是否包含多个数据表,若是,则执行步骤S905-1,否则,则执行步骤S906。
步骤S905-1,将数据查询请求发送给数据库主机,接收数据库主机返回的数据查询结果,向数据查询请求发送方返回数据查询结果。
步骤S906,根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机。
步骤S908,向所分布的数据库备机发送数据查询请求对应的子查询请求。
步骤S910,接收所分布的数据库备机返回的子查询结果。
步骤S912,向数据查询请求发送方返回子查询结果对应的数据查询结果。
当数据查询请求所涉及的数据库主机中存储的数据表包含多个数据表时,跨多个不同的数据库备机查询数据,需要比较复杂的操作,反而会降低查询速度。上述实施例中,若数据查询请求所涉及的数据库主机中存储的数据表包含多个数据表,则向数据库主机请求查询数据,否则,向对应的数据库备机请求查询数据,因此,可以从整体上提高查询速度。
在一个实施例中,本申请所述的基于数据分片存储的数据库数据查询方法可由管理服务器执行。图10示出一个实施例的基于数据分片存储的数据库数据查询方法中管理服务器与数据库主机以及数据库备机之间的交互时序示意图。
如图10所示,在一个实施例的基于数据分片存储的数据库数据查询方法中:
(1)管理服务器接收数据查询请求。
数据查询请求中包含目标字段和查询条件、以及可省略的对满足查询条件的目标字段值需进行的汇总计算操作的描述;
(2)管理服务器获取数据查询请求所涉及的数据库主机中存储的数据表;判断数据查询请求所涉及的数据库主机中存储的数据表是否包含多个数据表;
(3.1)若数据查询请求所涉及的数据表包含多个数据表,则将数据查询请求发送给数据库主机;
(4.1)接收数据库主机返回的数据查询结果;
(5.1)向数据查询请求发送方返回数据查询结果。
(3.2)若数据查询请求所涉及的数据表只包含一个数据表,则查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机,判断数据查询请求所涉及的数据表的子表所分布的数据库备机是否包含多台;
(4.2.1)若包含多台,则判断数据查询请求中除了包含目标字段和查询条件外是否还包含对满足查询条件的目标字段值需要进行的汇总计算操作的描述;
(5.2.1.1)若包含描述,则生成包含数据查询请求中所包含的目标字段和查询条件的子查询请求;
(6.2.1.1)向数据查询请求所涉及的数据表的子表所分布的多台数据库备机发送生成的子查询请求;该种情形下,图10以子表所分布的数据库备机为数据库备机1和数据库备机2为例进行示意;
(7.2.1.1)接收数据查询请求所涉及的数据表的子表所分布的多台数据库备机返回的子查询结果,子查询结果中包含满足查询条件的目标字段的值;
(8.2.1.1)将返回的子查询结果所包含的满足查询条件的目标字段的值进行上述描述对应的汇总计算操作,得到数据查询结果;
(9.2.1.1)向数据查询请求发送方返回数据查询结果。
(5.2.1.2)若不包含描述,则向数据查询请求所涉及的数据表的子表所分布的多台数据库备机转发数据查询请求;该种情形下,图10以子表所分布的数据库备机为数据库备机2和数据库备机3为例进行示意;
(6.2.1.2)接收数据查询请求所涉及的数据表的子表所分布的多台数据库备机返回的数据查询结果;
(7.2.1.2)将多台数据库备机返回的数据查询结果进行聚集;
(8.2.1.2)向数据查询请求发送方返回聚集后的数据查询结果。
(4.2.2)若数据查询请求所涉及的数据表的子表所分布的数据库备机只包含一台,则向数据查询请求所涉及的数据表的子表所分布的数据库备机转发数据查询请求;该种情形下,图10以子表所分布的数据库备机为数据库备机1为例进行示意
(5.2.2)接收数据查询请求所涉及的数据表的子表所分布的数据库备机返回的数据查询结果;
(6.2.2)向数据查询请求发送方返回数据查询结果。
在一个实施例中,上述基于数据分片存储的数据库数据查询方法还包括上述任一实施例中的数据库数据分片存储方法中的所有步骤。
如图11所示,一种数据库数据分片存储装置,包括子表生成模块1102、子表分配模块1104和分布信息维护模块1106,其中:
子表生成模块1102用于生成数据库主机中存储的各个数据表对应的多个子表。
其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠。
在一个实施例中,每一个子表存储对应数据表中一段连续主键值范围对应的数据。
在一个实施例中,子表生成模块1102生成的每一个子表的数据量不超过预设大小。
在一个实施例中,子表生成模块1102可复制数据库主机中存储的数据表,得到数据表副本;进一步的,将数据表拆分成多个子表。
在一个实施例中,子表生成模块1102可获取数据表中数据量小于预设大小的记录集最多可包含的记录条数,记为最大记录条数,按照该最大记录条数将数据表副本拆分成多个子表。拆分得到的子表中包含一个或零个记录条数小于该最大记录条数的子表,该子表之外的其它子表的记录条数都等于该最大记录条数。可以理解的,当数据表的记录条数为该最大记录条数的整数倍时,拆分得到的子表的记录条数全部等于该最大记录条数,否则,拆分得到的子表中包含一个记录条数小于该最大记录条数的子表。
子表分配模块1104用于将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表。
在一个实施例中,子表分配模块1104可将各个数据表对应的多个子表随机分配到所存在的多个数据库备机上进行存储。在这种方式下,一些数据表对应的所有子表有可能都分配到同一台数据库备机上进行存储,但总有一些数据表对应的子表被分配到多个不同的数据库备机上进行存储。
在一个实施例中,子表分配模块1104可将每一个数据表对应的多个子表分配到尽可能多的数据库备机上进行存储。
分布信息维护模块1106用于维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
在一个实施例中,数据表的子表在数据库备机上的分布信息用于描述数据表的子表在数据库备机上的分布。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。数据表的子表在数据库备机上的分布信息描述了数据表、数据表对应的子表所存储的数据库备机,以及数据库备机所存储的数据表的子表的主键值范围之间的对应关系,其中每一个数据表用数据表标识表示,每一个数据库备机用数据库备机标识表示。
上述数据库数据分片存储装置,生成数据库主机中存储的各个数据表对应的子表,将子表存储到多个数据库备机上,而且,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表,对该类数据表的读数据请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,可以加快查询速度;而且,每一个数据库备机上都只是存储该类数据表的一部分数据,需要查询的数据量变得更少,从而可以进一步加快查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
在一个实施例中,子表分配模块1104将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上的过程中,使得各数据库备机上的数据存储量相对均衡。
各数据库备机上的数据存储量相对均衡,可以理解为,两两数据库备机的数据存储量之间的绝对差值不超过预设范围。
在一个实施例中,子表分配模块1104可将各个数据表对应的多个子表平均分配到所存在的多个数据库备机上进行存储,各数据库备机所存储的子表数量的绝对差值不超过1。
本实施例中,由于各数据库备机上的数据存储量相对均衡,因此,不会导致一些数据库备机的数据读取压力过大,而一些数据库备机的数据读取压力过小,各数据库备机可以相对均衡的分摊读数据请求,因此,可以提高数据库备机整体的对读数据请求的响应速度。
在一个实施例中,数据库主机中存储完整的数据库。完整的数据库包含多个数据表。
本实施例中,由于数据库主机中存储完整的数据库,从而针对涉及到多个数据表的数据读取请求可以分配到数据库主机上,而不是分配到数据库备机上,从而可提高这类型的数据读取请求的响应速度,以至于提高整体的响应速度。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。
本实施例中,可以查询到数据库备机上存储的数据表子表的主键值范围,从而,当可以获取到所需要读取的数据的主键值需要满足的条件时,可以仅在满足该条件的主键值落入所存储的数据表子表的主键值范围的数据库备机上查询数据,而不需要在所有的数据库备机上或者对应数据表(需要读取的数据所在的数据表)的子表所分布的所有数据库备机上查询,从而可提高查询速度。
在一个实施例中,同一个子表被存储到多个不同的数据库备机上。
在一个实施例中,子表分配模块1104可将每一个子表存储到预设数量的多个不同的数据库备机上。例如,将每一个子表存储到3个不同的数据库备机上。
本实施例中,同一个子表被存储到多个不同的数据库备机上,可增加数据冗余,提高数据存储安全性,即使一个数据库备机上的数据被破坏了,该数据库备机上的数据还可以在其它数据库备机上找到,从而可提高数据存储安全性。而且,对于同一数据的多个读取请求,可以分配到不同的存储了该数据的数据库备机上进行并发处理,提高处理速度;而对于某一个数据的一个读取请求,可以将读取请求分配到存储了该数据的数据库备机中当前访问压力较小的数据库备机上,从而提高处理速度。
如图12所示,在一个实施例中,上述数据库数据分片存储装置,还包括负载均衡处理模块1202,用于每间隔预设时长在数据库备机上进行负载均衡处理。
在一个实施例中,负载均衡处理模块1202每次在数据库备机上进行负载均衡处理的过程包括:获取数据库备机中数据存储量相对较小的数据库备机;获取数据库备机中数据存储量相对较大的数据库备机;将数据存储量相对较大的数据库备机上的部分子表迁移到数据存储量相对较小的数据库备机上,使得各数据库备机上的数据存储量相对均衡;进一步的,根据子表迁移情况更新数据库主机中的各数据表的子表在备机上的分布信息。
在将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上之后,各数据库备机所存储的数据量之间的绝对差值不超过预设范围。
在一个实施例中,负载均衡处理模块1202可以计算各数据库备机的平均数据存储量,获取各数据库备机中数据存储量小于平均数据存储量的数据库备机,以及获取各数据库备机中数据存储量大于平均数据存储量的数据库备机,进一步的,将数据存储量大于平均数据存储量的数据库备机上的部分子表迁移到数据存储量小于平均数据存储量的数据库备机上。
在一个实施例中,负载均衡处理模块1202可以优先迁移超额数据存储量最大的数据库备机上的子表至差额数据量最大的数据库备机上;其中,超额数据存储量指的是数据库备机的数据存储量超出平均数据存储量的额度,差额数据存储量指的是数据库备机的数据存储量低于平均数据存储量的额度。
例如,负载均衡处理模块1202可以将各数据库备机按照数据存储量进行排序,计算各数据库备机的超额存储量或者差额存储量,将超额存储量最大的数据库备机上的部分子表迁移到差额存储量最大的数据库备机上,使得子表迁移后该超额存储量最大的数据库备机的数据存储量不低于平均数据存储量,并且在此基础上使得该差额存储量最大的数据库备机的数据存储量尽量接近或达到平均数据存储量。
上述实施例,每间隔预设时长在数据库备机上进行负载均衡处理,使得各数据库备机上的数据存储量相对均衡,可以提高数据库备机整体的对读数据请求的响应速度。
如图13所示,在一个实施例中,上述数据库数据分片存储装置,还包括子表拆分模块1302,用于每间隔预设时长检查数据库备机上的子表的数据存储量是否超过第一阈值,将数据存储量超过第一阈值的子表拆分成两个以上的子表,使得拆分后的子表的数据存储量不超过第一阈值。
在一个实施例中,子表拆分模块1302可按照预设大小拆分子表。
在数据库运行期间,某些子表可能随着数据的插入而变得数据存储量过大。本实施例中,将数据存储量过大的子表进行拆分,可以方便将子表从一个数据库备机迁移到另一个数据库备机,以平衡数据库备机之间的负载。
如图14所示,在一个实施例中,上述数据库数据分片存储装置,还包括子表合并模块1402,用于每间隔预设时长检查数据库备机上是否存在同一数据表对应的多个数据存储量小于第二阈值的子表,若存在同一数据表对应的多个数据存储量小于第二阈值的子表,则将同一数据表对应的多个数据存储量小于第二阈值的子表进行合并。
在一个实施例中,子表合并模块1402可将同一数据表对应的多个数据存储量小于第二阈值的子表合并成一个或多个子表,使得合并处理后同一数据库备机上的同一数据表对应的子表数量减少,且每一个子表的数据存储量不超过第一阈值。
数据库运行期间,某些子表可能随着数据的删除而变得数据存储量过少,以及,在数据表拆分以及子表拆分过程中,可能产生数据存储量较少的一个子表;而同一数据库备机上存储的同一数据表对应的子表数量过多,可能增加查询时间,本实施例中,将同一数据库备机上同一数据表对应的多个数据存储量较小的子表合并,可以提高数据查询速度。
在一个实施例中,同一个子表被存储到多个不同的数据库备机上,同一数据表对应的每一个子表所存储的数据库备机台数相同,也可以理解为同一数据表对应的每一个子表所存储的份数相同。
基于上述实施例中,在上述拆分子表过程中,若子表拆分模块1302将某一台数据库备机上的子表进行拆分,则子表拆分模块1302将其它数据库备机上的该子表按照相同的方式进行拆分。以及在上述合并子表过程中,若子表合并模块1402将某一台数据库备机上的多个子表进行合并,则子表合并模块1402将其它数据库备机上的该多个子表也按照相同的方式进行合并,若该多个子表分散存储在其它数据库备机上,则子表合并模块1402将该多个子表迁移到一个数据库备机上,并将该多个子表进行合并,所迁移至的数据库备机可为数据存储量相对较小的数据库备机。
上述实施例,可以确保数据库主机存储的数据表对应的不同的子表之间的数据不重叠,可以方便维护数据库主机中存储的数据表的子表在数据库备机上的分布信息。
如图15所示,在一个实施例中,上述数据库数据分片存储装置,还包括写数据模块1502和数据同步模块1504,其中:
写数据模块1502用于接收写数据请求。
写数据请求用于请求对某一数据表中的数据进行写操作。写操作包含修改操作、删除操作和插入操作中的一种或几种。
写数据模块1502还用于将写数据请求发送给数据库主机,以请求数据库主机根据写数据请求更新对应数据表中的数据,接收数据库主机返回的数据更新结果,向写数据请求的发送方返回数据更新结果。
数据同步模块1504用于每间隔预设时长将数据库主机中的数据同步到数据库备机中。
上述实施例中,在数据库主机中更新对应数据表中的数据后,即向写数据请求的发送方返回数据更新结果,而不是等到数据库备机中的对应数据也更新完后才返回数据更新结果,可以提高对写数据请求的响应速度。
上述实施例采用将写数据请求统一发送给数据库主机、由数据库主机更新数据表中的数据的策略,进一步的,每间隔预设时长将数据库主机的数据同步到数据库备机中,可避免在多个数据库备机上直接更新数据而产生的数据不一致的问题。
如图16所示,在一个实施例中,一种基于数据分片存储的数据库数据查询装置,包括查询请求接收模块1602、数据表获取模块1604、分布备机查询模块1606、子查询请求发送模块1608、子查询结果接收模块1610和查询结果返回模块1612,其中:
查询请求接收模块1602用于接收数据查询请求。
数据查询请求可以理解为读数据请求,用于读取某一数据表或一些数据表中的数据,这一数据表或这些数据表即为数据查询请求所涉及的数据表。数据查询请求可以理解为用于读取其所涉及的数据表中的数据。
数据表获取模块1604用于获取数据查询请求所涉及的数据库主机中存储的数据表。
其中,数据库主机中存储的各个数据表对应多个子表,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;而且数据库主机中存储的各个数据表对应的多个子表存储在多个数据库备机上,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表。
在一个实施例中,数据查询请求所涉及的数据表可称为目标数据表;数据查询请求中包含目标数据表的标识。
本申请文件中的数据查询请求对应的相关数据查询默认都是在目标数据表或者目标数据表对应的子表中所进行的数据查询。该目标数据表即本申请文件所述的数据查询请求所涉及的数据表。
分布备机查询模块1606用于根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机。
在一个实施例中,基于数据分片存储的数据库数据查询装置还包括分布信息存储模块(图中未示出),用于存储数据库主机中存储的数据表的子表在数据库备机上的分布信息。
在一个实施例中,数据表的子表在数据库备机上的分布信息用于描述数据表的子表在数据库备机上的分布。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。数据表的子表在数据库备机上的分布信息描述了数据表、数据表对应的子表所存储的数据库备机,以及数据库备机所存储的数据表的子表的主键值范围之间的对应关系,其中每一个数据表用数据表标识表示,每一个数据库备机用数据库备机标识表示。
子查询请求发送模块1608用于向所分布的数据库备机发送数据查询请求对应的子查询请求。
子查询结果接收模块1610用于接收所分布的数据库备机返回的子查询结果。
查询结果返回模块1612用于向数据查询请求发送方返回子查询结果对应的数据查询结果。
上述基于数据分片存储的数据库数据查询装置中,数据库主机中存储的数据表对应的多个子表存储在多个数据库备机上,而且,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;接收到数据查询请求后,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机,在所分布的数据库备机上进行查询,得到数据查询结果;当某一数据表对应的子表被存储到不同的数据库备机上时,对该数据表的数据查询请求可以被分配到多个数据库备机上,从而可在多个数据库备机上并发查询数据,加快对这类数据表的数据查询速度。而且,每一个数据库备机上都只是存储该类数据表的一部分数据,每一数据库备机需要查询的数据量变得更少,从而可以进一步加快该类数据表的数据查询速度;以至于可以提高数据库主机和数据库备机对于读数据请求的整体响应速度。
在一个实施例中,每一个子表存储对应数据表中一段连续主键值范围对应的数据。
在一个实施例中,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围;
本实施例中,若数据查询请求中指定了主键值需要满足的条件,则子查询请求发送模块1608用于根据数据表的子表在数据库备机上的分布信息查询满足对应条件的主键值落入所存储的数据表子表的主键值范围的数据库备机,向查询得到的数据库备机发送数据查询请求对应的子查询请求。
本实施例中,可以查询到数据库备机上存储的数据表子表的主键值范围,从而,当数据查询请求中指定了所需要读取的数据的主键值需要满足的条件时,仅在满足该条件的主键值落入所存储的数据表子表的主键值范围的数据库备机上查询数据,而不需要在所有的数据库备机上或者对应数据表(需要读取的数据所在的数据表)的子表所分布的所有数据库备机上查询,从而可提高查询速度。
在一个实施例中,数据查询请求中包含目标字段和查询条件、以及可省略的对满足查询条件的目标字段值需进行的汇总计算操作的描述。其中,目标字段表示数据查询请求所涉及的数据表中需要读取的字段,查询条件用于表示需要读取的目标字段的值必须满足的条件。数据查询请求中可包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,也可以不包含对满足查询条件的目标字段值需进行的汇总计算操作的描述。
汇总计算操作包括求和操作、求最大值操作、求最小值操作、求平均值操作、统计数量操作以及代数运算中的一种或几种。在一个实施例中,求和操作对应SQL select语句中的sum()运算;求最大值操作对应SQL select语句中的max()运算;求最小值操作对应SQL select语句中的min()运算;求平均值操作对应SQL select语句中的avg()运算;统计数量对应SQL select语句中的count()运算;代数运算包括加、减、乘、除以及幂运算等等。
上述实施例中,当需要向多台数据库备机发送数据查询请求对应的子查询请求时,子查询请求包含数据查询请求中包含的目标字段和查询条件,以使得接收到子查询请求的数据库备机返回满足查询条件的目标字段的值,即子查询结果;上述基于数据分片存储的数据库数据查询装置还包括子查询请求生成模块(图中未示出),用于生成包含数据查询请求中所包含的目标字段和查询条件的子查询请求,该子查询请求用于请求接收到该子查询请求的数据库备机返回满足查询条件的目标字段的值,即子查询结果
上述基于数据分片存储的数据库数据查询装置还包括汇总计算模块(图中未示出),用于若数据查询请求中还包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,将接收到子查询请求的数据库备机返回的满足查询条件的目标字段的值进行上述描述对应的汇总计算操作,得到数据查询结果。
本申请文件所述的多台可以理解为两台或两台以上。
在一个实施例中,若只需要向一台数据备机发送子查询请求,则子查询请求即为数据查询请求本身,或者说,子查询请求与数据查询请求相同。
在一个实施例中,上述基于数据分片存储的数据库数据查询装置还包括结果聚集模块(图中未示出),用于若所分布的数据库备机包含多台,则需要将多台数据库备机返回的数据查询结果进行聚集。可以理解为将多台数据库备机返回的数据查询结果进行累积。
例如,一台数据库备机返回一条记录,另一台数据库备机也返回一条记录,结果聚集模块可以累积该两条记录。
查询结果返回模块1612用于向数据查询请求发送方返回数据查询结果。
上述实施例中,当所分布的数据库备机包含多台,且数据查询请求表示需要对满足查询条件的目标字段的值进行汇总计算操作时,则将数据查询请求进行拆分,得到子查询请求,其中,子查询请求只包含数据查询请求中的目标字段的查询条件,而不包含对满足查询条件的目标字段值需要进行的汇总计算操作的描述,从而获得的子查询结果是还没有进行汇总计算操作的满足查询条件的目标字段的值,进一步的,统计对各数据库备机返回的子查询结果进行对应的汇总计算操作。
而若所分布的数据库备机只包含一台,或者,数据查询请求不包含对满足查询条件的目标字段的值进行汇总计算操作的描述,则可以直接向所分布的数据库备机转发数据查询请求。
在一个实施例中,同一个子表被存储到多个不同的数据库备机上;
本实施例中,子查询请求用于请求数据库备机返回子查询结果,该子查询结果所包含的数据满足数据查询请求的查询条件,且子查询结果中的数据对应有主键值;
即,子查询请求中相对于数据查询请求添加了主键作为目标字段。上述基于数据分片存储的数据库数据查询装置还包括子查询请求生成模块(图中未示出),用于若数据查询请求的目标字段不包含主键,则在数据查询请求中添加主键作为一个目标字段,得到子查询请求。
上述基于数据分片存储的数据库数据查询装置还包括去重模块(图中未示出),用于根据主键值对各数据库备机返回的子查询结果进行去重处理,得到数据查询结果。若数据查询请求的目标字段不包含主键,则去重模块还可将数据查询结果中的主键字段去除。
本实施例中,同一个子表被存储到多个不同的数据库备机上,可增加数据冗余,提高数据存储安全性,即使一个数据库备机上的数据被破坏了,该数据库备机上的数据还可以在其它数据库备机上找到,从而可提高数据存储安全性。而且,对于同一数据的多个读取请求,可以分配到不同的存储了该数据的数据库备机上进行并发处理,提高处理速度;而对于某一个数据的一个读取请求,可以将读取请求分配到存储了该数据的数据库备机中当前负载压力较小的数据库备机上,从而提高处理速度。
在一个实施例中,数据库主机中存储完整的数据库。完整的数据库包含多个数据表。
如图17所示,上述基于数据分片存储的数据库数据查询装置,还包括数据表数量判断模块1702,用于在获取数据查询请求所涉及的数据库主机中存储的数据表的之后,判断数据查询请求所涉及的数据库主机中存储的数据表是否包含多个数据表;
子查询请求发送模块1608用于若数据查询请求所涉及的数据库主机中存储的数据表包含多个数据表,则将数据查询请求发送给数据库主机,子查询结果接收模块1610用于接收数据库主机返回的数据查询结果,查询结果返回模块1612向数据查询请求发送方返回数据查询结果;
本实施例中,分布备机查询模块1606用于当数据查询请求所涉及的数据库主机中存储的数据表不包含多个数据表时,查询数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机。
当数据查询请求所涉及的数据库主机中存储的数据表包含多个数据表时,跨多个不同的数据库备机查询数据,需要比较复杂的操作,反而会降低查询速度。上述实施例中,若数据查询请求所涉及的数据库主机中存储的数据表包含多个数据表,则向数据库主机请求查询数据,否则,向对应的数据库备机请求查询数据,因此,可以从整体上提高查询速度。
在一个实施例中,上述基于数据分片存储的数据库数据查询装置还包括上述任一实施例中的数据库数据分片存储装置。也可以理解为,上述基于数据分片存储的数据库数据查询装置还包括上述任一实施例中的数据库数据分片存储装置中的所有模块。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据库数据分片存储方法,包括以下步骤:
生成数据库主机中存储的各个数据表对应的多个子表,其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;
将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
2.根据权利要求1所述的数据库数据分片存储方法,其特征在于,所述数据库主机中存储完整的数据库。
3.根据权利要求1所述的数据库数据分片存储方法,其特征在于,数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围。
4.根据权利要求1所述的数据库数据分片存储方法,其特征在于,同一个子表被存储到多个不同的数据库备机上。
5.根据权利要求1所述的数据库数据分片存储方法,其特征在于,还包括每间隔预设时长在数据库备机上进行负载均衡处理,所述在数据库备机上进行负载均衡处理包括以下步骤:
获取数据库备机中数据存储量相对较小的数据库备机,
以及获取数据库备机中数据存储量相对较大的数据库备机;
将数据存储量相对较大的数据库备机上的部分子表迁移到数据存储量相对较小的数据库备机上,使得各数据库备机上的数据存储量相对均衡;
根据子表迁移情况更新数据库主机中的各数据表的子表在备机上的分布信息。
6.根据权利要求5所述的数据库数据分片存储方法,其特征在于,还包括以下步骤:
每间隔预设时长检查数据库备机上的子表的数据存储量是否超过第一阈值;
将数据存储量超过第一阈值的子表拆分成两个以上的子表,使得拆分后的子表的数据存储量不超过第一阈值。
7.根据权利要求1所述的数据库数据分片存储方法,其特征在于,还包括以下步骤:
每间隔预设时长检查数据库备机上是否存在同一数据表对应的多个数据存储量小于第二阈值的子表;
若存在同一数据表对应的多个数据存储量小于第二阈值的子表,则将同一数据表对应的多个数据存储量小于第二阈值的子表进行合并。
8.根据权利要求1所述的数据库数据分片存储方法,其特征在于,还包括以下步骤:
接收写数据请求;
将所述写数据请求发送给数据库主机,以请求数据库主机根据写数据请求更新对应数据表中的数据;
接收数据库主机返回的数据更新结果;
向所述写数据请求的发送方返回所述数据更新结果;
以及,所述方法还包括以下步骤:
每间隔预设时长将数据库主机中的数据同步到数据库备机中。
9.一种基于数据分片存储的数据库数据查询方法,包括以下步骤:
接收数据查询请求;
获取所述数据查询请求所涉及的数据库主机中存储的数据表,其中,数据库主机中存储的各个数据表对应多个子表,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;而且数据库主机中存储的各个数据表对应的多个子表存储在多个数据库备机上,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
根据数据库主机中存储的数据表的子表在数据库备机上的分布信息,查询所述数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机;
向所述所分布的数据库备机发送所述数据查询请求对应的子查询请求;
接收所述所分布的数据库备机返回的子查询结果;
向所述数据查询请求发送方返回所述子查询结果对应的数据查询结果。
10.根据权利要求9所述的基于数据分片存储的数据库数据查询方法,其特征在于,所述数据表的子表在数据库备机上的分布信息包括存储了数据表对应的子表的数据库备机的标识,以及数据库备机上存储的数据表子表的主键值范围;
若所述数据查询请求中指定了主键值需要满足的条件,则向所述所分布的数据库备机发送所述数据查询请求对应的子查询请求的步骤包括:
根据数据表的子表在数据库备机上的分布信息查询满足对应条件的主键值落入所存储的数据表子表的主键值范围的数据库备机,向查询得到的数据库备机发送所述数据查询请求对应的子查询请求。
11.根据权利要求9或10所述的基于数据分片存储的数据库数据查询方法,其特征在于,所述数据查询请求中包含目标字段和查询条件、以及可省略的对满足查询条件的目标字段值需进行的汇总计算操作的描述;
当需要向多台数据库备机发送所述子查询请求时,所述子查询请求包含所述目标字段和所述查询条件,以使得接收到所述子查询请求的数据库备机返回满足所述查询条件的所述目标字段的值,即所述子查询结果;
若所述数据查询请求中还包含对满足查询条件的目标字段值需进行的汇总计算操作的描述,则所述方法还包括以下步骤:
将接收到所述子查询请求的数据库备机返回的满足所述查询条件的所述目标字段的值进行所述描述对应的汇总计算操作,得到所述数据查询结果。
12.根据权利要求9所述的基于数据分片存储的数据库数据查询方法,其特征在于,同一个子表被存储到多个不同的数据库备机上;
所述子查询请求用于请求数据库备机返回子查询结果,该子查询结果所包含的数据满足所述数据查询请求的查询条件,且子查询结果中的数据对应有主键值;
所述方法还包括步骤:根据主键值对各数据库备机返回的子查询结果进行去重处理,得到所述数据查询结果。
13.根据权利要求9所述的基于数据分片存储的数据库数据查询方法,其特征在于,所述数据库主机中存储完整的数据库;
在所述获取所述数据查询请求所涉及的数据库主机中存储的数据表的步骤之后,所述方法还包括以下步骤:
判断所述数据查询请求所涉及的数据库主机中存储的数据表是否包含多个数据表;
若是,则将所述数据查询请求发送给所述数据库主机,接收所述数据库主机返回的数据查询结果,向所述数据查询请求发送方返回所述数据查询结果;
否则,进入所述查询所述数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机的步骤。
14.一种数据库数据分片存储装置,其特征在于,包括:
子表生成模块,用于生成数据库主机中存储的各个数据表对应的多个子表,其中,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;
子表分配模块,用于将数据库主机中存储的各个数据表对应的多个子表存储到多个数据库备机上,使得数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
分布信息维护模块,用于维护数据库主机中的各数据表的子表在数据库备机上的分布信息。
15.一种基于数据分片存储的数据库数据查询装置,其特征在于,包括:
查询请求接收模块,用于接收数据查询请求;
数据表获取模块,用于获取所述数据查询请求所涉及的数据库主机中存储的数据表,其中,数据库主机中存储的各个数据表对应多个子表,每一数据表对应的所有子表的数据覆盖对应的数据表,且各子表之间的数据不重叠;而且数据库主机中存储的各个数据表对应的多个子表存储在多个数据库备机上,数据库主机中存储的各个数据表中存在对应的子表被分配到多个数据库备机上的数据表;
分布备机查询模块,用于查询所述数据查询请求所涉及的数据库主机中存储的数据表的子表所分布的数据库备机;
子查询请求发送模块,用于向所述所分布的数据库备机发送所述数据查询请求对应的子查询请求;
子查询结果接收模块,用于接收所述所分布的数据库备机返回的子查询结果;
查询结果返回模块,用于向所述数据查询请求发送方返回所述子查询结果对应的数据查询结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510428470.2A CN105045877B (zh) | 2015-07-20 | 2015-07-20 | 数据库数据分片存储方法和装置、数据查询方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510428470.2A CN105045877B (zh) | 2015-07-20 | 2015-07-20 | 数据库数据分片存储方法和装置、数据查询方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105045877A CN105045877A (zh) | 2015-11-11 |
CN105045877B true CN105045877B (zh) | 2018-10-12 |
Family
ID=54452424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510428470.2A Active CN105045877B (zh) | 2015-07-20 | 2015-07-20 | 数据库数据分片存储方法和装置、数据查询方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105045877B (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106933926B (zh) * | 2015-12-31 | 2019-11-12 | 北京国双科技有限公司 | 数据表的过滤方法及装置 |
CN106021492B (zh) * | 2016-05-20 | 2019-06-25 | 浪潮软件集团有限公司 | 一种对表格数据进行转存的方法及装置 |
CN106126550B (zh) * | 2016-06-15 | 2019-08-23 | 西北农林科技大学 | 一种arn数据库系统及其分析构建科学假说的方法 |
CN106407244A (zh) * | 2016-06-21 | 2017-02-15 | 平安科技(深圳)有限公司 | 基于多数据库的数据查询方法、系统和装置 |
CN106909597B (zh) * | 2016-06-30 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 一种数据库迁移方法和装置 |
CN107818114A (zh) * | 2016-09-14 | 2018-03-20 | 中国移动通信有限公司研究院 | 一种数据处理方法、装置及数据库 |
CN106484596A (zh) * | 2016-10-18 | 2017-03-08 | 安徽天达网络科技有限公司 | 一种计算机安全监控系统 |
CN108363641B (zh) | 2017-01-26 | 2022-01-14 | 华为技术有限公司 | 一种主备机数据传递方法、控制节点以及数据库系统 |
CN107315761B (zh) * | 2017-04-17 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 一种数据更新方法、数据查询方法及装置 |
CN107580032B (zh) * | 2017-08-23 | 2020-04-24 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及设备 |
CN108287868B (zh) * | 2017-12-19 | 2019-02-26 | 北京国电通网络技术有限公司 | 一种数据库查询、数据块划分方法和装置 |
CN108280148A (zh) * | 2018-01-02 | 2018-07-13 | 中国民生银行股份有限公司 | 一种数据迁移方法和数据迁移服务器 |
CN110046178A (zh) * | 2018-01-17 | 2019-07-23 | 北京京东尚科信息技术有限公司 | 分布式数据查询的方法和装置 |
CN109165257A (zh) * | 2018-08-07 | 2019-01-08 | 中国建设银行股份有限公司 | 数据查询方法及相关系统、设备和存储介质 |
CN109062736A (zh) * | 2018-08-20 | 2018-12-21 | 广州视源电子科技股份有限公司 | 一种数据备份方法、装置、设备及存储介质 |
CN109117275A (zh) * | 2018-08-31 | 2019-01-01 | 平安科技(深圳)有限公司 | 基于数据分片的对账方法、装置、计算机设备及存储介质 |
CN109656684A (zh) * | 2018-12-11 | 2019-04-19 | 杭州涂鸦信息技术有限公司 | 一种Kafka的分区方法、分区系统及相关装置 |
CN110083602B (zh) * | 2019-04-15 | 2021-07-06 | 北京三快在线科技有限公司 | 一种基于hive表的数据存储及数据处理的方法及装置 |
US11442916B2 (en) * | 2020-04-21 | 2022-09-13 | Netapp, Inc. | Flat object storage namespace in an object storage system |
CN111600799B (zh) * | 2020-05-20 | 2022-05-20 | 金蝶蝶金云计算有限公司 | 分片路由方法、服务器及计算机存储介质 |
CN112540993A (zh) * | 2020-12-22 | 2021-03-23 | 北京金和网络股份有限公司 | 表单数据库构建方法、构建装置和查询方法 |
CN113268483A (zh) * | 2021-05-24 | 2021-08-17 | 北京金山云网络技术有限公司 | 请求处理方法和装置、电子设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510223A (zh) * | 2009-04-03 | 2009-08-19 | 成都市华为赛门铁克科技有限公司 | 一种数据处理方法和系统 |
CN101566986A (zh) * | 2008-04-21 | 2009-10-28 | 阿里巴巴集团控股有限公司 | 联机事务处理中的数据处理方法和装置 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102053982A (zh) * | 2009-11-02 | 2011-05-11 | 阿里巴巴集团控股有限公司 | 一种数据库信息管理方法和设备 |
CN102402586A (zh) * | 2011-10-24 | 2012-04-04 | 深圳华强电子交易网络有限公司 | 一种分布式数据存储方法 |
-
2015
- 2015-07-20 CN CN201510428470.2A patent/CN105045877B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101566986A (zh) * | 2008-04-21 | 2009-10-28 | 阿里巴巴集团控股有限公司 | 联机事务处理中的数据处理方法和装置 |
CN101510223A (zh) * | 2009-04-03 | 2009-08-19 | 成都市华为赛门铁克科技有限公司 | 一种数据处理方法和系统 |
CN102053982A (zh) * | 2009-11-02 | 2011-05-11 | 阿里巴巴集团控股有限公司 | 一种数据库信息管理方法和设备 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102402586A (zh) * | 2011-10-24 | 2012-04-04 | 深圳华强电子交易网络有限公司 | 一种分布式数据存储方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105045877A (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105045877B (zh) | 数据库数据分片存储方法和装置、数据查询方法和装置 | |
CN108363813B (zh) | 数据存储方法、装置和系统 | |
US8924364B1 (en) | Efficient management of file system quota trees | |
CN107491523B (zh) | 存储数据对象的方法及装置 | |
CN104077423B (zh) | 一种基于一致性散列的结构化数据存储、查询和迁移方法 | |
US10795577B2 (en) | De-duplication of client-side data cache for virtual disks | |
CN106294352B (zh) | 一种文件处理方法、装置和文件系统 | |
JP5701398B2 (ja) | 計算機システム、データ管理方法及びプログラム | |
CN106790324A (zh) | 内容分发方法、虚拟服务器管理方法、云平台和系统 | |
CN101867607A (zh) | 一种分布式数据存取方法、装置及系统 | |
CN105095313B (zh) | 一种数据访问方法和设备 | |
JP2015503777A (ja) | ファイルクローンを利用したシングルインスタンス化方法及びそれを用いたファイルストレージ装置 | |
CN109522283A (zh) | 一种重复数据删除方法及系统 | |
CN110445822B (zh) | 一种对象存储方法及装置 | |
US10656839B2 (en) | Apparatus and method for cache provisioning, configuration for optimal application performance | |
CN112181309A (zh) | 一种海量对象存储的在线扩容方法 | |
CN106960020B (zh) | 一种创建索引表的方法及设备 | |
CN105893542A (zh) | 一种云存储系统中的冷数据文件重分布方法及系统 | |
CN107302561A (zh) | 一种云存储系统中热点数据副本放置方法 | |
CN107562757A (zh) | 基于分布式文件系统的查询、访问方法、装置及系统 | |
CN108090125A (zh) | 一种非查询式的重复数据删除方法及装置 | |
CN109460345B (zh) | 实时数据的计算方法及系统 | |
CN107368608A (zh) | 基于arc替换算法的hdfs小文件缓存管理方法 | |
CN108089816A (zh) | 一种基于负载均衡的查询式重复数据删除方法及装置 | |
CN106155934A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 518000 the first floor of A1 building, Nanshan Zhiyuan 1001, Nanshan District Xue Yuan Avenue, Shenzhen, Guangdong. Applicant after: SINFOR Polytron Technologies Inc Address before: 518000 the first floor of A1 building, Nanshan Zhiyuan 1001, Nanshan District Xue Yuan Avenue, Shenzhen, Guangdong. Applicant before: Shenxinfu Electronics Science and Technology Co., Ltd., Shenzhen |
|
GR01 | Patent grant | ||
GR01 | Patent grant |