数据存储方法、装置、电子设备及存储介质与流程

文档序号:24638820发布日期:2021-04-09 20:50阅读:60来源:国知局
数据存储方法、装置、电子设备及存储介质与流程

本申请涉及计算机技术领域,尤其涉及一种数据存储方法、装置、电子设备及存储介质。



背景技术:

在自动驾驶等场景中,需要对各模块数据进行采集,将收集到的数据写入指定的文件或汽车黑匣子。

现有方法多利用谷歌(google)开源的一个日志库glog,实现日志分级(info/warning/error/fatal)和日志归档。googleglog定义了一系列宏,可简化许多常见的日志记录任务。基于googleglog,可以按照严重性级别记录消息,从命令行控制日志记录行为,基于条件记录日志,在不满足预期条件时中止程序,引入详细日志记录级别等。

但基于googleglog的方法,glog参数配置比较复杂,只能在启动程序的时候通过输入参数来配置,不够灵活。并且,默认情况下glog仅支持同步日志,大规模写日志的性能会受i/o速度影响;多线程写日志时glog缺省使用的读写锁和mutex锁也会消耗性能,而且对于多线程同步堵塞写i/o的模式,一旦出现i/o挂起的情况,所有worker线程都会堵住。此外,glog仅支持info/warning/error/fatal等几个级别,能够记录的文件数目有限。

综上,现有数据存储方法存在性能差的不足。



技术实现要素:

本申请提供一种数据存储方法、装置、电子设备及存储介质,以实现满足场景需求的数据存储。

本申请提供一种数据存储方法,包括:

响应于每一数据采集对象的初始化指令,生成所述每一数据采集对象对应的模块数据的存储信息;

若判断获知缓存中存在所述每一数据采集对象对应的模块数据,则根据所述存储信息,对所述每一数据采集对象对应的模块数据进行存储。

根据本申请提供的一种数据存储方法,所述响应于每一数据采集对象的初始化指令,生成所述每一数据采集对象对应的模块数据的存储信息的具体步骤包括:

对于所述每一数据采集对象,分配所述每一数据采集对象的id、对应的数据文件的位置和所述数据文件的文件名的前缀。

根据本申请提供的一种数据存储方法,判断缓存中是否存在所述每一数据采集对象对应的模块数据的具体步骤包括:

根据所述缓存中的模块数据对应的数据采集对象的id,判断缓存中是否存在所述每一数据采集对象对应的模块数据。

根据本申请提供的一种数据存储方法,所述根据所述存储信息,对所述每一数据采集对象对应的模块数据进行存储的具体步骤包括:

根据所述每一数据采集对象的id和对应的数据文件的位置,将所述每一数据采集对象对应的模块数据写入所述数据文件。

根据本申请提供的一种数据存储方法,所述根据所述每一数据采集对象的id和对应的数据文件的位置,将所述每一数据采集对象对应的模块数据写入所述数据文件之前,还包括:

将时间戳作为所述数据文件的文件名的后缀,获取所述数据文件的完整文件名。

本申请还提供一种数据存储装置,包括:

注册模块,用于响应于每一数据采集对象的初始化指令,生成所述每一数据采集对象对应的模块数据的存储信息;

存储模块,用于若判断获知缓存中存在所述每一数据采集对象对应的模块数据,则根据所述存储信息,对所述每一数据采集对象对应的模块数据进行存储。

根据本申请提供的一种数据存储装置,所述注册模块,具体用于对于所述每一数据采集对象,分配所述每一数据采集对象的id、对应的数据文件的位置和所述数据文件的文件名的前缀。

根据本申请提供的一种数据存储装置,所述存储模块包括:

判断单元,用于根据所述缓存中的模块数据对应的数据采集对象的id,判断缓存中是否存在所述每一数据采集对象对应的模块数据。

根据本申请提供的一种数据存储装置,存储模块包括:

写入单元,用于根据所述每一数据采集对象的id和对应的数据文件的位置,将所述每一数据采集对象对应的模块数据写入所述数据文件。

本申请还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述数据存储方法的步骤。

本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据存储方法的步骤。

本申请提供的数据存储方法、装置、电子设备及存储介质,通过对于每一模块数据,初始化用于该存储模块数据对应的数据采集对象,生成该模块数据的存储信息,根据该模块数据的存储信息,将该模块数据存储与磁盘中,使用更简单方便,能够根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

