CN115687517A - 时空数据的存储方法、装置、数据库引擎和存储介质 - Google Patents
时空数据的存储方法、装置、数据库引擎和存储介质 Download PDFInfo
- Publication number
- CN115687517A CN115687517A CN202211271527.9A CN202211271527A CN115687517A CN 115687517 A CN115687517 A CN 115687517A CN 202211271527 A CN202211271527 A CN 202211271527A CN 115687517 A CN115687517 A CN 115687517A
- Authority
- CN
- China
- Prior art keywords
- data
- grid
- grids
- space
- mesh
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了时空数据的存储方法、装置、数据库引擎和存储介质。该方法,包括:获取空间对象的时空数据;将时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;对每个层次的网格中数据量未达到第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到第一标准值;如最下一个层次中任一个网格的数据量达到第一标准值,将相应网格确定为一个分区;将全部分区中空间对象的时空数据存储至分布式数据库中。基于该方法和装置,其可以提高存储效率和检索效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及时空数据的存储方法、装置、数据库引擎和存储介质。
背景技术
随着移动互联网、卫星定位技术、LBS(Location Based Services)技术的高速发展,各类轨迹数据呈爆发式增长,并表现出稀疏性、时空异质性与多维演化等特点。当前各类轨迹数据的结构和应用场景各不相同,因此,有针对性的从时间和空间角度组织管理时空数据,是处理海量数据高效存储和查询的重要手段。时空数据管理的首要任务之一为时空数据在空间上的划分,其目标是保证存储数据的空间邻近性,以及数据量的均衡存储。然而,现有的空间数据划分方法难以兼顾上述两个目标,在存储效率和检索效率方面仍然有待提高。
发明内容
本发明实施例的一个目的是解决至少上述问题和/或缺陷,并提供至少后面将说明的优点。
本发明实施例提供了时空数据的存储方法、装置、数据库引擎和存储介质,其可以将在空间位置上邻近的空间对象的时空数据分配至同一个分区中,从而实现邻近存储,并且每个分区内的数据量相对均衡,可以提高存储效率和检索效率。
第一方面,提供了一种时空数据的存储方法,包括:
获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息;
将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内;
对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区;
将全部分区中空间对象的时空数据存储至分布式数据库中。
可选地,所述将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格,包括:
将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格,通过具有第一预设阶数的Hilbert填充曲线对第一个层次的网格进行填充,生成第一个层次中每个网格的Hilbert编码;基于上一个层次中每个网格的 Hilbert编码,顺序地访问相应层次中的每个网格,将数据量超过所述第一标准值的每个网格划分为多个子网格,生成下一个层次的每个单元格网,所述下一个层次的网格由至少一个单元格网组成;通过具有第二预设阶数的 Hilbert填充曲线对下一个层次中每个单元格网进行填充,生成下一个层次中每个单元格网中每个网格的Hilbert编码;
所述对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区,包括:
基于第一个层次中每个网格的Hilbert编码,顺序地访问所述第一个层次中每个网格,在访问至所述第一个层次中任一个被划分网格时,进入基于被划分网格生成的第二个层次的单元格网中;基于上一个层次中任一个单元格网中每个网格的Hilbert编码,顺序地访问上一个层次中相应单元格网中的每个网格,在访问至任一个被划分网格时,进入基于被划分网格生成的下一个层次的单元格网中,基于下一个层次中相应单元格网中每个网格的Hilbert编码,顺序地访问下一个层次中相应单元格网中每个网格;如下一个层次中相应单元格网中每个网格均未被再次划分,则返回至所述当前格网的上一个层次中,继续访问上一个层次中被划分网格的下一个网格;如完成对下一个层次中相应单元格网中每个网格的访问,则返回至上一个层次中,继续上一个层次中被划分格网的下一个网格;
其中,在对多个层次的网格的访问过程中,不统计被划分网格的数据量,依据网格的访问顺序,将数据量未达到所述第一标准值的网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区。
可选地,所述第一预设阶数为3阶;所述第二预设阶数为1阶。
可选地,所述时空数据包括空间对象的时间信息;所述方法还包括:
根据每个分区的生成顺序,生成每个分区的分区编码,建立所述每个分区的分区编码与每个分区的位置信息之间的映射关系;
根据所述空间对象的时间信息以及所述空间对象所在分区的分区编码,生成索引数据。
可选地,所述分布式数据库包括多个存储节点;所述将全部分区中空间对象的时空数据存储至分布式数据库中,包括:
将全部分区中空间对象的时空数据分别存储至所述多个存储节点,其中,在每个存储节点中存储的空间对象的时空数据所属于的多个分区的分区编码是连续排列的。
可选地,所述将全部分区中空间对象的时空数据存储至所述多个存储节点,还包括:
当每个存储节点中的数据量达到预设的第二标准值,则停止向相应存储节点存储空间对象的时空数据。
可选地,所述方法还包括:
基于预设的时间单位,将所述时空数据的时间范围划分为多个时间片,其中,每个时间片包含所述全部分区中一个或多个分区中空间对象的时空数据;
基于每个时间片的时空数据,构造每个时空立方体;其中,基于每个时间片所包含的每个分区中空间对象的时空数据,构造每个时空立方体中的每个条柱。
第二方面,提供了一种时空数据的存储装置,包括:
时空数据获取模块,用于获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息;
网格划分模块,用于将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内;
分区确定模块,用于对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区;
时空数据存储模块,用于将全部分区中空间对象的时空数据存储至分布式数据库中。
第三方面,提供了一种数据库引擎,包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行所述的方法。
第四方面,提供了一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现所述的方法。
本发明实施例至少包括以下有益效果:
本发明实施例提供的时空数据的存储方法、装置、数据库引擎和存储介质。该方法首先获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息,再将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内,然后对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;将最下一个层次的网格中数据量达到所述第一标准值的网格确定为一个分区,最后将全部分区中空间对象的时空数据存储至分布式数据库中。基于该方法和装置,其可以将在空间位置上邻近的空间对象的时空数据分配至同一个分区中,从而实现邻近存储,并且实现每个分区内的数据量相对均衡,可以提高存储效率和检索效率。
本发明实施例的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明实施例的研究和实践而为本领域的技术人员所理解。
附图说明
图1为本发明一个实施例提供的时空数据的存储方法的流程图。
图2A为本发明一个实施例提供的1阶Hilbert填充曲线的示意图。
图2B为本发明一个实施例提供的2阶Hilbert填充曲线的示意图。
图2C为本发明一个实施例提供的3阶Hilbert填充曲线的示意图。
图3A为本发明一个实施例提供的基于Hilbert填充曲线对初分网格进行层次分解的示意图。
图3B为本发明一个实施例提供的层次分解得到的多层次网格的平面投影示意图。
图3C为本发明一个实施例提供的分区示意图。
图4为本发明又一个实施例提供的分区示意图。
图5为本发明另一个实施例提供的基于3阶Hilbert曲线对第一个层次的网格进行填充时的示意图。
图6为本发明另一个实施例提供的基于某城市某一天时空数据所构造的时空立方体的示意图。
图7为本发明另一个实施例提供的Hbase分布式数据库的行键编码结构。
图8为本发明另一个实施例提供的时空数据的存储方法与对比方案的存储速度对比图。
图9为本发明另一个实施例提供的时空数据的存储方法在结合预分区机制和不结合预分区机制的情况下的检索速度对比图。
图10为本发明一个实施例提供的时空数据的存储装置的结构示意图。
图11为本发明一个实施例提供的电子设备的结构示意图。
具体实施方式
下面结合附图对本发明实施例做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
时空数据常常是非均质的密集分布,这就导致在对时空数据进行空间划分时,很难保证数据量的均衡分配。基于此,本发明实施例提供了时空数据的存储方法,其通过将时空数据的空间范围进行逐层的划分,将数据密集分布的网格分解为多个层次,从而避免局部网格的数据过密,再对数据量过小的网格进行合并,生成各分区,再以分区为单位对时空数据进行存储,其可以实现对于时空数据的空间划分,从而保证空间邻近的数据划分至同一个分区,实现邻近存储,同时还可以保证每个分区中的数据量相对均衡,进而提高存储效率和检索效率。
图1为本发明实施例提供的时空数据的存储方法的流程图,由具有处理能力的系统、服务端设备或时空数据的存储装置执行。如图1所示,该方法包括:
步骤110,获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息。
这里,时空数据可以是轨迹数据或者基于轨迹数据所生成的OD流数据,还可以是其他类型的时空数据,本发明实施例对此不做具体限制。时空数据至少包括空间对象的位置信息。空间对象的位置信息为可以描述空间对象在地理空间中位置的信息。例如,对于轨迹数据而言,空间对象的位置信息可以是采样点所采集的经纬度坐标;对于OD流数据而言,可以确定一个代表性的点来代表OD流的位置信息,该代表性的点可以是OD流的起点或OD流的中点。
步骤120,将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内。
本步骤中,首先将时空数据的空间范围划分成多个初分网格,生成第一个层次的网格,之后针对第一个层次的网格,进行多层次的分解,所生成的每个层次中的每个网格的数据量均低于预设的第一标准值。经过层次分解,可以得到一个由多层次网格所组成的倒置金字塔形结构,在该多层次网格中,除最下一个层次外,每个网格的数据量被划分至预设的第一标准值以下,从而避免部分网格的数据过密。本步骤对少数网格进行层次分解,可以避免对整个空间范围进行密集划分,可以有效减少计算时间,提升计算效率。
在一些实施例中,为简化操作,可以将时空数据的空间范围划分为空间范围相等的多个初分网格,并且在对上一个层次的网格中的任一个网格进行划分时,也将该网格划分为空间范围相等的多个子网格。
其中,第一标准值可以根据空间对象的时空数据总量以及初分网格的数量确定。例如,可以将空间对象的时空数据总量除以初分网格的数量,计算每个初分网格的数据量平均值,以该平均值作为第一标准值,作为初分网格的层次分解和网格合并的依据。在每条时空数据的数据量比较接近的情况下,任一个层次的任一个网格的数据量与相应网格中空间对象的数量具有对应关系,即网格中空间对象数越多,数据量越大。因此,在一些示例中,可以使用空间对象数来代表数据量。第一标准值可以根据空间对象总数除以初分网格的数量得到。在对初分网格进行层次分解时,可以将每个层次中空间对象数超过第一标准值的网格划分为多个子网格,从而得到下一个层次的网格。
预设的停止划分条件可以是层数限制。可以根据当前最下一个层次的网格中数据量的情况对层数进行限制。例如,当前最下一个层次中每个网格中数据量虽然大于第一标准值,但是与第一标准值之间的差距在一个预设的区间内(如0.1%),则可以将当前层次作为层数的限制,不再对当前层次中的网格进行下一个层次的划分。可以将预设的层数设定为5层。预设的停止划分条件还可以根据当前最下一个层次的网格中数据量进行确定,例如,将预设的停止划分条件设定为:确定当前最下一个层次中数据量超过第一标准值的网格(简称为超标网格),每个超标网格的数据量与第一标准值之间的差距均在一个预设的区间内(如0.1%,该区间可以根据需要进行设定)。当当前最下一个层次的网格满足上述预设的停止划分条件,则停止对相应层次中网格的划分。
在一些实施例中,步骤120进一步包括:将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格,通过具有第一预设阶数的Hilbert 填充曲线对第一个层次的网格进行填充,生成第一个层次中每个网格的 Hilbert编码;基于上一个层次中每个网格的Hilbert编码,顺序地访问相应层次中的每个网格,将数据量超过所述第一标准值的每个网格划分为多个子网格,生成下一个层次的每个单元格网,所述下一个层次的网格由至少一个单元格网组成;通过具有第二预设阶数的Hilbert填充曲线对下一个层次中每个单元格网进行填充,生成下一个层次中每个单元格网中每个网格的Hilbert编码。
图2A示出了本发明实施例提供的1阶Hilbert曲线;图2B示出了本发明实施例提供的2阶Hilbert曲线;图2C示出了本发明实施例提供的3阶 Hilbert曲线。Hilbert填充曲线采用四分模式递归划分填充区域,采用一维连续的直线填充二维甚至高维空间。基于Hilbert填充曲线的延伸方向,可以为填充区域生成唯一编码,Hilbert编码相近的填充区域在二维甚至高维空间中具有空间邻近性。因此,基于Hilbert填充曲线实现对于空间对象的时空数据的划分,有助于实现空间邻近的时空数据划分至同一个分区中,进而实现邻近存储。
具体地,将时空数据的空间范围划分为2k0×2k0个初分网格,其中,k0 表示用于填充第一个层次网格的Hilbert曲线的阶数,即第一预设阶数。选择一个初始的低阶Hilbert填充曲线,基于Hilbert填充曲线编码规则,对第一个层次中的每个网格进行编码,建立网格编码与空间对象之间一对多的关系。在对第一个层次的网格进行编码过程中,统计第一个层次中每个网格的数据量。按照Hilbert编码顺序逐一访问第一个层次的网格,将第一个层次中每个网格中的数据量与第一标准值进行比较,找到数据量超过第一标准值的网格(简称为超标网格),将每个超标网格划分为多个子网格,生成单元格网,第二个层次的网格由至少一个单元格网组成。之后,再使用具有第二预设阶数的Hilbert填充曲线对每个单元格网进行填充,生成Hilbert编码,并统计第二个层次中每个单元格网中每个网格的数据量。再按照Hilbert编码顺序逐一访问第二个层次的网格,将第二个层次中每个网格中的数据量与第一标准值进行比较,将数据量超过第一标准值的网格划分为多个子网格,针对第二个层次中每个超标网格生成单元格网,构成第三个层次的网格。依据上述过程,对上一个层次中数据量超过第一标准值的网格都进行划分,生成下一个层次的网格,从而实现对于初分网格的层次分解。
图3A示出了本发明实施例提供的基于Hilbert填充曲线对初分网格进行层次分解的示意图。图3B示出了层次分解得到的多层次网格的平面投影示意图。假设初分网格的数量为4,使用1阶Hilbert填充曲线进行填充,4个初分网格的编码分别为0,1,2,3。依据编码对4个初分网格进行访问,假设0号和1号初分网格中的数据量超过第一标准值,分别将0号和1号初分网格划分为4个子网格,分别得到针对1号初分网格的单元格网和第二层次的网格和针对1号初分网格的单元格网,这2个单元格网构成第二层次的网格。再使用1阶Hilbert填充曲线对针对0号初分网格的单元格网和针对1号初分网格的单元格网进行填充,编码分别为00,01,02,03和10,11,12,13。依据编码对第二层次中8个网格进行访问,假设10号网格中的数据量超过第一标准值,再将其划分为4个子网格,生成10号网格的单元格网,得到第三层次的网格。再使用1阶Hilbert填充曲线对10号网格的单元格网进行填充,编码分别为 100,101,102,103。最终生成一个大致呈倒置金字塔形状的网格结构。需要说明的是,图3A和图3B中Hilbert编码仅为示例,实际多层次网格中每个网格的编码应该为基于Hilbert编码规则所生成的编码。
在一些示例中,除第一个层次的网格,其他每个层次中的单元格网均为根据四分法生成的,即将上一个层次中需要划分的网格等分为4个子网格,该4个子网格即构成一个单元格网。上一个层次中需要划分的网格个数即下一个层次中单元格网的个数。
在一些实施例中,所述第一预设阶数为3阶;所述第二预设阶数为1阶。即,采用3阶Hilbert填充曲线对第一个层次的网格进行填充,采用1阶填充曲线对除第一个层次之外的其他层次中单元格网进行填充。
步骤130,对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区。
经过步骤120的层次分解,所得到的多层次网格中出现部分网格中数据量过小的情况,因此,本步骤中再对每个层次的网格中进行逐一的检查,将数据量未达到第一标准值的相邻网格进行合并,从而形成数据量达到第一标准值的分区。图4示出了分区示意图。如图4所示,在某一个层次的网格中包含4个网格,这4个网格彼此相邻,分别编号为1,2,3,4,检查1号和2号网格的数据量未达到第一标准值,二者的数据量相加则正好超过第一标准值,则将1号、2号网格合并成为一个分区(图4中用斜线填充的区域),再检查 3号和4号网格中的数据量未达到第一标准值,二者的数据量相加则正好超过第一标准值,则将该3号和4号网格合并为一个分区(图4中用竖线填充的区域)。经过网格合并后,该层次被划分为2个分区,每个分区包含相应网格中空间对象的时空数据。
应该理解的是,由于分区是经过相邻网格的合并得到的,分区的空间范围即相应网格的空间范围之和,不同分区的空间范围的面积可能是相同的或者不同的。
在一些实施例中,步骤130进一步包括:基于第一个层次中每个网格的 Hilbert编码,顺序地访问所述第一个层次中每个网格,在访问至所述第一个层次中任一个被划分网格时,进入基于被划分网格生成的第二个层次的单元格网中;基于上一个层次中任一个单元格网中每个网格的Hilbert编码,顺序地访问上一个层次中相应单元格网中的每个网格,在访问至任一个被划分网格时,进入基于被划分网格生成的下一个层次的单元格网中,基于下一个层次中相应单元格网中每个网格的Hilbert编码,顺序地访问下一个层次中相应单元格网中每个网格;如下一个层次中相应单元格网中每个网格均未被再次划分,则返回至所述当前格网的上一个层次中,继续访问上一个层次中被划分网格的下一个网格;如完成对下一个层次中相应单元格网中每个网格的访问,则返回至上一个层次中,继续上一个层次中被划分格网的下一个网格;其中,在对多个层次的网格的访问过程中,不统计被划分网格的数据量,依据网格的访问顺序,将数据量未达到所述第一标准值的网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区。
在对网格合并的过程中,基于步骤120所生成的Hilbert编码对多层次网格进行访问,可以保证将空间上相邻的网格合并,进而保证空间邻近的时空数据被划分至同一个分区。
具体地,在基于第一个层次中每个网格的Hilbert编码,顺序地访问每个网格的过程中,在访问至被划分网格时,进入基于该被划分网格生成的第二个层次的单元格网中,之后基于该单元格网中每个网格的Hilbert编码进行顺序访问,假设该单元网格中每个网格都未被划分,而且完成对该单元格网中每个网格的访问,则返回至第一个层次中,继续对第一个层次中的下一个网格进行访问。当在第一个层次中访问到下一个被划分网格,进入基于该被划分网格生成的第二个层次的单元格网中,之后基于该单元格网中每个网格的Hilbert编码进行顺序访问,假设该单元格网中又存在一个被划分网格,则再进入该被划分网格的第三个层次的单元格网中,对第三个层次的单元格网中每个网格进行访问,访问完成后,先返回到第二个层次中,完成对第二个层次中全部网格的访问,再返回到第一个层次中,继续对第一个层次中的下一个网格进行访问。
基于对多层次网格的访问顺序,对每个网格的数据量进行逐一判断,将数据量未达到第一标准值的逐一合并,直至合并构成的分区中的数据量达到第一标准值,停止将下一个网格合并进已经合并构成的分区内,完成对分区的划分。并且,对于最下一个层次的网格,将数据量达到第一标准值的网格直接确定为独立的分区。上述过程可以保证将空间上相邻的网格合并,进而保证空间邻近的时空数据被划分至同一个分区。
仍以图3A为例,基于Hilbert编码对第一个层次中4个初分网格进行顺序访问,最大层数为3。先访问至0号网格,0号网格为被划分网格,因此进入0号网格在第二个层次中的单元格网(这里,使用被划分网格的编码标记相应的单元格网,因此,0号网格的单元格网为0号),依据00,01,02,03的编码顺序对0号单元格网中的4个网格进行访问。假设00,01号网格的数据量均小于第一标准值,二者累加之后超过第一标准值,则将00,01号网格合并为一个分区,02,03号网格的数据量均小于第一标准值,二者累加之后超过第一标准值,将02,03号网格合并为一个分区。之后返回至第一个层次中,继续对1号网格进行访问。依据10,11,12,13的编码顺序对1号单元格网中的4 个网格进行访问。10号为被划分网格,再进入10号在第三个层次中的单元格网,依据100,101,102,103的编码顺序对10号单元格网中的4个网格进行访问。假设100,101号网格的数据量均小于第一标准值,二者累加之后超过第一标准值,则将100,101号网格合并,构成一个新的分区,再访问102号网格,其数据量超过第一标准值,则将102号网格作为独立的分区,再访问 103号网格,其数据量也超过第一标准值,则将103号网格作为独立的分区。之后返回至第二个层次中,对11,12,13号网格依次访问,假设11,12,13号网格均小于第一标准值,且累加之后可以超过第一标准值,则将11,12,13号网格合并,构成一个新的分区。再返回至第一个层次中,继续访问至2号网格, 2号网格的数量小于第一标准值,且3号网格的数据量小于第一标准值,二者数据量相加超过第一标准值,则将2,3号网格合并为一个分区。
图3C为针对图3A所建立的多层次网格的分区示意图,图3C中每个分区内的数字为分区编码。如图3C所示,时空数据的整个空间范围被划分为7 个分区,每个分区分布有多个空间对象的时空数据。
步骤140,将全部分区中空间对象的时空数据存储至分布式数据库中。
具体地,经过步骤120的层次分解和步骤130的网格合并,空间邻近的数据被划分至同一个分区中,在以分区为单位对时空数据进行组织管理时,空间邻近的数据可以被邻近存储,同时每个分区中所分布空间对象的时空数据的数据量相对均衡,进而可以有效提高存储效率和检索效率。
在一些示例中,将空间邻近的数据划分至同一个分区中,在以分区为单位对时空数据进行组织管理时,空间邻近的数据可以被邻近存储,同时每个分区中所分布空间对象的时空数据的数据量相对均衡,还可以解决分布式数据库中存储倾斜的问题。尤其是在结合分布式数据库的预分区机制的情况下,可以进一步提高对于时空数据的存储效率和检索效率,解决分布式数据库的写入热问题。
在一些实施例中,所述时空数据包括空间对象的时间信息;所述方法还包括:根据每个分区的生成顺序,生成每个分区的分区编码,建立所述每个分区的分区编码与每个分区的位置信息之间的映射关系;根据所述空间对象的时间信息以及所述空间对象所在分区的分区编码,生成索引数据。
步骤130中,基于步骤120所生成的Hilbert编码对多层次网格进行访问,对每个层次中的相邻网格进行合并处理,从而实现分区的建立。其中,多层次网格的访问顺序是与多层次网格中每个网格的空间位置相匹配的,即先后访问的两个网格在空间上是相邻的。因此,分区的生成顺序也将反映分区的空间位置,即先后生成的两个分区在空间上是相邻的。基于此,在一些实施例中,根据分区的生成顺序,生成分区的分区编码,分区编码顺序排列的两个分区在空间上也是相邻的。这里,可以直接使用阿拉伯数字顺序地为分区编号,例如1,2,3···。如图3C所示,时空数据的空间范围最终被划分为7个分区,根据分区生成的顺序为分区赋予1-7的分区编码。还将每个分区编码与每个分区的位置信息建立映射关系。分区的位置信息可以使用分区边界上代表性点的坐标表示,例如将分区的边界上的顶点以及分区的中心点作为代表性点。
进一步地,可以根据空间对象的时间信息和空间对象所在分区的分区编码生成索引数据。在对时空数据进行检索时,可以提供空间对象的位置信息,将空间对象的位置信息与分区的位置信息进行匹配,找到空间对象所在分区,确定分区编码,再在分区编码所对应的分区中查找时空数据。
在一些示例中,所使用的分布式数据库可以是分布式数据库Hbase。索引数据可以是分布式数据库Hbase的行键Rowkey。具体地,可以将行键 Rowkey设计为由分区编码+空间对象ID+年月日+时分编码组成。Hbase分布式数据库的存储表结构可以进一步由行键Rowkey、列族ColumnFamily和时间戳TimeStamp组成,列族包括空间对象编号,分区编码,空间对象的起点位置,终点位置,起始时间和终止时间。在一个例子中,将分区编码和分区的位置信息存储在一个信息表中。在使用空间对象的起点位置在Hbase分布式数据库中进行检索时,首先在信息表中将空间对象的位置信息与分区的位置信息进行匹配,找到空间对象所在分区,确定分区编码;再根据分区编码,确定包含该分区编码的行键,进而在该行键相关的存储表中找到与空间对象起点位置相匹配的时空数据。本发明实施例将分区编码引入至行键中,可以提高对于时空数据的检索效率。
在一些实施例中,所述分布式数据库包括多个存储节点;所述将全部分区中空间对象的时空数据存储至分布式数据库中,包括:将全部分区中空间对象的时空数据分别存储至所述多个存储节点,其中,在每个存储节点中存储的空间对象的时空数据所属于的多个分区的分区编码是连续排列的。
由于分区编码与分区的空间位置相关,分区编码顺序排列的两个分区在空间位置上也是相邻的。因此,在向分布式数据库的多个存储节点存储时空数据时,保证向每个存储节点存储的多个分区的分区编码是连续的,即可以保证将空间上邻近的分区存储至同一个存储节点中,进而提高对于时空数据的存储效率和检索效率。
进一步地,所述将全部分区中空间对象的时空数据存储至所述多个存储节点,还包括:当每个存储节点中的数据量达到预设的第二标准值,则停止向相应存储节点存储空间对象的时空数据。根据第二标准值对存储节点中的数据量进行限制,可以保证每个存储节点中所存储空间对象的时空数据的数据量相对均衡。可以根据存储节点的存储性能对第二标准值进行设定。第二标准值可以通过将时空数据的数据总量除以存储节点个数得到。在一些情况下,每条时空数据的数据量比较接近,时空数据的数据量与空间对象的数量具有对应关系,即空间对象数越多,数据量越大。因此,可以使用空间对象数来代表数据量,第二标准值可以根据空间对象总数除以存储节点的数量得到。
在一些实施例中,所述方法还包括:基于预设的时间单位,将所述时空数据的时间范围划分为多个时间片,其中,每个时间片包含所述全部分区中一个或多个分区中空间对象的时空数据;基于每个时间片的时空数据,构造每个时空立方体;其中,基于每个时间片所包含的每个分区中空间对象的时空数据,构造每个时空立方体中的每个条柱。
时空立方体(STC)使用Z轴表示时间,用X轴和Y轴表示地理空间,其可以对时空数据进行一体化的组织、存储和分析,提高对于时空数据的存储、检索效率,并可以提高对于时空数据的可视化效率。通常来说,时空立方体会对时空数据在空间维度上进行细粒度的划分。然而,细粒度的划分会破坏已经建立起来的存储结构,影响对于时空数据的组织管理效率。
基于此,本发明实施例首先基于预设的时间单位将时空数据的时间范围划分为多个时间片,之后将每个时间片所包含的每个分区构造每个条柱,从而基于每个时间片的时空数据构造出每个时空立方体。本发明实施例中,针对时空数据在空间维度上采用粗粒度划分,将一个分区构造成一个条柱,保证属于同一个分区的时空数据在同一个条柱中展示,可以在不破坏已建立起来的存储结构的基础上进一步提高对于时空数据的组织管理效率。此外,在对时空数据应用时,经常分析某一个时间片或者某几个时间片的时空数据,因此,将每个时间片的时空数据作为一个独立时空立方体,可以提高时空数据在时间维度上的组织管理效率,并可以提高对于时空数据的可视化效率。预设的时间单位可以根据需要进行设定,例如,可以以天为时间单位,将每天的时空数据构造成一个时空立方体。
综上所述,本发明实施例提供了时空数据的存储方法,首先获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息,再将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的层数,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内,然后对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;将最下一个层次的网格中数据量达到所述第一标准值的网格确定为一个分区,最后将全部分区中空间对象的时空数据存储至分布式数据库中。基于该方法,其可以将在空间位置上邻近的空间对象的时空数据分配至同一个分区中,从而实现邻近存储,并且每个分区内的数据量相对均衡,可以提高存储效率和检索效率。
以下提供一个具体的实施场景,以进一步说明本发明实施例提供的时空数据的存储方法。
1研究区域及空间数据集
本实施例采用某城市巡游车订单数据,选取2019年5月31日的数据,数据总数为248161条,每条数据包含内容见表1。由于设备原因,数据存在经纬度信息不完整、上车经纬度不在研究区域范围内、数据漂移及坐标转换等问题。首先对数据进行清洗,筛选掉经纬度信息不完整、上车经纬度不在研究区域范围内的对象,再对经纬度进行修正。处理后的数据共包含241556 条信息,清洗效率达97.34%。
表1数据内容
2网格划分
2.1网格划分过程设计
某城市用地类型丰富,不同功能区呈现各异的人口时空聚散规律,表现为非匀质的密集分布。因此,基于Hilbert填充曲线实现对于空间对象的时空数据的划分,有助于实现空间邻近的时空数据划分至同一个分区中,进而实现邻近存储。
顾及空间数据集的空间范围,选择一个初始的低阶Hilbert填充曲线对第一个层次的网格填充。将整个研究区域(即时空数据的空间范围)划分为2k0×2k0个初分网格,其中,k0表示用于填充第一个层次的网格的Hilbert曲线的阶数,即第一预设阶数。图5示出了本发明实施例提供的基于3阶Hilbert曲线对第一个层次的网格进行填充的示意图。统计每个初分网格内的空间对象数。接下来,基于Hilbert填充曲线编码规则为每个初分网格进行编码,建立网格编码与空间对象之间一对多的关系。按照Hilbert编码顺序逐一访问第一个层次的网格,将第一个层次中每个网格中的数据量与第一标准值进行比较,找到数据量超过第一标准值的网格(简称为超标网格),将每个超标网格依照四分法划分为4个子网格,生成单元格网,第二个层次的网格由至少一个单元格网组成。之后,再使用具有1阶Hilbert填充曲线对每个单元格网进行填充,生成Hilbert编码,并统计第二个层次中每个单元格网中每个网格的数据量。再按照Hilbert编码顺序逐一访问第二个层次的网格,将第二个层次中每个网格中的数据量与第一标准值进行比较,将数据量超过第一标准值的网格划分为多个子网格,针对第二个层次中每个超标网格生成单元格网,构成第三个层次的网格。依据上述过程,对上一个层次中数据量超过第一标准值的网格都进行划分,生成下一个层次的网格,从而实现对于初分网格的层次分解。当达到预设的层数,则停止对当前层次的网格进行划分。
2.2网格划分结果
选取第一预设阶数k0=3,则初分网格的个数为64个。将空间对象总数除以初分网格的数量,计算每个初分网格的空间对象平均值,将该平均值作为第一标准值。本发明实施例所计算的第一标准值为2774。基于2.1节的网格划分过程对初分网格进行层次分解,其结果见表2。将初分网格称为第一个层次,每划分出一个层次,则多层次网格的层数加1。
表2网格划分结果
层数 | 网格数 | 空间对象数大于第一标准值的网格数 |
1 | 8*8 | 8 |
2 | 16*16 | 18 |
3 | 32*32 | 22 |
4 | 64*64 | 6 |
5 | 128*128 | 1 |
从表2可知,当层数达到5层时,空间对象数大于第一标准值的网格数仅有1个,而且该网格中空间对象数与第一标准值非常接近,因此,可以将预设层数设置为5。
3分区建立以及分区编码生成
在所建立的多层次网格中,部分网格内空间对象数远小于第一标准值,为了实现数据量的均衡分布,将空间对象数小于第一标准值的多个相邻网格进行合并,以生成新的分区。具体地,基于第一个层次中每个网格的Hilbert 编码,顺序地访问第一个层次中每个网格,在访问至第一个层次中任一个被划分网格时,进入基于被划分网格生成的第二个层次的单元格网中;基于上一个层次中任一个单元格网中每个网格的Hilbert编码,顺序地访问上一个层次中相应单元格网中的每个网格,在访问至任一个被划分网格时,进入基于被划分网格生成的下一个层次的单元格网中,基于下一个层次中相应单元格网中每个网格的Hilbert编码,顺序地访问下一个层次中相应单元格网中每个网格;如下一个层次中相应单元格网中每个网格均未被再次划分,则返回至所述当前格网的上一个层次中,继续访问上一个层次中被划分网格的下一个网格;如完成对下一个层次中相应单元格网中每个网格的访问,则返回至上一个层次中,继续上一个层次中被划分格网的下一个网格;其中,在对多个层次的网格的访问过程中,不统计被划分网格的数据量,依据网格的访问顺序,将数据量未达到所述第一标准值的网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区。
基于对多层次网格的访问顺序,对每个网格的数据量进行逐一判断,将数据量未达到第一标准值的逐一合并,直至合并构成的分区中的数据量达到第一标准值,停止将下一个网格合并进已经合并构成的分区内,完成对分区的划分。并且,对于最下一个层次的网格,将数据量达到第一标准值的网格直接确定为独立的分区。根据每个分区的生成顺序,生成每个分区的分区编码,建立每个分区的分区编码与每个分区的位置信息之间的映射关系。直接使用阿拉伯数字顺序地为分区编号,例如01,02,03···。分区的位置信息使用分区边界上代表性点的坐标表示,例如将分区的边界上的顶点以及分区的中心点作为代表性点。
经过的对初分网格的层次分解和对多层次网格的合并处理,空间邻近的数据被划分至同一个分区中,所生成的分区个数为85个。不同分区所覆盖的空间范围的面积可能是不同的,但是其所包含的时空数据的数据量则是相对均衡的。在以分区为单位对时空数据进行组织管理时,空间邻近的数据可以被邻近存储,同时每个分区中所分布空间对象的时空数据的数据量相对均衡,进而可以有效提高存储效率和检索效率。
4时空编码模型构造
4.1时空立方体构造
时空立方体(STC)使用Z轴表示时间,用X轴和Y轴表示地理空间,其可以对时空数据进行一体化的组织、存储和分析,提高对于时空数据的存储、检索效率,并可以提高对于时空数据的可视化效率。通常来说,时空立方体会对时空数据在空间维度上进行细粒度的划分。然而,细粒度的划分会破坏已经建立起来的存储结构,影响对于时空数据的组织管理效率。
本发明实施例首先基于预设的时间单位将时空数据的时间范围划分为多个时间片,之后将每个时间片所包含的每个分区构造每个条柱,从而基于每个时间片的时空数据构造出每个时空立方体。本发明实施例中,针对时空数据在空间维度上采用粗粒度划分,将一个分区构造成一个条柱,保证属于同一个分区的时空数据在同一个条柱中展示,可以在不破坏已建立起来的存储结构的基础上进一步提高对于时空数据的组织管理效率。
此外,在对时空数据应用时,经常分析某一个时间片或者某几个时间片的时空数据,因此,将每个时间片的时空数据作为一个独立时空立方体,可以提高时空数据在时间维度上的组织管理效率,并可以提高对于时空数据的可视化效率。预设的时间单位可以根据需要进行设定。
具体地,本发明实施例将某城市的时空数据的整个时间周期分割成以天为单位,为每个时间片构造一个时空立方体,时间轴采用每分钟编码,用 0-1439表示。图6示出了本发明实施例提供的一个时空立方体的示意图。图 6中,每个分区的时空数据构造出每个条柱,条柱由立体轮廓线表示,不同条柱中的时空数据点使用不同形状的符号表示。
4.2分布式数据库Hbase的行键设计
分布式数据库HBase是高可靠性、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构化的松散数据。
经过对初分网格的层次分解和对多层次网格的合并处理,空间邻近的数据被划分至同一个分区中。在以分区为单位对时空数据进行组织管理时,空间邻近的数据可以被邻近存储,同时每个分区中所分布空间对象的时空数据的数据量相对均衡。根据所生成的分区编码,对分布式数据库Hbase的行键进行设计。
图7示出了本发明实施例提供的分布式数据库Hbase的行键编码结构。如图7所示,本发明实施例中行键Rowkey设计为由分区编码+车牌号+上车时间的年月日+上车时间的时分编码组成,保证每个表中Rowkey值的唯一性。 Hbase分布式数据库的存储表结构由行键Rowkey、列族ColumnFamily和时间戳TimeStamp组成,列族包括车牌号CAR_NO,分区编码M(O),乘客上车经纬度坐标(GETON_LONGITUDE、GETON_LATITUDE),乘客下车经、纬度坐标(GETOFF_LONGITUDE、GETOFF_LATITUDE),乘客上、下车时间(GETON_DATE、GETOFF_DATE)。此外,还根据分布式数据库Hbase的预分区机制,将时空数据存储至指定的预分区Region。
本实施例中分布式数据库Hbase包括3个存储节点。将空间对象数除以存储节点数计算第二标准值。将全部分区所包含的时空数据存储至3个存储节点中。每个存储节点所存储的多个分区的分区编码连续排列,当每个存储节点中的数据量达到预设的第二标准值,则停止向相应存储节点存储空间对象的时空数据。上述做法可以保证将空间上邻近的分区存储至同一个存储节点中,并且不同存储节点中所存储空间对象的时空数据的数据量相对均衡,进而提高对于时空数据的存储效率和检索效率。
5实验与结果分析
5.1实验运行环境
本实施例采用分布式数据库由1个主节点和2个从节点构成。每个服务器的配置为CUP英特尔Core i7-9700@3.00GHz八核、内存16GB,操作系统为linux下CentOS6.9系统。在每个节点分别安装JDK、Spark、Hadoop、 HBase以及Zookeeper框架,各框架版本见表3。
表3框架版本
框架名称 | 版本号 |
JDK | JDK1.8 |
Spark | Spark-2.2.0-bin-2.6.0-cdh5.14.0 |
Hadoop | hadoop-2.6.0-cdh5.14.0 |
HBase | hbase-1.2.0-cdh5.14.0 |
Zookeeper | zookeeper-3.4.5-cdh5.14.0 |
5.2实验结果与分析
为验证本发明实施例所提供的时空数据的存储方法在存储速度和检索速度两个方面的提升,针对两个方面设计两个实验。两个实验中均设置两个方案。
5.2.1存储速度对比实验
在上述实验环境中,分别采用两种方案进行批量存储实验。方案一为对比方案。方案一中,采用传统方式向分布式数据库Hbase存储时空数据,分布式数据库Hbase中行键Rowkey为数据顺序编码,存储时不采用预分区机制。方案二中,分布式数据库Hbase中行键Rowkey采用4.2节设计的行键结构,包含分区编码,并且根据数据集和存储节点数设置预分区,将采用本发明实施例所提供的时空数据的存储方法与分布式数据库Hbase预分区机制相结合存储时空数据。分别生成5万、10万、15万、20万条、25万条大批量数据加以验证。
图8为本发明实施例所提供的时空数据的存储方法与对比方案的存储速度对比图。如图8所示,方案一中,随着待存储数据量的增加,数据存储速度几乎呈直线上升趋势;方案二中,随着待存储数据量的增加,数据存储速度维持在相对稳定的状态。在待存储数据量的数量级为5万时,方案一的数据存储速度优于方案二,其原因在于,方案二结合预分区机制,Hbase会先完成资源分配再存入数据,方案一未使用预分区机制,可以直接存入数据,针对小数量级的数据,直接存入数据速度更快,而预分区机制则导致耗时增加。但是,随着待存储数据量的数量级增加,方案二的存储速度明显优于方案一。由此可知,本发明实施例所提供的时空数据的存储方法可以与分布式数据库的预分区机制相结合,进而有效避免HBase不断自我分裂造成运算时间的消耗,可以实现存储资源的均衡分配,解决分布式数据库的写入热问题。
5.2.2检索速度对比实验
在上述实验环境中,分别采用三种方案进行批量存储实验。方案一中,采用本发明实施例所提供的时空数据的存储方法存储时空数据,分布式数据库Hbase中行键Rowkey采用4.2节设计的行键结构,包含分区编码,不采用分布式数据库Hbase预分区机制。方案二中,分布式数据库Hbase中行键 Rowkey采用4.2节设计的行键结构,包含分区编码,并且根据数据集和存储节点数设置预分区,将采用本发明实施例所提供的时空数据的存储方法与分布式数据库Hbase预分区机制相结合存储时空数据。方案三中,采用传统方式向分布式数据库Hbase存储时空数据,分布式数据库Hbase中行键Rowkey 为数据顺序编码,存储时不采用预分区机制。
针对数据量为5万、10万、15万、20万条的4批时空数据,分别使用上述三种方案进行存储。针对所存储的数据,设定三种检索条件。检索条件分别为:行键固定的单条数据(简称一条数据查询),行键固定的范围数据(简称一个范围查询)和行键模糊的区域数据(简称一个区域查询)。多次实验取平均值,对比检索速度。
图9示出了本发明实施例提供的时空数据的存储方法在结合预分区机制和不结合预分区机制的情况下的检索速度对比图,即方案一和方案二的检索速度对比图。如图9所示,在三种检索条件下,针对4个不同数据量的存储数据,本发明实施例提供的时空数据的存储方法在结合预分区机制的情况下,其检索速度能够进一步得到提升。另外,图9中未出方案三的检索速度,其原因在于,针对方案三所存储的数据进行检索时,只能通过在分布式数据库中遍历的方式进行检索,检索速度非常慢,而方案一和方案二的检索速度均大幅度快于方案三的检索速度。
5.3可视化应用分析
采用Vue3框架搭建可视化系统,主要制作两个界面,分别是时空轨迹可视化界面和OD聚集逆向热力图展示界面。
5.3.1时空轨迹查询
在时空轨迹检索界面,输入用户ID(本实施例中为车牌号),经后台转码,与分布式数据库中已存储的数据进行匹配。可以快速匹配出该用户的一条数据及多条数据,并将输出数据绘制为用户一天的时空行程轨迹。通过该时空行程轨迹检索界面,可以有效辨别出空间轨迹相同而时间属性不同的行程轨迹,并为巡游车的各运行状态赋值,可以依据轨迹的颜色和长度对车主一天的运营状况加以判断。
5.3.2逆向热力图展示
逆向热力图展示界面划分为两部分,左侧为O点逆向热力图展示,右侧为D点逆向热力图展示。在mapbox地图上,使用逆向热力图分别展示某城市人员出行的出发热点和汇聚热点。通过对人员的疏散聚集热点观察,可以研究这些区域的交通状况,判定道路的拥堵状况,对网络道路的整体功能和各级道路的分流作用进一步评价。
综上所述,本发明实施例所提供的时空数据的存储方法基于Hilbert填充曲线实现对于空间对象的时空数据的划分,可以将在空间位置上邻近的空间对象的时空数据分配至同一个分区中,从而实现邻近存储,并且通过对初分网格的层次分解和多层次网格的合并处理,保证每个分区内的数据量相对均衡,进而提高存储效率和检索效率。
图10示出了本发明实施例提供的时空数据的存储装置的结构示意图。如图10所示,该时空数据的存储装置1000,包括:时空数据获取模块1010,用于获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息;网格划分模块1020,用于将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内;分区确定模块1030,用于对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区;时空数据存储模块1040,用于将全部分区中空间对象的时空数据存储至分布式数据库中。
在一些实施例中,所述网格划分模块,具体用于:
将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格,通过具有第一预设阶数的Hilbert填充曲线对第一个层次的网格进行填充,生成第一个层次中每个网格的Hilbert编码;基于上一个层次中每个网格的 Hilbert编码,顺序地访问相应层次中的每个网格,将数据量超过所述第一标准值的每个网格划分为多个子网格,生成下一个层次的每个单元格网,所述下一个层次的网格由至少一个单元格网组成;通过具有第二预设阶数的 Hilbert填充曲线对下一个层次中每个单元格网进行填充,生成下一个层次中每个单元格网中每个网格的Hilbert编码;
所述分区确定模块,具体用于:
基于第一个层次中每个网格的Hilbert编码,顺序地访问所述第一个层次中每个网格,在访问至所述第一个层次中任一个被划分网格时,进入基于被划分网格生成的第二个层次的单元格网中;基于上一个层次中任一个单元格网中每个网格的Hilbert编码,顺序地访问上一个层次中相应单元格网中的每个网格,在访问至任一个被划分网格时,进入基于被划分网格生成的下一个层次的单元格网中,基于下一个层次中相应单元格网中每个网格的Hilbert编码,顺序地访问下一个层次中相应单元格网中每个网格;如下一个层次中相应单元格网中每个网格均未被再次划分,则返回至所述当前格网的上一个层次中,继续访问上一个层次中被划分网格的下一个网格;如完成对下一个层次中相应单元格网中每个网格的访问,则返回至上一个层次中,继续上一个层次中被划分格网的下一个网格;
其中,在对多个层次的网格的访问过程中,不统计被划分网格的数据量,依据网格的访问顺序,将数据量未达到所述第一标准值的网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区。
在一些实施例中,所述第一预设阶数为3阶;所述第二预设阶数为1阶。
在一些实施例中,所述时空数据包括空间对象的时间信息;所述装置还包括:
分区编码生成模块,用于根据每个分区的生成顺序,生成每个分区的分区编码,建立所述每个分区的分区编码与每个分区的位置信息之间的映射关系;
索引数据生成模块,用于根据所述空间对象的时间信息以及所述空间对象所在分区的分区编码,生成索引数据。
在一些实施例中,所述分布式数据库包括多个存储节点;所述时空数据存储模块,具体用于:
将全部分区中空间对象的时空数据分别存储至所述多个存储节点,其中,在每个存储节点中存储的空间对象的时空数据所属于的多个分区的分区编码是连续排列的。
在一些实施例中,所述时空数据存储模块,还用于:
当每个存储节点中的数据量达到预设的第二标准值,则停止向相应存储节点存储空间对象的时空数据。
在一些实施例中,所述装置还包括:
时间片划分模块,用于基于预设的时间单位,将所述时空数据的时间范围划分为多个时间片,其中,每个时间片包含所述全部分区中一个或多个分区中空间对象的时空数据;
时空立方体构造模块,用于基于每个时间片的时空数据,构造每个时空立方体;其中,基于每个时间片所包含的每个分区中空间对象的时空数据,构造每个时空立方体中的每个条柱。
图11示出了本发明实施例的数据库引擎。如图11所示,数据库引擎1100 包括:至少一个处理器1110,以及与至少一个处理器1110通信连接的存储器 1120,其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器执行的方法。
具体地,上述存储器1120和处理器1110经由总线1130连接在一起,能够为通用的存储器和处理器,这里不做具体限定,当处理器1110运行存储器 1120存储的计算机程序时,能够执行本发明实施例中结合图1至图9所描述的每个项操作和功能。
在本发明实施例中,数据库引擎1100可以包括但不限于:个人计算机、服务器计算机、工作站、桌面型计算机、膝上型计算机、笔记本计算机、移动计算设备、智能电话、平板计算机、个人数字助理(PDA)、手持装置、消息收发设备、可佩带计算设备等等。
本发明实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时,实现的方法。具体实现可参见方法实施例,在此不再赘述。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该存储介质中的指令。从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的存储介质构成了本发明的一部分。
存储介质包括但不限于软盘、硬盘、磁光盘、光盘、磁带、非易失性存储卡和ROM。还可以通过通信网络从服务器计算机上或者云上下载程序代码。
需要说明的是,上述每个流程和每个系统结构中,不是所有的步骤和模块都是必须的,可以根据实际需要忽略某些步骤和单元。每个步骤的执行顺序不是固定的,可以根据需要进行确定。上述每个实施例中的描述的装置结构可以是物理结构,也可以是逻辑结构。某个模块或单元可能由同一物理实体实现,某个模块或单元可能由多个物理实体分别实现,某个模块或单元还可以由多个独立设备中的多个部件共同实现。
尽管本发明实施例的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用。它完全可以被适用于每个种适合本发明实施例的领域。对于熟悉本领域的人员而言,可容易地实现另外的修改。因此在不背离权利要求及等同范围所限定的一般概念下,本发明实施例并不限于特定的细节和这里示出与描述的图例。
Claims (10)
1.一种时空数据的存储方法,其特征在于,包括:
获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息;
将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内;
对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区;
将全部分区中空间对象的时空数据存储至分布式数据库中。
2.如权利要求1所述的时空数据的存储方法,其特征在于,所述将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格,包括:
将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格,通过具有第一预设阶数的Hilbert填充曲线对第一个层次的网格进行填充,生成第一个层次中每个网格的Hilbert编码;基于上一个层次中每个网格的Hilbert编码,顺序地访问相应层次中的每个网格,将数据量超过所述第一标准值的每个网格划分为多个子网格,生成下一个层次的每个单元格网,所述下一个层次的网格由至少一个单元格网组成;通过具有第二预设阶数的Hilbert填充曲线对下一个层次中每个单元格网进行填充,生成下一个层次中每个单元格网中每个网格的Hilbert编码;
所述对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区,包括:
基于第一个层次中每个网格的Hilbert编码,顺序地访问所述第一个层次中每个网格,在访问至所述第一个层次中任一个被划分网格时,进入基于被划分网格生成的第二个层次的单元格网中;基于上一个层次中任一个单元格网中每个网格的Hilbert编码,顺序地访问上一个层次中相应单元格网中的每个网格,在访问至任一个被划分网格时,进入基于被划分网格生成的下一个层次的单元格网中,基于下一个层次中相应单元格网中每个网格的Hilbert编码,顺序地访问下一个层次中相应单元格网中每个网格;如下一个层次中相应单元格网中每个网格均未被再次划分,则返回至所述当前格网的上一个层次中,继续访问上一个层次中被划分网格的下一个网格;如完成对下一个层次中相应单元格网中每个网格的访问,则返回至上一个层次中,继续上一个层次中被划分格网的下一个网格;
其中,在对多个层次的网格的访问过程中,不统计被划分网格的数据量,依据网格的访问顺序,将数据量未达到所述第一标准值的网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区。
3.如权利要求2所述的时空数据的存储方法,其特征在于,所述第一预设阶数为3阶;所述第二预设阶数为1阶。
4.如权利要求2所述的时空数据的存储方法,其特征在于,所述时空数据包括空间对象的时间信息;所述方法还包括:
根据每个分区的生成顺序,生成每个分区的分区编码,建立所述每个分区的分区编码与每个分区的位置信息之间的映射关系;
根据所述空间对象的时间信息以及所述空间对象所在分区的分区编码,生成索引数据。
5.如权利要求4所述的时空数据的存储方法,其特征在于,所述分布式数据库包括多个存储节点;所述将全部分区中空间对象的时空数据存储至分布式数据库中,包括:
将全部分区中空间对象的时空数据分别存储至所述多个存储节点,其中,在每个存储节点中存储的空间对象的时空数据所属于的多个分区的分区编码是连续排列的。
6.如权利要求5所述的时空数据的存储方法,其特征在于,所述将全部分区中空间对象的时空数据存储至所述多个存储节点,还包括:
当每个存储节点中的数据量达到预设的第二标准值,则停止向相应存储节点存储空间对象的时空数据。
7.如权利要求1所述的时空数据的存储方法,其特征在于,所述方法还包括:
基于预设的时间单位,将所述时空数据的时间范围划分为多个时间片,其中,每个时间片包含所述全部分区中一个或多个分区中空间对象的时空数据;
基于每个时间片的时空数据,构造每个时空立方体;其中,基于每个时间片所包含的每个分区中空间对象的时空数据,构造每个时空立方体中的每个条柱。
8.一种时空数据的存储装置,其特征在于,包括:
时空数据获取模块,用于获取空间对象的时空数据,所述时空数据至少包括空间对象的位置信息;
网格划分模块,用于将所述时空数据的空间范围划分为多个初分网格,生成第一个层次的网格;将上一个层次的网格中数据量超过预设的第一标准值的网格划分为多个子网格,生成下一个层次的网格;当达到预设的停止划分条件,停止对相应层次中网格的划分;其中,每个层次中每个网格的数据量为根据每个网格中空间对象的时空数据确定的,所述每个网格中的空间对象的位置信息位于每个网格的空间范围内;
分区确定模块,用于对每个层次的网格中数据量未达到所述第一标准值的多个相邻网格逐一合并,直至合并构成的分区中的数据量达到所述第一标准值;如最下一个层次中任一个网格的数据量达到所述第一标准值,将相应网格确定为一个分区;
时空数据存储模块,用于将全部分区中空间对象的时空数据存储至分布式数据库中。
9.一种数据库引擎,其特征在于,包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行权利要求1-7中任一项所述的方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211271527.9A CN115687517A (zh) | 2022-10-18 | 2022-10-18 | 时空数据的存储方法、装置、数据库引擎和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211271527.9A CN115687517A (zh) | 2022-10-18 | 2022-10-18 | 时空数据的存储方法、装置、数据库引擎和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115687517A true CN115687517A (zh) | 2023-02-03 |
Family
ID=85066141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211271527.9A Pending CN115687517A (zh) | 2022-10-18 | 2022-10-18 | 时空数据的存储方法、装置、数据库引擎和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115687517A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680351A (zh) * | 2023-05-17 | 2023-09-01 | 中国地震台网中心 | 基于移动大数据的地震人口热力实时获取方法及系统 |
-
2022
- 2022-10-18 CN CN202211271527.9A patent/CN115687517A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680351A (zh) * | 2023-05-17 | 2023-09-01 | 中国地震台网中心 | 基于移动大数据的地震人口热力实时获取方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103324642B (zh) | 为数据建立索引的系统和方法以及数据查询方法 | |
CN110019568B (zh) | 基于空间聚类的选址方法、装置、计算机设备及存储介质 | |
Tayeb et al. | A quadtree-based dynamic attribute indexing method | |
CN107402955A (zh) | 确定地理围栏的索引网格的方法和装置 | |
Wang et al. | Adaptively exploring population mobility patterns in flow visualization | |
CN110119408B (zh) | 地理空间实时流数据下移动对象连续查询方法 | |
Vermeulen et al. | A comparative study of k‐nearest neighbour techniques in crowd simulation | |
CN113570275A (zh) | 基于bim和数字高程模型的水资源实时监测系统 | |
CN111090712A (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
CN113656670A (zh) | 面向飞行数据的时空轨迹数据管理分析方法和装置 | |
Sarwat | Interactive and scalable exploration of big spatial data--a data management perspective | |
CN112380302A (zh) | 基于轨迹数据的热力图生成方法、装置、电子设备以及存储介质 | |
CN115687517A (zh) | 时空数据的存储方法、装置、数据库引擎和存储介质 | |
Li et al. | Online real-time trajectory analysis based on adaptive time interval clustering algorithm | |
EP3182299B1 (en) | Methods and systems for estimating the number of points in two-dimensional data | |
Karim et al. | Spatiotemporal Aspects of Big Data. | |
Buchhold et al. | Efficient calculation of microscopic travel demand data with low calibration effort | |
Zhang et al. | HGeoHashBase: an optimized storage model of spatial objects for location-based services | |
Li et al. | Efficient path query processing over massive trajectories on the cloud | |
Zhang et al. | The modeling of big traffic data processing based on cloud computing | |
Jonathan et al. | Stella: geotagging images via crowdsourcing | |
Tu et al. | Computing distance histograms ef? ciently in scientific databases | |
Belcastro et al. | Evaluation of large scale roi mining applications in edge computing environments | |
Shashidharan et al. | FUTURES-AMR: towards an adaptive mesh refinement framework for geosimulations | |
CN114117260A (zh) | 时空轨迹索引与查询处理方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |