本公开涉及计算机技术领域,具体涉及数据处理方法、装置以及数据查询方法、装置。
背景技术:
随着计算机技术和网络技术的发展,人们的生产和生活中产生的各种数据的数据量越来越大。因此,数据的存储与查询变得越来越重要,但是也变得越来越复杂。例如,在存储细粒度数据的数据模型中,如果需要查询粗粒度的数据,查询结果需要从原始的细粒度数据计算而成,查询效率会发生非常严重的降级。而且,根据细粒度数据计算的数据难以更好被系统的高速缓存利用。
技术实现要素:
为了解决相关技术中的问题,本公开实施例提供数据处理方法、装置以及数据查询方法、装置。
第一方面,本公开实施例中提供了一种数据处理方法,包括:
按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;
根据索引的顺序存储与所述索引一一对应的数据。
结合第一方面,本公开在第一方面的第一种实现方式中,在所述按照树形结构在节点处存储数据的索引之前,还包括:
检测缓存的数据的数据量是否大于预设数据量阈值;
根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构。
结合第一方面,本公开在第一方面的第二种实现方式中,还包括:
基于索引中的信息确定与所述索引一一对应的数据的存储地址。
结合第一方面的第二种实现方式,本公开在第一方面的第三种实现方式中,所述基于索引中的信息确定与所述索引一一对应的数据的存储地址,包括:
基于索引中的信息查询所述索引所处的节点在所述树形结构中的位置;
根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
结合第一方面的第三种实现方式,本公开在第一方面的第四种实现方式中,所述基于索引中的信息确定与所述索引一一对应的数据的存储地址,还包括:
按照所述树形结构的深度递增、从左到右的顺序,将所述节点在所述树形结构中的位置存储为一维数组。
结合第一方面,本公开在第一方面的第五种实现方式中,所述按照树形结构在节点处存储数据的索引以及所述根据索引的顺序存储与所述索引一一对应的数据的存储方式是一次性写入存储装置。
结合第一方面、第一方面的第一种实现方式至第五种实现方式任一项,本公开在第一方面的第六种实现方式中,所述树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数。
结合第一方面的第六种实现方式,本公开在第一方面的第七种实现方式中,所述根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,包括:
以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立所述树形结构。
结合第一方面的第七种实现方式,本公开在第一方面的第八种实现方式中,所述根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,还包括:
确定是否对多个子节点进行聚合。
结合第一方面的第八种实现方式,本公开在第一方面的第九种实现方式中,所述确定是否对多个子节点进行聚合,包括:
确定所述多个子节点的第一数量与所述多个子节点聚合后所得的父节点的第二数量之间的数量关系是否满足预设条件;
根据所述第一数量与所述第二数量之间的数量关系满足所述预设条件的确定结果,对所述多个子节点进行聚合。
结合第一方面的第九种实现方式,本公开在第一方面的第十种实现方式中,所述预设条件是所述第一数量与所述第二数量之间的比例关系。
结合第一方面、第一方面的第一种实现方式至第五种实现方式任一项,本公开在第一方面的第十一种实现方式中,所述索引包括所述索引所在节点在所述树形结构中的深度、所述索引所在节点在所述深度中的位置、以及所述索引所对应的数据的地址。
结合第一方面的第十一种实现方式,本公开在第一方面的第十二种实现方式中,所述索引包括与所述索引所对应的数据的粒度相关的信息。
结合第一方面的第十二种实现方式,本公开在第一方面的第十三种实现方式中,当数据是时序数据时,所述与所述索引所对应的数据的粒度相关的信息是与所述索引所对应的数据的时间范围。
结合第一方面,本公开在第一方面的第十四种实现方式中,所述根据索引的顺序存储与所述索引一一对应的数据,包括:
按照所述树形结构的深度递增、从左到右的顺序,存储与所述索引一一对应的数据。
第二方面,本公开实施例中提供了一种数据处理装置,包括:
第一存储模块,被配置为按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;
第二存储模块,被配置为根据索引的顺序存储与所述索引一一对应的数据。
第三方面,本公开实施例中提供了一种数据查询方法,包括:
查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;
根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
结合第三方面,本公开在第三方面的第一种实现方式中,按照所述树形结构的深度递增、从左到右的顺序,所述节点在所述树形结构中的位置被存储为一维数组。
结合第三方面或第三方面的第一种实现方式,本公开在第三方面的第二种实现方式中,所述树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数。
结合第三方面的第二种实现方式,本公开在第三方面的第三种实现方式中,在所述树形结构中,以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点。
结合第三方面或第三方面的第一种实现方式,本公开在第四方面的第四种实现方式中,所述索引包括所述索引所在节点在所述树形结构中的深度、所述索引所在节点在所述深度中的位置、以及所述索引所对应的数据的地址。
结合第三方面的第四种实现方式,本公开在第三方面的第五种实现方式中,所述索引包括与所述索引所对应的数据的粒度相关的信息。
结合第三方面的第五种实现方式,本公开在第三方面的第六种实现方式中,当数据是时序数据时,所述与所述索引所对应的数据的粒度相关的信息是与所述索引所对应的数据的时间范围。
结合第三方面,本公开在第三方面的第七种实现方式中,与所述索引一一对应的数据被按照所述树形结构的深度递增、从左到右的顺序存储。
第四方面,本公开实施例中提供了一种数据查询装置,包括:
第一查询模块,被配置为查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;
第二查询模块,被配置为根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
确定模块,被配置为根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
第五方面,本公开实施例中提供了一种电子设备,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如第一方面、第一方面的第一种实现方式至第十四种实现方式、第三方面、第三方面的第一种实现方式至第七种实现方式任一项所述的方法。
第六方面,本公开实施例中提供了一种可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如第一方面、第一方面的第一种实现方式至第十四种实现方式、第三方面、第三方面的第一种实现方式至第七种实现方式任一项所述的方法。
本公开实施例提供的技术方案可以包括以下有益效果:
根据本公开实施例提供的技术方案,通过按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;根据索引的顺序存储与所述索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度(较粗粒度)数据的查询性能几乎和对原始粒度(较细粒度)的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过在所述按照树形结构在节点处存储数据的索引之前,还包括:检测缓存的数据的数据量是否大于预设数据量阈值;根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,使得数据在从内存缓存达到预设数据量阈值的时候才会建树然后存储到存储设备中,减少了存储设备的输入输出次数,提高了输入输出设备的利用效率,几乎不影响系统的数据吞吐量。
根据本公开实施例提供的技术方案,通过基于索引中的信息确定与所述索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述基于索引中的信息确定与所述索引一一对应的数据的存储地址,包括:基于索引中的信息查询所述索引所处的节点在所述树形结构中的位置;根据所述节点的位置查询所述节点的索引中的信息中的地址信息;根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述基于索引中的信息确定与所述索引一一对应的数据的存储地址,还包括:按照所述树形结构的深度递增、从左到右的顺序,将所述节点在所述树形结构中的位置存储为一维数组,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述按照树形结构在节点处存储数据的索引以及所述根据索引的顺序存储与所述索引一一对应的数据的存储方式是一次性写入存储装置,使得数据在从内存缓存达到预设数据量阈值的时候才会建树然后按顺序一次性存储到存储设备中,减少了存储设备的输入输出次数,提高了输入输出设备的利用效率,几乎不影响系统的数据吞吐量。
根据本公开实施例提供的技术方案,通过所述树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,包括:以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立所述树形结构,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,还包括:确定是否对多个子节点进行聚合,使得本公开的实施例适用范围更广,不限于聚合效果较好的数据场景,对于聚合效果不理想的稀疏的数据场景依然适用。即,本公开的方案可以灵活应对稀疏场景和稠密场景。对于聚合效果不好的稀疏数据情况,不进行聚合,从而节省空间,又由于此场景下原始粒度数据并不多,查询效率不会发生明显降级;对于聚合效果好的情况,进行聚合,从而提高查询效率,并且额外开销并不大。
根据本公开实施例提供的技术方案,通过所述确定是否对多个子节点进行聚合,包括:确定所述多个子节点的第一数量与所述多个子节点聚合后所得的父节点的第二数量之间的数量关系是否满足预设条件;根据所述第一数量与所述第二数量之间的数量关系满足所述预设条件的确定结果,对所述多个子节点进行聚合,使得本公开的实施例适用范围更广,不限于聚合效果较好的数据场景,对于聚合效果不理想的稀疏的数据场景依然适用。即,本公开的方案可以灵活应对稀疏场景和稠密场景。对于聚合效果不好的稀疏数据情况,不进行聚合,从而节省空间,又由于此场景下原始粒度数据并不多,查询效率不会发生明显降级;对于聚合效果好的情况,进行聚合,从而提高查询效率,并且额外开销并不大。
根据本公开实施例提供的技术方案,通过所述预设条件是所述第一数量与所述第二数量之间的比例关系,使得本公开的实施例适用范围更广,不限于聚合效果较好的数据场景,对于聚合效果不理想的稀疏的数据场景依然适用。即,本公开的方案可以灵活应对稀疏场景和稠密场景。对于聚合效果不好的稀疏数据情况,不进行聚合,从而节省空间,又由于此场景下原始粒度数据并不多,查询效率不会发生明显降级;对于聚合效果好的情况,进行聚合,从而提高查询效率,并且额外开销并不大。
根据本公开实施例提供的技术方案,通过所述索引包括所述索引所在节点在所述树形结构中的深度、所述索引所在节点在所述深度中的位置、以及所述索引所对应的数据的地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述索引包括与所述索引所对应的数据的粒度相关的信息,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过当数据是时序数据时,所述与所述索引所对应的数据的粒度相关的信息是与所述索引所对应的数据的时间范围,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述根据索引的顺序存储与所述索引一一对应的数据,包括:按照所述树形结构的深度递增、从左到右的顺序,存储与所述索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过第一存储模块,被配置为按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;第二存储模块,被配置为根据索引的顺序存储与所述索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;根据所述节点的位置查询所述节点的索引中的信息中的地址信息;根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过按照所述树形结构的深度递增、从左到右的顺序,所述节点在所述树形结构中的位置被存储为一维数组,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过在所述树形结构中,以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立所述树形结构,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述索引包括所述索引所在节点在所述树形结构中的深度、所述索引所在节点在所述深度中的位置、以及所述索引所对应的数据的地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过所述索引包括与所述索引所对应的数据的粒度相关的信息,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过当数据是时序数据时,所述与所述索引所对应的数据的粒度相关的信息是与所述索引所对应的数据的时间范围,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过与所述索引一一对应的数据被按照所述树形结构的深度递增、从左到右的顺序存储,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
根据本公开实施例提供的技术方案,通过第一查询模块,被配置为查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;第二查询模块,被配置为根据所述节点的位置查询所述节点的索引中的信息中的地址信息;确定模块,被配置为根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它标签、目的和优点将变得更加明显。在附图中:
图1示出根据本公开一实施方式的数据处理方法的流程图;
图2示出根据本公开另一实施方式的数据处理方法的流程图;
图3示出根据本公开又一实施方式的数据处理方法的流程图;
图4示出图3所示的实施方式中的步骤s310的一个示例的流程图;
图5示出根据本公开另一实施方式的数据处理方法中的确定是否对多个子节点进行聚合的步骤的一个示例的流程图;
图6示出采用根据本公开一实施方式的数据处理生成方法针对时序数据进行处理时采用的树形结构存储的索引和顺序存储数据的示意图;
图7示出根据本公开一实施方式的数据处理装置的结构框图;
图8示出根据本公开一实施方式的数据查询方法的流程图;
图9示出根据本公开一实施方式的数据查询装置的结构框图;
图10示出根据本公开一实施方式的电子设备的结构框图;
图11是适于用来实现根据本公开一实施方式的数据处理方法或数据查询方法的计算机系统的结构示意图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的标签、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他标签、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的标签可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
根据本公开实施例提供的技术方案,通过按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;根据索引的顺序存储与索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
图1示出根据本公开一实施方式的数据处理方法的流程图。如图1所示,数据处理方法包括以下步骤s110和s120:
在步骤s110中,按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数。
在步骤s120中,根据索引的顺序存储与索引一一对应的数据。
在本公开的一个实施例中,树形结构是一种抽象数据类型(adt),用来模拟具有树形结构性质的数据集合。树形结构是由n(n>0)个有限节点组成一个具有层次关系的集合。树形结构看起来像一棵倒挂的树,也就是说它的根朝上,而叶朝下。
在本公开的一个实施例中,数据的索引与数据本身被分开存储。由于索引和数据进行了分离,并且相关性(例如,业务相关性、时间相关性)强的数据是连续分布的,因此这有利于数据压缩,节省磁盘空间。并且,这些数据可以更好的被系统的高速缓存利用。
在本公开的一个实施例中,第n层节点具有比n 1层节点粗的粒度指的是一层节点的粒度比其下一层节点的粒度粗,最下层的叶子(节点)的粒度可以为数据的原始粒度。在本公开的一个实施例中,叶子节点是没有子节点的节点。
在本公开的一个实施例中,与数据一一对应的索引具有相应的次序,因此可以将数据根据索引的顺序存储。
以下参照图2描述根据本公开另一实施方式的数据处理方法。
图2示出根据本公开另一实施方式的数据处理方法的流程图。如图2所示的实施方式除了包括图1的实施方式所示的步骤s110和s120之外,在步骤s110之前还包括步骤s210和s220。
在步骤s210中,检测缓存的数据的数据量是否大于预设数据量阈值。
在步骤s220中,根据缓存的数据的数据量大于预设数据量阈值的检测结果,基于数据建立树形结构。
根据本公开实施例提供的技术方案,通过在按照树形结构在节点处存储数据的索引之前,还包括:检测缓存的数据的数据量是否大于预设数据量阈值;根据缓存的数据的数据量大于预设数据量阈值的检测结果,基于数据建立树形结构,使得数据在从内存缓存达到预设数据量阈值的时候才会建树然后存储到存储设备中,减少了存储设备的输入输出次数,提高了输入输出设备的利用效率,几乎不影响系统的数据吞吐量。
在本公开的一个实施例中,当系统检测到内存中的数据量大于一定量级(例如,预设数据量阈值)时,建立树形结构,并且将内存中的数据一次性写入例如硬盘之类的存储设备。这样可以减少硬盘等设备的io(输入输出)次数,几乎不影响系统的吞吐量。
在本公开的一个实施例中,按照树形结构在节点处存储数据的索引以及根据索引的顺序存储与索引一一对应的数据的存储方式是一次性写入存储装置。
根据本公开实施例提供的技术方案,通过按照树形结构在节点处存储数据的索引以及根据索引的顺序存储与索引一一对应的数据的存储方式是一次性写入存储装置,使得数据在从内存缓存达到预设数据量阈值的时候才会建树然后按顺序一次性存储到存储设备中,减少了存储设备的输入输出次数,提高了输入输出设备的利用效率,几乎不影响系统的数据吞吐量。
以下参照图3描述根据本公开另一实施方式的数据处理方法。
图3示出根据本公开又一实施方式的数据处理方法的流程图。如图3所示的实施方式除了包括图1的实施方式所示的步骤s110和s120之外,还包括步骤s310。
在步骤s310中,基于索引中的信息确定与索引一一对应的数据的存储地址。
根据本公开实施例提供的技术方案,通过基于索引中的信息确定与索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,索引和数据被分别存储,但是可以根据索引中的信息确定与索引一一对应的数据的存储地址,从而找到数据。
以下参照图4描述图3所示的实施方式中的步骤s310的一个示例。
图4示出图3所示的实施方式中的步骤s310的一个示例的流程图。如图4所示,步骤s310包括步骤s410、s420和s430。
在步骤s410中,基于索引中的信息查询索引所处的节点在树形结构中的位置。
在步骤s420中,根据节点的位置查询节点的索引中的信息中的地址信息。
在步骤s430中,根据节点的索引中的地址信息确定与节点的索引一一对应的数据的存储地址。
根据本公开实施例提供的技术方案,通过基于索引中的信息确定与索引一一对应的数据的存储地址,包括:基于索引中的信息查询索引所处的节点在树形结构中的位置;根据节点的位置查询节点的索引中的信息中的地址信息;根据节点的索引中的地址信息确定与节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,如果要根据索引中的信息确定数据的存储地址,则首先要在树形结构中找到索引所处的节点,再查询节点处的索引中的信息,从而根据索引中的信息确定数据的存储地址。
以下参照图6说明如何基于索引中的信息确定与索引一一对应的数据的存储地址。
图6示出采用根据本公开一实施方式的数据处理生成方法针对时序数据进行处理时采用的树形结构存储的索引和顺序存储数据的示意图。
当基于索引中的信息确定与索引一一对应的数据的存储地址时,首先在时序数据索引区中基于索引中的信息查询索引所处的节点在树形结构中的位置。图6所示的时序数据索引区中的树形结构中示出了6个节点601/602、603、604、605和606,每个节点都具有相应的索引的信息。在本公开的实施例中,各个索引的大小和数据结构可以是相同的。例如,在图6所示的时序数据的索引中,每一索引可以包括时间范围、节点所处树的深度(d)、节点在该层的位置p、以及相关时序数据在“时序数据区”的地址(dataoffset)。因此,可以根据节点所处树的深度(d)和节点在该层的位置p确定索引所处的节点在树形结构中的位置,并且根据节点的位置查询节点的索引中的信息中的地址信息中。而且,可以根据节点的索引中的地址信息(即,相关时序数据在“时序数据区”的地址(dataoffset))确定与节点的索引一一对应的数据的存储地址。
在本公开的一个实施例中,索引包括索引所在节点在树形结构中的深度、索引所在节点在深度中的位置、以及索引所对应的数据的地址。
根据本公开实施例提供的技术方案,通过索引包括索引所在节点在树形结构中的深度、索引所在节点在深度中的位置、以及索引所对应的数据的地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,索引包括与索引所对应的数据的粒度相关的信息。
根据本公开实施例提供的技术方案,通过索引包括与索引所对应的数据的粒度相关的信息,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,当索引是时序数据的索引时,与索引所对应的数据的粒度相关的信息指的是时间信息。例如,图6所示的时序数据索引区中的索引中的时间范围信息。例如,图6所示的时序数据索引区中的上层节点的时间范围是该上层节点的全部子节点的时间范围的总和。并利用技术人员可以理解,本公开的实施例中的粒度并不限于时间粒度,而可以是任何可以表现粒度的指标。
在本公开的一个实施例中,当数据是时序数据时,与索引所对应的数据的粒度相关的信息是与索引所对应的数据的时间范围。
根据本公开实施例提供的技术方案,通过当数据是时序数据时,与索引所对应的数据的粒度相关的信息是与索引所对应的数据的时间范围,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,步骤s310还包括:按照树形结构的深度递增、从左到右的顺序,将节点在树形结构中的位置存储为一维数组。
根据本公开实施例提供的技术方案,通过基于索引中的信息确定与索引一一对应的数据的存储地址,还包括:按照树形结构的深度递增、从左到右的顺序,将节点在树形结构中的位置存储为一维数组,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,如图6所示的时序数据索引区,在树形结构中,除了叶子以外的节点都是由叶子聚合而来,因此,树形结构具有从下到上深度递增、从左到右按顺序排列的索引。因此,可以根据这种排列顺序将节点在树形结构中的位置存储为一维数组,即,将索引在树形结构中的位置存储为一维数组。
以下参照图6进一步描述用于实现根据本公开的实施方式的数据处理方法中的树形结构的一个示例。
不同于相关技术中的数据结构中留有很多空洞的情况,在本公开的一个实施例中,由于数据在写入存储装置后就再也不会修改,因此数据结构中不需要空洞的存在。针对此情况,本公开的实施例可以采用无空洞的离散化线段树。如图6所示,可以将无空洞的离散化线段树实现为根据原始粒度数据构建的左-完全k叉树。
在建立树形结构的时候,可以将原始粒度数据作为叶子,按照自底向上、从左至右的顺序每k个叶子聚合为一个父节点,并且每一层的k个子节点聚合为一个父节点。这样,可以形成一个左-完全k叉树,也就是说,除了每一层的最右边的节点或叶子,全部节点都具有k个子节点或k个叶子。如图6所示,第m层(当前层)存放的数据粒度是第m 1层(下一层)存放的数据粒度的k倍。当数据处理方法所要处理的数据是时序数据时,假设叶子节点的粒度是1秒并且k=60,并且叶子节点的深度是d,那么第d-1层(叶子节点的上一层)的粒度是1分钟,第d-2层的粒度是1小时(d-2>=0)。
在本公开的一个实施例中,树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数。
根据本公开实施例提供的技术方案,通过树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,步骤s220包括:以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立树形结构。
根据本公开实施例提供的技术方案,通过根据缓存的数据的数据量大于预设数据量阈值的检测结果,基于数据建立树形结构,包括:以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立树形结构,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在例如图6所示的时序数据索引区中,在某一层节点最稀疏的场景下,可能存在这样的情况:粒度为r的节点在向粒度为r*k的节点进行聚合的时候,数据量并没有明显减少。在这种聚合效果不明显情况下,直接读取粒度为r的节点的数据与读取粒度为r*k的节点的数据相比较而言,在性能上差距不大。因此,为了避免存储空间浪费,这种场景最好不进行聚合。
依照这样的思路,假设为聚合前的节点的行数为inputcnt,聚合后的节点行数为outputcnt,则可以根据inputcnt与outputcnt之间的数量关系是否满足预设条件来确定是否应该进行聚合。例如,使用公式inputcnt>outputcnt*k*2/3来判断是否应该进行聚合,如果使用该公式判断结果为真,则认为应该聚合,那么聚合后的数据可以追加到“时序数据区”中,聚合后的数据的地址会被记录到聚合后的数据的索引所在的节点中。如果使用该公式判断结果为假,则认为不应该聚合,对应的节点(不存在聚合后的数据,但是存在索引以指示是否存在聚合后的数据)的存储地址(dataoffset)字段置为特定值,例如,-1。在此示例中,可以认为确定多个子节点的第一数量与多个子节点聚合后所得的父节点的第二数量之间的数量关系是否满足预设条件为是否满足公式inputcnt>outputcnt*k*2/3。本领域技术人员可以理解,此预设条件仅仅是示例,根据实际情况,可以采用各种预设条件来衡量前述第一数量与前述第二数量之间的数量关系。
在该示例中,在根据索引查询数据的情况下,当需要读取某索引所在节点的数据时,如果存储地址(dataoffset)不为-1,则直接根据存储地址(dataoffset)进行访问;如果存储地址(dataoffset)为-1,则对该节点的所有子节点重复“根据索引查询数据”的处理。
在图6所示的示例中,在时序数据区中,数据的排列方式也是按深度递增,从左至右的顺序排列,因此,在读取连续时间的数据时,可以更好的利用高速缓存。
在本公开的一个实施例中,步骤s220还包括:确定是否对多个子节点进行聚合。
根据本公开实施例提供的技术方案,通过根据缓存的数据的数据量大于预设数据量阈值的检测结果,基于数据建立树形结构,还包括:确定是否对多个子节点进行聚合,使得本公开的实施例适用范围更广,不限于聚合效果较好的数据场景,对于聚合效果不理想的稀疏的数据场景依然适用。即,本公开的方案可以灵活应对稀疏场景和稠密场景。对于聚合效果不好的稀疏数据情况,不进行聚合,从而节省空间,又由于此场景下原始粒度数据并不多,查询效率不会发生明显降级;对于聚合效果好的情况,进行聚合,从而提高查询效率,并且额外开销并不大。
以下参照图6的示例来描述如何确定索引(节点)在在时序数据索引区(树形结构)中的位置。在按照自底向上、从左至右的顺序将索引(节点)在在时序数据索引区(树形结构)中的位置存储为一维数组,即,将索引在树形结构中的位置存储为一维数组,且每一层的k个子节点聚合为一个父节点的情况下,一个深度是d且在该深度d中的位置是p的节点的第i个子节点的全局位置(即,在时序数据索引区中的位置)为child(d,p,i)=s(d) k*p i。例如,节点604是深度为1的节点且在该深度1中的位置是0,叶子(节点)601是节点604的第1个子节点,则叶子(节点)601的全局位置child(1,0,1)=3 k*0 1=4。类似地,叶子(节点)602是节点604的第2个子节点,则叶子(节点)601的全局位置child(1,0,2)=3 k*0 2=5。类似地,节点605是深度为1的节点且在该深度1中的位置是1,叶子(节点)603是节点605的第1个子节点,则叶子(节点)603的全局位置child(1,1,1)=3 k*1 1=4 k。类似地,节点606是深度为0的节点且在该深度0中的位置是0,子节点604是节点606的第1个子节点,则子节点604的全局位置child(0,0,1)=1 k*0 1=2。类似地,子节点605是节点606的第2个子节点,则子节点605的全局位置child(0,0,1)=1 k*0 1=2。另外,节点606是树形结构的根节点,其全局位置为1。在确定了节点在树形结构中的位置的情况下,可以根据此位置访问由节点(索引)构成的一维数组。
参照图6,在访问节点(索引)时,可以查询索引中的相关时序数据在“时序数据区”的地址(dataoffset),即,数据的真正位置。因此,在查询数据时,首先在树形结构中找到所需要的节点(索引),在根据节点(索引)中的相关数据在数据区中的位置。例如,可以根据时序数据在时序数据区的地址(dataoffset)在时序数据区找到数据的真正位置。
以下参照图5描述根据本公开另一实施方式的数据处理方法中的确定是否对多个子节点进行聚合的步骤。
图5示出根据本公开另一实施方式的数据处理方法中的确定是否对多个子节点进行聚合的步骤的一个示例的流程图。如图5所示,确定是否对多个子节点进行聚合的步骤包括步骤s510和s520。
在步骤s510中,确定多个子节点的第一数量与多个子节点聚合后所得的父节点的第二数量之间的数量关系是否满足预设条件。
在步骤s520中,根据第一数量与第二数量之间的数量关系满足预设条件的确定结果,对多个子节点进行聚合。
根据本公开实施例提供的技术方案,通过确定是否对多个子节点进行聚合,包括:确定多个子节点的第一数量与多个子节点聚合后所得的父节点的第二数量之间的数量关系是否满足预设条件;根据第一数量与第二数量之间的数量关系满足预设条件的确定结果,对多个子节点进行聚合,使得本公开的实施例适用范围更广,不限于聚合效果较好的数据场景,对于聚合效果不理想的稀疏的数据场景依然适用。即,本公开的方案可以灵活应对稀疏场景和稠密场景。对于聚合效果不好的稀疏数据情况,不进行聚合,从而节省空间,又由于此场景下原始粒度数据并不多,查询效率不会发生明显降级;对于聚合效果好的情况,进行聚合,从而提高查询效率,并且额外开销并不大。
在本公开的一个实施例中,预设条件是第一数量与第二数量之间的比例关系。
根据本公开实施例提供的技术方案,通过预设条件是第一数量与第二数量之间的比例关系,使得本公开的实施例适用范围更广,不限于聚合效果较好的数据场景,对于聚合效果不理想的稀疏的数据场景依然适用。即,本公开的方案可以灵活应对稀疏场景和稠密场景。对于聚合效果不好的稀疏数据情况,不进行聚合,从而节省空间,又由于此场景下原始粒度数据并不多,查询效率不会发生明显降级;对于聚合效果好的情况,进行聚合,从而提高查询效率,并且额外开销并不大。
在本公开的一个实施例中,步骤s220包括:按照树形结构的深度递增、从左到右的顺序,存储与索引一一对应的数据。
根据本公开实施例提供的技术方案,通过根据索引的顺序存储与索引一一对应的数据,包括:按照树形结构的深度递增、从左到右的顺序,存储与索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
参照图6的示例可见,时序数据区中的时序数据块l1、l2、l3、a1等是按照树形结构的深度递增、从左到右的顺序,与时序数据索引区中的索引(节点)601、602、603、604等一一对应地排列。
本领域技术人员可以理解,以上提及的采用左-完全k叉树的树形结构仅仅是本公开的方案中可以采用各种树形结构的一个示例。例如,在本公开的方案中还可以采用完全k叉树、满k叉树等各种树形结构。根据本公开实施例中的教导,可以采用各种
本领域技术人员可以理解,图6所示的针对时序数据建立树形结构的时序数据索引区和时序数据区仅仅是示例,本领域技术人员可以理解,可以针对各种数据对索引和数据进行分离和存储。
以下参照图7描述根据本公开一实施方式的数据处理装置。
图7示出根据本公开一实施方式的数据处理装置700的结构框图。如图7所示,数据处理装置700包括第一存储模块710和第二存储模块720。
第一存储模块710被配置为按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数。
第二存储模块720被配置为根据索引的顺序存储与所述索引一一对应的数据。
根据本公开实施例提供的技术方案,通过第一存储模块,被配置为按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;第二存储模块,被配置为根据索引的顺序存储与所述索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
本领域技术人员可以理解,参照图7描述的技术方案的可以与参照图1至图6描述的实施例结合,从而具备参照图1至图6描述的实施例所实现的技术效果。具体内容可以参照以上根据图1至图6进行的描述,其具体内容在此不再赘述。
以下参照图8描述根据本公开一实施方式的数据查询方法。
图8示出根据本公开一实施方式的数据查询方法的流程图。如图8所示,数据查询方法包括以下步骤s810、s820和s830:
在步骤s810中,查询按照树形结构在节点处存储的索引所处的节点在树形结构中的位置。
在步骤s820中,根据节点的位置查询节点的索引中的信息中的地址信息。
在步骤s830中,根据节点的索引中的地址信息确定与节点的索引一一对应的数据的存储地址。
根据本公开实施例提供的技术方案,通过查询按照树形结构在节点处存储的数据的索引所处的节点在树形结构中的位置;根据节点的位置查询节点的索引中的信息中的地址信息;根据节点的索引中的地址信息确定与节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,按照树形结构的深度递增、从左到右的顺序,节点在树形结构中的位置被存储为一维数组。
根据本公开实施例提供的技术方案,通过按照树形结构的深度递增、从左到右的顺序,节点在树形结构中的位置被存储为一维数组,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数。
根据本公开实施例提供的技术方案,通过树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,在树形结构中,以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点。
根据本公开实施例提供的技术方案,通过在树形结构中,以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立树形结构,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,索引包括索引所在节点在树形结构中的深度、索引所在节点在深度中的位置、以及索引所对应的数据的地址。
根据本公开实施例提供的技术方案,通过索引包括索引所在节点在树形结构中的深度、索引所在节点在深度中的位置、以及索引所对应的数据的地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,索引包括与索引所对应的数据的粒度相关的信息。
根据本公开实施例提供的技术方案,通过索引包括与索引所对应的数据的粒度相关的信息,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,当数据是时序数据时,与索引所对应的数据的粒度相关的信息是与索引所对应的数据的时间范围。
根据本公开实施例提供的技术方案,通过当数据是时序数据时,与索引所对应的数据的粒度相关的信息是与索引所对应的数据的时间范围,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,与索引一一对应的数据被按照树形结构的深度递增、从左到右的顺序存储。
根据本公开实施例提供的技术方案,通过与索引一一对应的数据被按照树形结构的深度递增、从左到右的顺序存储,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
本领域技术人员可以理解,参照图8描述的技术方案的可以与参照图1至图7描述的实施例结合,从而具备参照图1至图7描述的实施例所实现的技术效果。具体内容可以参照以上根据图1至图7进行的描述,其具体内容在此不再赘述。
以下参照图9描述根据本公开一实施方式的数据处理装置。
图9示出根据本公开一实施方式的数据查询装置900的结构框图。如图9所示,数据查询装置900包括第一查询模块910、第二查询模块920和确定模块930。
第一查询模块910被配置为查询按照树形结构在节点处存储的数据的索引所处的节点在树形结构中的位置。
第二查询模块920被配置为根据节点的位置查询节点的索引中的信息中的地址信息。
确定模块930被配置为根据节点的索引中的地址信息确定与节点的索引一一对应的数据的存储地址。
根据本公开实施例提供的技术方案,通过第一查询模块,被配置为查询按照树形结构在节点处存储的数据的索引所处的节点在树形结构中的位置;第二查询模块,被配置为根据节点的位置查询节点的索引中的信息中的地址信息;确定模块,被配置为根据节点的索引中的地址信息确定与节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
本领域技术人员可以理解,参照图9描述的技术方案的可以与参照图1至图8描述的实施例结合,从而具备参照图1至图8描述的实施例所实现的技术效果。具体内容可以参照以上根据图1至图8进行的描述,其具体内容在此不再赘述。
前述实施例描述了数据处理装置和数据查询装置的内部功能和结构,在一个可能的设计中,前述数据处理装置和数据查询装置的结构可实现为电子设备,如图10中所示,该电子设备1000可以包括处理器1001以及存储器1002。
所述存储器1002用于存储支持数据处理装置执行上述任一实施例中数据处理方法的程序,所述处理器1001被配置为用于执行所述存储器1002中存储的程序。
所述存储器1002用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器1001执行以实现以下步骤:
按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;
根据索引的顺序存储与所述索引一一对应的数据。
根据本公开实施例提供的技术方案,通过按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;根据索引的顺序存储与所述索引一一对应的数据,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
在本公开的一个实施例中,所述存储器1002用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令还被所述处理器1001执行以实现以下步骤:
查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;
根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
根据本公开实施例提供的技术方案,通过查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;根据所述节点的位置查询所述节点的索引中的信息中的地址信息;根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址,使得索引和数据进行了分离,并且相关性强的数据是连续分布的,这有利于数据压缩,节省磁盘空间。因此,保证了对数据较高的查询效率,对于大粒度数据的查询性能几乎和对原始粒度的数据的查询性能一样好。而且,这些数据可以更好地被系统的高速缓存利用,并且可以节约计算资源。
所述处理器1001用于执行前述各方法步骤中的全部或部分步骤。
其中,所述电子设备的结构中还可以包括通信接口,用于电子设备与其他设备或通信网络通信。
本公开示例性实施例还提供了一种计算机存储介质,用于储存所述数据处理装置所用的计算机软件指令,其包含用于执行上述任一实施例中的方法所涉及的程序,从而具备方法所带来的技术效果。
图11是适于用来实现根据本公开一实施方式的数据处理方法或数据查询方法的计算机系统的结构示意图。
如图11所示,计算机系统1100包括第一处理器1101,其可以根据存储在只读存储器(rom)1102中的程序或者从存储部分1108加载到随机访问存储器(ram)1103中的程序而执行上述附图所示的实施方式中的部分或全部处理。在ram1103中,还存储有系统1100操作所需的各种程序和数据。第一处理器1101、rom1102以及ram1103通过总线1104彼此相连。输入/输出(i/o)接口1105也连接至总线1104。
以下部件连接至i/o接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至i/o接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
根据本公开的实施方式,计算机系统1100还可以包括第二处理器1112,用于根据存储在只读存储器(rom)1102中的程序或者从存储部分1108加载到随机访问存储器(ram)1103中的程序而执行上述附图所示的实施方式中的部分或全部处理。
根据本公开的实施方式,第一处理器1101和第二处理器1112可以是cpu、gpu、fpga、npu、ai芯片等各种处理器。另外,图11所示的计算机系统的结构不限于包括第一处理器1101和第二处理器1112,还可以包括更多或更少的处理器。
特别地,根据本公开的实施方式,上文参考附图描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行附图中的方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。
附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法,从而具备方法所带来的技术效果。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
1.一种数据处理方法,其特征在于,包括:
按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;
根据索引的顺序存储与所述索引一一对应的数据。
2.根据权利要求1所述的方法,其特征在于,在所述按照树形结构在节点处存储数据的索引之前,还包括:
检测缓存的数据的数据量是否大于预设数据量阈值;
根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构。
3.根据权利要求1所述的方法,其特征在于,还包括:
基于索引中的信息确定与所述索引一一对应的数据的存储地址。
4.根据权利要求3所述的方法,其特征在于,所述基于索引中的信息确定与所述索引一一对应的数据的存储地址,包括:
基于索引中的信息查询所述索引所处的节点在所述树形结构中的位置;
根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
5.根据权利要求4所述的方法,其特征在于,所述基于索引中的信息确定与所述索引一一对应的数据的存储地址,还包括:
按照所述树形结构的深度递增、从左到右的顺序,将所述节点在所述树形结构中的位置存储为一维数组。
6.根据权利要求1所述的方法,其特征在于,所述按照树形结构在节点处存储数据的索引以及所述根据索引的顺序存储与所述索引一一对应的数据的存储方式是一次性写入存储装置。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数。
8.根据权利要求7所述的方法,其特征在于,所述根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,包括:
以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点,从而建立所述树形结构。
9.根据权利要求8所述的方法,其特征在于,所述根据缓存的数据的数据量大于所述预设数据量阈值的检测结果,基于所述数据建立所述树形结构,还包括:
确定是否对多个子节点进行聚合。
10.根据权利要求9所述的方法,其特征在于,所述确定是否对多个子节点进行聚合,包括:
确定所述多个子节点的第一数量与所述多个子节点聚合后所得的父节点的第二数量之间的数量关系是否满足预设条件;
根据所述第一数量与所述第二数量之间的数量关系满足所述预设条件的确定结果,对所述多个子节点进行聚合。
11.根据权利要求10所述的方法,其特征在于,所述预设条件是所述第一数量与所述第二数量之间的比例关系。
12.根据权利要求1-6任一项所述的方法,其特征在于,所述索引包括所述索引所在节点在所述树形结构中的深度、所述索引所在节点在所述深度中的位置、以及所述索引所对应的数据的地址。
13.根据权利要求12所述的方法,其特征在于,所述索引包括与所述索引所对应的数据的粒度相关的信息。
14.根据权利要求13所述的方法,其特征在于,当数据是时序数据时,所述与所述索引所对应的数据的粒度相关的信息是与所述索引所对应的数据的时间范围。
15.根据权利要求1所述的方法,其特征在于,所述根据索引的顺序存储与所述索引一一对应的数据,包括:
按照所述树形结构的深度递增、从左到右的顺序,存储与所述索引一一对应的数据。
16.一种数据处理装置,其特征在于,包括:
第一存储模块,被配置为按照树形结构在节点处存储数据的索引,其中,第n层节点具有比n 1层节点粗的粒度,其中,n为自然数;
第二存储模块,被配置为根据索引的顺序存储与所述索引一一对应的数据。
17.一种数据查询方法,其特征在于,包括:
查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;
根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
18.根据权利要求17所述的方法,其特征在于,按照所述树形结构的深度递增、从左到右的顺序,所述节点在所述树形结构中的位置被存储为一维数组。
19.根据权利要求17或18任一项所述的方法,其特征在于,所述树形结构为左-完全k叉树,其中,除了每一层的最右边的节点最多具有k个子节点之外,全部节点都具有k个子节点,k为大于等于2的整数。
20.根据权利要求19所述的方法,其特征在于,在所述树形结构中,以原始粒度的数据的索引作为叶子,按照自底向上、从左至右的顺序,每k个叶子聚合为一个父节点,并且按照自底向上、从左至右的顺序,每一层的k个子节点聚合为一个父节点。
21.根据权利要求17或18任一项所述的方法,其特征在于,所述索引包括所述索引所在节点在所述树形结构中的深度、所述索引所在节点在所述深度中的位置、以及所述索引所对应的数据的地址。
22.根据权利要求21所述的方法,其特征在于,所述索引包括与所述索引所对应的数据的粒度相关的信息。
23.根据权利要求22所述的方法,其特征在于,当数据是时序数据时,所述与所述索引所对应的数据的粒度相关的信息是与所述索引所对应的数据的时间范围。
24.根据权利要求17所述的方法,其特征在于,与所述索引一一对应的数据被按照所述树形结构的深度递增、从左到右的顺序存储。
25.一种数据查询装置,其特征在于,包括:
第一查询模块,被配置为查询按照树形结构在节点处存储的数据的索引所处的节点在所述树形结构中的位置;
第二查询模块,被配置为根据所述节点的位置查询所述节点的索引中的信息中的地址信息;
确定模块,被配置为根据所述节点的索引中的地址信息确定与所述节点的索引一一对应的数据的存储地址。
26.一种电子设备,其特征在于,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如权利要求1-15、17-24任一项所述的方法。
27.一种可读存储介质,其上存储有计算机指令,其特征在于,该计算机指令被处理器执行时实现如权利要1-15、17-24任一项所述的方法。
技术总结