附图说明

为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请提供的数据存储方法的流程示意图;

图2是本申请提供的数据存储方法中步骤102的流程示意图;

图3是本申请提供的数据存储方法中步骤1022的流程示意图;

图4是本申请提供的数据存储装置的结构示意图;

图5是本申请提供的数据存储装置的存储模块的结构示意图;

图6是本申请提供的数据存储装置的存储模块的结构示意图;

图7是本申请提供的电子设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本申请实施例的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请实施例的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性,且不涉及顺序。

在本申请实施例的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请实施例中的具体含义。

为了克服现有技术的上述问题,本申请提供一种数据存储方法、装置、电子设备及存储介质,其构思是,将每个模块数据写入单独文件中,并且针对单个模块可以自定义需要写入文件的个数、位置、文件名等信息,实现存储数据的文件可根据传感器的数量进行定制。

图1是本申请提供的一种数据存储方法的流程示意图。下面结合图1描述本申请实施例的数据存储方法。如图1所示,该方法包括:步骤101、响应于每一数据采集对象的初始化指令,生成每一数据采集对象对应的模块数据的存储信息。

具体地,数据采集对象为datagather对象,是执行本申请提供的数据存储方法的程序中定义的对象。

对于每一datagather对象,接收该datagather对象的初始化指令之后,根据该初始化指令,生成该datagather对象对应的模块数据的存储信息。

存储信息,用于指示如何存储模块数据。

步骤102、若判断获知缓存中存在每一数据采集对象对应的模块数据,则根据存储信息,对每一数据采集对象对应的模块数据进行存储。

具体地,图2是本申请提供的数据存储方法中步骤102的流程示意图。如2所示,步骤102可以包括步骤1021、判断缓存中是否存在每一数据采集对象对应的模块数据和步骤1022、根据存储信息,对每一数据采集对象对应的模块数据进行存储。

对于步骤1021,具体可以对于每一datagather对象,根据该datagather对象对应的模块数据的存储信息,判断缓存中是否存在该datagather对象对应的模块数据。

在缓存中存储该模块数据,可以使用双缓冲区进行数据读写。

可以使用atomic对int类型的m_iflag变量进行原子性封装,用m_iflag来标识当前可写的缓冲区。m_iflag为读写标志位。因此,对双缓冲区中的任意一个进行读写,均为原子操作。

将每一数据采集对象对应的模块数据写入缓冲区时,可以默认给文件名加上时间戳后缀(例如年月日_时分秒)。

如果执行步骤1021的判断结果为存在,则可以执行步骤1022。

对于步骤1022,由于存储信息指示了如何存储模块数据,因而可以单独起线程写磁盘,从缓冲区中读取该datagather对象对应的模块数据之后,根据该datagather对象对应的模块数据的存储信息,将该模块数据存储于磁盘中。

本申请实施例通过对于每一模块数据,初始化用于该存储模块数据对应的数据采集对象,生成该模块数据的存储信息,根据该模块数据的存储信息,将该模块数据存储与磁盘中,使用更简单方便,能够根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

基于上述各实施例的内容,响应于每一数据采集对象的初始化指令,生成每一数据采集对象对应的模块数据的存储信息的具体步骤包括:对于每一数据采集对象,分配每一数据采集对象的id、对应的数据文件的位置和数据文件的文件名的前缀。

具体地,对于每一datagather对象,datagather对象对应的模块数据的存储信息,可以包括datagather对象的id、数据文件的位置和数据文件的文件名的前缀。

对于每一datagather对象,接收该datagather对象的初始化指令之后,根据该初始化指令,可以生成该datagather对象的id、数据文件的位置和数据文件的文件名的前缀等存储信息。

该数据文件,用于存储该datagather对象对应的模块数据。

datagather对象的id,可以用于判断模块数据是否为该datagather对象对应的模块数据。

该数据文件的位置和文件名的前缀,可以指示如何存储模块数据,因而可以根据该数据文件的位置和文件名的前缀,将模块数据写入该数据文件进行存储。

本申请实施例通过对于数据采集对象分配该数据采集对象的id、对应的数据文件的位置和数据文件的文件名的前缀,能更简单方便地根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

基于上述各实施例的内容,步骤1021、判断缓存中是否存在每一数据采集对象对应的模块数据的具体步骤包括:根据缓存中的模块数据对应的数据采集对象的id,判断缓存中是否存在每一数据采集对象对应的模块数据。

