数据存储方法、数据查询方法及服务器与流程

文档序号:27311442发布日期:2021-11-09 22:34阅读:144来源:国知局
1.本技术属于数据库的数据处理
技术领域
:,尤其涉及数据存储方法、数据查询方法、数据存储装置、服务器及计算机可读存储介质。
背景技术
::2.在数据库中,使用分区(partition)技术来优化大数据表的查询性能是很常见的技术,其基本原理就是按照时间或其他维度,将经常一起访问的数据划分到同一个分区。当收到查询请求时,数据库优化器先分析需要访问哪些分区,在得到分析结果后,扫描时将跳过不需要访问的分区,从而极大地减少了数据的扫描范围,提升了数据库的查询性能。3.但是,随着技术的发展,一台服务器具有多核中央处理器(centralprocessingunit,cpu)和挂载多个磁盘的配置越来越常见,在这种情况下,若仍是与具有单核、单个磁盘的配置的服务器一样,仅根据时间或其他维度划分数据并存储,则难以继续提升数据库的查询性能。技术实现要素:4.本技术实施例提供了数据存储方法、数据查询方法及服务器,可以解决现有的方法在存储数据时,若只考虑按照时间或其他维度划分数据,并按照划分的数据进行存储时,难以进一步提升数据库的性能的问题。5.第一方面,本技术实施例提供了一种数据存储方法,应用于服务器,包括:6.根据预设的分区字段,从待存储数据中提取对应的分区字段值;7.根据所述分区字段值确定所述待存储数据所属的分区;8.若所述待存储数据所属的分区不存在,则根据指定磁盘中各个磁盘的剩余可用磁盘空间,从所述指定磁盘中选择目标磁盘,所述指定磁盘包括所述服务器挂载的至少2个磁盘,所述目标磁盘的剩余可用磁盘空间满足预设空间要求;9.在所述目标磁盘中创建所述待存储数据所属的分区;10.在创建的所述分区中存储所述待存储数据。11.第二方面,本技术实施例提供了一种数据查询方法,应用于服务器,包括:12.确定目标分区,所述目标分区为待查询数据所属的分区;13.确定所述服务器空闲的中央处理器的核心数;14.在存在空闲的中央处理器时,采用数量不少于1且不多于所述服务器空闲的中央处理器的核心数的线程,从指定磁盘的所述目标分区查找所述待查询数据,所述指定磁盘包括所述服务器挂载的至少2个磁盘。15.第三方面,本技术实施例提供了一种数据存储装置,应用于服务器,包括:16.分区字段值提取模块,用于根据预设的分区字段,从待存储数据中提取对应的分区字段值;17.分区确定模块,用于根据所述分区字段值确定所述待存储数据所属的分区;18.目标磁盘确定模块,用于若所述待存储数据所属的分区不存在,则根据指定磁盘中各个磁盘的剩余可用磁盘空间,从所述指定磁盘中选择目标磁盘,所述指定磁盘包括所述服务器挂载的至少2个磁盘,所述目标磁盘的剩余可用磁盘空间满足预设空间要求;19.分区创建模块,用于在所述目标磁盘中创建所述待存储数据所属的分区;20.数据存储模块,用于在创建的所述分区中存储所述待存储数据。21.第四方面,本技术实施例提供了一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面或第二方面所述的方法。22.第五方面,本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面或第二方面所述的方法。23.第六方面,本技术实施例提供了一种计算机程序产品,当计算机程序产品在服务器上运行时,使得服务器执行上述第一方面或第二方面所述的方法。24.本技术实施例与现有技术相比存在的有益效果是:25.在本技术实施例中,指定磁盘包括服务器挂载的至少2个磁盘,目标磁盘是从指定磁盘中选择出的剩余可用磁盘空间满足预设空间要求的磁盘,而随着存储的数据的增多,指定磁盘中的各个磁盘的剩余可用磁盘空间也必然发生变化,也即,当需要存储不同的待存储数据时,从指定磁盘中确定的目标磁盘通常不是同一个磁盘,因此,通过上述方式确定目标磁盘,并在确定的目标磁盘中创建分区,以及在创建的分区存储待存储数据,能够更合理地利用服务器挂载的多个目标磁盘对数据进行存储,且使得存储在各个目标磁盘的数据的数据量更均衡。进一步地,由于各个目标磁盘的输入/输出(input/output,i/o)能力是并行的,因此,通过上述方式,能够有效提高服务器的硬件资源的利用率,以及,有效提高服务器的数据存储性能。附图说明26.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。27.图1是本技术一实施例提供的一种数据存储方法的流程图;28.图2是本技术一实施例提供的一种创建分区的流程图;29.图3是本技术一实施例提供的一种数据查询方法的流程图;30.图4是本技术一实施例提供的另一种数据查询方法的流程图;31.图5是本技术另一实施例提供的一种数据存储装置的结构示意图;32.图6是本技术一实施例提供的一种数据查询装置的结构示意图;33.图7是本技术另一实施例提供的一种服务器的结构示意图。具体实施方式34.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。35.应当理解,当在本技术说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。36.还应当理解,在本技术说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。37.在本技术说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。38.实施例一:39.在数据库中,当数据表的数据量比较大时,一般选择用分区技术来提升数据库的查询性能。即将需要经常一起访问的数据放在一起(比如放在同一个文件里),当收到查询请求时,数据库优化器先分析需要访问哪些分区,扫描时跳过不需要访问的分区,这样,能够极大地减少数据的扫描范围,从而提升了数据库的查询性能。40.以超市的销售记录表为例,假设需要从该销售记录表分析超市每月销售业绩的变化趋势,那么,在这种场景下,一般数据库处理技术如下:41.1)创建销售记录表,并指定该销售记录表按销售日期进行分区存储,分区粒度为月,建表语句如下:42.createtablesales43.(44.xhintprimarykeyauto_incrementcomment"销售记录序号",45.rqdatecomment"销售日期",46.spvarchar(128)comment"商品名称",47.djdoublecomment"商品单价",48.sldoublecomment"商品数量",49.zjdoublecomment"商品总价",50....51.)comment"销售记录表"52.partitionbyrange(rq)granularitybymonth53.2)假设要分析最近一个季度每月的销售业绩情况,查询语句如下:54.selecttoyyyymm(rq)as'销售月份',sum(zj)as'销售总额'55.fromsales56.whererq>='2021‑01‑01'andrq<='2021‑04‑30'57.groupbytoyyyymm(rq)58.3)数据库在收到上述查询语句后,经过语法分析、sql优化后,能够得知此次查询只需要访问p202101、p202102、p202103、p202104这4个分区,故数据库会跳过其他分区而只需要读取p202101、p202102、p202103、p202104这4个分区的记录进行分析,从而极大地减少了数据的扫描范围,提升了数据库的查询性能。59.在上述场景案例中,数据库通过分区技术,极大地减少了数据的扫描范围,从而提升了数据库的查询性能。60.但是,随着多核cpu、多磁盘的服务器越来越成为主流,在多核cpu、多磁盘服务器的情况下,若仅使用上述的分区的技术,而没有结合服务器本身的配置进行考量,比如,当服务器具有多核cpu和挂载多个磁盘的配置时,其对应的存储方式与服务器只有单核cpu的配置所对应的存储方式并无区别,那么,将不能有效利用服务器的硬件资源,同时难以提升数据库的查询性能。61.为了解决上述技术问题,本技术实施例提供了一种数据存储方法,该方法应用于服务器中,且该服务器挂载的磁盘的数量大于或等于2。具体地,先从待存储数据中提取出与预设的分区字段对应的分区字段值,再根据该分区字段值确定该待存储数据所属的分区。若判断出该分区不存在,则根据指定磁盘中各个磁盘的剩余可用磁盘空间,选择用于存储待存储数据的目标磁盘,并在选择的目标磁盘存储该待存储数据。其中,指定磁盘包括服务器挂载的磁盘中的至少2个磁盘。62.由于目标磁盘是从指定磁盘中选择出的剩余可用磁盘空间满足预设空间要求的磁盘,而随着存储的数据的增多,指定磁盘中的各个磁盘的剩余可用磁盘空间也必然发生变化,也即,当需要存储不同的待存储数据时,从指定磁盘中确定的目标磁盘通常不是同一个磁盘,因此,通过上述方式确定目标磁盘,并在确定的目标磁盘中创建分区,以及在创建的分区存储待存储数据,能够更合理地对数据进行存储。63.下面结合附图对本技术实施例提供的数据存储方法进行描述。64.图1示出了本技术实施例提供的一种数据存储方法的流程图,应用于服务器,详述如下:65.步骤s11,根据预设的分区字段,从待存储数据中提取对应的分区字段值。66.其中,这里预设的分区字段是指新建数据表时,所指定的分区字段。比如,若数据表新建时包括语句“rqdatecomment"销售日期"和“partitionbyrange(rq)granularitybymonth””,则预设的分区字段为“rq”,分区字段值为具体的销售日期。67.在本实施例中,假设预设的分区字段为“rq”,待存储数据为(123456,'2021‑06‑01','青岛啤酒',8,2,16...),则该待存储数据的分区字段值为'2021‑06‑01'。68.步骤s12,根据上述分区字段值确定上述待存储数据所属的分区。69.本实施例中,假设分区字段值为'2021‑06‑01',则该待存储数据所属的分区为'p2021‑06'。70.步骤s13,若上述待存储数据所属的分区不存在,则根据指定磁盘中各个磁盘的剩余可用磁盘空间,从上述指定磁盘中选择目标磁盘,上述指定磁盘包括上述服务器挂载的至少2个磁盘,上述目标磁盘的剩余可用磁盘空间满足预设空间要求。71.本实施例中,通过判断待存储数据是否为其所属的分区的第一条数据,来判断指定磁盘中是否存在待存储数据所属的分区。例如,假设待存储数据为(123456,'2021‑06‑01','青岛啤酒',8,2,16...),从中提取销售日期'2021‑06‑01'(即2021年6月1日),该销售日期属于2021年6月份,故该待存储数据分区到p2021‑06。由于分区是动态创建的,即只有产生了该分区的数据,需要向该分区写入数据时,才会创建该分区,若上述的待存储数据是6月份的第一条销售数据,则表明当前的指定磁盘中不存在“p2021‑06”这一分区,反之,若上述的待存储数据不是6月份的第一条销售数据,则表明当前的指定磁盘中已经存在“p2021‑06”这一分区。但分区p2021‑07是不存在的,只有产生2021年7月份第一条销售数据时,才会动态实时创建分区p2021‑07。72.在本实施例中,若判断出待存储数据所属的分区不存在,则计算指定磁盘中的各个磁盘的剩余可用磁盘空间,并将剩余可用磁盘空间满足预设空间要求的一个磁盘作为目标磁盘。其中,预设空间要求包括:剩余可用磁盘空间最大。即将指定磁盘中,具有最大剩余可用磁盘空间的磁盘作为目标磁盘。73.步骤s14,在上述目标磁盘中创建上述待存储数据所属的分区。74.本实施例中,每次对待存储数据进行存储时,若判断出待存储数据所属的分区不存在,则从指定磁盘中选择出一个目标磁盘,再在选择出的目标磁盘中创建对应的分区。由于每次确定的目标磁盘可能不同,因此,属于同一个数据表,但属于不同分区的数据可能存储在不同的目标磁盘,从而有利于提高各个磁盘的数据量的均衡性。75.在一些实施例中,若上述指定磁盘只包括上述服务器挂载的1个磁盘,则直接在该磁盘上创建待存储数据所属的分区。76.步骤s15,在创建的上述分区中存储上述待存储数据。77.在本技术实施例中,指定磁盘包括服务器挂载的至少2个磁盘,目标磁盘是从指定磁盘中选择出的剩余可用磁盘空间满足预设空间要求的磁盘,而随着存储的数据的增多,指定磁盘中的各个磁盘的剩余可用磁盘空间也必然发生变化,也即,当需要存储不同的待存储数据时,从指定磁盘中确定的目标磁盘通常不是同一个磁盘,因此,通过上述方式确定目标磁盘,并在确定的目标磁盘中创建分区,以及在创建的分区存储待存储数据,能够更合理地利用服务器挂载的多个目标磁盘对数据进行存储,且使得存储在各个目标磁盘的数据的数据量更均衡。进一步地,由于各个目标磁盘的输入/输出(input/output,i/o)能力是并行的,因此,通过上述方式,能够有效提高服务器的硬件资源的利用率,以及,有效提高服务器的数据存储性能。78.在一些实施例中,若指定磁盘中存在待存储数据所属的分区,则直接在存在的分区中存储该待存储数据。79.在一些实施例中,上述指定磁盘为创建上述待存储数据对应的数据表时所指定的磁盘。当然,任一个指定磁盘均属于服务器挂载的磁盘。80.本实施例中,由于在创建数据表时可以指定该数据表的数据所存储的磁盘,因此,能够保证后续将数据存入用户希望存储的磁盘。81.例如,采用以下语句创建数据表:82.createtablesales83.(84.xhintprimarykeyauto_incrementcomment"销售记录序号″,85.rqdatecomment"销售日期",86.spvarchar(128)comment"商品名称",87.djdoublecomment"商品单价",88.sldoublecomment"商品数量",89.zjdoublecomment"商品总价",90....91.)comment"销售记录表"92.partitionbyrange(rq)93.granularitybymonth94.includepath("/home/sda","/home/sdb","/home/sdc")95.上述语句中:96.1)partitionbyrange(rq),定义了销售记录表(sales)使用销售日期(rq)字段进行分区存储。97.2)granularitybymonth,定义了数据分区的粒度,即数据按月分区,同一个月份的数据放入同一个分区。98.3)includepath("/home/sda","/home/sdb","/home/sdc"),表示服务器挂载了3个磁盘(即指定磁盘),其对应目录路径分别为"/home/sda"、"/home/sdb"、"/home/sdc",可以使用这3个磁盘存储销售记录表的分区数据。99.在一些实施例中,为了使得指定磁盘中的各个磁盘存储的数据的数据量更均衡,则上述步骤s13中的根据指定磁盘中各个磁盘的剩余可用磁盘空间,从上述指定磁盘中选择目标磁盘,包括:100.a1、若上述指定磁盘包括上述服务器挂载的2个磁盘,则确定上述指定磁盘中各个磁盘的剩余可用磁盘空间。101.a2、将上述指定磁盘中较大的剩余可用磁盘空间所对应的磁盘作为上述目标磁盘。102.本实施例中,若指定磁盘包括的服务器挂载的磁盘的数量等于2,则分别计算这两个磁盘的剩余可用磁盘空间,并将具有较大的剩余可用磁盘空间所对应的磁盘作为目标磁盘。由于目标磁盘后续将用于存储待存储数据,因此,选择具有较大的剩余可用磁盘空间的磁盘作为目标磁盘,能够提高该待存储数据的存储成功率,且有利于使得指定磁盘中的各个磁盘存储的数据的数据量更均衡。103.当然,若两个磁盘的剩余可用磁盘空间相等,则选择任一个磁盘作为目标磁盘。104.在一些实施例中,若指定磁盘包括的磁盘的数量不小于3,则为了使得指定磁盘中的各块磁盘上的分区数量相对均衡,上述步骤s13中的根据指定磁盘中各个磁盘的剩余可用磁盘空间,从上述指定磁盘中选择目标磁盘,包括:105.b1、若上述指定磁盘包括上述服务器挂载的至少3个磁盘,则根据上述指定磁盘中各个磁盘的剩余可用磁盘空间,确定上述指定磁盘中最小的剩余可用磁盘空间所对应的磁盘。106.本实施例中,分别计算并比较指定磁盘中各个磁盘的剩余可用磁盘空间,确定出具有最小的剩余可用磁盘空间所对应的磁盘。107.b2、从上述指定磁盘中剔除上述最小的剩余可用磁盘空间所对应的磁盘,得到候选磁盘。108.例如,假设指定磁盘包括磁盘a、磁盘b和磁盘c,且磁盘a、磁盘b和磁盘c的剩余可用磁盘空间分别为984gb、944gb和934gb,则最小的剩余可用磁盘空间所对应的磁盘为磁盘c,从指定磁盘中剔除该磁盘c,得到的候选磁盘为磁盘a和磁盘b。109.b3、根据各个上述候选磁盘中已创建的分区的数量,从各个上述候选磁盘中选择上述目标磁盘。110.具体地,统计各个候选磁盘当前已创建的分区的数量,并选择已创建的分区的数量较少的候选磁盘作为目标磁盘。优选地,选择已创建的分区的数量最少的候选磁盘作为目标磁盘。111.在本实施例中,由于在指定磁盘包括服务器挂载的至少3个磁盘时,同时结合磁盘的剩余可用磁盘空间以及磁盘已创建的分区的数量来确定目标磁盘,而目标磁盘后续用于存储待存储数据,因此,使得指定磁盘中的各个磁盘存储的数据量相对均衡,以及,使得指定磁盘中的各个磁盘创建的分区数量也相对均衡,从而使得数据的存储和查询都有一个相对好的性能。112.在一些实施例中,为了便于后续能够快速查找到所需的数据,则在上述步骤s15之后,包括:113.记录上述创建的分区与上述目标磁盘的映射关系。114.本实施例中,若目标磁盘采用目录表示,则可通过记录分区与目录路径的映射关系来记录该分区与目标磁盘的映射关系。由于记录了创建的分区与目标磁盘的映射关系,因此,后续在确定出待查询数据所属的分区后,可根据该映射关系,直接查找该分区对应的目标磁盘,再在该目标磁盘查找该待查询数据。由于指定磁盘所包含的磁盘数量通常大于1,因此,后续查找时直接在目标磁盘查找,而不是在指定磁盘中的各个磁盘中查找,从而缩短了查找到数据的时间。另外,由于记录了创建的分区与目标磁盘的映射关系,因此,当获取到一个待存储数据后,可根据记录的映射关系快速判断出该待存储数据所属的分区是否存在。例如,若已记录了待存储数据所属的分区与目标磁盘的映射关系,则判定该待存储数据所属的分区已存在,否则,判定该待存储数据所属的分区不存在。115.为了更清楚地描述本技术实施例中创建新分区的方法,下面结合附图2进行描述。116.参考图2,当获取到待存储数据后,确定该待存储数据所属的分区。若判断出没有存在该分区,则需要创建一个新分区。具体地:117.步骤s21,判断是否只有一个目录路径(一个目录路径对应一个磁盘)可用,若是,执行步骤s22,否则,执行步骤s23。118.步骤s22,将该唯一可用目录路径作为创建分区的目录路径。119.步骤s23,分析所有目录路径剩余可用磁盘空间,剔除最小的剩余可用磁盘空间所对应的目录路径,并将剩余的目录路径作为候选目标路径(即上述的候选磁盘)。120.步骤s24,判断是否只有一个候选目录路径,若是,执行步骤s25,否则,执行步骤s26。121.步骤s25,将该唯一候选目录路径作为创建分区的目录路径。122.步骤s26,分析所有候选目录路径已创建的分区数量,将分区数量最少的目录路径作为创建分区的目录路径(即上述的目标磁盘)。123.步骤s27,在选择的目录路径中创建待存储数据所属的分区。124.步骤s28,记录创建的分区与选择的目录路径的映射关系。下面以创建新分区p2021‑06来说明其创建过程。125.假设服务器上共有3块磁盘,对应的目录路径依次为"/home/sda"、"/home/sdb"、"/home/sdc",每块磁盘空间的大小均为1tb,现在已有p2021‑01、p2021‑02、p2021‑03、p2021‑04、p2021‑05这5个分区,其信息如下表1。126.表1:[0127][0128]按图2所示,执行步骤s21~步骤s23,在步骤s23中根据剩余可用磁盘空间大小确定候选目录路径。[0129]/home/sda剩余可用磁盘空间=1tb‑20gb‑20gb=984gb[0130]/home/sdb剩余可用磁盘空间=1tb‑80gb=944gb[0131]/home/sdc剩余可用磁盘空间=1tb‑40gb‑50gb=934gb[0132]其中,/home/sdc剩余可用磁盘空间最小,故确定候选目录路径为(/home/sda,/home/sdb)。[0133]继续进入步骤s24~步骤s26,在步骤s26中根据候选目录路径的已创建的分区数量来确定创建分区的目录路径。[0134]/home/sda已有分区数量:2[0135]/home/sdb已有分区数量:1[0136]选择已创建的分区数量最少的作为创建分区的目录路径。故选择/home/sdb作为创建分区的目录路径。[0137]继续执行步骤s27,在选定的创建分区的目录路径/home/sdb上创建新分区,如在/home/sdb目录路径下创建sales_p2021‑06子目录,作为sales表的p2021‑06分区的数据存储目录路径(完整路径/home/sdb/sales_p2021‑06)。[0138]最后,记录分区与目录路径的映射关系(实际上就是记录哪个分区放哪个磁盘里)。如下表2所示。[0139]表2:[0140]表分区磁盘/目录路径salesp2021‑01/home/sdasalesp2021‑02/home/sdbsalesp2021‑03/home/sdcsalesp2021‑04/home/sdasalesp2021‑05/home/sdcsalesp2021‑06/home/sdb[0141]应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。[0142]实施例二:[0143]图3示出了本技术实施例提供的一种数据查询方法的流程图,该方法应用于服务器,详述如下:[0144]步骤s31,确定目标分区,上述目标分区为待查询数据所属的分区。[0145]本实施例中,根据待查询数据中的分区字段值确定该待查询数据所属的分区。例如,假设需要查询2021‑01‑01到2021‑06‑30的数据,这个查询范围涉及p2021‑01、p2021‑02、p2021‑03、p2021‑04、p2021‑05、p2021‑06这6个目标分区。[0146]步骤s32,确定上述服务器空闲的中央处理器的核心数。[0147]其中,服务器包括的核心数大于1。[0148]本实施例中,当cpu在执行空闲任务时,表明该cpu处于空闲状态。[0149]步骤s33,在存在空闲的中央处理器时,采用数量不少于1且不多于上述服务器空闲的中央处理器的核心数的线程,从指定磁盘的上述目标分区查找上述待查询数据,上述指定磁盘包括上述服务器挂载的至少2个磁盘。[0150]本实施例中,可采用预先生成的线程,从指定磁盘中对待查询数据进行查找。或者,在需要进行待查询数据的查找时,生成相应数量的线程,从指定磁盘中对待查询数据进行查找。[0151]本技术实施例中,在确定待查询数据所属的分区,以及,存在空闲的中央处理器时,采用大于或等于1且小于或等于服务器空闲的中央处理器的核心数的线程,从指定磁盘中的目标分区查找该待查询数据。由于指定磁盘包括服务器挂载的至少2个磁盘,因此,本技术实施例能够实现在挂载至少2个磁盘的服务器中对待查询数据的查找。并且,由于查询所采用的线程数量大于或等于1且小于或等于服务器空闲的中央处理器的核心数,而中央处理器在空闲时,能够实现对数据的快速查询,因此,上述方法能够提高数据的查询性能。[0152]在一些实施例中,上述步骤s33可根据记录的分区与目标磁盘的映射关系,直接在目标磁盘(而非指定磁盘)中进行数据的查找,从而进一步提高数据的查询性能。[0153]在一些实施例中,上述数据查询方法,还包括:[0154]确定上述目标分区所对应的目标磁盘的数量,上述目标磁盘为上述指定磁盘中创建了上述目标分区的磁盘。[0155]本实施例中,当目标分区有多个时,该多个目标分区可能分别在多个目标磁盘中创建,也即,该多个目标分区可能对应多个目标磁盘。例如,假设目标分区为p2021‑01、p2021‑02、p2021‑03、p2021‑04、p2021‑05这5个分区,对应的目标磁盘有home/sda、/home/sdb以及/home/sdc,即这5个分区对应的目标磁盘的数量为3。[0156]对应地,上述采用数量不少于1且不多于上述服务器空闲的中央处理器的核心数的线程,从上述指定磁盘的上述目标分区查找上述待查询数据,包括:[0157]c1、若上述目标磁盘的数量不大于上述服务器空闲的中央处理器的核心数,则采用与上述目标磁盘的数量相同数量的线程,从上述目标磁盘的上述目标分区查找上述待查询数据,上述线程的数量不少于1。[0158]c2、若上述目标磁盘的数量大于上述服务器空闲的中央处理器的核心数,则采用与上述服务器空闲的中央处理器的核心数相同数量的线程,从上述目标磁盘的上述目标分区查找上述待查询数据,上述线程的数量不少于1。[0159]本实施例中,确定目标磁盘的数量和服务器空闲的中央处理器的核心数的较小值,并选取数量与确定的较小值相同的线程进行数据的查询。通过上述处理,能够避免在服务器空闲的中央处理器的核心数多于目标磁盘的数量时,采用多余的线程进行数据查找时所导致的资源浪费,以及,能够避免在中央处理器繁忙时,强制采用过多的线程进行数据查找时所导致的资源争夺加剧。[0160]在一些实施例中,上述步骤c1,包括:[0161]采用与上述目标磁盘的数量相同数量的线程,并行对上述目标磁盘进行查找,以在对应的上述目标分区查找上述待查询数据。[0162]本实施例中,若目标磁盘的数量不大于服务器空闲的中央处理器的核心数,则对每一个目标磁盘,均采用一个线程进行查找。由于多个线程同时对多个目标磁盘进行查找,因此,能够有效提高数据的查询性能。[0163]上述步骤c2,包括:[0164]c21、确定各个上述目标磁盘所包含的目标分区的数量。[0165]c22、按照包含的目标分区的数量,对各个上述目标磁盘进行降序排序。[0166]c23、采用与上述服务器空闲的中央处理器的核心数相同的线程,并行对排序在前的m个目标磁盘进行并行查找,并在查找结束后继续对未查找过的目标磁盘进行查找,以在对应的上述目标分区查找上述待查询数据,上述m为上述服务器空闲的中央处理器的核心数。[0167]本实施例中,若目标磁盘的数量大于服务器空闲的中央处理器的核心数,则优先在分区数量较多的m个目标磁盘中进行数据的并行查找,等并行查找结束后,再按照分区数量的降序排序结果对后续的目标磁盘进行数据的查找。[0168]为了更清楚地描述如何进行数据查询的过程,下面结合图4进行描述。[0169]在图4中,首先获取查询语句,该查询语句包括待查询数据,之后执行下面的步骤:[0170]步骤s41,分析确定查询语句需要扫描的表分区,该表分区即为待查询数据所属的分区。[0171]步骤s42,查询表分区与目录路径的映射关系表,得到需要访问的目录路径(数量记为n)。[0172]若存储数据时,记录了该数据所属的分区与目录路径(即实施例一的目标磁盘)的映射关系,则可根据记录的映射关系查找出与表分区对应的目录路径,进而缩小了查找范围,有利于提高查找效率。[0173]步骤s43,判断n是否等于1,若是,则执行步骤s410,否则,执行步骤s44。[0174]步骤s44,分析当前相对空闲的cpu的核心数m。[0175]步骤s45,判断m是否等于1,若是,则执行步骤s410,否则,执行步骤s46。[0176]步骤s46,判断m是否大于或等于n,若是,则执行步骤s49,否则,执行步骤s47。[0177]步骤s47,将需要访问的目录路径按其需要扫描的表分区数量降序排序后,放入待处理队列。[0178]步骤s48,使用m个线程并行查询,各线程依次从待处理队列中取目录路径处理相应的表分区的数据。[0179]具体地,使用m个线程优先从m个目录路径中进行数据的并行查找。由于对数据进行并行查找,因此,能够有效利用多核服务器的硬件资源,且并行查找有利于提高数据的查询性能。[0180]步骤s49,使用n个线程并行查询,一个线程对应处理一个目录路径的分区数据。[0181]步骤s410,使用1个线程处理所有待处理的表分区的数据。[0182]下面以一个具体的查询为例来介绍本技术实施例提供的数据查询方法。[0183]假设现在需要分析2021年每月的销售业绩情况,查询sql如下:[0184]selectmonth(rq)as'月份',sum(zj)as'月销售额'fromsaleswhererq>='2021‑01‑01'andrq<='2021‑06‑30'groupbymonth(rq)[0185]1)数据库优化器通过分析sql可知,需要查询2021‑01‑01到2021‑06‑30的数据,这个查询范围涉及p2021‑01、p2021‑02、p2021‑03、p2021‑04、p2021‑05、p2021‑06这6个分区。[0186]2)查询表分区与目录路径的映射关系表,得到此次查询需要访问的目录路径,即/home/sda:p2021‑01、p2021‑04,/home/sdb:p2021‑02、p2021‑06,/home/sdbc:p2021‑03、p2021‑05。[0187]3)如果此时只有1个空闲的cpu核心,则使用1个线程处理/home/sda:p2021‑01、p2021‑04,/home/sdb:p2021‑02、p2021‑06,/home/sdc:p2021‑03、p2021‑05这3个目录路径上的6个分区的数据。[0188]4)如果此时只有2个空闲的cpu核心,则使用2个线程处理。首先将(任务一/home/sda:p2021‑01、p2021‑04,任务二/home/sdb:p2021‑02、p2021‑06,任务三/home/sdc:p2021‑03、p2021‑05)放入待处理的任务队列中,线程1取任务一执行,线程2取任务二执行,线程1或线程2执行完任务后,继续从待处理的任务队列中取任务三执行,直至所有任务执行完。[0189]5)如果此时有3个及以上的空闲cpu核心,则使用3个线程处理。线程1处理/home/sda:p2021‑01、p2021‑04,线程2处理/home/sdb:p2021‑02、p2021‑06,线程3处理/home/sdc:p2021‑03、p2021‑05。[0190]应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。[0191]实施例三:[0192]对应于上文实施例一的数据存储方法,图5示出了本技术实施例提供的数据存储装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。[0193]参照图5,该数据存储装置5应用于服务器,包括:分区字段值提取模块51、分区确定模块52、目标磁盘确定模块53、分区创建模块54以及数据存储模块55。其中:[0194]分区字段值提取模块51,用于根据预设的分区字段,从待存储数据中提取对应的分区字段值。[0195]其中,这里预设的分区字段是指新建数据表时,所指定的分区字段。[0196]分区确定模块52,用于根据分区字段值确定待存储数据所属的分区。[0197]目标磁盘确定模块53,用于若待存储数据所属的分区不存在,则根据指定磁盘中各个磁盘的剩余可用磁盘空间,从指定磁盘中选择目标磁盘,指定磁盘包括服务器挂载的至少2个磁盘,目标磁盘的剩余可用磁盘空间满足预设空间要求。[0198]分区创建模块54,用于在目标磁盘中创建待存储数据所属的分区。[0199]数据存储模块55,用于在创建的分区中存储待存储数据。[0200]在本技术实施例中,指定磁盘包括服务器挂载的至少2个磁盘,目标磁盘是从指定磁盘中选择出的剩余可用磁盘空间满足预设空间要求的磁盘,而随着存储的数据的增多,指定磁盘中的各个磁盘的剩余可用磁盘空间也必然发生变化,也即,当需要存储不同的待存储数据时,从指定磁盘中确定的目标磁盘通常不是同一个磁盘,因此,通过上述方式确定目标磁盘,并在确定的目标磁盘中创建分区,以及在创建的分区存储待存储数据,能够更合理地利用服务器挂载的多个目标磁盘对数据进行存储,且使得存储在各个目标磁盘的数据的数据量更均衡。进一步地,由于各个目标磁盘的输入/输出(input/output,i/o)能力是并行的,因此,通过上述方式,能够有效提高服务器的硬件资源的利用率,以及,有效提高服务器的数据存储性能。[0201]在一些实施例中,该数据存储装置5还包括:[0202]分区存储模块,用于若指定磁盘中存在待存储数据所属的分区,则直接在存在的分区中存储该待存储数据。[0203]在一些实施例中,上述指定磁盘为创建上述待存储数据对应的数据表时所指定的磁盘。当然,任一个指定磁盘均属于服务器挂载的磁盘。[0204]本实施例中,由于在创建数据表时可以指定该数据表的数据所存储的磁盘,因此,能够保证后续将数据存入用户希望存储的磁盘。[0205]在一些实施例中,目标磁盘确定模块53在根据指定磁盘中各个磁盘的剩余可用磁盘空间,从指定磁盘中选择目标磁盘时,具体用于:[0206]若指定磁盘包括服务器挂载的2个磁盘,则确定指定磁盘中各个磁盘的剩余可用磁盘空间;将指定磁盘中较大的剩余可用磁盘空间所对应的磁盘作为目标磁盘。[0207]在一些实施例中,目标磁盘确定模块53在根据指定磁盘中各个磁盘的剩余可用磁盘空间,从指定磁盘中选择目标磁盘时,具体用于:[0208]若指定磁盘包括服务器挂载的至少3个磁盘,则根据指定磁盘中各个磁盘的剩余可用磁盘空间,确定指定磁盘中最小的剩余可用磁盘空间所对应的磁盘;从指定磁盘中剔除最小的剩余可用磁盘空间所对应的磁盘,得到候选磁盘;根据各个候选磁盘中已创建的分区的数量,从各个候选磁盘中选择目标磁盘。[0209]在一些实施例中,该数据存储装置5还包括:[0210]映射关系记录模块,用于记录创建的分区与目标磁盘的映射关系。[0211]需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。[0212]实施例四:[0213]对应于上文实施例二的数据查询方法,图6示出了本技术实施例提供的数据查询装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。[0214]参照图6,该数据查询装置6应用于服务器,包括:目标分区确定模块61、核心数确定模块62、数据查询模块63。其中:[0215]目标分区确定模块61,用于确定目标分区,上述目标分区为待查询数据所属的分区。[0216]核心数确定模块62,用于确定上述服务器空闲的中央处理器的核心数。[0217]数据查询模块63,用于在存在空闲的中央处理器时,采用数量不少于1且不多于上述服务器空闲的中央处理器的核心数的线程,从指定磁盘的上述目标分区查找上述待查询数据,上述指定磁盘包括上述服务器挂载的至少2个磁盘。[0218]本技术实施例中,在确定待查询数据所属的分区,以及,存在空闲的中央处理器时,采用大于或等于1且小于或等于服务器空闲的中央处理器的核心数的线程,从指定磁盘中的目标分区查找该待查询数据。由于指定磁盘包括服务器挂载的至少2个磁盘,因此,本技术实施例能够实现在挂载至少2个磁盘的服务器中对待查询数据的查找。并且,由于查询所采用的线程数量大于或等于1且小于或等于服务器空闲的中央处理器的核心数,而中央处理器在空闲时,能够实现对数据的快速查询,因此,上述方法能够提高数据的查询性能。[0219]在一些实施例中,上述数据查询装置6,还包括:[0220]目标磁盘的数量确定模块,用于确定上述目标分区所对应的目标磁盘的数量,上述目标磁盘为上述指定磁盘中创建了上述目标分区的磁盘。[0221]对应地,上述数据查询模块63在采用数量不少于1且不多于上述服务器空闲的中央处理器的核心数的线程,从上述指定磁盘的上述目标分区查找上述待查询数据时,具体用于:[0222]若上述目标磁盘的数量不大于上述服务器空闲的中央处理器的核心数,则采用与上述目标磁盘的数量相同数量的线程,从上述目标磁盘的上述目标分区查找上述待查询数据,上述线程的数量不少于1;[0223]若上述目标磁盘的数量大于上述服务器空闲的中央处理器的核心数,则采用与上述服务器空闲的中央处理器的核心数相同数量的线程,从上述目标磁盘的上述目标分区查找上述待查询数据,上述线程的数量不少于1。[0224]在一些实施例中,上述采用与上述目标磁盘的数量相同数量的线程,从上述目标磁盘的上述目标分区查找上述待查询数据,包括:[0225]采用与上述目标磁盘的数量相同数量的线程,并行对上述目标磁盘进行查找,以在对应的上述目标分区查找上述待查询数据。[0226]上述采用与上述服务器空闲的中央处理器的核心数相同数量的线程,从上述目标磁盘的上述目标分区查找上述待查询数据,包括:[0227]确定各个上述目标磁盘所包含的目标分区的数量;按照包含的目标分区的数量,对各个上述目标磁盘进行降序排序;采用与上述服务器空闲的中央处理器的核心数相同的线程,并行对排序在前的m个目标磁盘进行并行查找,并在查找结束后继续对未查找过的目标磁盘进行查找,以在对应的上述目标分区查找上述待查询数据,上述m为上述服务器空闲的中央处理器的核心数。[0228]需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。[0229]实施例五:[0230]图7为本技术一实施例提供的服务器的结构示意图。如图7所示,该实施例的服务器7包括:至少一个处理器70(图7中仅示出一个处理器)、存储器71以及存储在所述存储器71中并可在所述至少一个处理器70上运行的计算机程序72,所述处理器70执行所述计算机程序72时实现上述任意各个方法实施例中的步骤。[0231]所述服务器7可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该服务器可包括,但不仅限于,处理器70、存储器71。本领域技术人员可以理解,图7仅仅是服务器7的举例,并不构成对服务器7的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。[0232]所称处理器70可以是中央处理单元(centralprocessingunit,cpu),该处理器70还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field‑programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。[0233]所述存储器71在一些实施例中可以是所述服务器7的内部存储单元,例如服务器7的硬盘或内存。所述存储器71在另一些实施例中也可以是所述服务器7的外部存储设备,例如所述服务器7上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器71还可以既包括所述服务器7的内部存储单元也包括外部存储设备。所述存储器71用于存储操作系统、应用程序、引导装载程序(bootloader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器71还可以用于暂时地存储已经输出或者将要输出的数据。[0234]所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0235]本技术实施例还提供了一种网络设备,该网络设备包括:至少一个处理器、存储器以及存储在所述存储器中并可在所述至少一个处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意各个方法实施例中的步骤。[0236]本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。[0237]本技术实施例提供了一种计算机程序产品,当计算机程序产品在服务器上运行时,使得服务器执行时实现可实现上述各个方法实施例中的步骤。[0238]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(rom,read‑onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质。例如u盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。[0239]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。[0240]本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。[0241]在本技术所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。[0242]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0243]以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1