1.本发明涉及数据处理领域,具体来说,涉及一种用于多维数据的存储方法、查询方法及维护方法。
背景技术:2.在信息管理、电子商务、人工智能等领域中,常常要对多维数据进行处理,如数值计算中的多维数值矩阵、联机分析处理(olap)业务中的数值指标、多维空间下的多维数据集等,做好多维数据的存储与管理会提高多维数据的查询速率、存储空间利用率以及降低多维数据应用系统的维护代价。
3.传统方法中涉及数值计算的多维数值矩阵处理通常是指多维数值矩阵对内存和硬盘的存储优化、数据的分布式存储和并行计算等问题。传统方法在处理多维数值矩阵时,会以一组一维离散数值坐标序列为与其对应的维度,通过这种方式构成的维度中坐标点之间不存在层次结构,并且由每个维度的坐标组成的空间点坐标向量只能存储一个数值或者一个向量,因此,在实际的应用中多维数值矩阵往往规模巨大,涉及的维度坐标冗余,不利于多维数据集的存储、查询和维护。
4.传统方法中涉及多维数据库的联机分析处理往往涉及多维数据的存储和管理。传统方法在进行联机分析处理时,往往会将待存储的多维数据集按照其属性和属性取值进行划分以得到多维空间下的多个维度以及每个维度对应的所有坐标点,其中由每个维度的一个坐标点组成的坐标向量用来表示多维空间中的一个空间点,所述空间点只对应一个指标数值数据,而非多维数据集。例如,在一个n维的多维空间中,分别取n个维度各自的一个坐标点组成一个坐标向量《c
11
,c
21
,...c
n1
》,其用来标识一个空间点p,记作p=《c
11
,c
21
,...c
n1
》,空间点p对应于一个指标数值数据v,记作p.v,其中“c
11
,c
21
,...c
n1”分别表示指标数值数据v在每个维度上其所对应的数据的一个可能的属性取值,即位于每个维度上的一个维度坐标。例如,一个二维空间中包含产品的类别维度、产品的地域维度,其中产品的地域维度又包含北京、上海,产品的类别维度又包含家电、食品,而该二维空间中的指标数值数据为销售额,那个一个空间点p=《北京,家电》对应的销售额指标数值数据p.v表示北京地区的家电销售额,而不同的维度坐标组合对应不同的指标数值数据。传统方法中的联机分析处理通常借助传统关系数据库对数据进行管理,例如,星型模型的维度表和事实表,在如图1所示的示例中,包含有三个维度:部门、地域、产品,当每个维度的坐标间存在包含关系时,需要对具有包含关系的坐标及其子坐标构建新的维度表,如部门维度中包含北京总公司、上海总公司,其中北京总公司又包含海淀分公司、朝阳分公司,每层包含关系都分别对应一个维度表,因此事实表中部门维度可以用北京总公司、上海总公司、海淀分公司、朝阳分公司中任意一个表示,且在如图1所示的事实表中存在两行多维数据分别表示在不同产品、不同部门、不同地区的销售数量和销售金额,当对事实表中北京总公司下的销售数量进行查询时,需要返回隶属于北京总公司的所有分公司的销售数量。由此可知,传统方法中的联机分析处理所处理的核心数据是指标数值数据,如销售数量、销售金额,因此,当传统方法中
的联机分析处理用于管理具有相同维度坐标的一组多维数据时,事实表中会存储多个维度坐标相同的数据,并会导致数据的冗余,降低数据存储及删除的效率等问题,而当传统方法中的联机分析处理对多维数据进行聚合查询时,通过多次遍历所有数据获得查询结果的方式会导致查询效率随着每个维度对应坐标点的增加而降低。
5.大多数传统方法在对多维数据进行存储和查询时往往会面对两大难点,其一是传统方法大多将多维空间中空间点所对应的数据视为单一的数值数据,因此传统方法大多不能直接应用于多维数据集;其二是传统方法在对多维数据进行聚合查询时往往需要进行多次遍历、筛选以及汇总,因此传统方法大多具有数据坐标冗余、存储浪费、查询速率低、系统维护代价高等问题。为了解决上述两大难点,国内外研究者进行了一系列研究,例如,中国发明专利申请[1]提出将多维数据中第一维的坐标成员作为行索引,将剩余维度的坐标成员作为列索引,以此构建一种2维表格进行多维数据的存储,但是该方法不能解决多维数据集的存储问题以及维度坐标动态改变的问题。中国发明专利申请[2]设计了一种多维数据的存储转换方法,该方法通过提取公共维度中的数据和非公共维度中的数据并将原始多维数据进行转换以将多维数据转换为目标数据,该方法虽然减少了维度数据转换时的代价,但是该方法没有直接将多维数据存储和索引。中国发明专利申请[3]针对监控数据的时间维度提出了一种索引方法,以便于能够支持监控数据的多维度检索,但是该方法不是一种通用的多维度数据的存储和查询方法。中国专利发明申请[4]设计了一种维度编码方法,该方法对维度中的属性取值进行编码,使得在一个二维关系表中可存储不同维度属性组合的属性值以提升维度属性的聚合查询效率,但是该方法只适用于数值数据,无法对多维数据集进行编码存储。中国发明专利申请[5]提出了一种基于列存储器的数据组织方案,在该方案中,输入查询包括目标数值指标、属性集合以及属性限制条件,将这些输入查询请求通过一个映射关系转化为一组唯一id,借助列存储器存储的《key,value》机制存储各个属性和属性值,通过所述唯一id可以获取属性所对应的属性值,该方法虽然可以对数值指标量进行处理,但是该方法无法处理多维数据集,此外,一旦维度结构发生改变,应用于该方法存储的《key,value》机制将作废,需要重新构造整个存储索引。中国发明专利申请[6]提出将多维数据查询进行分解,通过分批次过滤数据的方式查询结果。中国发明专利申请[7]提出一种通过降维的方式实现多维数据的聚类,通过所述聚类确定数据类别。中国发明专利申请[8]通过olap数据库对多维数据进行预计算以获得多维数据立方体的结构,在客户端通过所述数据立方体结构生成查询语句,并查询计算结果,但是该方法在利用olap数据库存储计算数值多维属性时无法解决多维数据集的存储和索引问题。中国发明专利申请[9]提出了一种基于二级缓存的多维数据立方体存取架构,但是该方法不适用于处理多维数据集。中国发明专利申请[10]提出将多维四叉树索引发布在一个对等网络上以实现多维数据的分布式索引和查询,但是当该方法的维度坐标结构变化时,该方法的所有索引结构都需重新构造。中国发明专利申请[11]提出了一种将任意维度、类型的语义信息进行规格化的方法,但是该方法的维度空间结构一旦发生改变,需要重构整个空间索引。中国发明专利申请[12]提出一种多维数据立方体构建方法,但是该方法只适用于多维数据中单一的数值数据管理,无法适用于多维数据集的存储和索引。中国发明专利申请[13]提出通过维度属性的层级关系以获得属性指标间的包含关系,并通过所述属性指标的包含关系从低层属性指标逐层向上汇总以获得不同维度的不同属性聚合指标,但是该方法只适用于多维数据中数
值属性指标的查询,不能解决多维数据集存储和查询问题。中国发明专利申请[14]提出通过使用数值主键替代数据的原始主键,并划分多维数据为多个不同表结构以实现不同功能分布式计算,包括cpu平台、gpu平台和分布式存储平台,分别用于处理不同数据结构类型,但是该方法所处理数据为多维数据中单一的数值数据,不适用于处理多维数据集。中国发明专利申请[15]提出通过预计算以提高数据查询效率的方法,但是该方法只针对特殊用户数据,不具备通用性。中国发明专利申请[16]通过使用特征关键词作为维度管理学术文献资源,并通过一种刻面树结构将每一个维度上的特征词映射到一个数字地址,作为文件寻址标识,但是该方法处理的维度坐标是扁平结构,且维度属性值之间没有包含关系。中国发明专利申请[17]通过将不同维度属性值进行组合以构建键值对,并基于key-value数据库以实现维度属性快速查询。中国发明专利申请[18]针对多维数据中数值数据的汇总问题提出了计算和可视化解决方案,但该方法没有解决存储和查询速率的问题。中国发明专利申请[19]是针对时间层次维度查询问题提出的解决方法,该方法不具备通用性。中国发明专利申请[20]通过将每个维度作为查询树中不同层的节点以构建查询树,但是该方法没有处理维度坐标间的层次包含关系。中国发明专利申请[21]通过在hadoop平台上搭建的分布式数据仓库来管理多维数据,并通过key-value数据存储数据仓库预先计算好的数据立方体cube查询结果,但是该方法只适用于多维数据中单一的数值数据的计算问题,不能处理多维数据集。中国发明专利申请[22]提出通过聚类方法得到聚类中心,并对高维关键字特征空间构建分布式索引以实现分布式倒排查询,但是该方法中的维度定义具有特殊性,不是具备通用性。中国发明专利申请[23]提出了一种多维数据的查询和浏览展示的方法,但是该方法没有解决多维数据集存储、索引和查询的问题。中国发明专利申请[24]针对日志数据分布式存储和查询的问题提供了一种解决方法,但是该方法不适用于处理多维数据集。中国发明专利申请[25]针对已知值域范围的连续数值型属性、已知值域范围的分段数值型属性和未知值域范围的数值型属性,通过设计、使用格雷码对属性值进行编码,并基于哈希函数对文本属性值进行编码以将多维属性进行编码混编以将混编后的多维属性作为数据存储的地址,但是该方法没有处理维度属性之间的层次关系,不支持维度结构动态调整。中国发明专利申请[26]针对多维数据存储查询问题,提出将每个属性用倒排表分别进行存储,对属性区间划分,建立二级索引,并对属性值建立倒排表,且将所述属性映射到物理存储地址以在查询时可以对各个属性分别进行查询,进而将查询结果进行组合以实现多维数据的查询,但是该方法中多维属性的取值是不包含维度间的层次结构,且不适用于多维数据集的维度层次结构。美国发明专利申请[27]提供了一种多源多维数据的获取、组织和使用方法,但是该方法不支持数据本身存储和查询的问题。美国发明专利申请[28]针对多维数据分片存储机制中数据重组的问题,提出一种基于用户定义的维度划分方法,以对数据进行分片重组并使数据能够在指定节点上进行本地计算,但是该方法不支持多维数据集的查询。美国发明专利申请[29]提出一种将维度数据映射到不同主机的不同地址的方法,该方法通过求余运算将维度整数标识映射到主机标识和主机物理地址上,以便于提供进一步查询,但是该方法未不支持多维数据集的存储。日本发明专利申请[30]提出一种通过数据划分以实现多维数据高效聚合与分片计算的方法,但是该方法只适用于多维数据中单一的数值数据,不支持多维数据集的存储和查询。
[0006]
传统方法在调整多维空间的维度结构时,大多采用离线复制的方法,这种方法在
面对海量数据时会消耗大量的存储设备和计算机资源,同时涉及对原有维度结构的重构,通过所述离线复制的方法进行多维数据维度结构的调整不仅会浪费大量的系统资源而且还会降低多维数据在线查询的效率。
[0007]
综上所述,传统方法在对多维数据进行存储、查询以及对多维空间的维度结构进行调整时,大多具有多维数据维度坐标冗余、浪费存储空间、查询速率低、系统维护代价高、不支持多维数据集的存储或查询等问题。
[0008]
参考专利申请列表:
[0009]
1.张翔,cn112632061a,一种多维数据存储方法及装置,2021.04.09.
[0010]
2.王建民;龙明盛;孙家广;杜兴强;黄向东,cn107943927a,一种分布式存储系统中多维数据的存储模式转换方法,2018.04.20
[0011]
3.文星,cn103412916a,一种监控系统的多维度数据存储、检索方法及装置,2013.11.27
[0012]
4.于兴彬,cn106156040a,多维度数据管理方法及装置,2016.11.23
[0013]
5.武磊;李浩;曾伟纪;蔡馥晗,cn104424258b,多维数据查询的方法、查询服务器、列存储服务器及系统,2020.06.16
[0014]
6.洪超,cn106933909a,多维度数据的查询方法及装置,2017.07.07
[0015]
7.盛捷来;季纺纺,cn112016581a,一种多维数据处理方法、装置、计算机设备及存储介质,2020.12.01
[0016]
8.刘文政;李栋;李扬;韩卿,cn110222124a,基于olap的多维数据处理方法及系统,2019.09.10
[0017]
9.曾锐;陈国栋;徐乾龙,cn111090705a,一种多维数据处理方法、装置及设备、存储介质,2020.05.01
[0018]
10.邹志强;吴家皋;江南;胡斌;王汝传,cn101853283a,面向多维数据的语义索引对等网络的构建方法,2010.10.06
[0019]
11.王小峰;苏金树;任沛阁;吴纯青;胡晓峰;黄杰;赵锋;虞万荣;彭伟;陶静;孙浩,cn103412879b,大规模信息网络中数据语义信息的处理方法,2016.11.30
[0020]
12.尹明悦;唐兴亮,cn1564160a,建立及查询多维数据立方体的方法,2005.01.12
[0021]
13.李浩;武磊;曾伟纪;蔡馥晗,cn104424231b,多维数据的处理方法及装置,2019.07.16
[0022]
14.张宇;张延松;赵现纲;林曼筠;谢利子;卫兰;张战云;国鹏;张玺;范存群,cn112269797a,一种卫星遥感数据在异构计算平台上的多维查询方法,2021.01.26.
[0023]
15.禹蕾;张观成;万书武;李均,cn111311326a,用户行为实时多维度分析方法、装置及存储介质,2020.06.19
[0024]
16.宋杰;王涵,cn110134661a,一种面向刻面的学术大数据存储查询方法,2019.08.16
[0025]
17.李茂昌,cn112214571a,基于kv存储的索引生成方法、装置、设备及介质,2021.01.12
[0026]
18.王东;李大学;严旭东;张超,cn109684352a,数据分析系统、方法、存储介质及电子设备,2019.04.26
[0027]
19.黄桥藩,cn108133043a,一种基于大数据的服务器运行日志结构化存储方法,2018.06.08
[0028]
20.胡玉涵;秦拯;李文杰;彭鹏;尹辉,cn108182242a,一种用于海量多维数值数据范围查询的索引方法,2018.06.19
[0029]
21.林育蓓;古振威;张星明;梁桂煌;陈霖;吴世豪,cn107301206a,一种基于预运算的分布式olap分析方法及系统,2017.10.27
[0030]
22.王建民;龙明盛;文庆福,cn108090182b,一种大规模高维数据的分布式索引方法及系统,2018.10.30
[0031]
23.宋杰;马忠义;闫海平;孟骋;雒齐,cn105843842a,一种大数据环境下多维聚集查询与展示系统及方法,2016.08.10
[0032]
24.杨定义;蔡剑峰;陈亮;李磊;肖伟民;余道敏,cn105138592a,一种基于分布式架构的日志数据存储和检索方法,2015.12.09
[0033]
25.周敏奇;周傲英,cn102890678a,一种基于格雷编码的分布式数据布局方法及查询方法,2013.01.23
[0034]
26.郭皓明;王之欣;魏闫艳;庞廓;田霂;焉丽,cn106599040a,一种面向云存储的分层索引方法与检索方法,2017.04.26
[0035]
27.ypma alexander;menger jasper;deckers david;han david;koopman adrianus cornelis matheus;lyulina irina;middlebrooks scott anderson;van haren richard johannes franciscu;wildenberg jochem sebastiaan,us2020264520a1,method,system,and apparatus for managing focus groups,2020.08.20
[0036]
28.bent john m;faibish sorin;zhang zhenhua;liu xuezhao;tang haiying;us9667720b1,shard reorganization based on dimensional description in sharded storage systems,2017.05.30
[0037]
29.bakalash reuven;shaked guy;us6408292b1,method of and system for managing multi-dimensional databases using modular-arithmetic based address data mapping processes on integer-encoded business dimensions,2002.06.18
[0038]
30.matsuo naoki;ono akinori;jp2001022621a, multidimensional database management system,2001.01.26
技术实现要素:[0039]
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种能够支持多维数据集的存储、查询以及维护多维数据集所在多维空间的方法。
[0040]
本发明的目的是通过以下技术方案实现的:
[0041]
根据本发明的第一方面,提供一种用于多维数据的存储方法,所述方法包括如下步骤:s1、获取待存储的多个资源数据,根据所有资源数据的属性和属性取值提取资源数据的正交属性,并以一个正交属性为一个维度构建待存储的多个资源数据对应的维度,每个资源数据的不同属性值对应于不同属性所在维度的一个坐标点,所有资源数据在同一个维度的属性取值构成该维度上的多个坐标点;s2、基于资源数据对应的维度确定维度坐标间的层次结构以获得维度坐标层次结构树,所有的维度构成资源数据对应的多维空间,所述
多维空间包含多个空间点,每个空间点的坐标为所有维度上与该空间点对应的维度坐标组成的多维坐标向量;s3、将所有资源数据按照其各个属性取值在维度上的对应坐标映射到多维空间中,其中,具有相同属性取值的多个资源数据映射到同一个空间点;s4、遍历每个空间点,为包含有资源数据的空间点分配存储空间。
[0042]
在本发明的一些实施例中,所述步骤s4包括遍历每个空间点,并对每个空间点对应的每个资源数据执行如下步骤:s41、基于每个资源数据所在空间点对应的唯一标识,判断该资源数据所在空间点是否已被分配有存储空间;s42、当前资源数据所在空间点已被分配有存储空间时,将当前资源数据存入空间点已被分配的存储空间的空闲存储行;当前资源数据所在空间点未被分配有存储空间时,为该空间点分配存储块并将当前资源数据存入分配的存储块的存储行中。
[0043]
在本发明的一些实施例中,通过如下方式获得每个空间点的唯一标识:基于所述空间点的维度坐标层次结构树生成当前空间点的每个维度坐标对应的唯一路径标识;基于所述空间点的每个维度坐标对应的唯一路径标识生成当前空间点的唯一标识。
[0044]
在本发明的一些实施例中,在所述步骤s42中,按照如下方式为空间点分配存储块:基于空间点的唯一标识获取空间点对应的虚拟主机,获取空间点在其对应虚拟主机中被分配的虚拟存储块,以及基于预设的存储分配规则将物理主机中的物理存储块分配给该虚拟存储块。
[0045]
在本发明的一些实施例中,将空间点的唯一标识与虚拟主机标识进行取模计算以获取空间点对应的虚拟主机;将空间点的唯一标识进行哈希以获取空间点在其对应虚拟主机中被分配的虚拟存储块。
[0046]
在本发明的一些实施例中,基于预设的存储分配规则将物理主机中的物理存储块分配给该虚拟存储块包括:获取待分配物理存储块的虚拟主机对应的物理主机列表,查询物理主机列表中所有物理主机的剩余存储空间比例,并从剩余存储空间最多的物理主机中分配物理存储块给虚拟存储块。
[0047]
在本发明的一些实施例中,在所述步骤s42中,空间点已被分配的存储空间没有空闲存储行时,从该空间点对应的虚拟主机对应的物理主机中为该空间点对应的虚拟存储块分配新的物理存储块并连接到虚拟存储块已有物理存储块。
[0048]
根据本发明的第二方面,提供一种基于本发明的第一方面所述方法的多维数据查询方法,所述方法包括:响应于空间点查询请求,获取待查询空间点坐标;基于待查询空间点坐标遍历该空间点对应的存储地址并返回该空间点对应的所有存储地址存储的多维数据集的汇总数据。
[0049]
在本发明的一些实施例中,当待查询空间点包含子空间点时,基于待查询空间点坐标和其对应子空间点坐标遍历待查询空间点坐标和其对应子空间点坐标对应的存储地址;返回待查询空间点坐标对应的所有存储地址存储的多维数据集以及其对应子空间点坐标对应的存储地址存储的多维数据集的汇总数据。
[0050]
在本发明的一些实施例中,在基于本发明的第一方面所述方法的多维数据查询方法中通过如下方式获得待查询空间点的子空间点的多维数据集:t1、以待查询空间点中的每一个维度分量为祖先节点,构建每一个维度上的所有子空间点对应的存储块与该维度的祖先节点的连接关系以构成聚合索引,每个祖先节点对应于一个子空间点存储块集合;t2、
基于步骤t1中构建的聚合索引,获得待查询空间点中的所有维度的子空间点存储块集合的交集。
[0051]
根据本发明的第三方面,提供一种基于本发明的第一方面所述方法的多维空间空间点维护方法,所述方法包括:响应于增加空间节点或删除的需求,在坐标层次结构树查询增加或删除空间节点后坐标路径发生变化的所有子节点;为坐标发生变化的所有子节点的新路径标识与原路径标识构建映射表以将坐标发生变化的所有子节点的新路径标识映射到其原存储块。
[0052]
根据本发明的第四方面,提供一种基于本发明的第一方面所述方法的多维空间维度维护方法,所述方法包括:响应于增加维度或删除维度的需求,基于增加维度或删除维度后的原空间点坐标对应的新空间点坐标,将原空间点坐标对应的存储空间分配给新空间点坐标。
[0053]
根据本发明的第五方面,提供一种用于多维数据系统,所述系统包括:
[0054]
接口服务器,用于提供多维数据集输入接口、多维数据集返回查询结果的接口;维度坐标层次结构树索引服务器,用于提供维度坐标层次结构树存储和查询接口、维度坐标层次结构树聚合索引存储、聚合查询服务中返回待查询空间点存储块、实现维度坐标增加和/或删除时维度结构新旧坐标映射的维护、维度增加和/或删除时存储块的维护;哈希字典索引服务器,用于提供空间点到虚拟存储块地址的哈希字典索引的存储和/或查询功能、分配虚拟存储块的初始化功能、虚拟存储块链表指针信息的存储和/或查询功能、虚拟存储块链表的维护功能;存储块分配索引服务器,用于提供虚拟存储块到物理主机的映射索引、存储块的数据插入、数据查询以及修改功能、为虚拟存储块分配物理存储块的功能;物理主机,用于存储物理存储块、查询接口服务器的查询结果。
[0055]
与现有技术相比,本发明的优点在于:
[0056]
1、本发明针对因多维空间中维度结构的变化导致的存储空间呈指数规模的问题,设计了一种动态的分布式存储方法,在存储的过程中本发明每次只为包含有资源数据的空间点分配存储空间,以此避免了多维空间中存储需求的指数增长,提高了物理存储空间的充分利用。
[0057]
2、本发明提出的基于空间点坐标的查询方法具有常数时间复杂度的查询效率,而且本发明提出的聚合查询方法,可避免遍历所有已存储的资源数据,并以此提高了多维数据集聚合查询的效率。
[0058]
3、本发明针对多维空间中因维度坐标变化导致的原存储空间被重构的问题,设计了一种基于新旧坐标映射关系的空间点维护方法,利用所设计的新旧坐标映射关系,本发明避免了重构原存储空间,实现了空间点维度坐标的在线调整,降低了系统的维护代价。
[0059]
4、本发明针对多维空间中因维度变化导致的原存储空间被重新分配的问题,设计了一种基于多个哈希字典的维度维护方法,利用所设计的多个哈希字典,本发明避免了对所有存储空间的重新分配,实现了多维空间维度的在线调整,降低了系统的维护代价。
附图说明
[0060]
以下参照附图对本发明实施例作进一步说明,其中:
[0061]
图1为根据本发明实施例的基于关系数据库的多维数值数据星型组织的示例图;
[0062]
图2为根据本发明实施例的构建多维空间的流程图;
[0063]
图3为根据本发明实施例的二维空间的示例图;
[0064]
图4为根据本发明实施例的基于二维空间的资源数据集的示例图;
[0065]
图5为根据本发明实施例的基于二维空间的空间点坐标向量示例图;
[0066]
图6为根据本发明实施例的多个哈希字典的示例图;
[0067]
图7为根据本发明实施例的基于空间点唯一标识的存储块的分配流程图;
[0068]
图8为根据本发明实施例的资源数据的存储流程图;
[0069]
图9为根据本发明实施例的空间点查询流程图;
[0070]
图10为根据本发明实施例的聚合查询流程图;
[0071]
图11为根据本发明实施例的基于二维空间的聚合查询的示例图;
[0072]
图12为根据本发明实施例的新增维度坐标的流程图;
[0073]
图13为根据本发明实施例的基于新旧坐标映射的示例图;
[0074]
图14为根据本发明实施例的新增维度的流程图;
[0075]
图15为根据本发明实施例的删除维度的流程图;
[0076]
图16为根据本发明实施例的基于多维空间的系统结构图。
具体实施方式
[0077]
为了使本发明的目的,技术方案及优点更加清楚明白,以下通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0078]
如背景技术中提到的,现有技术的传统方法在管理多维数据时往往只对单一的指标数值数据进行处理,而非直接处理多维数据集,因此,现有技术的传统方法在对多维数据进行存储、查询以及对多维空间的维度结构进行调整时,大多具有多维数据维度坐标冗余、浪费存储空间、查询速率低、系统维护代价高、不支持多维数据集的存储或查询等问题。针对现有方法的缺陷,本发明提出了一种能够动态分配存储空间的多维数据存储方法以及对应的多维数据集的快速查询方法、多维空间中空间点和维度的维护方法,以实现合理的分配存储空间,降低系统维护代价,提高数据查询效率等目的。
[0079]
下面从多维数据的存储、多维空间中空间点的维护、多维空间中维度的维护几个方面分别介绍本发明。
[0080]
一、多维数据的存储
[0081]
1.1多维空间的构建
[0082]
本发明在对待存储的资源数据集进行实际的存储之前,需要先构建多维空间以将待存储的资源数据集映射到所述多维空间中的对应的空间点上,概括来说,本发明基于资源数据集中每个资源数据的正交属性将资源数据集划分为多维数据集以将其映射到一个多维空间中,该多维空间是一种多维度分类模型,其包含多个空间点,每个空间点对应一组维度坐标相同的多维数据集。如图2所示,根据本发明的一个实施例,本发明构建多维空间的步骤包括:
[0083]
步骤a1、获取待存储的资源数据集中所有的资源数据,并根据所述所有资源数据的属性和属性取值提取资源数据的正交属性,并以一个正交属性为一个维度构建待存储的
多个资源数据对应的维度,每个资源数据的不同属性值对应于不同属性所在维度的一个坐标点,所有资源数据在同一个维度的属性取值构成该维度上的多个坐标点,其中,所述正交属性是指所有资源数据中属性取值范围互不相交且为所有资源数据共有的属性,例如,以ci表示提取出的第i个正交属性对应的第i个维度,ci为该维度的命名,以c
in
表示第i个维度上第n个维度坐标,以ci={c
i1
,c
i2
,...c
in
}表示第i个维度的维度坐标集合,其中,i和n都为自然数;
[0084]
步骤a2、基于步骤a1中所述资源数据对应的维度确定维度坐标间的层次结构以获得维度坐标层次结构树,所有的维度构成资源数据对应的多维空间,其中,获得维度坐标层次结构树的步骤包括:
[0085]
步骤a21、以维度ci作为与其对应的维度坐标层次结构树ti的根节点t
i0
,以ci的维度坐标集合{c
i1
,c
i2
,...c
in
}为所述根节点t
i0
的子坐标集合以生成维度ci对应的子坐标候选集合t
ib
,即t
ib
={c
i1
,c
i2
,...c
in
},其中,b=1,2,
…
,n。将子坐标候选集合t
ib
、根节点t
i0
以及所述根节点t
i0
的路径坐标(以path(t0)=t0表示)作为步骤a22的输入参数以生成所述根节点t
i0
对应的所有子节点以及每个子节点对应的坐标路径;
[0086]
步骤a22、遍历子坐标候选集合t
ib
中的每个坐标c
i1
,c
i2
,...c
in
,并按照每个坐标c
i1
,c
i2
,...c
in
与所述根节点t
i0
之间的包含关系确定所述子坐标候选集合t
ib
中属于所述根节点t
i0
的所有子坐标并生成第一层子坐标集合t
i01
,即t
i01
={t
01
,t
02
,...,t
0y
},其中,t
0y
∈ci,下标y为自然数,然后在所述根节点t
i0
与所述第一层子坐标集合t
i01
中的每个坐标之间各链接一条边以使所述第一层子坐标集合t
i01
中的每个坐标t
01
,t
02
,...,t
0y
成为所述根节点t
i0
的直接子坐标,即所述根节点t
i0
为父节点,所述每个坐标t
01
,t
02
,...,t
0y
分别为所述父节点t
i0
的子节点。基于父节点t
i0
与其每个子节点的包含关系生成第一层子坐标集合t
i01
中每个坐标的坐标路径(以path(t0)/t
0y
表示),并将所述每个坐标t
01
,t
02
,...,t
0y
的坐标路径存入维度ci对应的维度坐标层次结构树ti的第一层子坐标候选集合t
i01
中,即t
i01
={《t
01
,path(t0)/t
01
》,《t
02
,path(t0)/t
02
》,...,《t
01
,path(t0)/t
0y
》},需要注意的是,此时原第一层子坐标候选集合t
i01
中的坐标已被替换;
[0087]
步骤a23、与步骤a21所述方法类似,将所述第一层子坐标集合t
i01
中每个坐标t
01
,t
02
,...,t
0y
分别对应的子坐标候选集合、所述每个坐标t
01
,t
02
,...,t
0y
及其对应的坐标路径《t
01
,path(t0)/t
01
》,《t
02
,path(t0)/t
02
》,...,《t
01
,path(t0)/t
0y
》作为步骤a22的输入参数以分别生成所述每个坐标t
01
,t
02
,...,t
0y
对应的所有子节点以及每个子节点对应的坐标路径,以此推类,直至维度ci对应的所有坐标都存入维度坐标层次结构树ti中,即所述维度坐标层次结构树ti中每个节点分别对应于维度ci中的一个坐标并且所述每个节点有各自的坐标路径,此时,维度ci对应的维度坐标层次结构树ti便构建完成。假设待存储的资源数据集中共有r个维度,则维度c1,c2,...,cr分别对应于r个维度坐标层次结构树t1,t2,...,tr,所述r个维度坐标层次结构树t1,t2,...,tr组成一个多维空间,所述多维空间包含有多个空间点,每个空间点的坐标为所有维度上与该空间点对应的维度坐标组成的多维坐标向量,即每个空间点是所述多维空间中每个维度的维度坐标集合中相关维度坐标的笛卡尔积,例如,从每个维度的维度坐标集合中选取第一个维度坐标组成一个多维坐标向量《c
11
,c
21
,...c
i1
》,其中,该多维坐标向量《c
11
,c
21
,...c
i1
》用于表示多维空间中的空间点p,即空间点p的坐标为p=《c
11
,c
21
,...c
i1
》。
[0088]
1.2空间点唯一标识的计算
[0089]
本发明在构建好多维空间后,需要计算多维空间中每个空间点的唯一标识,并根据所述每个空间点的唯一标识对资源数据进行存储或者查询,本发明构建的多维空间为多维数据集的管理提供了一种新的理论定义和操作流程,但是由于空间点数量为指数规模,所以在将本发明构建的多维空间中的数据存储在实际的物理空间中时,为每个空间点分配一个存储空间会导致存储空间呈指数规模,为了解决存储空间呈指数规模的问题,本发明进一步设计了一种动态的分布式存储方法,通过构建多个哈希字典来动态分配存储空间,其中,每次只为包含有资源数据的空间点分配存储空间以避免多维空间中存储需求的指数增长,具体来说,在存储过程中,通过分析每个资源数据的属性,建立资源数据集对应的维度坐标层次结构并计算所述维度坐标对应空间中的唯一标识,然后利用所述空间点唯一标识和多个哈希字典为该空间点对应的多维数据集分配分布式存储块地址。
[0090]
根据本发明的一个实施例,本发明计算空间点的唯一标识的步骤包括:
[0091]
步骤b1、将所有资源数据按照其各个属性取值在维度上的对应坐标映射到多维空间中,其中,具有相同属性取值的多个资源数据映射到同一个空间点,而每个空间点包含有一个或多个资源数据、或没有资源数据,例如,当具有相同属性取值的资源数据集s映射到空间点p时,该资源数据集s亦指代空间点p的多维数据集,记作p.s,资源数据集s={d1,d2,...dm},其中,d1表示第一条资源数据,d2表示第二条资源数据,dm表示第m条资源数据,m为自然数,而在所述资源数据集s={d1,d2,...dm}中的每条资源数据具有相同的空间点坐标,即p=《c
11
,c
21
,...c
i1
》,为了更好的理解本发明,下面结合具体的示例来进行说明,如图3所示,展示了一个关于学术文献论文资源的二维空间,用于存储文献论文的文献标题、作者信息、原文文本的存储位置等数据信息,所述二维空间包含两个维度:论文类别和出版物,其中,维度“论文类别”表示其具有多个不同领域的论文类别,例如,维度坐标“ai(人工智能)”包含维度坐标“ts(文本摘要)”和维度坐标“ml(机器学习)”等类别,而维度“出版物”表示其具有不同的出版机构,例如,维度坐标“acl(acl协会)”包含维度坐标“conf(会议)”和维度坐标“journal(期刊)”,而维度坐标“conf(会议)”包含维度坐标“acl(acl会议)”和维度坐标“coling(coling会议)”。由此可获得图4中所展示的四条资源数据的相关信息,其中,所述四条资源数据分别为u1、u2、u3、u4,key表示资源数据的唯一标识,file表示资源数据的文件地址,r1和r2分别表示维度“论文类别”和维度“出版物”的维度坐标向量,而资源数据u1对应的空间点坐标向量为《cat/ai/ts/abs,pub/acm/cikm》,资源数据u2对应的空间点坐标向量为《cat/ai/ts/ext,pub/acl/conf/acl》,资源数据u3和资源数据u4对应同一个空间点,其坐标向量为《cat/al/ml,pub/acl/conf/coling》,由此可知,在多维空间中一个资源数据只能对应一个空间点,而一个空间点对应一个或多个资源数据、或没有资源数据;
[0092]
步骤b2、基于多维空间中维度坐标层次结构树生成当前空间点的每个维度坐标对应的唯一路径标识,根据本发明的一个实施例,将步骤a1中提取出的维度和维度坐标存于多个维度表中,其中,所述维度表是指一种数据库表,每个维度表对应一个维度和其维度坐标集合,基于所述每个维度表和每个维度对应的维度坐标层次结构树获得每个维度坐标对应节点与其根节点之间的所有路径节点,分别将所述每个维度坐标对应节点与其根节点之间的所有路径节点组成字符串以表示每个维度坐标的唯一路径标识,例如,在维度坐标层次结构树t1中,以字符串r
1x
表示在维度c1中维度坐标c
1x
的唯一路径标识,即r
1x
=c
10
/c
11
/c12
/
…
/c
1x
,其中,x为自然数,c
10
表示维度c1本身。通过这种方式计算的维度坐标的唯一路径标识可以保证在多维空间中每个维度坐标的路径标识都不相同,而且多维空间中的空间点能够以一个坐标向量《r
1x1
,r
2x2
,
…rnxi
》为其对应的唯一标识,其中,r
nxi
表示第n个维度中维度坐标为c
nxi
的唯一路径表示,而下标n、x1、x2、xi都是自然数;
[0093]
步骤b3、将步骤b2中所述当前空间点中每个维度坐标对应的唯一路径标识采用哈希方式生成每个维度坐标对应的路径身份标识。根据本发明的一个实施例,将所述当前空间点的每个维度坐标的路径标识输入一致散列哈希函数,通过所述一致散列哈希函数的计算会分别输出一个整数型的唯一标识,将所述每个维度坐标对应的整数型的唯一标识转换为一个16进制的字符串,并将每个维度坐标对应的16进制的字符串作为每个维度坐标的路径身份标识,例如,计算维度坐标c
1x
的路径身份标识的公式为id(r
1x
)=hash(r
1x
),其中,hash函数为一致性散列函数,而对于hash函数返回的64位整数型的唯一标识可以通过sha-1算法将其转换为16进制表示的字符串;
[0094]
步骤b4、将步骤b3中所述当前空间点的每个维度坐标对应的路径身份标识组成一组字符串,基于所述字符串采用哈希方式生成当前空间点对应的唯一标识。根据本发明的一个实施例,将当前空间点的每个维度坐标对应的路径身份标识组成的字符串输入一致散列哈希函数,通过所述一致散列哈希函数的计算会输出空间点的唯一标识,例如,将空间点p=《c
11
,c
21
,...c
i1
》对应的由每个维度坐标的路径身份标识组成的一组字符串作为一致散列哈希函数的输入,通过所述一致散列哈希函数的计算会输出空间点p的一标识id(p)=hash(id(r
11
)+id(r
21
)+...+id(r
n1
)),为了更好的理解本发明,下面通过具体的示例来进行说明,如图5所示,维度为论文类别和维度为出版处构成的二维空间中,两个维度对应维度坐标分别被映射到各自的路径身份标识上,如《cat/cs》对应的路径身份标识为fe133,而空间点y=《cat/al/ts/abs,pub/acm/cikm》对应的唯一标识上为id(y)=5fdb2+6d143。通过这种方式获得的空间点的标识可以保证每个空间点都具有唯一的标识,这是由于在计算维度坐标的路径身份标识时,每个维度坐标的唯一路径标识是基于每个维度坐标对应的维度为路径根节点,而每个维度不同则保证了每个维度坐标具有唯一的路径标识,例如,在图5中的维度坐标“ai”不仅可以出现在“论文分类”维度中,也可以出现在别的维度中,但根据二者所在维度的不同可以保证两种维度中的维度坐标“al”的路径标识不同,即两种维度中的维度坐标“ai”分别具有唯一的路径标识。
[0095]
1.3空间点中多维数据的存储
[0096]
上述“1.1多维空间的构建”和“1.2空间点唯一标识的计算”中所提到的多维空间和空间点仅是抽象的概念或者计算方式,下面将对本发明中的多维数据实际的存储和相关索引进行说明。
[0097]
根据本发明的一个实施例,在对多维数据进行存储时,本发明构建了多个哈希字典建立多维数据所在空间点与存储空间的联系,发明人考虑到基于多个哈希字典直接为空间点分配物理存储块会存在物理存储块分配不均匀的情况,如部分物理主机会获得更多的物理存储块,而部分主机则获得较少的物理存储块,因此,为了提高分布式物理主机的存储空间的利用效率,本发明设计了虚拟主机存储机制,将多维数据集所在空间点映射到虚拟主机的虚拟存储块上,再由虚拟主机对应的哈希字典将虚拟存储块均匀分配到实际物理存储块上以实现物理存储空间的充分利用。基于多个哈希字典为空间点分配存储块进行数据
存储后,可实现常数时间复杂度的空间点多维数据集的快速查询,且为了进一步提升多维数据集对应存储块内数据的插入和查询效率,本发明设计了两个链表来分别实现数据插入和数据查询以实现在一个多维数据集对应的存储块内插入和查询数据时无需遍历存储块内的全部数据。为了实现快速高效的多维数据存储和查询,本发明构建了多个哈希字典用于存储各种指向关系,为了更好的理解本发明中多维数据的存储,下面结合图6中的存储块m1:d1资源行示例来说明资源数据对应的存储结构,在虚拟存储块中每一行对应一个多维数据,每一行存储空间对应有行类型,所述行类型用于表示当前行的状态,包括:空闲行和数据行;键值则用于记录已被存储的多维数据对应的字典标识以及当前多维数据的物理存储地址指针;已被存储的链接指针则包括:上一行行号指针和下一行行号指针。在本发明的实施例中应用有多个哈希字典,如图6所示,所述多个哈希字典分别为:
[0098]
存储块哈希字典(以dict-k表示),用于记录多维数据的唯一标识到虚拟主机存储块地址的字典索引,其中,所述存储块哈希字典的键值和索引值分别为空间点对应的唯一标识和指定虚拟主机中的虚拟存储块编号,例如,空间点y=《cat/ai/ts/abs,pub/acm/cikm》,利用“二、空间点唯一标识的计算”所述方法获得空间点y的唯一标识,即id(y),然后将空间点y的唯一标识id(y)映射到指定虚拟主机中的一块虚拟存储块的地址上,并以m1:d1表示,其中m1表示虚拟主机,其下标数字1表示该虚拟主机的编号为1,d1表示虚拟主机m1中的一个虚拟存储块,其下标数字1表示该虚拟存储块的编号为1。
[0099]
存储块物理地址字典(以dict-b表示),用于记录多维数据的虚拟主机存储块地址与物理主机存储块地址间的映射关系,其中,所述存储块物理地址字典的键值和索引值分别为指定虚拟主机中的虚拟存储块编号和指定物理主机中物理存储块的编号,例如,将虚拟存储块m1:d1映射到物理主机地址为192.168.0.1:01的物理主机上,该物理主机通过其真实ip地址192.168.0.1来标识,而位于ip地址后的编号01表示该物理主机上的物理存储块编号,其与虚拟主机的存储块m1:d1的编号相对应。
[0100]
物理主机字典(以dict-v表示),用于记录指定虚拟主机对应的物理主机列表,其中,所述物理主机字典的键值和索引值分别为指定虚拟主机的编号和物理主机列表,例如,对于虚拟主机m1,其对应的一组物理主机地址列表为[192.168.0.1/80,192.168.0.2/60,192.168.0.3/30],该物理主机列表表示虚拟主机m1对应有3台物理主机,而所述物理主机列表中,位于物理主机ip后的数值表示剩余的空闲存储空间的百分比,如192.168.0.3/30表示主机192.168.0.3有30%的空闲存储空间。
[0101]
物理主机存储块指针字典(以dict-f表示),用于记录每个物理主机中的空闲存储块指针和物理存储块的物理地址,其中,所述物理主机存储块指针字典的键值和索引值分别为指定物理主机中物理存储块的编号和所述指定物理主机中物理存储块的物理地址,例如,物理主机存储块指针字典中的一个映射地址01@192.168.0.1:0x00表示ip为192.168.0.1物理主机的第一个物理存储块的起始地址为0x00,而映射地址为f@192.168.0.1:01中的01表示ip为192.168.0.1的当前空闲存储块为01。
[0102]
存储块地址指针字典(以dict-p表示),用于记录每个物理存储块对应多个指针的信息,其中,所述多个指针包括多维数据的首行指针、多维数据的尾行指针、虚拟储存块的尾行指针、虚拟储存块的空闲行指针、虚拟储存块的上一个虚拟存储块指针、虚拟储存块的下一个虚拟存储块指针,例如,虚拟存储块d1的数据首行(d1.rb)指针对应的m1:d1:1表示
当前虚拟存储块的第一个资源数据在虚拟主机m1的d1块中的第1行,当前空闲行(d1.qf)指针对应的m1:d1:3表示当前虚拟存储块对应的空闲行在第3行,下一存储块指针(d1.dn)表示扩展当前存储块存储空间,链接一个新地址的物理存储块来存储当前所对应空间点中的数据,而指针dp为上一存储块指针,如空间点《cat/al/ts/ab,pub/acm/cikm》对应的第一个虚拟存储块中的(d1.dn)指针为m1:d2:1,表示该空间点包含两个虚拟存储块m1:d1和m1:d2。
[0103]
存储块资源行号字典(以dict-r表示),用于记录每个多维数据在其对应的虚拟存储块中的行号,其中,所述存储块资源行号字典的键值和索引值分别为多维数据对应的唯一标识和该多维数据对应虚拟存储块的行号,其中,所述多维数据对应的唯一标识是指基于该多维数据的物理存储地址通过哈希函数生成的标识。
[0104]
本发明通过上述多个哈希字典建立了虚拟存储块、物理存储块、空间点三者之间的映射关系,并基于所述三者间的映射关系将资源数据集进行存储,如图7所示,本发明通过遍历每个空间点的方式,为包含有资源数据的空间点分配存储空间,且为同一个空间点包含的多个资源数据分配连续存储空间。
[0105]
根据本发明的一个实施例,本发明在遍历每个空间点对应的每个资源数据时通过执行以下步骤来实现资源存储:
[0106]
步骤e1、基于每个资源数据所在空间点对应的唯一标识,判断该资源数据所在空间点是否已被分配有存储空间。根据本发明的一个实施例,资源数据d以d={key,f,r
1x1
,r
2x2
,...,r
nxi
}表示,其中,key为资源的唯一标识,f为资源存储地址指针,r
1x1
,r
2x2
,...,r
nxi
是其维度坐标,通过“二、空间点唯一标识的计算”所述方法获得其所在空间点v的唯一标识id:id(v)=hash(id(r
1x1
)+id(r
2x2
)+...+id(r
nxi
)),并通过存储块哈希字典查找所有虚拟主机中是否已经存在id(v)所对应的存储块,如果所有虚拟主机中尚没有存在id(v)所对应的存储块,则首先为该空间点分配一块存储空间,而如果所有虚拟主机中已经存在id(v)所对应的存储块则将该资源数据d存入id(v)对应的存储空间;
[0107]
步骤e2、当前资源数据所在空间点未被分配有存储空间时,为该空间点分配存储块。根据本发明的一个实施例,本发明基于空间点的唯一标识根据预设的第一计算规则,获取空间点对应的虚拟主机,并采用预设的第二计算规则获取空间点在其对应虚拟主机中被分配的虚拟存储块,基于预设的存储分配规则将物理主机中的物理存储块分配给该虚拟存储块,其中,预设的第一计算规则是指将空间点的唯一标识与虚拟主机标识进行取模计算以获取每个空间点对应的虚拟主机,预设的第二计算规则是指将空间点的唯一标识进行哈希以寻找对应的虚拟存储块,预设的存储分配规则是指获取待分配物理存储块的虚拟主机对应的物理主机列表,查询物理主机列表中所有物理主机的剩余存储空间比例,并从剩余存储空间最多的物理主机中分配物理存储块给虚拟存储块,例如,当资源数据d={key,f,r
1x1
,r
2x2
,...,r
nxi
}所在空间点v没有被分配存储空间时,将id(v)前32位bit转化32bit整数n,并在k台虚拟主机中随机选取一台作为目标计算机,用n在k上进行取模运算获得其编号m=n mod k,然后从物理主机字典中获得虚拟主机m所对应的物理主机列表l,并在物理主机列表l中选取空闲存储空间地址最多的物理主机s,并利用物理主机存储块指针字典在s中找到一个空闲物理存储块s.d划分给虚拟主机存储块m.d。此后,将id(v)作为键,m.d作为值存入存储块哈希字典,即可通过id(v)来获得其对应的虚拟存储块;将m.d作为键,将物理存
储块s.d作为值存入存储块哈希字典中,即可通过输入虚拟存储块地址m.d来获得物理存储块地址s.d;
[0108]
需要注意的是,在获得物理存储块s.d后需要对其进行初始化,将物理存储块s.d大小固定为e,其中e=216个字节,并划定长度为固定值的记录行,而一个物理存储块能够存储的最大行数为e\512,其中,每行对应多维数据集中的一条数据,而每行记录包含至少6个元素:行号r、行类型type、资源键值key、资源存储地址指针f、上一空闲行行号指针t、下一空闲行行号指针q,其中,行号由虚拟主机编号、地址块编号、以及地址块中的序列行号组成,行类型由空闲行和数据行组成,所述空闲行是指可以写入数据信息的行,所述数据行是指已经包含一条资源属性数据信息的行。在初始状态下所有的行均为空闲行,资源数据的键值key为空,资源存储地址指针为空,且行类型为空闲行,而所有的空闲行会通过每行的t,q指针连接起来形成一个空闲行链表,其中指针t,q分别指上一空闲行指针和下一空闲行指针。空闲行链表中下一空闲行行号为当前行号加1,即q=r+1,上一空闲行行号为当前行行号减1,即t=r-1。在初始化后的物理存储块s.d中,用d[r]表示s.d中第r行,d[r].t表示第r行的前一个空闲行,d[r].q表示第r行的下一个空闲行,d[r].key表示第r行所存资源数据的键值,d[r].f表示所存资源数据的实体信息数据。完成对物理存储块s.d初始化后,将其对应的虚拟存储块m.d为键值,并于存储块地址指针字典中记录存储块s.d和虚拟存储块m.d对应的当前行号指针信息,如,键为虚拟存储块编号,值为其对应的多个指针,所述多个指针包括:当前空闲行号,记做d.qf、第一个数据行号,记做d.rb、最后一个数据行号,记做d.re、存储块最后一行,记做d.end、以及下一区间块地址,记做d.dn、上一存储块地址,记做d.dp。空闲行号指针d.qf=-1时,表示当前存储块已满,第一个数据行号指针d.rb=-1或最后一个数据行号指针d.re=-1时,表示当前尚无资源数据存入;
[0109]
步骤e3、当前资源数据所在空间点已被分配有存储空间时,将当前资源数据存入空间点已被分配的存储空间的空闲存储行,如图8所示,根据本发明的一个实施例,在向物理存储块s.d插入资源数据k时,需要判断物理存储块s.d中是否还有空闲存储空间,当物理存储块s.d的当前空闲行指针d.qf=-1时,说明当前物理存储块s.d已满,此时需要计算资源数据k所在空间点g的唯一标识id(g),并为其分配一个新的物理存储块s.d1,然后设置s.d中的下一个存储块地址,即d.dn=d1,d1.dp=d,以将存储块s.d1连接到存储块s.d之后,此外,还需设置d.qf=d1.qf,即将空闲行设置为s.d1中的空闲行,然后在存储块s.d1中插入资源数据k。需要注意的是,当整个系统的所有存储空间已满时则需要通过增加新的存储设备来扩展存储空间。当物理存储块s.d的当前空闲行指针d.qf不为-1时,则说明当前物理存储块s.d还有空闲存储空间,此时按照如下步骤插入资源数据k={key,f,r
1x1
,r
2x2
,...,r
nxi
}:
[0110]
步骤e31、根据在存储块地址指针字典中存储块s.d对应的空闲行指针d.qf找到当前空闲行,把资源数据k的键key和资源存储地址指针f存入当前空闲行的记录中,即d[qf].key=key,d[qf].f=f,修改当前空闲行类型为数据行;
[0111]
步骤e32、修改空闲行链表,把当前空闲行的前一空闲行中的下一空闲行设定为当前空闲行的下一行1,即d[d[qf].t].q=d[qf].q;
[0112]
步骤e33、修改空闲行链表,把当前空闲行的下一行的上一空闲行设定为当前行的前一个空闲行,即d[d[qf].q].t=d[qf].t,指当前行d[qf]在空闲行链表中删除;
[0113]
步骤e34、找到存储块s.d对应的最后数据行指针,修改最后数据行指针使其指向当前插入的资源数据k,即d[d[re]].q=qf,并修改d[qf].t=re,d[qf].q=-1,即将新插入资源数据添加到数据列表中的最后一位,而若存储块s.d中尚无数据时,则只需令d[qf].q=-1,d[qf].t=-1;
[0114]
步骤e35、在存储块地址指针字典中修改存储块s.d的当前数据行链表指针,若资源数据k是第一个数据,则令d.rb=d.qf,若资源数据k不是第一个数据,则只需修改结尾指针,即令d.re=d.qf;
[0115]
步骤e36、在存储块地址指针字典中修改存储块d.qf为当前行的下一空闲行行号,即令qf=d[qf].q,而若当前空闲行指针d.qf指向了存储块的最后一行d.end,则表示存储块s.d已满,并设置d.qf=-1;
[0116]
步骤e37、在存储块资源行号字典中记录资源数据k,即以其key为键,以其行号为值,则在根据资源数据k的键值key查找资源数据时,无需遍历整个存储块数据行,便能够实现资源数据k在所有存储空间中的快速定位。
[0117]
1.4空间点中多维数据的查询
[0118]
通过上述实施例,实现了多维数据的存储,并且基于多个哈希字典为空间点分配存储块进行数据存储后,可实现常数时间复杂度的空间点多维数据集的快速查询,为了进一步提升多维数据集对应存储块内数据的插入和查询效率,本发明设计了空闲行链表和数据行链表来分别实现数据插入和数据查询,其中,空闲行链表是由一个物理存储块中所有还未存有数据的空闲行组成的链表,数据行链表是由一个物理存储块中所有已经存有数据的数据行组成的链表,通过所设计的空闲行链表和数据行链表本发明可以实现在一个多维数据集对应的存储块内插入和查询数据时无需遍历存储块内的全部数据。基于本发明设计的多维数据存储方法的数据查询方法针对不同的查询请求会返回两类不同的数据集,其中,第一类查询为空间点查询,第二类查询为聚合查询,其中,空间点查询仅返回待查询空间点对应的多维数据集,而聚合查询则需要返回待查询空间点及其所有子空间点对应的多维数据集。
[0119]
1.4.1空间点查询
[0120]
当查询请求为空间点查询时,基于待查询空间点坐标遍历该空间点对应的存储地址并返回该空间点对应的所有存储地址存储的多维数据集的汇总数据。根据本发明的一个示例,当待查询空间点的查询请求为query={r
1x1
,r
2x2
,...,r
nxi
}时,获取其对应的空间点q的坐标《r
1x1
,r
2x2
,...,r
nxi
》,并根据存储块哈希字典,存储块物理地址字典,以及存储块地址指针字典返回该空间点对应的多维数据集中所有的资源数据,根据本发明的一个实施例,如图9所示,空间点查询的具体步骤包括:
[0121]
步骤g1、基于“1.2空间点唯一标识的计算”的方法,获取空间点q的唯一标识id(q)=hash(id(r
1x1
)+id(r
2x2
)+...+id(r
nxi
)),并通过存储块哈希字典、存储块物理地址字典查找所有存储空间中是否已经存在id(q)所对应的存储块s.dq,若尚没有存在,则返回为空,若已经存在,则获取id(q)所对应的存储块s.dq的所在存储地址;
[0122]
步骤g2、若所有存储空间中存在id(q)所对应的存储块s.dq,则获得存储块s.dq的第一个数据行指针dq.rb,并读取dq[dq.rb].key,dq[dq.rb].f的内容以获得存储块s.dq中第一个资源数据的键值和资源存储地址,然后读取下一个行号,dq[dq.rb].t,若下一行号
为-1,则表示多维数据集全部数据读取完成,否则,继续读取下一行号所对应的行中的数据信息,直至下一行号为-1以完成空间点q的多维数据集中所有资源数据的查询。
[0123]
需要注意的是,针对空间点查询请求,本发明能够实现在常数时间复杂度内完成空间点存储块的寻址,并在获取多维数据集的数据时无需访问多维空间中的其他数据。
[0124]
1.4.2聚合查询
[0125]
为了提升多维空间中多维数据集的聚合查询效率,本发明基于维度坐标层次结构树和维度坐标之间的包含关系构建了一种的聚合索引字典,通过避免聚合查询时对所有空间点进行遍历来提升聚合查询效率。即当查询请求为聚合查询时,本发明基于每个维度的维度坐标集的层次结构关系和待查询空间点的所有子空间点对应的存储块构建聚合索引以获得待查询空间点的所有子空间点的多维数据集,并将待查询空间点对应的多维数据集及其所有子空间点对应的多维数据集合并为一个多维数据集并返回。如图10所示,根据本发明的一个实施例,本发明获得待查询空间点的子空间点的多维数据集的步骤包括:
[0126]
步骤t1、以待查询空间点中的每一个维度分量为祖先节点,构建每一个维度上的所有子空间点对应的存储块与该维度的祖先节点的连接关系以构成聚合索引,每个祖先节点对应于一个子空间点存储块集合。根据本发明的一个实施例,本发明获取空间点q=《r
1x1
,r
2x2
,...,r
nxi
》的每个维度分量r
wxi
=r
wxi1
/r
wxi2
/.../r
wxik
,其中w=1..n,i、k都为自然数,并遍历其上每一个祖先路径节点r
wxij
,j=1..k,j为自然数针对每个rij获取其对应的维度分量与其对应的物理存储块并以此构建聚合索引字典(以dict-g表示),其中,i、j、k都为自然数,例如,在聚合索引字典中以r
wxi1
/r
wxi2
/.../r
wxik
为键,以每个r
wxij
对应的物理存储块组成的物理存储块集合h
wxij
={d1,d2,...,dm}为索引值以将每个r
wxij
对应的物理存储块集合h
wxij
与每个r
wxij
的维度分量关联起来;
[0127]
步骤t2、基于步骤t1中构建的聚合索引,获得待查询空间点中的所有维度的子空间点存储块集合的交集。根据本发明的一个实施例,本发明初始化一个空集r用于存储空间点q所有维度的子空间点中的多维数据集,并对空间点q的每个维度分量r
wxi
=r
wxi1
/r
wxi2
/.../r
wxik
执行步骤t21至t24。
[0128]
在步骤t21中,以维度分量r
wxi
=r
wxi1
/r
wxi2
/.../r
wxik
为键,并从聚合索引字典中获得其对应的存储块集合h
wxij
={d1,d2,...,dm}。
[0129]
在步骤t22中,判断当前处理的空间点的维度坐标所在维度是否为处理的第一个维度,并将当前处理的维度坐标对应的存储块集合h
wxij
={d1,d2,...,dm}添加到空集r中。
[0130]
在步骤t23中,若当前处理的空间点的维度坐标所在维度不是处理的第一个维度,则将当前维度对应的存储块集合与r中的存储块求交集,并将所述交集替代r中原有的存储块以删除r中不在当前维度中的数据。
[0131]
在步骤t24中,当前维度坐标处理完毕后,继续处理下一个维度坐标对应的维度分量直至所有维度坐标处理完毕;
[0132]
步骤t3、基于待查询空间点坐标和其对应子空间点坐标,遍历待查询空间点坐标和其对应子空间点坐标对应的存储地址并返回待查询空间点坐标对应的所有存储地址存储的多维数据集以及其对应子空间点坐标对应的存储地址存储的多维数据集的汇总数据。例如,图10展现的多维数据集聚合查询的流程,在聚合查询时首先获得待查询空间点的唯一标识,然后分为左右两部分执行,左侧为获取查找待查询空间点对应的多维数据集的流
程,右侧为获取待查询空间点的所有子空间点对应的多维数据集的流程,最后将两个查询结果合并作为最终聚合查询结果。为了更好的理解聚合查询,下面结合示例说明聚合查询的详细过程,如图11所示,图11展示了两个维度坐标层次结构树,其上分别有对应的索引指针指向示例中的空间点存储块d,所述空间点存储块d的第一个维度坐标是cat/cs/al/ts/abs,因此,其路径标识的祖先节点都有指针指向空间点存储块d,即cat/cs,cat/cs/ai中的维度坐标cat/cs/al/ts都能找到空间点存储块d,而另外一个维度的路径上的坐标pub/acm和pub/acm/cikm也有同样的索引指针指向空间点存储块d,当聚合查询输入的坐标为《cat/cas/ai,pub/acm》时,两个维度上的索引都会返回空间点存储块d,因此空间点存储块d作为最终结果返回。
[0133]
二、多维空间中空间点的维护
[0134]
多维空间中空间点的维护是指当多维空间的维度结构由于维度坐标信息的调整而变化时,对多维数据存储结构进行的维护,支持多维空间中维度坐标层次结构树的维度坐标节点的增加或删除。
[0135]
当一个多维空间增加维度坐标时,存在以下两种情况:(1)当增加维度坐标节点位于维度坐标层次结构树中的叶子节点部分时,所增加的维度坐标节点不会影响维度树上其他已有维度坐标节点,故增加的维度坐标节点只需要为新增的维度坐标添加维度坐标路径标识即可,而当新的资源数据插入时,若新的资源数据包含新增的维度坐标,则按照“1.2空间点唯一标识的计算”以及“1.3空间点中多维数据的存储”所述方法进行处理即可。(2)当新增维度坐标节点位于维度坐标层次结构树的内部时,此时维度坐标层次结构树中部分已有的维度坐标节点的路径将会因为插入新的维度坐标节点而发生改变,其对应的存储块地址也会发生改变,为了避免重构整个空间点存储块,本发明构建了一种新旧坐标映射来解决维度坐标层次结构树内部的维度坐标增或删除的问题,所述新旧坐标映射通过构建新坐标字典(以dict-c1表示)和旧坐标字典(以dict-c2表示)来实现两种坐标路径的映射,新坐标字典以新坐标路径标识为键,旧坐标路径标识为值存入字典,而旧坐标字典以旧坐标路径标识为键,新坐标路径标识为值,如图12所示,本发明通过遍历新增维度坐标节点的所有子节点,对每一个子节点建立一个新旧坐标映射表,并每个子节点的旧坐标a及其新坐标b执行如下步骤:
[0136]
步骤w1、将新路径标识b作为键,旧的路径标识a作为值,存入新坐标字典中,即dict-c1[b]=a,故当输入新坐标b的路径标识时,可以获得旧坐标a的路径标识,并基于a的路径标识能够获得原来的存储块;
[0137]
步骤w2、在旧坐标字典中查找旧坐标路径a的路径标识,如果不存在,则令dict-c2[a]=b;如果存在,且dict-c2[a]=c,其中,c为其他节点坐标的路径标识,则说明此前a已经有过更新为坐标c的经历,因此一定有dict-c1[c]=a,而此时令dict-c2[a]=b,通过旧坐标字典输入旧坐标a的路径标识能够获得新坐标b的路径标识。
[0138]
由上述步骤w1至步骤w2的说明可知,本发明在不需要改变旧坐标a对应的存储块的同时能够以新坐标b的路径标识来查询存储块,如在新坐标字典中以新坐标b的路径标识为键获取a=dict-c1[b]的路径标识,然后基于旧坐标a的路径标识获取其对应的空间点唯一标识,并通过存储块哈希字典、存储块物理地址字典获得新坐标b对应的存储块,而如果dict-c1[b]不存在,则基于新坐标b的路径标识构造其对应空间点的唯一标识,并基于“三、
多维数据的存储”所述方法为其分配存储空间。如图13所示,newcoordinate为一个维度的新坐标路径标识,newhashid为其所对应的标识,originalcoordinate为原始路径坐标,而originalhashid为其所对应标识,在图13的表格中坐标cat/ai/nlp/ts/abs被映射到原有的坐标cat/ai/ts/abs,即当用新坐标查询多维数据集时,会被转换为旧坐标查询以获得旧坐标对应的存储块。
[0139]
当一个多维空间删除维度坐标时,存在以下两种情况:(1)若删除的维度坐标节点在维度坐标层次结构树的叶子节点时,则删除的维度坐标节点不会影响该维度坐标层次结构树上已有的其他节点,此种情况只需要将与该节点相关的存储块删除,并将叶子节点从维度表中删除即可。(2)若删除维度坐标节点在维度坐标层次结构树的内部时,所删除的维度坐标节点将改变其子节点中所有节点的路径标识,且会影响所删除的维度坐标节点的子节点中的所有对应存储块,与前面所描述的增加维度坐标类似,本发明利用新旧坐标映射的方法将待删除维度坐标节点对应的存储块删除,并更新删除的维度坐标节点改变的子节点中所有节点的路径标识,使得不需要对整体的多维空间进行重构。根据本发明的一个实施例,删除维度坐标层次结构树内部的维度坐标节点具体的方法为:将待删除维度坐标节点的子节点中所有节点的新路径标识和旧路径标识分别存入新坐标字典和旧坐标字典以建立待删除维度坐标节点的旧路径标识与新路径标识之间的映射关系,并当待删除维度坐标节点本身的所有数据全部被删除时,删除待删除维度坐标节点对应的存储块删除。这样不用调整多维空间其他存储块,只需要调整发生变化的数据对应的存储块。
[0140]
三、多维空间中维度的维护
[0141]
多维空间中维度的维护是指当多维空间的维度结构由于维度的调整而变化时,对应用于本发明的系统结构进行的维护。当多维空间中需要增加或者删除维度时,本发明按照新增或删除维度后的维度结构将原空间点对应的多维数据集进一步划分形成新空间点,并在原空间点对应的存储空间内重新划分存储空间分配给新空间点。根据本发明的一个实施例,本发明在已有多维空间的维度结构上增加新的维度时,会存在以下两种情况:(1)当已存储的资源数据集不需要为新增的维度改变时,新增的维度只需要在维度表中再添加新增维度及其维度坐标,而原有维度和已存储的资源数据集对应的存储块则不需要改变,对于新插入的资源数据按照新的维度结构进行存储即可。(2)当新增加维度涉及已存储的资源数据集时,为了避免对所有存储块和哈希字典的重构,本发明将多维数据集按照新添加的维度重新划分,形成新的多维数据集,并将原有存储块基于所述新的多维数据集进行划分。例如,若已有物理存储块s.d的多维数据集对应空间点的原始坐标为《r
1x1
,r
2x2
,...,r
nxi
》,新增维度rm对应的坐标为r
mxz
,其中,z、m为自然数,那么相当于要给坐标为《r
1x1
,r
2x2
,...,r
nxi
,r
mxz
》的空间点划分空间一个新的存储空间s.d1,根据“1.1多维空间的构建”所述方法可知,当资源数据对应的维度扩展了一个新的维度时,需要对原有资源数据集按照新的维度坐标进行划分,如图14所示,当增加新的维度时,对原物理存储块s.d的处理步骤包括:
[0142]
步骤y1、遍历原物理存储块s.d中所有数据行,并从第一个资源数据k1开始,获取每个资源数据的新增维度的维度坐标r
m1xz
;
[0143]
步骤y2、获得每个资源数据对应空间点的新唯一标识,并对每个空间点执行步骤y3至y5,需要注意的是,步骤y3至y5是以第一个资源数据k1对应的空间点为例进行说明;
[0144]
步骤y3、在原物理存储块s.d中划分一块存储块s.d1分配给资源数据k1对应的新空间点,并在存储块地址指针字典中添加新空间点对应的存储块s.d1记录,将第一个数据行标记为新增存储块s.d1块首,同时修改原有存储块s.d对应的指针和链表以在存储块地址指针字典中将新增存储块s.d1链接到原有存储块s.d后;
[0145]
步骤y4、构建新增存储块s.d1的位置索引字典,所述位置索引字典是以存储块编号为键,以存储块结构为值,负责管理存储块的块首、块尾、当前行以及空闲行,其中,所述存储块结构是指所述新增存储块s.d1对应的多个指针,如空闲行指针等;
[0146]
步骤y5、完成第一个资源数据k1的存储块s.d1构造后,进一步读取原有存储块s.d中的下一条数据,并获取数据的新维度坐标r
m2xz
,如果r
m2xz
与r
m1xz
相同,则说明第二行数据与第一行数据属于相同的空间点坐标,因此只需把第二行数据当做新数据插入到新存储块s.d1中,插入第二行数据的具体方法如下:通过存储块地址指针字典找到存储块s.d1的相关信息,获取存储块s.d1的当前行号,将当前行的下一指针指向所述第二行数据,并将所述第二行的上一指针指向存储块s.d1当前行,然后修改存储块s.d1的当前行指针和修改块尾指针,即完成对所述第二数据的存储。而若第二行所存数据的新维度坐标r
m2xz
与r
m1xz
不同,则说明第二行数据属于另一个新的空间点,则需要为其构建一个新存储块,记为存储块s.d2。按照步骤y4所述方法添加存储块s.d1的位置字典索引,并将存储块s.d2的首行指针、尾行指针、当前行指针都指向所述第二行数据,且将第二行的前向指针和后向指针分别指向自身以形成了存储块s.d2的存储块链表,并在存储块地址指针字典中将存储块s.d2链接到存储块s.d1后,最后,原有存储块s.d中所有的数据都会被链接到相应的存储块后,而原有存储块s.d中剩余的空闲行会被按比例平分,添加到新构造的各个存储块中的空闲行链表中。需要注意的是,在维度新增的过程中不涉及已有资源数据在存储空间中的移动,保证了所有操作都在原有存储块s.d中进行,从而避免了对原有存储块的删除和重构,而新增存储块链接到原有存储块s.d后,对原有存储块s.d的查询仍然可以获得存储块s.d2、存储块s.d1中的数据。
[0147]
根据本发明的一个实施例,本发明在已有多维空间的维度结构上删除一个维度时,同样会改变已有存储块中的资源数据集对应的空间点坐标,与在多维空间中增加维度的处理方法类似,在删除维度时,如果资源数据保留其余维度,则需要将原有资源数据集中其余维度对应的数据保留,并存储至新的空间点对应的存储块中,在删除待删除维度所对应的坐标r
mxz
后,空间点《r
1x1
,r
2x2
,...,r
nxi
,r
mxz
》将变成《r
1x1
,r
2x2
,...,r
nxi
》,且原空间点的存储块都需要被删除,如图15所示,删除维度rm的步骤包括:
[0148]
步骤u1、遍历待删除维度rm维度坐标层次结构树中每一个坐标节点,并基于维度聚合索引查找每个空间点所在的存储块s.dm,遍历存储块s.dm中的每一个资源,并通过每个资源数据对应的空间点标识在存储块哈希字典、存储块物理地址字典中查找每个资源数据对应的存储块是否存在,如果已经存在,则获取每个资源数据对应的存储块;如果不存在,则创建存储块。而对于已经存在的存储块s.dm,将其连接原存储块s.d之后;
[0149]
步骤u2、将步骤u1中所述的每个空间点所在的存储块s.dm依次连接到原存储块s.d之后,作为原存储块s.d的子存储块,最后在存储块哈希字典、存储块物理地址字典、存储块地址指针字典、存储块资源行号字典中将每个资源数据对应的原存储块删除以完成待删除维度的删除。
[0150]
根据本发明的一个实施例,本发明提供一种应用于本发明方法的系统,如图16所示,所述系统由五个部分组成:(1)多维数据集存储、查询接口服务器,用于提供多维数据集输入接口和多维数据集查询结果返回接口。(2)多维空间维度坐标层次结构树索引服务器,用于提供维度坐标层次结构树存储和坐标查询接口、提供维度坐标层次结构树聚合索引存储、聚合查询服务中返回需要查询的空间点存储块、提供维度坐标动态维护字典索引存储、实现维度坐标增加删除时维度结构新旧坐标映射的动态维护、提供维度增加和删除操作存储块动态维护功能。(3)多维空间的空间点-虚拟存储块哈希索引服务器,用于提供空间点到虚拟存储块地址的哈希字典索引存储和查询功能、提供虚拟存储块分配初始化功能、提供虚拟存储块链表指针信息存储查询功能、提供虚拟存储块链表维护功能。(4)虚拟存储块-物理主机存储块分配索引服务器,用于提供虚拟存储块到物理主机的映射索引、负责为虚拟存储块从物理主机中选择一台主机并分配一个物理存储块、负责物理存储块数据插入,查询,修改,以及查询返回。(5)物理主机,用于提供多台物理主机负责存储物理存储块、返回多维数据集存储、查询接口服务器的查询结果。
[0151]
与现有技术相比,本发明的优点在于:
[0152]
1、本发明针对因多维空间中维度结构的变化导致的存储空间呈指数规模的问题,设计了一种动态的分布式存储方法,在存储的过程中本发明每次只为包含有资源数据的空间点分配存储空间,以此避免了多维空间中存储需求的指数增长,提高了物理存储空间的充分利用。
[0153]
2、本发明提出的基于空间点坐标的查询方法具有常数时间复杂度的查询效率,而且本发明提出的聚合查询方法,可避免遍历所有已存储的资源数据,并以此提高了多维数据集聚合查询的效率。
[0154]
3、本发明针对多维空间中因维度坐标变化导致的原存储空间被重构的问题,设计了一种基于新旧坐标映射关系的空间点维护方法,利用所设计的新旧坐标映射关系,本发明避免了重构原存储空间,实现了空间点维度坐标的在线调整,降低了系统的维护代价。
[0155]
4、本发明针对多维空间中因维度变化导致的原存储空间被重新分配的问题,设计了一种基于多个哈希字典的维度维护方法,利用所设计的多个哈希字典,本发明避免了对所有存储空间的重新分配,实现了多维空间维度的在线调整,降低了系统的维护代价。
[0156]
需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。
[0157]
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
[0158]
计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。
[0159]
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
技术特征:1.一种用于多维数据的存储方法,其特征在于,所述方法包括如下步骤:s1、获取待存储的多个资源数据,根据所有资源数据的属性和属性取值提取资源数据的正交属性,并以一个正交属性为一个维度构建待存储的多个资源数据对应的维度,每个资源数据的不同属性值对应于不同属性所在维度的一个坐标点,所有资源数据在同一个维度的属性取值构成该维度上的多个坐标点;s2、基于资源数据对应的维度确定维度坐标间的层次结构以获得维度坐标层次结构树,所有的维度构成资源数据对应的多维空间,所述多维空间包含多个空间点,每个空间点的坐标为所有维度上与该空间点对应的维度坐标组成的多维坐标向量;s3、将所有资源数据按照其各个属性取值在维度上的对应坐标映射到多维空间中,其中,具有相同属性取值的多个资源数据映射到同一个空间点;s4、遍历每个空间点,为包含有资源数据的空间点分配存储空间。2.根据权利要求1所述的方法,其特征在于,所述步骤s4包括遍历每个空间点,并对每个空间点对应的每个资源数据执行如下步骤:s41、基于每个资源数据所在空间点对应的唯一标识,判断该资源数据所在空间点是否已被分配有存储空间;s42、当前资源数据所在空间点已被分配有存储空间时,将当前资源数据存入空间点已被分配的存储空间的空闲存储行;当前资源数据所在空间点未被分配有存储空间时,为该空间点分配存储块并将当前资源数据存入分配的存储块的存储行中。3.根据权利要求2所述的方法,其特征在于,通过如下方式获得每个空间点的唯一标识:基于所述空间点的维度坐标层次结构树生成当前空间点的每个维度坐标对应的唯一路径标识;基于所述空间点的每个维度坐标对应的唯一路径标识生成当前空间点的唯一标识。4.根据权利要求3所述的方法,其特征在于,在所述步骤s42中,按照如下方式为空间点分配存储块:基于空间点的唯一标识获取空间点对应的虚拟主机,获取空间点在其对应虚拟主机中被分配的虚拟存储块,以及基于预设的存储分配规则将物理主机中的物理存储块分配给该虚拟存储块。5.根据权利要求4所述的方法,其特征在于,将空间点的唯一标识与虚拟主机标识进行取模计算以获取空间点对应的虚拟主机;将空间点的唯一标识进行哈希以获取空间点在其对应虚拟主机中被分配的虚拟存储块。6.根据权利要求5所述的方法,其特征在于,基于预设的存储分配规则将物理主机中的物理存储块分配给该虚拟存储块包括:获取待分配物理存储块的虚拟主机对应的物理主机列表,查询物理主机列表中所有物理主机的剩余存储空间比例,并从剩余存储空间最多的物理主机中分配物理存储块给虚拟存储块。7.根据权利要求6所述的方法,其特征在于,在所述步骤s42中,空间点已被分配的存储空间没有空闲存储行时,从该空间点对应的虚拟主机对应的物理主机中为该空间点对应的虚拟存储块分配新的物理存储块并连接到虚拟存储块已有物理存储块。
8.一种基于权利要求1-7之一所述方法的多维数据查询方法,其特征在于,所述方法包括:响应于空间点查询请求,获取待查询空间点坐标;基于待查询空间点坐标遍历该空间点对应的存储地址并返回该空间点对应的所有存储地址存储的多维数据集的汇总数据。9.根据权利要求8所述的方法,其特征在于,当待查询空间点包含子空间点时,基于待查询空间点坐标和其对应子空间点坐标遍历待查询空间点坐标和其对应子空间点坐标对应的存储地址;返回待查询空间点坐标对应的所有存储地址存储的多维数据集以及其对应子空间点坐标对应的存储地址存储的多维数据集的汇总数据。10.根据权利要去9所述的方法,其特征在于,所述方法通过如下方式获得待查询空间点的子空间点的多维数据集:t1、以待查询空间点中的每一个维度分量为祖先节点,构建每一个维度上的所有子空间点对应的存储块与该维度的祖先节点的连接关系以构成聚合索引,每个祖先节点对应于一个子空间点存储块集合;t2、基于步骤t1中构建的聚合索引,获得待查询空间点中的所有维度的子空间点存储块集合的交集。11.一种基于权利要求1-7任一所述方法的多维空间空间点维护方法,其特征在于,所述方法包括:响应于增加空间节点或删除的需求,在坐标层次结构树查询增加或删除空间节点后坐标路径发生变化的所有子节点;为坐标发生变化的所有子节点的新路径标识与原路径标识构建映射表以将坐标发生变化的所有子节点的新路径标识映射到其原存储块。12.一种基于权利要求1-7任一所述方法的多维空间维度维护方法,其特征在于,所述方法包括:响应于增加维度或删除维度的需求,基于增加维度或删除维度后的原空间点坐标对应的新空间点坐标,将原空间点坐标对应的存储空间分配给新空间点坐标。13.一种用于多维数据系统,其特征在于,所述系统包括:接口服务器,用于提供多维数据集输入接口、多维数据集返回查询结果的接口;维度坐标层次结构树索引服务器,用于提供维度坐标层次结构树存储和查询接口、维度坐标层次结构树聚合索引存储、聚合查询服务中返回待查询空间点存储块、实现维度坐标增加和/或删除时维度结构新旧坐标映射的维护、维度增加和/或删除时存储块的维护;哈希字典索引服务器,用于提供空间点到虚拟存储块地址的哈希字典索引的存储和/或查询功能、分配虚拟存储块的初始化功能、虚拟存储块链表指针信息的存储和/或查询功能、虚拟存储块链表的维护功能;存储块分配索引服务器,用于提供虚拟存储块到物理主机的映射索引、存储块的数据插入、数据查询以及修改功能、为虚拟存储块分配物理存储块的功能;物理主机,用于存储物理存储块、查询接口服务器的查询结果。14.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序可被处理器执行以实现权利要求1-7、8-10、11、12任一所述方法的步骤。
15.一种电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如权利要求1-7、8-10、11、12任一项所述方法的步骤。
技术总结本发明提供一种用于多维数据的存储方法,包括:获取待存储的多个资源数据,提取资源数据的正交属性,并以一个正交属性为一个维度构建待存储的多个资源数据对应的维度,每个资源数据的不同属性值对应于不同属性所在维度的一个坐标点,所有资源数据在同一个维度的属性取值构成该维度上的多个坐标点;基于资源数据对应的维度确定维度坐标间的层次结构以获得维度坐标层次结构树,所有的维度构成资源数据对应的多维空间,所述多维空间包含多个空间点,每个空间点的坐标为所有维度上与该空间点对应的维度坐标组成的多维坐标向量;将所有资源数据按照其各个属性取值在维度上的对应坐标映射到多维空间中;遍历每个空间点,为包含有资源数据的空间点分配存储空间。有资源数据的空间点分配存储空间。有资源数据的空间点分配存储空间。
技术研发人员:诸葛海 孙晓平
受保护的技术使用者:中国科学院计算技术研究所
技术研发日:2022.07.14
技术公布日:2022/11/1