System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请属于计算机优化领域,更具体地,涉及一种用于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文件的变量数据缓存方法和系统,旨在解决现有的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、为实现上述目的,第二方面,本申请提供了一种用于n本文档来自技高网...
【技术保护点】
1.一种用于NetCDF文件的变量数据缓存方法,其特征在于,包括:
2.如权利要求1所述的变量数据缓存方法,其特征在于,步骤S11具体如下:
3.如权利要求1所述的变量数据缓存方法,其特征在于,步骤S13中,所述数据索引值由第一部分和第二部分组成;
4.如权利要求1所述的变量数据缓存方法,其特征在于,步骤S14中,为每个数据类型的数据块单独构建一个哈希表,四个哈希表所采用的哈希函数不要求相同。
5.如权利要求1所述的变量数据缓存方法,其特征在于,当需要查找某个数据块时,指定所需数据块的数据类型和对应的变量名,将两者进行拼接得到数据索引值。
6.如权利要求5所述的变量数据缓存方法,其特征在于,当需要查找某个数据索引值对应的起始地址时,首先计算该数据索引值的哈希码,然后在哈希表中查找到对应数据块的起始地址。
7.如权利要求1所述的变量数据缓存方法,其特征在于,当需要查找某个数据箱子时:
8.如权利要求1至7任一项所述的变量数据缓存方法,其特征在于,每执行一个新的计算任务时,动态进行新一轮的数据缓存。<
...【技术特征摘要】
1.一种用于netcdf文件的变量数据缓存方法,其特征在于,包括:
2.如权利要求1所述的变量数据缓存方法,其特征在于,步骤s11具体如下:
3.如权利要求1所述的变量数据缓存方法,其特征在于,步骤s13中,所述数据索引值由第一部分和第二部分组成;
4.如权利要求1所述的变量数据缓存方法,其特征在于,步骤s14中,为每个数据类型的数据块单独构建一个哈希表,四个哈希表所采用的哈希函数不要求相同。
5.如权利要求1所述的变量数据缓存方法,其特征在于,当需要查找某个数据块时,指定所需数据块的数据类型和对应的变量名,将两者进行拼接得到数据索引值。
6.如权利要求5所述的变量数据缓存方法,其...
【专利技术属性】
技术研发人员:张东映,杨旭,黄智超,张肖,杜帅,张语轩,李嘉宸,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。