本技术属于计算机优化领域,更具体地,涉及一种用于netcdf文件的变量数据缓存方法和系统。
背景技术:
1、netcdf(network common data form)是一种用于存储科学数据的自描述、机器无关的数据格式,其支持面向数组的科学数据的创建、访问和共享。netcdf被广泛应用于气象学、地球科学、环境科学等领域,用于存储各种类型的多维数组数据。随着科学数据规模的增长,直接从netcdf文件中读取数据的效率逐渐成为一个瓶颈,尤其是在需要频繁并发访问大量数据的应用场景下。
2、netcdf以数组的格式存储和获取数据。经典的netcdf数据模型包含变量、维度、属性,是netcdf文件的核心。在netcdf-4之后,经典数据模型进行了增强,引入了一些新特性,如groups、无限制多维度、以及新的数据类型(包括用户定义的类型)。group是一种组织数据的方式,类似于unix文件系统中的目录。netcdf文件具有如下特征:(1)用户可以定义具有层次结构的group,并将变量、维度和属性添加到这些group中;(2)每个文件都从至少一个根group开始,用户可以添加更多的group,并为创建的每一个group获取一个新的ncid;(3)由于每个group都可以作为完整的netcdf经典数据集,因此在同一个netcdf-4/hdf5文件中的两个或多个不同group中具有相同名称的变量是可能的;(4)维度具有特殊的作用域:它们可以被group中的所有变量和所有子group看到。
3、现有的netcdf文件数据读取主要存在以下问题:(1)数据访问效率低下:直接从netcdf文件中读取数据的效率较低,尤其是对于大规模数据集或频繁访问的情况;(2)数据检索困难:netcdf文件通常包含大量的变量和维度,使得用户在文件中查找和检索数据变得复杂和耗时;(3)数据管理不便:对于需要多次访问和处理的数据,缺乏有效的缓存和管理机制,导致重复读取和处理数据的情况频发。此外,随着互联网的发展和各种传感器技术的普及,数据量呈指数级增长,并且数据的复杂性也在不断增加。人工智能时代,对于这些大规模、多样化和复杂的数据进行模式识别、预测、分类等任务,对计算的数据访问效率、资源利用率、实时性提出了很高的要求。
技术实现思路
1、针对现有技术的缺陷,本技术的目的在于提供一种用于netcdf文件的变量数据缓存方法和系统,旨在解决现有的netcdf文件读取存在数据访问效率低、数据检索困难和数据管理不便的问题。
2、为实现上述目的,第一方面,本技术提供了一种用于netcdf文件的变量数据缓存方法,包括:
3、s0.获取本轮计算需要进行缓存的所有netcdf文件;
4、s1.为来自于同一个netcdf文件的所有数据,构建一个数据箱子,所述数据箱子包括:元数据、数据块、数据索引值和哈希表,具体如下:
5、s11.从netcdf文件的根group开始,逐级往下递归遍历每一个group,从各个group中读取数据及对应元数据并缓存至内存;
6、s12.对从所有group读取到的数据,统一按照变量名进行数据分块,变量名相同的数据被划分至同一数据块;
7、s13.对于每个数据块,根据其数据类型名和变量名,构建对应的数据索引值;
8、s14.将数据块在内存中的起始地址作为value,将对应的数据索引值作为key,以键值对的形式存放在哈希表中;
9、s2.将所有数据箱子按照netcdf文件名/数据箱子id组织成数据仓库。
10、优选地,步骤s11具体如下:
11、s111.将netcdf文件中的多维数据转换为一维数据,具体步骤为:
12、(1)初始化变量:读取netcdf文件中多维数组的行列值,并定义两个变量index和multiplier,index用于存储最终的一维索引,初始化为0,multiplier用于辅助计算,初始化为1;
13、(2)循环迭代:通过一个for循环遍历多维数组的每个维度,从最高维度开始逐渐降低,每一个循环迭代访问多维数组的每个维度;
14、(3)索引计算:在每次循环迭代中,通过取得当前维度的索引值,将其乘以multiplier并累加到index中,以将多维数组的索引转换为一维数组的索引,并且按照低维到高维的顺序进行累加;
15、(4)更新乘法因子:在每次迭代时,根据当前维度的大小更新乘法因子multiplier;
16、(5)得到结果:循环结束后,index中存储的就是根据多维数组的索引计算出的对应的一维数组的索引值;
17、s112.创建chunkdata结构体,所述chunkdata结构体的成员变量包括:数据的维度数量rank、存储每个维度长度的数组dimensions、一维数组的长度length、指向数据内存起始地址的指针data,具体过程如下:
18、首先计算要分配的内存空间字节大小为length乘以数据类型的字节大小,然后基于malloc函数分配内存空间得到起始地址data,最后将netcdf文件中的变量数据读取到data。
19、优选地,步骤s13中,所述数据索引值由第一部分和第二部分组成;
20、所述第一部分表征数据类型名;
21、所述第二部分根据以下方式确定:
22、对于float类型的变量,第二部分是其在变量名数组中的下标索引;
23、对于int类型的变量,第二部分是其在变量名数组中的下标索引乘以10;
24、对于double类型的变量,第二部分是其在变量名数组中的下标索引乘以100;
25、对于short类型的变量,第二部分是其在变量名数组中的下标索引乘以1000。
26、优选地,步骤s14中,为每个数据类型的数据块单独构建一个哈希表,四个哈希表所采用的哈希函数不要求相同。
27、优选地,当需要查找某个数据块时,指定所需数据块的数据类型和对应的变量名,将两者进行拼接得到数据索引值。
28、优选地,当需要查找某个数据索引值对应的起始地址时,首先计算该数据索引值的哈希码,然后在哈希表中查找到对应数据块的起始地址。
29、优选地,当需要查找某个数据箱子时:
30、1)获取元数据相关的筛选条件,遍历每个数据箱子,其元数据与筛选条件相匹配的数据箱子即为目标数据箱子;
31、2)获取文件名或者数据箱子的id值的指定,与文件名或者数据箱子的id值相匹配的数据箱子即为目标数据箱子。
32、优选地,每执行一个新的计算任务时,动态进行新一轮的数据缓存。
33、优选地,所述变量数据缓存方法应用于频繁并发访问netcdf文件中变量数据或者访问大规模netcdf文件数据集的应用场景。
34、为实现上述目的,第二方面,本技术提供了一种用于netcdf文件的变量数据缓存系统,包括至少一个处理器以及至少一个存储器;所述至少一个存储器用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令中的至少部分指令以实现第一方面所述的变量数据缓存方法。
35、可以理解的是,上述第二方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
36、总体而言,通过本技术所构思的以上技术方案与现有技术相比,具有以下有益效果:
37、本技术利用netcdf文件的特征,提出一种用于netcdf文件的变量数据缓存方法和系统,从netcdf文件的根group开始,逐级往下递归获取数据以及其中的元数据信息,然后自动生成数据索引、数据块、元数据信息结构体构建数据箱子,如果有多个文件,还会将多个数据箱子组织成一个数据仓库。完成了数据的预取缓存之后,用户就可以按照需求,输入变量名以及其它的一些筛选条件(如温度、经纬度等),方法就会返回指定数据的数据块。通过上述方式,本技术带来以下几个方面的改变:(1)数据访问效率的提升:通过预先加载数据块到内存中的数据箱子,并构建快速的索引结构,可以实现对大规模数据集的快速访问,满足人工智能算法对数据实时性和响应性的需求;(2)资源利用率的提高:通过减少重复读取文件的次数,提高了数据的利用率和计算资源的利用效率;(3)算力需求的降低:通过优化数据访问和管理流程,可以降低对计算资源的需求。相比于直接从文件中读取数据,通过数据缓存和索引技术可以减少数据访问的时间和计算负载,从而降低了人工智能算法在处理大规模数据时所需的算力成本;(4)数据科学研究的推动:提高了科学数据的访问效率和管理能力,有助于推动数据科学研究的进展。科学家和研究人员可以更轻松地访问和分析大规模的科学数据,加速了数据驱动的科学发现和创新。
1.一种用于netcdf文件的变量数据缓存方法,其特征在于,包括:
2.如权利要求1所述的变量数据缓存方法,其特征在于,步骤s11具体如下:
3.如权利要求1所述的变量数据缓存方法,其特征在于,步骤s13中,所述数据索引值由第一部分和第二部分组成;
4.如权利要求1所述的变量数据缓存方法,其特征在于,步骤s14中,为每个数据类型的数据块单独构建一个哈希表,四个哈希表所采用的哈希函数不要求相同。
5.如权利要求1所述的变量数据缓存方法,其特征在于,当需要查找某个数据块时,指定所需数据块的数据类型和对应的变量名,将两者进行拼接得到数据索引值。
6.如权利要求5所述的变量数据缓存方法,其特征在于,当需要查找某个数据索引值对应的起始地址时,首先计算该数据索引值的哈希码,然后在哈希表中查找到对应数据块的起始地址。
7.如权利要求1所述的变量数据缓存方法,其特征在于,当需要查找某个数据箱子时:
8.如权利要求1至7任一项所述的变量数据缓存方法,其特征在于,每执行一个新的计算任务时,动态进行新一轮的数据缓存。
9.如权利要求1至7任一项所述的变量数据缓存方法,其特征在于,所述变量数据缓存方法应用于频繁并发访问netcdf文件中变量数据或者访问大规模netcdf文件数据集的应用场景。
10.一种用于netcdf文件的变量数据缓存系统,其特征在于,包括至少一个处理器以及至少一个存储器;