一种联机分析处理系统中多维数据读写的方法和装置的制作方法

文档序号:6562804阅读:274来源:国知局
专利名称:一种联机分析处理系统中多维数据读写的方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别是指一种联机分析处理系统中多维数据读写的方法和装置。
背景技术
在科技快速发展的今天,社会各个领域中的需要统计的数据都飞速增长,海量数据的记录、查询为计算机技术带来新的发展方向,提供新的技术课题。
企业资源计划(ERP,Enterprise Recourse Planning)系统为企业的带来新的数据管理方式。通过ERP系统,企业能更加高效的运用、管理企业的各类资源。ERP数据库中存储大量的数据,从分析处理过程来看,分析一般需要多表操作、较长的运行时间,若直接利用ERP业务系统的数据库中现有的数据进行决策的分析和推理、将影响ERP系统的效率,并造成繁忙的网络数据传输。因此需要结合联机分析处理系统(OLAP,Online Analytic Processing)。
管理决策人员通过OLAP从不同的角度、快速灵活地对数据仓库中的数据进行多维分析处理。OLAP系统主要包括多维联机分析处理系统MOLAP(Multidimensional OLAP)和关系联机分析处理系统ROLAP(Relational OLAP)。从逻辑上看,OLAP抽象模型包括结构模型和查询模型,结构模型表示多维数据集的各种对象,查询模型表示在这些对象上面的查询。实现时将结构模型和查询模型映射为物理实现模型。OLAP结构模型中,核心是多维数据集立方体,即立方体(Cube)。Cube中含有大量的发生数据和聚合数据,聚合数据是由维度层级结构决定的,维度个数、维度成员数以及层级结构的复杂度决定了聚合数据的数据量。其中,维度是人们观察数据的特定角度,如时间维度、地理维度等。用户在某个维度上观察数据时还可以存在细节程度不同层次的各个描述方面。如,时间维度包括日期、月份、季度、年。维度中包括的成员时维度上的取值,是数据在某个维度中位置的描述。如,“某年某月某日”是在时间维度上位置的描述。通过各个不同的维度,能够更加灵活的观测数据。Cube中的每个数据均对应于各个维度中的一个成员,通过各个维度中成员的组合即可查询到相应的数据。
对于多维的数据结构,OLAP服务器在数据的存储和查询上有不同的实现方式,但大都应用于海量数据,处理时,OLAP服务器预先存储有来自数据源中的海量数据,并生成Cube数据,用户通过OLAP服务器从不同维度进行数据分析时,将OLAP服务器中生成的海量Cube数据划分为多个部分数据,每次将一部分数据读入到内存中建立报表数据,再将内存中建立的报表数据组合成完整的报表后,显示到用户的终端上。
上述进行OLAP数据分析时,主要是应用于海量数据的查询、分析,且查询的Cube数据是已经在OLAP服务器中生成的。对于小数据量的存储和查询,如果仍采用OLAP服务器生成Cube数据,再通过OLAP服务器进行Cube数据的查询、分析,将会对OLAP服务器利用效率上产生较大的浪费。而目前对于小数据量的多维数据查询、分析,还没有完整的解决方案。

发明内容
有鉴于此,本发明在于提供一种联机分析处理系统中多维数据读写的方法和装置,以解决上述小数据量的多维数据存储和查询的问题。
为解决上述问题,本发明提供一种联机分析处理系统中多维数据读写的方法包括预先设定内存中存储多维数据量的阈值,从数据源中获取初始数据,设定初始数据中各个维度中成员的任意组合,将所述组合和其相对应初始数据中的度量值数据存储到内存中;如果超出所述内存阈值,则将所述超出内存阈值的各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识存储到内存中,将所述超出内存阈值的各个组合和其相对应初始数据中的度量值数据、及所述集合相对应的标识存储到磁盘中,利用所述组合从内存、或利用所述组合和所述标识从磁盘中读取相应的度量值数据。
其中,生成与所述集合相对应的标识包括利用各个维度中的成员生成树形数据结构,将所述组合中所有成员父节点的组合作为所述标识。
其中,生成与所述集合相对应的标识存储到内存中包括在内存中创建索引列表,将所述标识存储到列表中。
其中,所述存储到磁盘中进一步包括利用所述生成标识判断索引列表中是否存在相同的标识,如果存在,则将所述组合和其相对应多维数据中的度量值数据存储在磁盘中该标识对应的集合中。
其中,所述从磁盘中读取相应的度量值数据包括利用所述组合从内存中读取相应的度量值数据,如果内存中没有所述组合,则生成所述标识并判断索引列表中是否存在相同的标识,如果存在,则判断磁盘中该标识对应的集合中是否存在所述组合,如果存在,则返回所述组合对应的度量值数据;否则返回空。
本发明还提供一种联机分析处理系统中多维数据读写的装置,包括数据获取单元,用于从数据源中获取初始数据,并发送至组合生成单元;组合生成单元,用于设定接收到的多维数据中各个维度中成员的任意组合,并将组合后的信息发送至数据读写单元和集合划分单元;阈值判断单元,用于存储预先设定的内存存储多维数据量的阈值,并在数据读写单元执行每次写入前,判断此次写入内存后,内存中存储的多维数据量是否会超出预定阈值,将判断结果发送至数据读写单元和集合划分单元;集合划分单元,用于在接收到超出预定阈值的判断结果后,利用接收到的组合信息,将各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识发送至数据读写单元;数据读写单元,用于在执行每次写入前,将本次写入的信息发送至阈值判断单元,接收到阈值判断单元的判断结果后,将所述组合和其相对应多维数据中的度量值数据、及所述集合相对应的标识存储到内存或磁盘中,利用所述组合及所述标识从磁盘中读取相应的度量值数据。
其中,所述集合划分单元,用于利用各个维度中的成员生成树形数据结构,将所述组合中所有成员父节点的组合作为所述标识。
其中,所述数据读写单元,用于在内存中创建索引列表,将所述标识存储到列表中。
其中,所述装置还包括标识判别单元,用于从集合划分单元获取生成标识,利用所述生成标识判断索引列表中是否存在相同的标识,如果存在,则通知数据读写单元;数据读写单元,还用于在接收到标识判别单元的通知后,将所述组合和其相对应多维数据中的度量值数据存储在磁盘中该标识对应的集合中。
其中,所述数据读写单元,用于在接收到标识判别单元的通知后,从磁盘中该标识对应的集合中读取与所述组合对应的度量值数据。
本发明的方法和装置,解决了小数据量的OLAP存储和查询,将小数据量的OLAP的存储和查询在内存中处理,并设定内存的阈值,当内存中处理负荷较大时,将多维数据的存储以集合的结构存储在磁盘中,并通过集合的标识进行读取,通过集合标识和成员组合进行度量值的读取,不会对终端的系统性能产生瓶颈,将成员组合的父节点组合作为块的标识,能够减少硬盘的读取次数,提高度量值数据的读写效率,完美地解决了基于内存和磁盘的小数据量OLAP存储和查询。