具体地,对于每一datagather对象,可以根据该datagather对象的id查询缓存,判断缓存中的每一数据对应的datagather对象的id是否与该datagather对象的id相同。

如果任一数据对应的datagather对象的id与该datagather对象的id相同,则缓存中存在该数据采集对象对应的模块数据,上述任一数据即为该datagather对象对应的模块数据。

如果每一数据对应的datagather对象的id与该datagather对象的id均不相同,则缓存中不存在该数据采集对象对应的模块数据。

本申请实施例通过缓存中的模块数据对应的数据采集对象的id,判断缓存中是否存在每一数据采集对象对应的模块数据,能更快速、准确地获取每一数据采集对象对应的模块数据,从而能提高系统的性能。

基于上述各实施例的内容,步骤1022、根据存储信息,对每一数据采集对象对应的模块数据进行存储的具体步骤包括:根据每一数据采集对象的id和对应的数据文件的位置,将每一数据采集对象对应的模块数据写入数据文件。

具体地,可以根据该数据文件的位置和文件名的前缀,新建或查找到该数据文件,并将模块数据写入该数据文件进行存储。

本申请实施例根据每一数据采集对象的id和对应的数据文件的位置,将每一数据采集对象对应的模块数据写入数据文件,能更简单方便地根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

图3是本申请提供的数据存储方法中步骤1022的流程示意图。基于上述各实施例的内容,如图3所示,步骤3021、根据每一数据采集对象的id和对应的数据文件的位置,将每一数据采集对象对应的模块数据写入数据文件之前,还包括:步骤3020、将时间戳作为数据文件的文件名的后缀,获取数据文件的完整文件名。

具体地,步骤1022还包括步骤3020、将时间戳作为数据文件的文件名的后缀,获取数据文件的完整文件名。

可以将时间戳(例如年月日_时分秒)作为数据文件的文件名的后缀,与数据文件的文件名的后缀与存储信息中数据文件的文件名的前缀结合,生成该数据文件的完整文件名。

生成该数据文件的完整文件名之后,可以根据该数据文件的位置和完整文件名,新建或查找到该数据文件,并将模块数据写入该数据文件进行存储。

本申请实施例通过向数据文件的文件名添加时间戳后缀,记录模块数据的存储时间,能提高数据存储的安全性。

下面对本申请提供的数据存储装置进行描述,下文描述的数据存储装置与上文描述的数据存储方法可相互对应参照。

图4是根据本申请实施例提供的数据存储装置的结构示意图。基于上述各实施例的内容,如图4所示,该装置包括注册模块401和存储模块402,其中:

注册模块401,用于响应于每一数据采集对象的初始化指令,生成每一数据采集对象对应的模块数据的存储信息;

存储模块402,用于若判断获知缓存中存在每一数据采集对象对应的模块数据,则根据存储信息,对每一数据采集对象对应的模块数据进行存储。

具体地,注册模块401和存储模块402电连接。

对于每一datagather对象,注册模块401接收该datagather对象的初始化指令之后,根据该初始化指令,生成该datagather对象对应的模块数据的存储信息。

存储模块402具体可以对于每一datagather对象,根据该datagather对象对应的模块数据的存储信息,判断缓存中是否存在该datagather对象对应的模块数据;如果存在,可以单独起线程写磁盘,从缓冲区中读取该datagather对象对应的模块数据之后,根据该datagather对象对应的模块数据的存储信息,将该模块数据存储于磁盘中。

本申请实施例提供的数据存储装置,用于执行本申请上述数据存储方法,其实施方式与本申请提供的数据采集方法的实施方式一致,且可以达到相同的有益效果,此处不再赘述。

该数据存储装置用于前述各实施例的数据存储方法。因此,在前述各实施例中的数据存储方法中的描述和定义,可以用于本申请实施例中各执行模块的理解。

本申请实施例通过对于每一模块数据,初始化用于该存储模块数据对应的数据采集对象,生成该模块数据的存储信息,根据该模块数据的存储信息,将该模块数据存储与磁盘中,使用更简单方便,能够根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

基于上述各实施例的内容,注册模块,具体用于对于每一数据采集对象,分配每一数据采集对象的id、对应的数据文件的位置和数据文件的文件名的前缀。

具体地,对于每一datagather对象,datagather对象对应的模块数据的存储信息,可以包括datagather对象的id、数据文件的位置和数据文件的文件名的前缀。

对于每一datagather对象,注册模块401接收该datagather对象的初始化指令之后,根据该初始化指令,可以生成该datagather对象的id、数据文件的位置和数据文件的文件名的前缀等存储信息。

本申请实施例通过对于数据采集对象分配该数据采集对象的id、对应的数据文件的位置和数据文件的文件名的前缀,能更简单方便地根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

图5是本申请提供的数据存储装置的存储模块的结构示意图。基于上述各实施例的内容,如图5所示,存储模块402包括:判断单元501,用于根据缓存中的模块数据对应的数据采集对象的id,判断缓存中是否存在每一数据采集对象对应的模块数据。

具体地,判断单元501,用于判断缓存中是否存在每一数据采集对象对应的模块数据。

对于每一datagather对象,判断单元501可以根据该datagather对象的id查询缓存,判断缓存中的每一数据对应的datagather对象的id是否与该datagather对象的id相同。

如果任一数据对应的datagather对象的id与该datagather对象的id相同,则缓存中存在该数据采集对象对应的模块数据,上述任一数据即为该datagather对象对应的模块数据。

如果每一数据对应的datagather对象的id与该datagather对象的id均不相同,则缓存中不存在该数据采集对象对应的模块数据。

本申请实施例通过缓存中的模块数据对应的数据采集对象的id,判断缓存中是否存在每一数据采集对象对应的模块数据,能更快速、准确地获取每一数据采集对象对应的模块数据,从而能提高系统的性能。

图6是本申请提供的数据存储装置的存储模块的结构示意图。基于上述各实施例的内容,如图6所示,存储模块402包括:写入单元601,用于根据每一数据采集对象的id和对应的数据文件的位置,将每一数据采集对象对应的模块数据写入数据文件。

具体地,写入单元601与判断单元501电连接。

写入单元601,用于根据存储信息,对每一数据采集对象对应的模块数据进行存储。

写入单元601,可以包括存储子单元,用于根据每一数据采集对象的id和对应的数据文件的位置,将每一数据采集对象对应的模块数据写入数据文件。

存储子单元可以根据该数据文件的位置和文件名的前缀,新建或查找到该数据文件,并将模块数据写入该数据文件进行存储。

写入单元601,还可以包括时间戳子单元,用于将时间戳作为数据文件的文件名的后缀,获取数据文件的完整文件名。

时间戳子单元可以将时间戳(例如年月日_时分秒)作为数据文件的文件名的后缀,与数据文件的文件名的后缀与存储信息中数据文件的文件名的前缀结合,生成该数据文件的完整文件名。

本申请实施例根据每一数据采集对象的id和对应的数据文件的位置,将每一数据采集对象对应的模块数据写入数据文件,能更简单方便地根据数据类型的不同保存到各自数据文件中,能满足自动驾驶系统等场景的需求,能提高系统的性能。

图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(communicationsinterface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储在存储器730中并可在处理器710上运行的逻辑指令,以执行上述各方法实施例提供的数据存储方法,该方法包括:响应于每一数据采集对象的初始化指令,生成每一数据采集对象对应的模块数据的存储信息;若判断获知缓存中存在每一数据采集对象对应的模块数据,则根据存储信息,对每一数据采集对象对应的模块数据进行存储。

此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请实施例提供的电子设备中的处理器710可以调用存储器730中的逻辑指令,其实施方式与本申请提供的数据采集方法的实施方式一致,且可以达到相同的有益效果,此处不再赘述。

另一方面,本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的数据存储方法,该方法包括:响应于每一数据采集对象的初始化指令,生成每一数据采集对象对应的模块数据的存储信息;若判断获知缓存中存在每一数据采集对象对应的模块数据,则根据存储信息,对每一数据采集对象对应的模块数据进行存储。

本申请实施例提供的计算机程序产品被执行时,实现上述数据存储方法,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。

又一方面,本申请实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的数据存储方法,该方法包括:响应于每一数据采集对象的初始化指令,生成每一数据采集对象对应的模块数据的存储信息;若判断获知缓存中存在每一数据采集对象对应的模块数据,则根据存储信息,对每一数据采集对象对应的模块数据进行存储。

本申请实施例提供的非暂态计算机可读存储介质上存储的计算机程序被执行时,实现上述数据存储方法,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1