著录项信息
专利名称 | 数据存储方法及系统 |
申请号 | CN201410121215.9 | 申请日期 | 2014-03-27 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2015-09-30 | 公开/公告号 | CN104951464A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0;;;G;0;6;F;1;2;/;0;8;0;2查看分类表>
|
申请人 | 华为技术有限公司 | 申请人地址 | 广东省深圳市龙岗区坂田华为总部办公楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 华为技术有限公司 | 当前权利人 | 华为技术有限公司 |
发明人 | 张世明;袁明轩;谭浩宇 |
代理机构 | 北京同立钧成知识产权代理有限公司 | 代理人 | 刘芳 |
摘要
本发明提供一种数据存储方法及系统,其中,所述数据存储方法包括:读取待存储的第一条数据元组;采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中。上述方法可以有效的存储海量的时空轨迹数据,且能够实现海量的时空轨迹数据的实时分析查询。
1.一种数据存储方法,其特征在于,包括:
读取待存储的第一条数据元组;
采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;
将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中;
采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据的步骤之前,所述方法还包括:
若所述高速缓冲存储器中已经缓存过与所述第一条数据元组关联的第二条数据元组,则查找与所述第一条数据元组关联的第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;
所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:
将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;
若所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;
所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:
将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述设置的所述结构化数据的存储位置中。
2.根据权利要求1所述的方法,其特征在于,所述第一条数据元组包括:
用户标识Oid、与所述Oid对应的时空轨迹点标识Location ID,与所述Location ID对应的时间信息Timestamp;
所述第一条数据元组还包括下述的一项或多项:
与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。
3.根据权利要求1或2所述的方法,其特征在于,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:
所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;
所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;
所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。
4.根据权利要求3所述的方法,其特征在于,所述至少三种不同结构的结构化数据,包括:
以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;
以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;
以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。
5.根据权利要求4所述的方法,其特征在于,采用结构化数据编码方式将所述第一条数据元组编码为第一种结构化数据,包括:
获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;
根据时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;
根据Oid将所述Block中的数据分为至少一个文件,
根据时间序列将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。
6.根据权利要求5所述的方法,其特征在于,所述获取所述第一条数据元组的Bucket ID,包括:
根据下述公式一获取所述Bucket ID;
其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。
7.根据权利要求4所述的方法,其特征在于,采用结构化数据编码方式将所述第一条数据元组编码为第二种结构化数据,包括:
获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;
根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;
根据所述Location ID将所述Block中的数据分为至少一个文件,
根据时间序列和所述Oid将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。
8.根据权利要求7所述的方法,其特征在于,所述获取所述第一条数据元组的Bucket ID,包括:
根据下述公式二获取所述Bucket ID;
其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。
9.根据权利要求4所述的方法,其特征在于,采用结构化数据编码方式将所述第一条数据元组编码为第三种结构化数据,包括:
获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;
根据时空轨迹点将每一Bucket内的数据分为至少一个Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;
根据所述Timestamp将所述Block中的数据分为至少一个文件,
根据所述Location ID和所述Oid将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。
10.根据权利要求9所述的方法,其特征在于,所述获取所述第一条数据元组的Bucket ID,包括:
根据下述公式三获取所述Bucket ID;
Bucketid(r)=hash(r.T(r.timestamp))mod k+hash(r.LocationID)mod k 公式三其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。
11.根据权利要求1、2、4-10任一所述的方法,其特征在于,所述采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据,还包括:
获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。
12.一种数据存储系统,其特征在于,包括:
读取单元,用于读取待存储的第一条数据元组;
异构数据元组加载单元,用于采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;
存储单元,用于将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中;
所述系统还包括:查找单元;
所述查找单元,用于在所述异构数据元组加载单元获取所述结构化数据之前,查找所述高速缓冲存储器中是否已经缓存过与所述第一条数据元组关联的第二条数据元组;
若所述查找单元查找到所述高速缓冲存储器中已经缓存过与所述第一条数据元组关联的第二条数据元组,则查找所述第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;
所述存储单元,具体用于将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;
若所述查找单元查找到所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则所述系统还包括:
设置单元,用于在所述查找单元未查找到所述高速缓冲存储器中缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;
所述存储单元,具体用于将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器根据所述设置单元设置的所述存储位置将所述结构化数据写入所述设置的所述结构化数据的存储位置中。
13.根据权利要求12所述的系统,其特征在于,所述第一条数据元组包括:
用户标识Oid、与所述Oid对应的时空轨迹点标识Location ID,与所述Location ID对应的时间信息Timestamp;
所述第一条数据元组还包括下述的一项或多项:
与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。
14.根据权利要求12或13所述的系统,其特征在于,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:
所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;
所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;
所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。
15.根据权利要求14所述的系统,其特征在于,所述至少三种不同结构的结构化数据,包括:
以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;
以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;
以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。
16.根据权利要求15所述的系统,其特征在于,所述异构数据元组加载单元,具体用于获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;
根据时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;
根据用户标识将所述Block中的数据分为至少一个文件,
根据时间序列将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。
17.根据权利要求16所述的系统,其特征在于,所述异构数据元组加载单元,具体用于根据下述公式一获取所述Bucket ID;
其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。
18.根据权利要求15所述的系统,其特征在于,所述异构数据元组加载单元,具体用于获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;
根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;
根据所述Location ID将所述Block中的数据分为至少一个文件,
根据时间序列和Oid将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。
19.根据权利要求18所述的系统,其特征在于,所述异构数据元组加载单元,具体用于根据下述公式二获取所述Bucket ID;
其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。
20.根据权利要求15所述的系统,其特征在于,所述异构数据元组加载单元,具体用于获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;
根据时空轨迹点将每一Bucket内的数据分为至少一个Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;
根据所述Timestamp将所述Block中的数据分为至少一个文件,
根据所述Location ID和所述Oid将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。
21.根据权利要求20所述的系统,其特征在于,所述异构数据元组加载单元,具体用于根据下述公式三获取所述Bucket ID;
Bucketid(r)=hash(r.T(r.timestamp))mod k+hash(r.LocationID)mod k 公式三其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。
22.根据权利要求12、13、15至20任一所述的系统,其特征在于,所述异构数据元组加载单元,还用于
获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。
23.一种数据存储系统,其特征在于,包括:
处理器和和存储器;
所述存储器用于存储指令;
所述处理器执行所述存储器中存储的指令,用于:
读取待存储的第一条数据元组;
采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;
将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中;
所述处理器用于在采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据之前,还用于
确定所述高速缓冲存储器中是否已经缓存过与所述第一条数据元组关联的第二条数据元组,若是,则查找与所述第一条数据元组关联的第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;
所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:
将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;
若确定所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;
所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:
将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述设置的所述结构化数据的存储位置中。
24.根据权利要求23所述的系统,其特征在于,所述第一条数据元组包括:
用户标识Oid、与所述Oid对应的时空轨迹点标识Location ID,与所述Location ID对应的时间信息Timestamp;
所述第一条数据元组还包括下述的一项或多项:
与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。
25.根据权利要求23或24所述的系统,其特征在于,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:
所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;
所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;
所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。
26.根据权利要求25所述的系统,其特征在于,所述至少三种不同结构的结构化数据,包括:
以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;
以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;
以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。
27.根据权利要求26所述的系统,其特征在于,所述处理器用于采用结构化数据编码方式将所述第一条数据元组编码为第一种结构化数据,包括:
获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;
根据时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;
根据所述Oid将所述Block中的数据分为至少一个文件,
根据时间序列将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。
28.根据权利要求27所述的系统,其特征在于,所述处理器用于获取所述第一条数据元组的Bucket ID,包括:
根据下述公式一获取所述Bucket ID;
其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。
29.根据权利要求26所述的系统,其特征在于,所述处理器用于采用结构化数据编码方式将所述第一条数据元组编码为第二种结构化数据,包括:
获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;
根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;
根据所述Location ID将所述Block中的数据分为至少一个文件,
根据时间序列和所述Oid将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。
30.根据权利要求29所述的系统,其特征在于,所述处理器用于获取所述第一条数据元组的Bucket ID,包括:
根据下述公式二获取所述Bucket ID;
其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。
31.根据权利要求26所述的系统,其特征在于,所述处理器用于采用结构化数据编码方式将所述第一条数据元组编码为第三种结构化数据,包括:
获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;
根据时空轨迹点将每一Bucket内的数据分为至少一个Stack;
根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;
根据所述Timestamp将所述Block中的数据分为至少一个文件,
根据所述Location ID和所述Oid将所述至少一个文件中的数据排列得到列存储队列;
所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。
32.根据权利要求31所述的系统,其特征在于,所述处理器用于获取所述第一条数据元组的Bucket ID,包括:
根据下述公式三获取所述Bucket ID;
Bucketid(r)=hash(r.T(r.timestamp))mod k+hash(r.LocationID)mod k 公式三其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。
33.根据权利要求23、24、26至32任一所述的系统,其特征在于,所述处理器还用于获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。
数据存储方法及系统\n技术领域\n[0001] 本发明涉及通信技术,尤其涉及一种数据存储方法及系统。\n背景技术\n[0002] 时空轨迹数据具有数据量大、位置更新频繁、信息蕴含丰富等特点,为基于位置的服务(Location Based Service,简称LBS)、交通管理、城市规划、社会计算等提供了重要的数据源。\n[0003] 用户设备的时空轨迹数据也成为大数据(Big Data)时代的典型代表,海量的时空轨迹数据蕴含着诸多用户个性化信息,例如个体的时空轨迹可以用于描述其时空行为特征,大量的个体的时空轨迹则可以反映群体的时空行为规律,特别是对挖掘用户行为习惯及个人用户画像、智能城市交通规划、电信流量分配以及时空数据挖掘等实际应用具有非常重要的意义。\n[0004] 当前用户设备的时空轨迹数据是基于用户设备不同时间的位置信息集合,简单来讲可以是基于用户身份标识(IDentity,简称ID)、地理位置(LocationID)和时间戳(Timestamp)为主键的多元组集合,即{,…}。其中,前三个属性为时空轨迹数据的核心标示属性,包括Oid标示了对应的对象ID,LocationID标示了对应的时空轨迹点以及Timestamp标示了对应的时间点,A1,…,An为数据附带的其他相关轨迹信息属性。\n[0005] 时空轨迹数据是一个结构化良好的关系型数据。大量的用户设备及较长的时间跨度,导致在该类结构化数据的存储及实时分析查询具有巨大的挑战。例如在一个大中型城市约有300~400万的移动终端,一天的时空轨迹数据即可达到约为5TB的数据量,这为有效的实时数据查询分析带来了巨大的困难。针对此类高速海量时空轨迹数据流,现有技术中提供有一种数据存储方案,如并行关系数据库存储系统。\n[0006] 并行关系数据库存储系统将传统分布式数据管理系统扩展于此种结构化的大数据存储管理。其缺陷是海量数据的管理效率不高,以及数据安全容错性不足。\n[0007] 另外,现有技术中还公开一种基于区域划分的时空轨迹数据存储方法,通过地理位置的网格区域划分,将位于同一网格单元的地理位置点存储在同一个网格区域内,以压缩时空轨迹的存储空间。该类方法将区域的索引存储在轨迹中,提供轨迹的快速检索方式,搜索相似轨迹时,不用与数据库中的所有轨迹匹配,而只需要计算该轨迹与其通过的区域中的轨迹的相似度即可。\n[0008] 然而,现有基于区域存储方法的缺点主要是:基于网格划分的结构导致轨迹数据的各个网格单元密度不均,且使得基于B+的树状存储结构不平衡而降低查询效率,不能够实现实时分析查询。\n发明内容\n[0009] 本发明实施例提供一种数据存储方法及系统,用于存储海量的时空轨迹数据,并实现实时分析查询存储的时空轨迹数据。\n[0010] 第一方面,本发明实施例提供一种数据存储方法,包括:\n[0011] 读取待存储的第一条数据元组;\n[0012] 采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;\n[0013] 将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中。\n[0014] 结合第一方面,在第一种可能的实现方式中,采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据的步骤之前,所述方法还包括:\n[0015] 若所述高速缓冲存储器中已经缓存过与所述第一条数据元组关联的第二条数据元组,则查找与所述第一条数据元组关联的第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;\n[0016] 所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:\n[0017] 将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;\n[0018] 若所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;\n[0019] 所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:\n[0020] 将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述设置的所述结构化数据的存储位置中。\n[0021] 结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一条数据元组包括:\n[0022] 用户标识Oid、与所述Oid对应的时空轨迹点标识Location ID,与所述Location ID对应的时间信息Timestamp;\n[0023] 所述第一条数据元组还包括下述的一项或多项:\n[0024] 与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。\n[0025] 结合第一方面的第一种可能的实现方式或第二种可能的实现方式,在第三种可能的实现方式中,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:\n[0026] 所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;\n[0027] 所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;\n[0028] 所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。\n[0029] 结合第一方面的第二种可能的实现方式,在第四种可能的实现方式中,[0030] 所述至少三种不同结构的结构化数据,包括:\n[0031] 以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;\n[0032] 以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;\n[0033] 以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。\n[0034] 结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,[0035] 采用结构化数据编码方式将所述第一条数据元组编码为第一种结构化数据,包括:\n[0036] 获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;\n[0037] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;\n[0038] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;\n[0039] 根据Oid将所述Block中的数据分为至少一个文件,\n[0040] 根据时间序列将所述至少一个文件中的数据排列得到列存储队列;\n[0041] 所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。\n[0042] 结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述获取所述第一条数据元组的Bucket ID,包括:\n[0043] 根据下述公式一获取所述Bucket ID;\n[0044] 公式一\n[0045] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0046] 结合第一方面的第四种可能的实现方式,在第七种可能的实现方式中,采用结构化数据编码方式将所述第一条数据元组编码为第二种结构化数据,包括:\n[0047] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0048] 根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;\n[0049] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0050] 根据所述Location ID将所述Block中的数据分为至少一个文件,\n[0051] 根据时间序列和所述Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0052] 所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。\n[0053] 结合第一方面的第七种可能的实现方式,在第八种可能的实现方式中,[0054] 所述获取所述第一条数据元组的Bucket ID,包括:\n[0055] 根据下述公式二获取所述Bucket ID;\n[0056] 公式二\n[0057] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0058] 结合第一方面的第四种可能的实现方式,在第九种可能的实现方式中,[0059] 采用结构化数据编码方式将所述第一条数据元组编码为第三种结构化数据,包括:\n[0060] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0061] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个Stack;\n[0062] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0063] 根据所述Timestamp将所述Block中的数据分为至少一个文件,\n[0064] 根据所述Location ID和所述Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0065] 所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。\n[0066] 结合第一方面的第九种可能的实现方式,在第十种可能的实现方式中,[0067] 所述获取所述第一条数据元组的Bucket ID,包括:\n[0068] 根据下述公式三获取所述Bucket ID;\n[0069] Bucketid(r)=hash(r.T(r.timestamp))modk+hash(r.LocationID)modk 公式三[0070] 其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。\n[0071] 结合第一方面的上述所有可能的实现方式,在第十一种可能的实现方式中,所述采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据,还包括:\n[0072] 获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0073] 第二方面,本发明实施例提供一种数据存储系统,包括:\n[0074] 读取单元,用于读取待存储的第一条数据元组;\n[0075] 异构数据元组加载单元,用于采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;\n[0076] 存储单元,用于将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中。\n[0077] 结合第二方面,在第一种可能的实现方式中,所述系统还包括:查找单元;\n[0078] 所述查找单元,用于在所述异构数据元组加载单元获取所述结构化数据之前,查找所述高速缓冲存储器中是否已经缓存过与所述第一条数据元组关联的第二条数据元组;\n[0079] 若所述查找单元查找到所述高速缓冲存储器中已经缓存过与所述第一条数据元组关联的第二条数据元组,则查找所述第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;\n[0080] 所述存储单元,具体用于将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;\n[0081] 若所述查找单元查找到所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则所述系统还包括:\n[0082] 设置单元,用于在所述查找单元未查找到所述高速缓冲存储器中缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;\n[0083] 所述存储单元,具体用于将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器根据所述设置单元设置的所述存储位置将所述结构化数据写入所述设置的所述结构化数据的存储位置中。\n[0084] 结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一条数据元组包括:\n[0085] 用户标识Oid、与所述Oid对应的时空轨迹点标识Location ID,与所述Location ID对应的时间信息Timestamp;\n[0086] 所述第一条数据元组还包括下述的一项或多项:\n[0087] 与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。\n[0088] 结合第二方面的第一种可能的实现方式或第二种可能的实现方式,在第三种可能的实现方式中,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:\n[0089] 所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;\n[0090] 所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;\n[0091] 所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。\n[0092] 结合第二方面的第二种可能的实现方式,在第四种可能的实现方式中,所述至少三种不同结构的结构化数据,包括:\n[0093] 以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;\n[0094] 以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;\n[0095] 以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。\n[0096] 结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述异构数据元组加载单元,具体用于\n[0097] 获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;\n[0098] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;\n[0099] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;\n[0100] 根据用户标识将所述Block中的数据分为至少一个文件,\n[0101] 根据时间序列将所述至少一个文件中的数据排列得到列存储队列;\n[0102] 所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。\n[0103] 结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,所述异构数据元组加载单元,具体用于\n[0104] 根据下述公式一获取所述Bucket ID;\n[0105] 公式一\n[0106] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0107] 结合第二方面的第四种可能的实现方式,在第七种可能的实现方式中,所述异构数据元组加载单元,具体用于\n[0108] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0109] 根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;\n[0110] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0111] 根据所述Location ID将所述Block中的数据分为至少一个文件,\n[0112] 根据时间序列和所述Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0113] 所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。\n[0114] 结合第二方面的第七种可能的实现方式,在第八种可能的实现方式中,所述异构数据元组加载单元,具体用于\n[0115] 根据下述公式二获取所述Bucket ID;\n[0116] 公式二\n[0117] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0118] 结合第二方面的第四种可能的实现方式,在第九种可能的实现方式中,所述异构数据元组加载单元,具体用于\n[0119] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0120] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个Stack;\n[0121] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0122] 根据所述Timestamp将所述Block中的数据分为至少一个文件,\n[0123] 根据所述Location ID和所述Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0124] 所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。\n[0125] 结合第二方面的第九种可能的实现方式,在第十种可能的实现方式中,[0126] 所述异构数据元组加载单元,具体用于\n[0127] 根据下述公式三获取所述Bucket ID;\n[0128] Bucketid(r)=hash(r.T(r.timestamp))modk+hash(r.LocationID)modk 公式三[0129] 其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。\n[0130] 结合第二方面及上述可能的实现方式,在第十一种可能的实现方式中,所述异构数据元组加载单元,还用于\n[0131] 获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0132] 第三方面,本发明实施例还提供一种数据存储系统,包括:\n[0133] 处理器和和存储器;\n[0134] 所述存储器用于存储指令;\n[0135] 所述处理器执行所述存储器中存储的指令,用于:\n[0136] 读取待存储的第一条数据元组;\n[0137] 采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;\n[0138] 将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中。\n[0139] 结合第三方面,在第一种可能的实现方式中,所述处理器用于在采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据之前,还用于[0140] 确定所述高速缓冲存储器中是否已经缓存过与所述第一条数据元组关联的第二条数据元组,若是,则查找与所述第一条数据元组关联的第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;\n[0141] 所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:\n[0142] 将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器根据所述第二条数据元组的存储区域将所述结构化数据写入所述第二条数据元组所在的存储区域中;\n[0143] 若确定所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;\n[0144] 所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:\n[0145] 将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述设置的所述结构化数据的存储位置中。\n[0146] 结合第三方面或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一条数据元组包括:\n[0147] 用户标识Oid、与所述Oid对应的时空轨迹点标识Location ID,与所述Location ID对应的时间信息Timestamp;\n[0148] 所述第一条数据元组还包括下述的一项或多项:\n[0149] 与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。\n[0150] 结合第三方面的第一种可能的实现方式或第二种可能的实现方式,在第三种可能的实现方式中,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:\n[0151] 所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;\n[0152] 所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;\n[0153] 所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。\n[0154] 结合第三方面的第二种可能的实现方式,在第四种可能的实现方式中,[0155] 所述至少三种不同结构的结构化数据,包括:\n[0156] 以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;\n[0157] 以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;\n[0158] 以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。\n[0159] 结合第三方面的第四种可能的实现方式,在第五种可能的实现方式中,[0160] 所述处理器用于采用结构化数据编码方式将所述第一条数据元组编码为第一种结构化数据,包括:\n[0161] 获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;\n[0162] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;\n[0163] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;\n[0164] 根据所述Oid将所述Block中的数据分为至少一个文件,\n[0165] 根据时间序列将所述至少一个文件中的数据排列得到列存储队列;\n[0166] 所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。\n[0167] 结合第三方面的第五种可能的实现方式,在第六种可能的实现方式中,[0168] 所述处理器用于获取所述第一条数据元组的Bucket ID,包括:\n[0169] 根据下述公式一获取所述Bucket ID;\n[0170] 公式一\n[0171] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0172] 结合第三方面的第四种可能的实现方式,在第七种可能的实现方式中,[0173] 所述处理器用于采用结构化数据编码方式将所述第一条数据元组编码为第二种结构化数据,包括:\n[0174] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0175] 根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;\n[0176] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0177] 根据所述Location ID将所述Block中的数据分为至少一个文件,\n[0178] 根据时间序列和所述Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0179] 所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。\n[0180] 结合第三方面的第七种可能的实现方式,在第八种可能的实现方式中,[0181] 所述处理器用于获取所述第一条数据元组的Bucket ID,包括:\n[0182] 根据下述公式二获取所述Bucket ID;\n[0183] 公式二\n[0184] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0185] 结合第三方面的第四种可能的实现方式,在第九种可能的实现方式中,[0186] 所述处理器用于采用结构化数据编码方式将所述第一条数据元组编码为第三种结构化数据,包括:\n[0187] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0188] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个Stack;\n[0189] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0190] 根据所述Timestamp将所述Block中的数据分为至少一个文件,\n[0191] 根据所述Location ID和所述Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0192] 所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。\n[0193] 结合第三方面的第九种可能的实现方式,在第十种可能的实现方式中,[0194] 所述处理器用于获取所述第一条数据元组的Bucket ID,包括:\n[0195] 根据下述公式三获取所述Bucket ID;\n[0196] Bucketid(r)=hash(r.T(r.timestamp))modk+hash(r.LocationID)modk 公式三[0197] 其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。\n[0198] 结合第三方面或第三方面的所有可能的实现方式,在第十一种可能的实现方式中,\n[0199] 所述处理器还用于\n[0200] 获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0201] 第四方面,本发明实施例提供一种数据分析系统,包括:\n[0202] 数据存储装置、与所述数据存储装置连接的异构HDFS存储节点;\n[0203] 其中,所述数据存储装置包括:异构数据管理单元,异构数据加载单元,异构数据查询单元,异构数据读写访问单元;\n[0204] 所述异构数据管理单元与所述异构数据加载单元连接,所述异构数据读写访问单元分别与所述异构数据管理单元,异构数据加载单元,异构数据查询单元连接;\n[0205] 所述异构数据管理单元,用于设置所述异构数据加载单元中的结构化数据的存储信息和设置所述结构化数据的索引值信息;\n[0206] 所述异构数据加载单元,用于接收待存储的数据元组,并将所述待存储的数据元组编码为至少三种不同结构的结构化数据,将所述结构化数据通过所述异构数据读写访问单元存储在所述异构HDFS存储节点;\n[0207] 所述异构数据查询单元,用于接收用户输入的查询请求,根据查询请求与所述异构数据读写访问单元交互,获得存储在所述异构HDFS存储节点中的数据元组。\n[0208] 结合第四方面,在第一种可能的实现方式中,还包括:\n[0209] 连接所述异构数据读写访问单元的异构数据容错优化单元,用于将所述异构数据读写访问单元从所述异构HDFS中读取的结构化数据进行容错处理,获得具有高容错性的结构化数据。\n[0210] 结合第四方面或第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述异构数据查询单元包括:\n[0211] 查询接口,用于接收用户输入的查询请求。\n[0212] 由上述技术方案可知,本发明实施例的数据存储方法及系统,通过结构化数据编码方式将数据元组编码为至少三种不同结构的结构化数据,进而将结构化数据写入高速缓冲存储器中,可以有效的存储海量的时空轨迹数据,且能够实现海量的时空轨迹数据的实时分析查询。\n附图说明\n[0213] 图1为Hadoop中的分布式文件系统的示意图;\n[0214] 图2为本发明实施例一提供的数据存储方法的流程示意图;\n[0215] 图3A为本发明实施例二提供的数据存储方法的流程示意图;\n[0216] 图3B为本发明实施例二中的第一种结构化数据的示意图;\n[0217] 图3C为图3B中的Block中数据的结构示意图;\n[0218] 图4为本发明实施例三提供的数据存储方法的流程示意图;\n[0219] 图5为本发明实施例四提供的数据存储方法的流程示意图;\n[0220] 图6为本发明实施例一提供的数据存储系统的结构示意图;\n[0221] 图7为本发明实施例二提供的数据存储系统的结构示意图;\n[0222] 图8为本发明实施例一提供的数据分析系统的结构示意图;\n[0223] 图9为本发明实施例二提供的数据分析系统的结构示意图;\n[0224] 图10为本发明的分布式文件系统存储结构化数据的示意图。\n具体实施方式\n[0225] 现有技术中提供一种大数据处理平台(Hadoop),Hadoop具有有效的大数据存储及其高效的容错能力。现有技术中的Hadoop包括同构分布式文件系统(Hadoop Distributed File System,简称HDFS),同构HDFS对数据的存储方式如图1所示。一个大文件被均分为5个小文件块,每个小文件块的三份同构备份被随机的分布在三台不同的数据节点上,如小文件块2在节点A、节点B和节点D分别有一个同构副本。从整体上看,即是一个文件的三份同构副本散列在Hadoop的集群中。\n[0226] 也就是说,同构HDFS可将三个相同结构的数据块均等概率分布在多个集群的节点中,进而降低了海量数据存储的容错率。\n[0227] 现有的Hadoop存储海量数据的优势在于:Hadoop具有高效的容错机制和并行计算能力。例如,对同一个小文件块的操作可以在不同的数据节点上并行完成进而提高计算效率。然而,Hadoop还不能支持高效易用的分布式数据库对结构化数据分析查询,并且同构备份的备份结构完全相同,导致占用的存储空间大,例如同数据多索引存储所需空间倍数增长。\n[0228] 因此,本发明实施例结合Hadoop的大数据分析处理能力,将时空轨迹数据进行划分采用异构备份方式将时空轨迹数据存储到Hadoop集群的不同节点上,并实现时空轨迹数据的实时分析查询。\n[0229] 图2示出了本发明实施例一提供的数据存储方法的流程示意图,如图2所示,本实施例的数据存储方法如下所述。\n[0230] 201、读取待存储的第一条数据元组,即{,…}。\n[0231] 举例来说,第一条数据元组至少包括:用户标识(Oid)、与Oid对应的时空轨迹点标识(Location ID),与所述Location ID对应的时间信息(Timestamp)。\n[0232] 可选地,第一条数据元组还包括下述的一项或多项:\n[0233] 与Oid对应的用户状态、与Location ID对应的时空区域、与Oid对应的用户设备代码等等。\n[0234] 在中,前三个属性为时空轨迹数据的核心标示属性,A1,…,An为数据附带的其他相关轨迹信息属性信息。比如活动类型:坐车、步行、运动等属性信息。\n[0235] 上述数据元组的模型满足了时空轨迹数据结构化存储的要求,同时满足了关联信息如属性信息一并存储的需要,大大扩展了现有数据的模型对时空轨迹数据存储的局限性。\n[0236] 202、采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据。\n[0237] 举例来说,至少三种不同结构的结构化数据可包括:以所述第一条数据元组中的Oid,LocationID,Timestamp为索引值的第一种结构化数据;\n[0238] 以所述第一条数据元组中的LocationID为索引值的第二种结构化数据;\n[0239] 以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。\n[0240] 203、将所述至少三种不同结构的结构化数据存储在高速缓冲存储器(Cache)中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中。\n[0241] 可选地,前述步骤202中,采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据之后,还可获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0242] 也就是说,在步骤202中,采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据,同时获得结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0243] 本实施例的数据存储方法,通过结构化数据编码方式将数据元组编码为至少三种不同结构的结构化数据,进而将结构化数据写入高速缓冲存储器中,可以有效的存储海量的时空轨迹数据,且能够实现海量的时空轨迹数据的实时分析查询。\n[0244] 可选地,若所述高速缓冲存储器中已经缓存过与所述第一条数据元组关联的第二条数据元组,则在前述步骤202之前,上述的数据存储方法还可包括下述的图中未示出的步骤201a:\n[0245] 201a、查找与所述第一条数据元组关联的第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;\n[0246] 相应地,前述的步骤202可为下述的步骤202’:\n[0247] 202’:将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中。\n[0248] 另外,若所述高速缓冲存储器中未存储过与所述第一条数据元组关联的第二条数据元组,则在前述步骤202之前,上述的数据存储方法还可包括下述的图中未示出的步骤\n201a’:\n[0249] 201a’:设置所述结构化数据的存储位置;\n[0250] 相应地,前述的步骤202可为下述的步骤202’’:\n[0251] 202’’:将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述设置的所述结构化数据的存储位置中。\n[0252] 应说明的是,前述的第一条数据元组和第二条数据元组可为同一用户的数据,或者前述的第一条数据元组和第二条数据元组还可为同一时空轨迹点的数据。例如,第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:\n[0253] 所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;\n[0254] 所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;\n[0255] 所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。本实施例仅为举例说明。\n[0256] 上述方法针对同一个时空轨迹数据,实现三份异构备份,同时满足三种索引信息和数据容错的需求,并且降低了数据的存储空间。\n[0257] 图3A示出了本发明实施例二提供的数据存储方法的流程示意图,如图3A所示,本实施例的数据存储方法如下所述。\n[0258] 301、读取待存储的第一条数据元组,即{,…}。\n[0276] 402、采用结构化数据编码方式将所述第一条数据元组编码为第二种结构化数据。\n[0277] 举例来说,该步骤402可包括下述的子步骤:\n[0278] 4021、获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中。\n[0279] 例如,可根据下述公式二获取所述Bucket ID;\n[0280] 公式二\n[0281] 其中,k为散列因子,小于1024,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0282] 4022、根据所述Timestamp将每一Bucket内的数据分为至少一个Stack。\n[0283] 也就是说,每一个Bucket内的数据根据时间排序并进行聚合划分(group)成不同的Stack。\n[0284] 4023、根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0285] 4024、根据Location ID将所述Block中的数据分为至少一个文件。\n[0286] 4025、根据时间序列和Oid将所述至少一个文件中的数据排列得到列存储队列。\n[0287] 也就是说,数据基于Location ID聚集成不同的簇,并且每个簇对应一个文件Section。在文件的开头放置基于Location ID簇Section映射索引;每个簇Section中的数据以时间序列和Oid进行列存储。\n[0288] 所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。\n[0289] 403、将第二种结构化数据存储在Cache中,以使Cache将所述结构化数据写入异构HDFS的节点中。\n[0290] 图5示出了本发明实施例四提供的数据存储方法的流程示意图,如图5所示,本实施例的数据存储方法如下所述。\n[0291] 501、读取待存储的第一条数据元组,即{,…}。\n[0292] 502、采用结构化数据编码方式将所述第一条数据元组编码为第三种结构化数据。\n[0293] 举例来说,该步骤502可包括下述的子步骤:\n[0294] 5021、获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中。\n[0295] 例如,可根据下述公式三获取所述Bucket ID;\n[0296] Bucketid(r)=hash(r.T(r.timestamp))modk+hash(r.LocationID)modk 公式三[0297] 其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。\n[0298] 5022、根据所述时空轨迹点将每一Bucket内的数据分为至少一个Stack。\n[0299] 也就是说,每一个Bucket首先基于区域Location进行四分树(Quadtree)划分成不同的区域,在每一区域中进行聚合形成Stack。\n[0300] 5023、根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0301] 5024、根据Timestamp将所述Block中的数据分为至少一个文件。\n[0302] 5025、根据Location ID和Oid将所述至少一个文件中的数据排列得到列存储队列。\n[0303] 也就是说,数据基于T(r.timestamp)聚集成不同的簇,并且每个簇对应一个文件Section。在文件的开头放置基于T(r.timestamp)簇Section映射索引;每个簇Section中的数据以Location ID和Oid序列进行列存储。\n[0304] 所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。\n[0305] 503、将第三种结构化数据存储在Cache中,以使Cache将所述结构化数据写入异构HDFS的节点中。\n[0306] 上述数据存储方法可以实现以Oid,Location ID和Timestamp上的联合索引值,实现第一类数据的快速访问;2)以Location ID为空间优先索引值和3)以Timestamp为索引值的查询需求。\n[0307] 上述图3至图5所示的流程中可理解为,在数据存储系统中输入为一GPS的数据元组,以三种不同结构并按Bucket-Stack-Block三层结构存储在异构HDFS的节点中。\n[0308] 图6示出了本发明实施例一提供的数据存储系统的流程示意图,如图6所示,本实施例的数据存储系统包括:读取单元61、异构数据元组加载单元62和存储单元63;\n[0309] 其中,读取单元61用于读取待存储的第一条数据元组;\n[0310] 异构数据元组加载单元62用于采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;\n[0311] 存储单元63用于将所述至少三种不同结构的结构化数据存储在高速缓冲存储器(Cache)中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中。\n[0312] 可选地,数据分析系统还可包括图中未示出的查找单元64,其中,查找单元64用于在所述异构数据元组加载单元62获取所述结构化数据之前,查找所述高速缓冲存储器中是否已经缓存过于所述第一条数据元组关联的第二条数据元组;\n[0313] 若查找单元64查找到所述高速缓冲存储器中已经缓存过于所述第一条数据元组关联的第二条数据元组,则查找所述第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;\n[0314] 所述存储单元63,具体用于将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;\n[0315] 若所述查找单元64查找到所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则所述系统还包括图中未示出的设置单元65;\n[0316] 设置单元65用于在所述查找单元64未查找到所述高速缓冲存储器中缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;\n[0317] 所述存储单元63,具体用于将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器根据所述设置单元设置的所述存储位置将所述结构化数据写入所述设置的所述结构化数据的存储位置中。\n[0318] 举例来说,所述第一条数据元组可包括:Oid、与Oid对应的Location ID,与Location ID对应的Timestamp;\n[0319] 所述第一条数据元组还包括下述的一项或多项:与所述Oid对应的用户状态(A1)、与所述Location ID对应的时空区域(A2)、与所述Oid对应的用户设备代码(A3)等等。\n[0320] 上述的所述第一条数据元组与所述第二条数据元组关联,可为下述的一种或多种:\n[0321] 所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;\n[0322] 所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;\n[0323] 所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。\n[0324] 可选地,前述的至少三种不同结构的结构化数据,包括:\n[0325] 以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;\n[0326] 以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;\n[0327] 以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。\n[0328] 在一种具体的实现方式中,所述异构数据元组加载单元62具体用于\n[0329] 获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中。\n[0330] 例如,根据下述公式一获取所述Bucket ID;\n[0331] 公式一\n[0332] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0333] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;\n[0334] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;\n[0335] 根据用户标识将所述Block中的数据分为至少一个文件,\n[0336] 根据时间序列将所述至少一个文件中的数据排列得到列存储队列;\n[0337] 所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。\n[0338] 在第二种可选的实现场景中,异构数据元组加载单元62具体用于\n[0339] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0340] 例如,可根据下述公式二获取所述Bucket ID;\n[0341] 公式二\n[0342] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0343] 根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;\n[0344] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0345] 根据Location ID将所述Block中的数据分为至少一个文件,\n[0346] 根据时间序列和Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0347] 所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。\n[0348] 在第三种可选的应用场景中,异构数据元组加载单元62具体用于\n[0349] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0350] 例如,根据下述公式三获取所述Bucket ID;\n[0351] Bucketid(r)=hash(r.T(r.timestamp))modk+hash(r.LocationID)modk 公式三[0352] 其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。\n[0353] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个Stack;\n[0354] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0355] 根据Timestamp将所述Block中的数据分为至少一个文件,\n[0356] 根据Location ID和Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0357] 所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。\n[0358] 可选地,所述异构数据元组加载单元62还用于,获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0359] 上述实施例的数据存储系统,通过异构数据元组加载单元将数据元组编码为至少三种不同结构的结构化数据,进而存储单元将结构化数据写入高速缓冲存储器中,可以有效的存储海量的时空轨迹数据,且能够实现海量的时空轨迹数据的实时分析查询。\n[0360] 图7示出了本发明实施例一提供的数据存储系统的流程示意图,如图7所示,本实施例的数据存储系统包括:处理器71和和存储器72;\n[0361] 所述存储器72用于存储指令;\n[0362] 所述处理器71执行所述存储器72中存储的指令,用于:\n[0363] 读取待存储的第一条数据元组;\n[0364] 采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据;\n[0365] 将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构分布式文件系统HDFS的节点中。\n[0366] 所述处理器71用于在采用结构化数据编码方式将所述第一条数据元组编码为至少三种不同结构的结构化数据之前,还用于\n[0367] 确定所述高速缓冲存储器中是否已经缓存过与所述第一条数据元组关联的第二条数据元组,若是,则查找与所述第一条数据元组关联的第二条数据元组的存储区域,所述第二条数据元组为已经存储在所述异构HDFS的节点中的数据元组;\n[0368] 所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:\n[0369] 将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述第二条数据元组所在的存储区域中;\n[0370] 若确定所述高速缓冲存储器中未缓存过与所述第一条数据元组关联的第二条数据元组,则设置所述结构化数据的存储位置;\n[0371] 所述将所述至少三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入异构HDFS的节点中,包括:\n[0372] 将所述三种不同结构的结构化数据存储在高速缓冲存储器中,以使所述高速缓冲存储器将所述结构化数据写入所述设置的所述结构化数据的存储位置中。\n[0373] 举例来说,所述第一条数据元组包括:Oid、与Location ID,Timestamp;\n[0374] 所述第一条数据元组还可包括下述的一项或多项:与所述Oid对应的用户状态、与所述Location ID对应的时空区域、与所述Oid对应的用户设备代码。\n[0375] 可选地,所述第一条数据元组与所述第二条数据元组关联,包括下述的一种或多种:\n[0376] 所述第一条数据元组的Oid与所述第二条数据元组的Oid相同;\n[0377] 所述第一条数据元组的Location ID与所述第二条数据元组的Location ID相同;\n[0378] 所述第一条数据元组的Timestamp与所述第二条数据元组的Timestamp相同。\n[0379] 前述的至少三种不同结构的结构化数据,包括:\n[0380] 以所述第一条数据元组中的Oid、Location ID,Timestamp为索引值的第一种结构化数据;\n[0381] 以所述第一条数据元组中的Location ID为索引值的第二种结构化数据;\n[0382] 以所述第一条数据元组中的Timestamp为索引值的第三种结构化数据。\n[0383] 在第一种可能的实现场景中,所述处理器71用于采用结构化数据编码方式将所述第一条数据元组编码为第一种结构化数据,包括:\n[0384] 获取所述第一条数据元组的桶区标识Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的桶区Bucket中;\n[0385] 例如,根据下述公式一获取所述Bucket ID;\n[0386] 公式一\n[0387] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0388] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个堆区Stack;\n[0389] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个块区Block;\n[0390] 根据Oid将所述Block中的数据分为至少一个文件,\n[0391] 根据时间序列将所述至少一个文件中的数据排列得到列存储队列;\n[0392] 所述Bucket、Stack、Block中的数据组成以所述Oid、Location ID和Timestamp为索引值的第一种结构化数据。\n[0393] 在第二种可能的实现场景中,所述处理器71用于采用结构化数据编码方式将所述第一条数据元组编码为第二种结构化数据,包括:\n[0394] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0395] 根据下述公式二获取所述Bucket ID;\n[0396] 公式二\n[0397] 其中,k为散列因子,t0为所述第一条数据元组的起始时间,δ为Bucket的时间跨度,r为第一条数据元组。\n[0398] 根据所述Timestamp将每一Bucket内的数据分为至少一个Stack;\n[0399] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0400] 根据Location ID将所述Block中的数据分为至少一个文件,\n[0401] 根据时间序列和Oid将所述至少一个文件中的数据排列得到列存储队列;\n[0402] 所述Bucket、Stack、Block中的数据组成以所述Location ID为索引值的第二种结构化数据。\n[0403] 在第三种可能的实现场景中,所述处理器71用于采用结构化数据编码方式将所述第一条数据元组编码为第三种结构化数据,包括:\n[0404] 获取所述第一条数据元组的Bucket ID,并将所述第一条数据元组中的数据分配到与所述Bucket ID对应的Bucket中;\n[0405] 根据下述公式三获取所述Bucket ID;\n[0406] Bucketid(r)=hash(r.T(r.timestamp))modk+hash(r.LocationID)modk 公式三[0407] 其中,T(r.timestamp)=r.timestamp所在的时间序列的id,k为散列因子,r为第一条数据元组。\n[0408] 根据所述时空轨迹点将每一Bucket内的数据分为至少一个Stack;\n[0409] 根据所述Stack内数据的一维属性将所述Stack内的数据分为至少一个Block;\n[0410] 根据时间信息将所述Block中的数据分为至少一个文件,\n[0411] 根据时空轨迹点标识和用户标识将所述至少一个文件中的数据排列得到列存储队列;\n[0412] 所述Bucket、Stack、Block中的数据组成以所述Timestamp为索引值的第三种结构化数据。\n[0413] 在第四种可选的实现场景中,所述处理器71还用于\n[0414] 获取所述结构化数据的索引信息,所述索引信息用于实现与所述结构化数据对应的数据元组的查询。\n[0415] 上述实施例的数据存储系统,可以有效的存储海量的时空轨迹数据,且能够实现海量的时空轨迹数据的实时分析查询。\n[0416] 本实施例的数据存储系统,可以执行前述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。\n[0417] 本实施例的数据存储系统可将任一待存储的数据元组编码成异构备份的结构化数据,进而实现时空轨迹数据的存储。\n[0418] 图8示出了本发明实施例一提供的数据分析系统的流程示意图,如图8所示,本实施例的数据分析系统包括:数据存储装置81、与所述数据存储装置81连接的异构HDFS82;\n[0419] 其中,所述数据存储装置81包括:异构数据管理单元811,异构数据加载单元812,异构数据查询单元813,异构数据读写访问单元714;\n[0420] 所述异构数据管理单元811与所述异构数据加载单元812连接;\n[0421] 所述异构数据读写访问单元814分别与所述异构数据管理单元811,异构数据加载单元812,异构数据查询单元813连接;\n[0422] 所述异构数据管理单元811,用于设置所述异构数据加载单元812中的结构化数据的存储信息和设置所述结构化数据的索引值信息;\n[0423] 所述异构数据加载单元812,用于接收待存储的数据元组,并将所述待存储的数据元组编码为至少三种不同结构的结构化数据,将所述结构化数据通过所述异构数据读写访问单元814存储在所述异构HDFS82;\n[0424] 所述异构数据查询单元813,用于接收用户输入的查询请求,根据查询请求与所述异构数据读写访问单元814交互,获得存储在所述异构HDFS82中的数据元组。\n[0425] 时空轨迹数据存储在图8所示的数据分析系统中,即,所有数据元组均以文件方式存储在异构HDFS中。并且,数据存储装置中的异构数据读写访问单元814对结构化数据的管理和查询分析。\n[0426] 可选地,如图9所示,前述的数据分析系统还可包括:连接所述异构数据读写访问单元814的异构数据容错优化单元815,用于将所述异构数据读写访问单元814从所述异构HDFS中读取的结构化数据进行容错处理,获得具有高容错性的结构化数据。\n[0427] 本实施例的数据分析系统采用异构备份机制将数据元组随机存储,且能够实现并行运算机制提高时空轨迹数据的查询效率,实现时空轨迹数据的实时分析查询。\n[0428] 在具体的应用中,前述的异构数据管理单元811主要用于实现异构索引表的管理。\n例如添加异构索引表或者删除异构索引表等。例如,下述的创建异构索引表的程序。\n[0429]\n[0430] 应说明的是,异构索引表可为前述图2至图5中所描述的结构化数据的存储时建立的索引信息组成的。\n[0431] 异构数据加载单元812用于实现数据元组的存储。例如,对数据元组转换为异构的三种结构化数据。\n[0432] 异构数据容错优化单元815,用于实现异构的结构化数据之间的转换/恢复等。例如,恢复某一异构HDFS的节点中block中损坏的数据等,以提高数据的容错性。具体地,每一block可以通过其它几个最相关的block把它恢复,例如,block1的最相关块为block8/block22/block30,即block8、block22和block30的共同数据重新组织成block1的所需结构达到block1数据的恢复。\n[0433] 具体地,针对每一个结构化数据的Bucket/Stack/Block,根据数据间的内在关系,异构数据管理单元811保存了相应的容错回复列表,例如对于结构一的一个Bucket000数据损坏或遗失,其相应的回复列表保存了从结构二和结构三相关数据Block列表,通过这些列表,可以根据数据加载技术回复Bucket000数据,结构二或结构三Bucket回复机制类似。结合图3C举例来说,结构一是以Oid为序存储在Bucket中,假如某一个结构一Bucket1包含oid:105,203两个用户的轨迹数据;考虑结构二,我们知道结构二是以时间为序来存储在相应的Bucket中,如果oid为105的用户轨迹数据存储在Bucket5中,而oid为203的用户轨迹数据存储在Bucket8和Bucket20中,所以如果Bucket1损坏,则可以通过结构二的Bucket5、Bucket8和Bucket20把所有oid为105和203的数据重组,达到数据恢复容错的功能。\n[0434] 也就是说,在异构HDFS的节点中,若删除同一结构一个或多个Bucket/Stack/Block数据,该删除的数据可以自动通过其他的结构化数据,实现删除的数据的回复。\n[0435] 异构数据查询单元813,用于查询最相近的数据元组的结构化数据。例如,客户端通过索引结构匹配子单元进行查询,查询最接近的结构化数据。举例来说,异构数据查询单元813可包括查询接口,查询结构用于接收用户输入的查询请求。其中,查询接口可通过结构化查询语言(Structured Query Language,简称SQL)实现。\n[0436] 异构数据读写访问单元814,用于实现异构HDFS中结构化数据的并行查询。\n[0437] 异构HDFS,备份存储同一个数据元组的多个不同结构副本。如图10所示,异构HDFS散列存储同一文件的不同结构于异构HDFS的节点中。结构化数据不同在于第一种结构化数据、第二种结构化数据和第三种结构化数据。上述结构化数据都是bucket-stack-block结构。\n[0438] 上述的数据分析系统满足了基于全时空的轨迹查询的需求。\n[0439] 另外,上述的异构数据查询单元813可具有查询接口,实现异构HDFS中的结构化数据的查询。该异构数据查询单元813可以实现结构化数据的匹配,以及实现Bucket/Stack/Block中的数据的定位。例如查询某一用户在特定时间和区域内的所有数据的程序如下:\n[0440]\n[0441] 若需要通过上述的查询接口获取第一种结构化数据,可根据Oid,LocationID和Timestamp可以确定得到所需访问的Block中的文件列表。依据该Block中文件列表和其分布结构实现结构化数据的并行访问。\n[0442] 上述实施例的数据分析系统实现了海量时空数据在异构HDFS的节点上的存储和实时查询。\n[0443] 也就是说,针对存储的时空轨迹数据的查询主要包括:第一类:个体用户的时空数据的实时访问,例如,在某一特定区域和时间段内的某些特定用户的时空行为轨迹;第二类:群体用户的时空数据的实时访问,例如,在某一特定区域和时间段内的所有用户时空行为轨迹。\n[0444] 为此,上述实施例中的存储时空轨迹数据的数据分析系统中建三类索引值以实现数据快速访问:1)以Oid,LocationID和Timestamp上的联合索引值,实现第一种结构化数据的快速访问;2)以LocationID为空间优先索引值实现第二种结构化数据的快速访问;和3)以Timestamp为时间优先索引值实现第三种结构化数据的快速访问。\n[0445] 举例来说,实现在异构HDFS的节点上的类似如下的Q1~Q5的实时访问,但不限于这些类型。\n[0446]\n[0447] 其中,Q1~Q5定义了SQL查询类型,Q1是查询Oid为0001用户在特定时间内的某个地点的所有活动;Q2只是特定时间的所有活动;Q3只是特定地点的所有活动;Q4只是特定时间的所有人活动;Q5是特定地点所有人的所有活动)\n[0448] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。\n[0449] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
法律信息
- 2018-09-11
- 2015-11-04
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201410121215.9
申请日: 2014.03.27
- 2015-09-30
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-09-18
|
2013-07-08
| | |
2
| |
2013-12-25
|
2013-08-26
| | |
3
| |
2012-03-14
|
2010-08-24
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |