一种gps数据的保存方法

文档序号:6629986阅读:695来源:国知局
一种gps数据的保存方法
【专利摘要】本发明提供一种GPS数据的保存方法,包括以下步骤:初始化步骤,将GPS数据文件初始化,收到写入请求时判断是否存在索引,若否则跳转至索引上限判断步骤,若是则根据索引跳转到最后一个数据块,并进入数据块判断步骤;索引上限判断步骤,判断是否已达到索引上限,若是则返回写入失败信息,若否则跳转至新建数据块步骤;新建数据块步骤,新建数据块并将数据写入至空白区,新建并更新索引,返回写入成功信息;以及,数据块判断步骤,判断当前数据块是否已满,未满则直接写入数据至空白区,已满则新建数据块并更新索引,在新建数据块写入数据并更新上一个数据块的索引。本发明能够极大提高GPS数据额并发写入性能,大大提高了磁盘空间利用率。
【专利说明】一种GPS数据的保存方法

【技术领域】
[0001]本发明涉及一种数据的保存方法,尤其涉及一种GPS数据的保存方法。

【背景技术】
[0002]车联网系统用于提供对车辆的监控和调度等服务,而这些服务的基础在于车辆GPS数据的保存、运算与处理,GPS数据存在两个特点:并发量大和数据量大,一条典型的GPS数据,一般包含以下字段:经度、纬度、速度、时间和方向;以一个大中型GPS系统为例,如果接入2W辆车,平均每5秒钟上报一个GPS数据包,保存最近I年历史数据,每辆车每天产生约17000条数据,每月约50W条,每年600W条;2W辆车一年产生1200亿条数据。
[0003]传统软件中一般使用数据库系统来进行数据存取,那么,首先面临的问题是磁盘空间利用率低,占用存储空间巨大;以Mysql + Linux操作系统为例,保存1000万条数据占用0.75G磁盘空间;1200亿条数据需要大约9T空间;如果针对一些特殊运营车辆行业,需要保存3-5年数据,则需要几十T的磁盘空间。
[0004]其次是读写性能无法满足要求,对于大型车联网系统,每秒钟上报的GPS数据量可能过万,Mysql 5.1版+ 64位Linux, i7 3.4G 4核CPU + IT企业级硬盘+ 8G内存,测试的每秒写入速度最大约7000条,根本无法满足大型系统并发过万的写入要求;而且数据库系统在单表数据量达到数亿条后,读取性能会急剧下降,必须采用分表分库等手段来优化,提升了系统开发难度。


【发明内容】

[0005]本发明所要解决的技术问题是需要提供一种高性能和高存储空间利用率的GPS数据的保存方法,进而解决车联网系统中GPS数据的高并发和大数据量存取等问题。
[0006]对此,本发明提供一种GPS数据的保存方法,包括以下步骤:
初始化步骤,将GPS数据文件初始化后,当收到一个数据写入请求时,首先判断是否存在索引,如果没有索引则跳转至索引上限判断步骤,如果有索引则根据索引跳转到最后一个数据块,并进入数据块判断步骤;
索引上限判断步骤,判断是否已达到索引上限,若是则返回写入失败信息,若否则跳转至新建数据块步骤;
新建数据块步骤,新建数据块,并将数据写入至空白区,新建并更新索引,返回写入成功信息;
以及,数据块判断步骤,判断当前数据块是否已满,未满则直接写入数据至数据块最近的一个空白区,已满则新建数据块并更新索引,在新数据块中写入数据并更新上一个数据块的索引,返回写入成功信息;
其中,所述GPS数据文件包括保留区、索引区和数据区,所述保留区设置在GPS数据文件的索引区前面,所述数据区设置在GPS数据文件的索引区后面。
[0007]本发明的索引区设置在GPS数据文件的头部,初始化的时候全部生成并置零;每一条GPS数据采用严格长度进行定长存储,并预留了扩展字段,即预留了保留区,使得其中一条GPS数据的损坏不会影响其它GPS数据的读取。
[0008]本发明的新生成的GPS数据的写入之前需要初始化,初始化的步骤包括创建新数据文件、设置文件大小和将文件内容全部设置为O ;在初始化之后开始实现GPS数据的写入,写入过程包括以下步骤:先判断是否存在此车的索引,如果有索引,则表明不是第一次存放GPS数据,根据索引跳转到最后一个数据块,并判断数据块是否已经满,未满则直接写入GPS数据在数据块最近的一个空白区,如果数据块已满则新建数据块,在新数据块中写入数据,并更新索引;如果没有索引,则说明是第一次收到此车数据,则先新建数据块,并写入数据在新的数据块,然后更新索引;如果没有索引且索引区已满,则写入失败。
[0009]本发明的进一步改进在于,所述GPS数据文件的每一条GPS数据均采用二进制格式进行存储,所述数据区包括多个固定大小的数据块,每一个数据块设置有指向下一个数据块的索引指针,使得所有的数据块形成一个链表。
[0010]本发明将每个数据块规定为固定大小,既能提高存储性能,又能有效地利用空间,且每一个数据块均自带指向下一个数据块的索引指针,这样所有数据块就会形成一个链表,构成一级索引。
[0011]本发明的进一步改进在于,每一条GPS数据占用20个字节,分别包括4Byte的经度数据、4Byte的纟韦度数据、4Byte的时间数据、IByte的速度数据、IByte的方向数据和6Byte的保留数据。本发明对GPS数据进行了自定义的压缩,提高了存储效率。
[0012]本发明的进一步改进在于,所述GPS数据文件还包括辅助文件,所述辅助文件用于记录最后一条数据,在每辆车上报GPS数据的时候,都将最新上报的数据刷新到所述辅助文件中,用于提供最新的位置查询。本发明提供辅助文件,所述辅助文件专门用于保存每一辆车最新的一条GPS数据,能够极大提高GPS的定位速度,以快速读取最新的一条GPS数据。所述辅助文件的数据格式优选与GPS数据文件的数据格式一致。
[0013]本发明的进一步改进在于,所述辅助文件包括辅助保留区、辅助索引区和辅助数据区,所述辅助保留区设置在辅助索引区的前面,所述辅助数据区设置在辅助索引区的后面;所述辅助文件的写入过程包括以下步骤:判断是否是首次收到此车数据,若否则更新辅助数据区对应的数据单元并返回写入成功提示;若是则判断辅助索引区是否已达上限,如果辅助索引区达到上限则返回写入失败提示,如果辅助索引区没有达到上限则在辅助数据区新建数据单元后写入GPS数据,新增辅助索引并返回写入成功提示。
[0014]本发明的进一步改进在于,所述辅助文件的读取过程包括以下步骤:调用辅助文件,查询辅助索引区的记录,判断是否存在辅助索引数据,若存在则跳转至辅助索引所指向的地址,读取相应的数据单元后结束;若不存在则返回空数据单元后结束。
[0015]本发明的进一步改进在于,GPS数据文件的读取过程包括以下步骤:
调用步骤,调用GPS数据文件,查询索引,并判断是否存在索引数据,若不存在则返回空数据单元后结束,若存在则跳转至读取数据块步骤;
读取数据块步骤,跳转至索引指向的数据块,读取数据块,然后跳转至数据块判断步骤;
以及,数据块判断步骤,判断是否存在下一个数据块,若存在则读取指向的下个数据块之后返回数据块判断步骤,若不存在则过滤读取到的数据,返回限定时间段内的数据后结束。
[0016]本发明的进一步改进在于,按时间每天生成一个GPS数据文件,所述GPS数据文件前128个字节用于作为保留区,全设置为O ;在保留区后续的96万个字节用于作为索引区,每48个字节为一条索引记录;所述索引区后面的字节用于作为数据区。所述GPS数据文件每天生成一个,用于保存当天的数据,能够便于按时间段查询和备份数据以及删除过期数据。
[0017]本发明的进一步改进在于,所述索引区包括32Byte的设备序列号、SByte的第一个数据块起始地址和SByte的最后一个数据块起始地址;所述设备序列号包括英文字母、数字和下划线的可见字符,用于唯一标识每一辆车,在车辆标识不足32个字节的部分以二进制O补齐;所述第一个数据块起始地址和最后一个数据块起始地址用于指向本车辆的首个和最后一个数据块。
[0018]本发明的进一步改进在于,所述数据区包括多个数据块,每个数据块的长度为2008个字节,其中前2000个字节为GPS的数据体,最后8个字节指向本车辆的下一个数据块;当没有下一个数据块时,则最后8个字节为O。
[0019]如果其中一条或几条GPS数据损坏,并不会影响本发明其他GPS数据的读取;本发明数据区的每一个数据块规定为固定大小,既能提高存储性能,又能有效地利用空间,且每一个数据块均自带指向下一个数据块的索引指针,这样所有数据块就会形成一个链表,构成一级索引J^GPS数据进行了自定义的压缩,提高了存储效率;加之,还提供专门用于保存每一辆车最新的一条GPS数据的辅助文件,能够极大提高GPS的定位速度,以快速读取最新的一条GPS数据。
[0020]与现有技术相比,本发明的有益效果在于:能够极大提高GPS数据额并发写入性能,大大提高了磁盘空间利用率,在GPS数据的写入性能上提高了 10倍以上,足够满足约1W辆车辆同时并发写入GPS数据的需求,存储空间占用比现有数据库系统减少至1/4,大大减少了存储设备成本占用。