图1是本发明方法的流程图;
图2是本发明实施例中维度成员关系的数据结构图;图3是本发明实施例中维度成员与数据的对应关系图;图4是本发明实施例的流程图;图5是本发明装置的结构图。
具体实施例方式
全球经济快速发展的今天,无论是跨国公司、企业还是政府机关,每天都会有大量的数据需要处理,这些数据包括各个类别,如生产、销售、日常办公等。决策者通过对生成的大量数据进行分析,对市场销售、生产进度进行决策。但对于有些小型公司,每天的产生的数据较少,如果终端从大型的分析海量数据的OLAP获取生成的小数据量的Cube数据,则会浪费较大的系统资源。
为解决小数据量多维数据的存储和查询的问题。本发明提供实现小数据量的多维数据的存储和查询的方法和装置。下面通过实施例并结合附图详细说明本发明的方法和装置。参见图1,本发明的方法包括以下几个步骤步骤S101预先设定内存中存储多维数据量的阈值,从数据源中获取初始数据,设定初始数据中各个维度中成员的任意组合;步骤S102将所述组合和其相对应初始数据中的度量值数据存储到内存中,如果超出所述内存阈值,则将所述超出内存阈值的各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识存储到内存中,将所述超出内存阈值的各个组合和其相对应初始数据中的度量值数据、及所述集合相对应的标识存储到磁盘中;步骤S103利用所述组合从内存、或利用所述组合和所述标识从磁盘中读取相应的度量值数据。
下面给出本发明的具体实施例。为更加清晰地理解本发明,在本发明中的维度以三维为例。
对于公司产生的数据,需要预先设定数据的维度(Dimension),维度是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维度(时间维度、地理维度等)。
维度的层次(Level)是人们观察数据的某个特定角度(即某个维)还可以存在细节程度不同的各个描述方面。如时间维度日期、月份、季度、年。
维度的成员(Member)维度上的取值,是数据在某个维度中位置的描述。如“某年某月某日”是在时间维度上位置的描述。
通过各个不同的维度,能够更加灵活的观测数据。每个维度的层级关系是以树型的数据结构进行存储的,这样便于进行数据的汇总和聚集。
下面给出本发明的具体实施例。为便于更清晰地理解本发明,在本发明的实施例中的维度以三维为例。
以特快专递公司的数据为例,在进行OLAP分析时,终端需要先从数据源中获取数据,数据源可以是数据库或以各类格式软件存储的数据。获取多维数据后,取出多维数据中的维度成员,设定多维数据中各个维度中成员的任意组合,通过维度成员与度量值数据的对应关系,生成维度成员的组合与度量值数据的对应关系。如,特快专递公司产生的数据包括三个维度,分别为源、路线和时间。各个维度的层级关系参见图2。源的维度成员包括航空、海路、公路、铁路四个成员;路线的维度成员包括非洲、亚洲、澳洲、欧洲、北美洲、南美洲六个成员;时间的维度成员包括第一季度、第二季度、第三季度、第四季度四个成员。在各个维度上任意取出一个成员,组成的组合称为元组,如(航空,非洲,第一季度);(航空,南美洲,第二季度)等。每个元组中对应于一组度量值数据,在该组度量值数据中包括一个或多个数据。
各个维度中的成员与数据的对应关系参见图3。在图3中,维度成员和相对应的数据以立方体的形式展现出来。在立方体中,有三个维度和两个度量值,立方体内的单元格存储的是度量值,度量值代表事实数据。如元组(航空、非洲、第一季度)对应的单元格对应有两个度量值为190和99/02/17,(航空、南美洲、第二季度)对应的单元格对应有两个度量值为490和99/06/03。立方体中的每个单元格也对应于各个维度上的一个成员。
终端从数据源上获取到特快专递公司的数据后,通过该数据在终端自身生成Cube数据显示给用户。在生成Cube数据前,终端对特快专递公司的数据进行处理,处理时读写的过程参见图4,步骤S401预先设定内存中存储多维数据量的阈值,从数据源中获取多维数据。在进行小数据量多维数据的OLAP分析处理时,由于各个终端的配置不同,内存中能够存储的多维数据量是不同的,可以通过终端的配置,预先设定一个阈值,如果内存的资源紧张,可以将阈值调低,如果内存的资源空闲较多,可以将阈值调高,这样能够加快OLAP分析处理的时间。
步骤S402设定初始数据中各个维度中成员的任意组合,将所述组合和其相对应初始数据中的度量值数据向内存中存储;在本实施例中,将所述组合和其相对应初始数据中的度量值数据向内存中存储。存储的过程可以有多种实现方式,如将任意组合与度量值数据以哈希表的形式存储到内存中。还可以在内存中为各个组合申请相应的多维数组空间,将度量值数据存储到空间中。
步骤S403判断在此次写入后,内存中存储的数据量是否超出了预定的阈值;如果没有超出,则执行步骤S404,如果超出,则执行步骤S405。
步骤S404将将所述组合和其相对应初始数据中的度量值数据存储到内存中;步骤S405将所述超出内存阈值的各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识存储到内存中。
在本实施例中,利用各个维度的成员生成树形数据结构,将成员组合中所有成员父节点的组合作为所述标识。如元组(航空,非洲,第一季度)的父节点组合为(非陆地,东半球,上半年)。下面给出计算机实现时相应的JAVA伪语描述块Chunk,即存储多个成员组合的集合,是多维空间中多个节点的集合,Chunk大小是可变的。Chunk由多个节点信息Entry组成,每个Entry表示一个节点的信息,包括坐标点point,坐标点即成员的组合,和坐标点对应的度量值数据,该度量值数据是否修改过再保存在磁盘中,坐标点是维度成员数组,由各个维度中的成员组成Point{Member members[];//Member是维度上的一个成员Int getPointKey();//计算该点的编号}Entry{Point point;//定义成员point;Object values[];//度量值数据;boolean isDirty;//该度量值数据是否修改过再保存在磁盘中}Chunk{Int chunkID;//块的标识;Entry entrys[];//节点信息数组;Add(Point point,Object values[]);//添加坐标点和度量值数据;Entry getEntry(int pointKey);//获取该节点信息;Object[]getValue(int pointKey);//获取度量值数据;Save();//存储;}将坐标点的成员组合转换为键值;calcKey(Point point),计算一个坐标点的键值key,输入Point point得到key的Int值。
Member[]ms=point.getMembers();//将坐标点成员赋给数组;
Int key=0;for(int i=ms.length-1;i>-1;i--){Dimension dim=ms[i].getDimension();//getDimension()得到给维度中的成员;int memberCount=dim.memberCount;//对该维度成员计数;key=ms[i].globalOrdinal+key*memberCount;//globalOrdinal为该成员在维度中的全局序号;}key即为该Point的键值。该键值全局唯一。
将坐标点的父节点通过键值的计算方法得到的键值作为该坐标点所在块的ID。下面是生成块ID的过程。
Int calcChunkID(Point point),计算一个坐标点所对应的块ID。
Member[]members=point.getMembers();int len=members.length;Member[]m2=new Member[len];for(int i=0;i<len;i++){Member parent=members[i].getParentMember();//得到父成员if(parent==null)m2[i]=members[i];elsem2[i]=parent;}Point point2=new Point(m2);int key=calcKey(point2);//调用calcKey(Point point)函数;得到的key即为对应块的标识ID。
在将所述集合的标识存储到内存中时,创建索引列表,将生成的标识保存到列表中。
步骤S406利用所述生成标识判断索引列表中是否存在相同的标识。
调用函数searchChunk(int chunk ID),根据块ID查找块,从索引列表中搜索,如果存在,则执行步骤S407;否则执行步骤S408。
步骤S407将成员组合和其相对应多维数据中的度量值数据存储在磁盘中该标识对应的集合中。实现算法包括从磁盘中读取该块,反序列化成内存对象。在对度量值数据进行读写时,首先查找在该块中是否存在该点的Entry,如果存在,修改该Entry.values,调用函数saveChunk(Chunk chunk,Point point,Object values[]),将坐标点point上的值values存入块chunk中;否则,增加一条Entry,Entry entry=new Entry(point,values);Chunk.entrys.add(entry);调用函数saveChunk(Chunk chunk,Point point,Object values[]),将坐标点point上的值values存入块chunk中。
步骤S408在磁盘中新建该标识,将成员组合和其相对应初始数据中的度量值数据存储在磁盘中该标识对应的集合中。
不存在该块,生成一个新的Chunk,赋ID值。在该块中存储entry。
在将组合和其对应的度量值数据写入到磁盘中时,需要先将写入的数据转换为字节数组,将字节数组以桶Bucket为单位存储到磁盘中,每个桶是一个物理分配单位,由多个页Page组成,桶的前四个字节用于记录当前使用的大小,真正的数据从第五位开始,桶提供基本的输入输出操作。在磁盘存储数据时,使用两个文件,数据文件和索引文件。数据文件存储数据,索引文件记录数据文件的分配情况,数据文件在经过多次分配后,会出现空桶情况,由索引文件来记录这些信息。
将成员组合和其相对应多维数据中的度量值数据、及所属集合相对应的标识存储到内存或磁盘中后,在进行OLAP分析的过程中,需要读取已经存储的度量值数据,如果度量值数据在内存中,则通过成员组合即可读出;如果度量值数据在磁盘中,则通过成员组合和其生成的标识在磁盘中查找。在磁盘上的查找过程为,步骤S409利用所述生成标识判断索引列表中是否存在相同的标识,通过调用函数searchChunk,根据ID查找块。
如果存在,则执行步骤S409;否则返回空;步骤S410判断该标识的集合中是否存在所要查询的成员组合;在判断出索引列表中存在相同的标识后,表明磁盘中存储有该标识对应的集合数据,在磁盘中找到该标识对应的集合数据,遍历该块的entrys数组,对于每个entry,如果entry.point=输入point,则表明存在该成员组合。
如果该集合中存有所要查询的成员组合,则执行步骤S411;否则返回空。
步骤S411从磁盘中读取该组合对应的度量值数据,返回该坐标点的度量值数据entry.values。
终端通过对多维数据的读写,进而生成OLAP报表。由于度量值数据在磁盘中存储是以成员组合中的父节点组合作为块的标识在磁盘中存储的,这种分块的策略中多维数据的相关性大,且块中的数据适中,更有利于OLAP的分析和查询,在数据的汇总和聚集时更能体现出其优点。
本发明还提供一种联机分析处理系统中多维数据读写的装置,包括数据获取单元501,用于从数据源中获取初始数据,并发送至组合生成单元502;组合生成单元502,用于设定接收到的多维数据中各个维度中成员的任意组合,并将组合后的信息发送至数据读写单元505和集合划分单元503;阈值判断单元504,用于存储预先设定的内存存储多维数据量的阈值,并在数据读写单元执行每次写入前,判断此次写入内存后,内存中存储的多维数据量是否会超出预定阈值,将判断结果发送至数据读写单元505和集合划分单元504;集合划分单元504,用于在接收到超出预定阈值的判断结果后,利用接收到的组合信息,将各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识发送至数据读写单元505;数据读写单元505,用于在执行每次写入前,将本次写入的信息发送至阈值判断单元504,接收到阈值判断单元的判断结果后,将所述组合和其相对应多维数据中的度量值数据、及所述集合相对应的标识存储到内存或磁盘中,利用所述组合及所述标识从磁盘中读取相应的度量值数据。
在本发明的装置中,所述集合划分单元503,用于利用各个维度中的成员生成树形数据结构,将所述组合中所有成员父节点的组合作为所述标识。
在本发明的装置中,所述数据读写单元505,用于在内存中创建索引列表,将所述标识存储到列表中。
本发明的装置还包括标识判别单元506,用于从集合划分单元503获取生成标识,利用所述生成标识判断索引列表中是否存在相同的标识,如果存在,则通知数据读写单元505;数据读写单元505,还用于在接收到标识判别单元506的通知后,将所述组合和其相对应多维数据中的度量值数据存储在磁盘中该标识对应的集合中。
在本发明的装置中,所述数据读写单元505,还用于在接收到标识判别单元506的通知后,从磁盘中该标识对应的集合中读取与所述组合对应的度量值数据。
对于本发明的方法和装置,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种联机分析处理系统中多维数据读写的方法,其特征在于,包括预先设定内存中存储多维数据量的阈值,从数据源中获取初始数据,设定初始数据中各个维度中成员的任意组合,将所述组合和其相对应初始数据中的度量值数据存储到内存中;如果超出所述内存阈值,则将所述超出内存阈值的各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识存储到内存中,将所述超出内存阈值的各个组合和其相对应初始数据中的度量值数据、及所述集合相对应的标识存储到磁盘中,利用所述组合从内存、或利用所述组合和所述标识从磁盘中读取相应的度量值数据。
2.根据权利要求1所述的方法,其特征在于,生成与所述集合相对应的标识包括利用各个维度中的成员生成树形数据结构,将所述组合中所有成员父节点的组合作为所述标识。
3.根据权利要求2所述的方法,其特征在于,生成与所述集合相对应的标识存储到内存中包括在内存中创建索引列表,将所述标识存储到列表中。
4.根据权利要求3所述的方法,其特征在于,所述存储到磁盘中进一步包括利用所述生成标识判断索引列表中是否存在相同的标识,如果存在,则将所述组合和其相对应多维数据中的度量值数据存储在磁盘中该标识对应的集合中。
5.根据权利要求3所述的方法,其特征在于,所述从磁盘中读取相应的度量值数据包括利用所述组合从内存中读取相应的度量值数据,如果内存中没有所述组合,则生成所述标识并判断索引列表中是否存在相同的标识,如果存在,则判断磁盘中该标识对应的集合中是否存在所述组合,如果存在,则返回所述组合对应的度量值数据;否则返回空。
6.一种联机分析处理系统中多维数据读写的装置,其特征在于,包括数据获取单元,用于从数据源中获取初始数据,并发送至组合生成单元;组合生成单元,用于设定接收到的多维数据中各个维度中成员的任意组合,并将组合后的信息发送至数据读写单元和集合划分单元;阈值判断单元,用于存储预先设定的内存存储多维数据量的阈值,并在数据读写单元执行每次写入前,判断此次写入内存后,内存中存储的多维数据量是否会超出预定阈值,将判断结果发送至数据读写单元和集合划分单元;集合划分单元,用于在接收到超出预定阈值的判断结果后,利用接收到的组合信息,将各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识发送至数据读写单元;数据读写单元,用于在执行每次写入前,将本次写入的信息发送至阈值判断单元,接收到阈值判断单元的判断结果后,将所述组合和其相对应多维数据中的度量值数据、及所述集合相对应的标识存储到内存或磁盘中,利用所述组合及所述标识从磁盘中读取相应的度量值数据。
7.根据权利要求6所述的装置,其特征在于,所述集合划分单元,用于利用各个维度中的成员生成树形数据结构,将所述组合中所有成员父节点的组合作为所述标识。
8.根据权利要求7所述的装置,其特征在于,所述数据读写单元,用于在内存中创建索引列表,将所述标识存储到列表中。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括标识判别单元,用于从集合划分单元获取生成标识,利用所述生成标识判断索引列表中是否存在相同的标识,如果存在,则通知数据读写单元;数据读写单元,还用于在接收到标识判别单元的通知后,将所述组合和其相对应多维数据中的度量值数据存储在磁盘中该标识对应的集合中。
10.根据权利要求9所述的装置,其特征在于,所述数据读写单元,用于在接收到标识判别单元的通知后,从磁盘中该标识对应的集合中读取与所述组合对应的度量值数据。
全文摘要
本发明公开了一种联机分析处理系统中多维数据读写的方法和装置,涉及计算机技术领域,本发明的方法包括预先设定内存中存储多维数据量的阈值,从数据源中获取初始数据,设定初始数据中各个维度中成员的任意组合,将所述组合和其相对应初始数据中的度量值数据存储到内存中;如果超出所述内存阈值,则将所述超出内存阈值的各个组合划分到至少一个以上的集合中,生成与所述集合相对应的标识存储到内存中,将所述超出内存阈值的各个组合和其相对应初始数据中的度量值数据、及所述集合相对应的标识存储到磁盘中,利用所述组合从内存、或利用所述组合和所述标识从磁盘中读取相应的度量值数据。本发明还公开了一种联机分析处理系统中多维数据读写的装置。
文档编号G06F17/30GK1949223SQ20061014508
公开日2007年4月18日 申请日期2006年12月1日 优先权日2006年12月1日
发明者林志贤 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1