【专利附图】

【附图说明】
[0021]图1是本发明实施例1的工作流程示意图;
图2是本发明实施例1的数据初始化的工作流程示意图;
图3是本发明实施例1的GPS数据文件的结构示意图;
图4是本发明实施例1的GPS数据的二进制存储格式示意图;
图5是本发明实施例2的辅助文件的结构示意图;
图6是本发明实施例2的辅助文件的写入过程工作流程示意图;
图7是本发明实施例2的辅助文件的读取过程工作流程示意图;
图8是本发明实施例3的GPS数据文件的读取过程工作流程示意图;
图9是本发明实施例3的GPS数据文件的结构示意图;
图10是本发明实施例3的索引区的文件格式示意图;
图11是本发明实施例3的数据区的文件格式示意图;
图12是本发明实施例3的数据区的GPS数据单元格式示意图;
图13是本发明实施例3写入一条GPS数据的工作流程示意图; 图14是本发明实施例3的测试配置示意图;
图15是本发明实施例3的测试结论对比效果示意图。

【具体实施方式】
[0022]下面结合附图,对本发明的较优的实施例作进一步的详细说明。
[0023]实施例1:
如图1所示,本例提供一种GPS数据的保存方法,包括以下步骤:
初始化步骤,将GPS数据文件初始化后,当收到一个数据写入请求时,首先判断是否存在索引,如果没有索引则跳转至索引上限判断步骤,如果有索引则根据索引跳转到最后一个数据块,并进入数据块判断步骤;
索引上限判断步骤,判断是否已达到索引上限,若是则返回写入失败信息,若否则跳转至新建数据块步骤;
新建数据块步骤,新建数据块,并将数据写入至空白区,新建并更新索引,返回写入成功信息;
以及,数据块判断步骤,判断当前数据块是否已满,未满则直接写入数据至数据块最近的一个空白区,已满则新建数据块并更新索引,在新数据块中写入数据并更新上一个数据块的索引,返回写入成功信息;
其中,所述GPS数据文件包括保留区、索引区和数据区,所述保留区设置在GPS数据文件的索引区前面,所述数据区设置在GPS数据文件的索引区后面。
[0024]本例的索引区设置在GPS数据文件的头部,初始化的时候全部生成并置零;每一条GPS数据采用严格长度进行定长存储,并预留了扩展字段,即预留了保留区,使得其中一条GPS数据的损坏不会影响其它GPS数据的读取。
[0025]本例的新生成的GPS数据的写入之前需要初始化,如图2所示,初始化的步骤包括创建新数据文件、设置文件大小和将文件内容全部设置为O ;在初始化之后开始实现GPS数据的写入,写入过程包括以下步骤:先判断是否存在此车的索引,如果有索引,则表明不是第一次存放GPS数据,根据索引跳转到最后一个数据块,并判断数据块是否已经满,未满则直接写入GPS数据在数据块最近的一个空白区,如果数据块已满则新建数据块,在新数据块中写入数据,并更新索引;如果没有索引,则说明是第一次收到此车数据,则先新建数据块,并写入数据在新的数据块,然后更新索引;如果没有索引且索引区已满,则写入失败。
[0026]如图3所示,本例所述GPS数据文件的每一条GPS数据均采用二进制格式进行存储,所述数据区包括多个固定大小的数据块,每一个数据块设置有指向下一个数据块的索引指针,使得所有的数据块形成一个链表。图3中,表示的是3辆车辆的GPS数据文件的结构示意图。
[0027]本例将每个数据块规定为固定大小,既能提高存储性能,又能有效地利用空间,且每一个数据块均自带指向下一个数据块的索引指针,这样所有数据块就会形成一个链表,构成一级索引。
[0028]本例为节省存储空间,且尽量保证存储的数据精度,本发明中每条GPS数据均采用二进制格式存储,如图4所示,每一条GPS数据优选占用20个字节,分别包括4Byte的经度数据、4Byte的纟韦度数据、4Byte的时间数据、IByte的速度数据、IByte的方向数据和6Byte的保留数据。本例对GPS数据进行了自定义的压缩,提高了存储效率。图4中,所有short和int类字段,均为本地字节序。
[0029]实施例2:
在实施例1的基础上,本例所述GPS数据文件还包括辅助文件,所述辅助文件用于记录最后一条数据,在每辆车上报GPS数据的时候,都将最新上报的数据刷新到所述辅助文件中,用于提供最新的位置查询。本例提供辅助文件,所述辅助文件专门用于保存每一辆车最新的一条GPS数据,能够极大提高GPS的定位速度,以快速读取最新的一条GPS数据。
[0030]现有技术中,无法快速提取某一批设备最后一条GPS数据。相反的,本例所述辅助文件包括辅助保留区、辅助索引区和辅助数据区,所述辅助保留区设置在辅助索引区的前面,所述辅助数据区设置在辅助索引区的后面。
[0031]记录最后一条数据的辅助文件的数据文件名为gps_current.bin,整个系统只有一份该文件,每辆车上报GPS数据的时候,都将最新上报的GPS数据刷新到本辅助文件中,用于提供最新位置查询;该辅助文件的文件格式如图5所示,辅助保留区同GPS数据文件一样,全0,用于后续扩展;辅助索引区每32字节为一条索引,最多保存30000条索引。同理,可通过扩充辅助索引区的大小来增加最多接入的车辆数,本辅助索引区理论上必须不小于GPS数据文件的索引条数;辅助索引区每条数据只包含32字节车辆序列号,不足32字节部分补二进制0.。辅助数据区每20个字节为一条数据,其格式与GPS数据文件的数据区一致。
[0032]如图6所示,所述辅助文件的写入过程包括以下步骤:判断是否是首次收到此车数据,若否则更新辅助数据区对应的数据单元并返回写入成功提示;若是则判断辅助索引区是否已达上限,如果辅助索引区达到上限则返回写入失败提示,如果辅助索引区没有达到上限则在辅助数据区新建数据单元后写入GPS数据,新增辅助索引并返回写入成功提示。所述辅助文件的数据格式优选与GPS数据文件的数据格式一致。
[0033]如图7所示,所述辅助文件的读取过程包括以下步骤:调用辅助文件,查询辅助索引区的记录,判断是否存在辅助索引数据,若存在则跳转至辅助索引所指向的地址,读取相应的数据单元后结束;若不存在则返回空数据单元后结束。
[0034]实施例3:
如图8所示,在实施例1或实施例2的基础上,本例GPS数据文件的读取过程包括以下步骤:
调用步骤,调用GPS数据文件,查询索引,并判断是否存在索引数据,若不存在则返回空数据单元后结束,若存在则跳转至读取数据块步骤;
读取数据块步骤,跳转至索引指向的数据块,读取数据块,然后跳转至数据块判断步骤;
以及,数据块判断步骤,判断是否存在下一个数据块,若存在则读取指向的下个数据块之后返回数据块判断步骤,若不存在则过滤读取到的数据,返回限定时间段内的数据后结束。
[0035]本例还包括针对GPS数据的写入接口,写入接口将一条GPS数据写入到存储系统的工作流程图如图13所示。其中,一条典型的GPS数据如下,车辆内部编号:200000140600001 ;经度:113.943998E ;纬度:22.571260N ;速度:13(单位节);方向:144 度;上报时间:2014-07-30 08:19:50。
[0036]如图9所示,本例按时间每天生成一个GPS数据文件,所述GPS数据文件前128个字节用于作为保留区,全设置为O ;在保留区后续的96万个字节用于作为索引区,每48个字节为一条索引记录;所述索引区后面的字节用于作为数据区。所述GPS数据文件每天生成一个,用于保存当天的数据,能够便于按时间段查询和备份数据以及删除过期数据。本例所述 GPS 数据文件文件名可以为 gps_data_yyyymmdd.bin(例如 gps_data_20140731.bin)。
[0037]如图10所示,本例所述索引区包括32Byte的设备序列号、8Byte的第一个数据块起始地址和SByte的最后一个数据块起始地址;所述设备序列号包括英文字母、数字和下划线的可见字符,用于唯一标识每一辆车,在车辆标识不足32个字节的部分以二进制O补齐;所述第一个数据块起始地址和最后一个数据块起始地址用于指向本车辆的首个和最后一个数据块。
[0038]如图11所示,本例所述数据区包括多个数据块,每个数据块的长度为2008个字节,其中前2000个字节为GPS的数据体,最后8个字节指向本车辆的下一个数据块;当没有下一个数据块时,则最后8个字节为O。所述数据块的前2000个字节,由100个GPS数据单元(Unit)组成,每个GPS数据单元占20个字节,格式如图12所示。
[0039]如果其中一条或几条GPS数据损坏,并不会影响本例其他GPS数据的读取;本例数据区的每一个数据块规定为固定大小,既能提高存储性能,又能有效地利用空间,且每一个数据块均自带指向下一个数据块的索引指针,这样所有数据块就会形成一个链表,构成一级索引J^GPS数据进行了自定义的压缩,提高了存储效率;加之,还提供专门用于保存每一辆车最新的一条GPS数据的辅助文件,能够极大提高GPS的定位速度,以快速读取最新的一条GPS数据。
[0040]本例与现有技术的数据库系统进行对比测试,其中测试配置示意图如图14所示,测试结论的对比效果示意图如图15所示,由图14和图15可知,本例能够将GPS数据的写入性能提高10倍以上,足够满足约1W辆车辆同时并发写入GPS数据的需求,存储空间占用比现有数据库系统减少至1/4,大大减少了存储设备成本占用。
[0041]本例用于GPS存储系统,根据业务,对外能够提供写入数据、读取一批设备最新位置、读取某一辆车历史轨迹记录三个接口。如clibjile类:辅助类,对64Bit操作系统下文件读写提供基本封装,cgps_data类:单个gps数据文件,提供写入、读取接口 ;cgps_data_last类:保存车辆最后一条gps数据,提供读写接口 ;cgps_data_set类:整个系统对外接口,上述类的组合,提供完整功能。
[0042]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属【技术领域】的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
【权利要求】
1.一种GPS数据的保存方法,其特征在于,包括以下步骤: 初始化步骤,将GPS数据文件初始化,当收到一个数据写入请求时,首先判断是否存在索引,如果没有索引则跳转至索引上限判断步骤,如果有索引则根据索引跳转到最后一个数据块,并进入数据块判断步骤; 索引上限判断步骤,判断是否已达到索引上限,若是则返回写入失败信息,若否则跳转至新建数据块步骤; 新建数据块步骤,新建数据块,并将数据写入至空白区,新建并更新索引,返回写入成功信息; 以及,数据块判断步骤,判断当前数据块是否已满,未满则直接写入数据至数据块最近的一个空白区,已满则新建数据块并更新索引,在新数据块中写入数据并更新上一个数据块的索引,返回写入成功信息; 其中,所述GPS数据文件包括保留区、索引区和数据区,所述保留区设置在GPS数据文件的索引区前面,所述数据区设置在GPS数据文件的索引区后面。
2.根据权利要求1所述的GPS数据的保存方法,其特征在于,所述GPS数据文件的每一条GPS数据均采用二进制格式进行存储,所述数据区包括多个固定大小的数据块,每一个数据块设置有指向下一个数据块的索引指针,使得所有的数据块形成一个链表。
3.根据权利要求2所述的GPS数据的保存方法,其特征在于,每一条GPS数据占用20个字节,分别包括4Byte的经度数据、4Byte的纟韦度数据、4Byte的时间数据、IByte的速度数据、IByte的方向数据和6Byte的保留数据。
4.根据权利要求1所述的GPS数据的保存方法,其特征在于,所述GPS数据文件还包括辅助文件,所述辅助文件用于记录最后一条数据,在每辆车上报GPS数据的时候,都将最新上报的数据刷新到所述辅助文件中,用于提供最新的位置查询。
5.根据权利要求4所述的GPS数据的保存方法,其特征在于,所述辅助文件包括辅助保留区、辅助索引区和辅助数据区,所述辅助保留区设置在辅助索引区的前面,所述辅助数据区设置在辅助索引区的后面;所述辅助文件的写入过程包括以下步骤:判断是否是首次收到此车数据,若否则更新辅助数据区对应的数据单元并返回写入成功提示;若是则判断辅助索引区是否已达上限,如果辅助索引区达到上限则返回写入失败提示,如果辅助索引区没有达到上限则在辅助数据区新建数据单元后写入GPS数据,新增辅助索引并返回写入成功提示。
6.根据权利要求5所述的GPS数据的保存方法,其特征在于,所述辅助文件的读取过程包括以下步骤:调用辅助文件,查询辅助索引区的记录,判断是否存在辅助索引数据,若存在则跳转至辅助索引所指向的地址,读取相应的数据单元后结束;若不存在则返回空数据单兀后结束。
7.根据权利要求1至6任意一项所述的GPS数据的保存方法,其特征在于,GPS数据文件的读取过程包括以下步骤: 调用步骤,调用GPS数据文件,查询索引,并判断是否存在索引数据,若不存在则返回空数据单元后结束,若存在则跳转至读取数据块步骤; 读取数据块步骤,跳转至索引指向的数据块,读取数据块,然后跳转至数据块判断步骤; 以及,数据块判断步骤,判断是否存在下一个数据块,若存在则读取指向的下个数据块之后返回数据块判断步骤,若不存在则过滤读取到的数据,返回限定时间段内的数据后结束。
8.根据权利要求1至6任意一项所述的GPS数据的保存方法,其特征在于,按时间每天生成一个GPS数据文件,所述GPS数据文件前128个字节用于作为保留区,全设置为O ;在保留区后续的96万个字节用于作为索引区,每48个字节为一条索引记录;所述索引区后面的字节用于作为数据区。
9.根据权利要求8所述的GPS数据的保存方法,其特征在于,所述索引区包括32Byte的设备序列号、SByte的第一个数据块起始地址和SByte的最后一个数据块起始地址;所述设备序列号包括英文字母、数字和下划线的可见字符,用于唯一标识每一辆车,在车辆标识不足32个字节的部分以二进制O补齐;所述第一个数据块起始地址和最后一个数据块起始地址用于指向本车辆的首个和最后一个数据块。
10.根据权利要求8所述的GPS数据的保存方法,其特征在于,所述数据区包括多个数据块,每个数据块的长度为2008个字节,其中前2000个字节为GPS的数据体,最后8个字节指向本车辆的下一个数据块;当没有下一个数据块时,则最后8个字节为O。
【文档编号】G06F17/30GK104408041SQ201410537617
【公开日】2015年3月11日 申请日期:2014年10月13日 优先权日:2014年10月13日
【发明者】黄齐雄 申请人:深圳市德传技术有限公司, 深圳市中微互联软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1