CN112631957A - 数据采集方法、装置、电子设备及存储介质 - Google Patents
数据采集方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112631957A CN112631957A CN202011475482.8A CN202011475482A CN112631957A CN 112631957 A CN112631957 A CN 112631957A CN 202011475482 A CN202011475482 A CN 202011475482A CN 112631957 A CN112631957 A CN 112631957A
- Authority
- CN
- China
- Prior art keywords
- data acquisition
- data
- writing
- module
- buffer area
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- 239000000872 buffer Substances 0.000 claims abstract description 160
- 238000004806 packaging method and process Methods 0.000 claims abstract description 10
- 230000008569 process Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 13
- 238000013480 data collection Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- IYZMXHQDXZKNCY-UHFFFAOYSA-N 1-n,1-n-diphenyl-4-n,4-n-bis[4-(n-phenylanilino)phenyl]benzene-1,4-diamine Chemical compound C1=CC=CC=C1N(C=1C=CC(=CC=1)N(C=1C=CC(=CC=1)N(C=1C=CC=CC=1)C=1C=CC=CC=1)C=1C=CC(=CC=1)N(C=1C=CC=CC=1)C=1C=CC=CC=1)C1=CC=CC=C1 IYZMXHQDXZKNCY-UHFFFAOYSA-N 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本申请实施例涉及计算机技术领域,提供了一种数据采集方法、装置、电子设备及存储介质,方法包括:获取每一数据采集对象对应的模块数据;将每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与目标缓冲区对应;基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中;其中,目标缓冲区为双缓冲区中的一个;读写标志位,为进行原子性封装后的变量,用于标识双缓冲区中当前可写的缓冲区。本申请实施例提供的数据采集方法、装置、电子设备及存储介质,通过双缓冲区缓存模块数据后再将数据写入磁盘,不是直接存储到硬盘中,能基于不同的缓存,改善冲突,数据采集的实时性更好,能提高系统的性能。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据采集方法、装置、电子设备及存储介质。
背景技术
在自动驾驶等场景中,需要对各模块数据进行采集,将收集到的数据写入指定的文件或汽车黑匣子。
现有方法多利用谷歌(Google)开源的一个日志库glog,实现日志分级(INFO/WARNING/ERROR/FATAL)和日志归档。Google glog定义了一系列宏,可简化许多常见的日志记录任务。基于Google glog,可以按照严重性级别记录消息,从命令行控制日志记录行为,基于条件记录日志,在不满足预期条件时中止程序,引入详细日志记录级别等。
但基于Google glog的方法,glog参数配置比较复杂,只能在启动程序的时候通过输入参数来配置,不够灵活。并且,默认情况下glog仅支持同步日志,大规模写日志的性能会受I/O速度影响;多线程写日志时glog缺省使用的读写锁和mutex锁也会消耗性能,而且对于多线程同步堵塞写I/O的模式,一旦出现I/O挂起的情况,所有worker线程都会堵住。
综上,现有数据采集方法存在性能差的不足。
发明内容
本申请提供一种数据采集方法、装置、电子设备及存储介质,以实现满足场景需求的数据采集。
本申请提供一种数据采集方法,包括:
获取每一数据采集对象对应的模块数据;
将所述每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与所述目标缓冲区对应;
基于用于写磁盘的线程和所述读写标志位,将所述双缓冲区中的数据写入磁盘中;
其中,所述目标缓冲区为所述双缓冲区中的一个;所述读写标志位,为进行原子性封装后的变量,用于标识所述双缓冲区中当前可写的缓冲区。
根据本申请提供的一种数据采集方法,所述获取每一数据采集对象对应的模块数据的具体步骤包括:
若判断获知所述每一数据采集对象的采集标识表示可写,则接收所述每一数据采集对象对应的模块数据。
根据本申请提供的一种数据采集方法,所述基于用于写磁盘的线程和所述读写标志位,将所述双缓冲区中的数据写入磁盘中的具体步骤包括:
基于预设的时间间隔,根据所述读写标志位,确定所述双缓冲区中当前能读出数据的缓冲区;
基于所述线程,将所述当前能读出数据的缓冲区中的数据写入磁盘中。
根据本申请提供的一种数据采集方法,所述接收所述每一数据采集对象对应的模块数据的具体步骤包括:
基于预先定义的数据采集宏,接收所述每一数据采集对象对应的模块数据。
根据本申请提供的一种数据采集方法,所述接收所述每一数据采集对象对应的模块数据的具体步骤包括:
基于用于保存二进制数据流的文件接口,接收所述每一数据采集对象对应的模块数据。
根据本申请提供的一种数据采集方法,所述基于预先定义的数据采集宏,接收所述每一数据采集对象对应的模块数据之后,还包括:
将所述每一数据采集对象对应的模块数据转换为格式化字符串存储于输出流对象ostringstream中。
本申请还提供一种数据采集装置,包括:
进程模块,用于获取每一数据采集对象对应的模块数据;
采集模块,用于将所述每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与所述目标缓冲区对应;
管理模块,用于基于用于写磁盘的线程和所述读写标志位,将所述双缓冲区中的数据写入磁盘中;
其中,所述目标缓冲区为所述双缓冲区中的一个;所述读写标志位,为进行原子性封装后的变量,用于标识所述双缓冲区中当前可写的缓冲区。
根据本申请提供的一种数据采集装置,所述进程模块,具体用于若判断获知所述每一数据采集对象的采集标识表示可写,则接收所述每一数据采集对象对应的模块数据。
根据本申请提供的一种数据采集装置,所述管理模块包括:
获取单元,用于基于预设的时间间隔,根据所述读写标志位,确定所述双缓冲区中当前能读出数据的缓冲区;
写入单元,用于基于所述线程,将所述当前能读出数据的缓冲区中的数据写入磁盘中。
本申请还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述数据采集方法的步骤。
本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据采集方法的步骤。
本申请提供的数据采集方法、装置、电子设备及存储介质,通过双缓冲区缓存模块数据后再将数据写入磁盘,不是直接存储到硬盘中,能基于不同的缓存,改善冲突,数据采集的实时性更好,能提高系统的性能。并且,通过采用独立线程、双缓冲机制,能满足当前自动驾驶系统等场景高并发日志吞吐量,该线程优先级较低,不会影响自动驾驶系统等场景中高优先级算法处理线程的运行。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的数据采集方法的流程示意图;
图2是本申请提供的数据采集方法中步骤103的实施方式的流程示意图;
图3是本申请提供的数据采集装置的结构示意图;
图4是本申请提供的数据采集装置的管理模块的结构示意图;
图5是本申请提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请实施例的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请实施例的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性,且不涉及顺序。
在本申请实施例的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请实施例中的具体含义。
为了克服现有技术的上述问题,本申请提供一种数据采集方法、装置、电子设备及存储介质,其构思是,使用异步IO实现高并发的日志吞吐量,将数据处理和写磁盘解耦,数据采集采取多线程无锁化编程,写文件线程只做IO,可以避免当磁盘满了等异常情况发生时主路径阻塞导致服务完全不可用。
图1是本申请提供的一种数据采集方法的流程示意图。下面结合图1描述本申请实施例的数据采集方法。如图1所示,该方法包括:步骤101、获取每一数据采集对象对应的模块数据。
具体地,数据采集对象为DataGather对象,是执行本申请提供的数据采集方法的程序中定义的对象。
每个模块数据的采集可以基于该模块数据对应的DataGather对象实现。任意两个模块数据对应的DataGather对象均不相同。
模块数据,指某一模块获取的数据。
例如,对于自动驾驶场景,模块数据可以是温度、温度传感器、速度、加速度、车轮转速和位置等数据。
该模块,可以为应用系统中的一个模块,用于实现一定的功能。上述一定的功能,至少包括采集若干种模块数据的功能。
由于模块可以用于采集若干种模块数据,每一模块数据对应一个DataGather对象,因而每个模块可以对应多个DataGather对象,将需要采集数据的信息写入不同文件。
步骤102、将每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与目标缓冲区对应。
其中,目标缓冲区为双缓冲区中的一个;读写标志位,为进行原子性封装后的变量,用于标识双缓冲区中当前可写的缓冲区。
具体地,对于每一DataGather对象,可以使用双缓冲区进行数据读写。
可以使用atomic对int类型的m_iFlag变量进行原子性封装,用m_iFlag来标识当前可写的缓冲区。m_iFlag为读写标志位。因此,对双缓冲区中的任意一个进行读写,均为原子操作。
Atomic是一个基于Fedora的用于运行Docker容器的原型系统,它从Fedora获取软件包,并扮演了一个“操作系统二进制文件的Git”的角色,允许对不同集合的软件包进行操作安装,并在它们之间进行原子的整体切换。
在多线程环境中,对atomic对象的访问不会造成竞争-冒险,利用std::atomic可实现数据结构的无锁设计,避免了锁的使用。并且,原子操作更加接近底层,因而效率更高。
双缓冲区中两个缓冲区分别为缓冲区0和缓冲区1,在对缓冲区0进行读操作时将m_iFlag置为1,表示当前可写缓冲区(即目标缓冲区)为缓冲区1,这时对缓冲区1(即m_svecData[m_iFlag])进行写操作便是一个原子操作,不会被其他线程打断。同时对缓冲区0只进行读操作,因此也是安全的。
同理,当需要读取缓冲区1时,将m_iFlag置为0,那么对缓冲区0(即m_svecData[m_iFlag])进行写操作也是安全的原子操作。
将每一数据采集对象对应的模块数据写入目标缓冲区时,可以默认给文件名加上时间戳后缀(例如年月日_时分秒)。
步骤103、基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中。
具体地,由于缓冲区采用了读写标志位的机制,可以单独起线程写磁盘,从当前可读(即非目标缓冲区)的缓冲区中读取已采集的模块数据并写入磁盘中,完成数据采集流程。
本申请实施例通过双缓冲区缓存模块数据后再将数据写入磁盘,不是直接存储到硬盘中,能基于不同的缓存,改善冲突,数据采集的实时性更好,能提高系统的性能。并且,通过采用独立线程、双缓冲机制,能满足当前自动驾驶系统等场景高并发日志吞吐量,该线程优先级较低,不会影响自动驾驶系统等场景中高优先级算法处理线程的运行。
基于上述各实施例的内容,获取每一数据采集对象对应的模块数据的具体步骤包括:若判断获知每一数据采集对象的采集标识表示可写,则接收每一数据采集对象对应的模块数据。
具体地,针对每个DataGather对象,可以添加采集标识。
采集标识,用于表示是否需要采集该DataGather对象对应的模块数据。
采集标识有两种取值:可写和不可写。
DataGather对象的采集标识设置为不可写时,将不再接收该DataGather对象对应的模块数据,也不将模块数据存入数据缓冲区。
DataGather对象的采集标识设置为可写时,接收该DataGather对象对应的模块数据,并存入数据缓冲区。
本申请实施例通过采集标识来判断是否接收数据采集对象对应的模块数据,能更方便、灵活地实现数据采集和停止数据采集。
图2是本申请提供的数据采集方法中步骤103的实施方式的流程示意图。基于上述各实施例的内容,如图2所示,基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中的具体步骤包括:步骤1031、基于预设的时间间隔,根据读写标志位,确定双缓冲区中当前能读出数据的缓冲区。
具体地,可以按照预设的时间间隔,根据每一DataGather对象的读写标志位,确定可以从该DataGather对象对应的双缓冲区中的哪一个缓冲区读出数据,该缓冲区为当前能读出数据的缓冲区。
例如,双缓冲区中两个缓冲区分别为缓冲区0和缓冲区1,读写标志位m_iFlag的值为1,则当前能读出数据的缓冲区为缓冲区0;读写标志位m_iFlag的值为0,则当前能读出数据的缓冲区为缓冲区1。
预设的时间间隔,可以根据实际情况设定,例如200ms。对于预设的时间间隔的具体时长,本申请实施例不进行具体限定。
步骤1032、基于线程,将当前能读出数据的缓冲区中的数据写入磁盘中。
具体地,可以单独起线程写磁盘,从当前能读出数据的缓冲区中读出数据,并将读出的数据写入磁盘中。
本申请实施例基于预设的时间间隔,根据读写标志位,确定双缓冲区中当前能读出数据的缓冲区,基于线程,将当前能读出数据的缓冲区中的数据写入磁盘中,能更及时地将模块数据写入磁盘,能提高系统的性能。
基于上述各实施例的内容,接收每一数据采集对象对应的模块数据的具体步骤包括:基于预先定义的数据采集宏,接收每一数据采集对象对应的模块数据。
具体地,为了接收每一数据采集对象对应的模块数据,需要格式化数据采集信息。
格式化数据采集信息,可以通过DataStream定义数据采集宏“#define TDATA(n)DataStream(n).stream()”,宏中的n指代DataGather对象的ID。
通过预先定义的数据采集宏DataStream,可以接收每一DataGather对象对应的模块数据。
本申请实施例通过数据采集宏接收每一数据采集对象对应的模块数据,能提高数据采集的效率。
基于上述各实施例的内容,基于预先定义的数据采集宏,接收每一数据采集对象对应的模块数据之后,还包括:将每一数据采集对象对应的模块数据转换为格式化字符串存储于输出流对象ostringstream中。
具体地,可以通过DataCache管理所有DataGather使用的ostringstream输出流对象,配合DataStream使用,将数据采集信息转为格式化字符串存储在ostringstream中,避免申请大量的缓冲区。
本申请实施例通过输出流对象配合数据采集宏,能避免申请大量的缓冲区,从而能提高数据采集的效率和系统性能。
基于上述各实施例的内容,接收每一数据采集对象对应的模块数据的具体步骤包括:基于用于保存二进制数据流的文件接口,接收每一数据采集对象对应的模块数据。
具体地,格式化数据采集信息,还可以通过提供用于保存二进制的数据流到文件接口,以实现二进制数据采集。
本申请实施例通过提供用于保存二进制的数据流到文件接口,进行二进制数据采集,能提高数据采集的效率。
下面对本申请提供的数据采集装置进行描述,下文描述的数据采集装置与上文描述的数据采集方法可相互对应参照。
图3是根据本申请实施例提供的数据采集装置的结构示意图。基于上述各实施例的内容,如图3所示,该装置包括进程模块301、采集模块302和管理模块303,其中:
进程模块301,用于获取每一数据采集对象对应的模块数据;
采集模块302,用于将每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与目标缓冲区对应;
管理模块303,用于基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中;
其中,目标缓冲区为双缓冲区中的一个;读写标志位,为进行原子性封装后的变量,用于标识双缓冲区中当前可写的缓冲区。
具体地,进程模块301、采集模块302和管理模块303顺次电连接。
进程模块301、采集模块302和管理模块303可以分别为DataProcess模块、DataGather模块和DataManage模块。
进程模块301可以基于每一模块数据对应的DataGather对象,实现采集该模块数据。
采集模块302对于每一DataGather对象,可以使用双缓冲区进行数据读写。
可以使用atomic对int类型的m_iFlag变量进行原子性封装,用m_iFlag来标识当前可写的缓冲区。m_iFlag为读写标志位。因此,对双缓冲区中的任意一个进行读写,均为原子操作。
管理模块303可以单独起线程写磁盘,从当前可读(即非目标缓冲区)的缓冲区中读取已采集的模块数据并写入磁盘中,完成数据采集流程。
管理模块303可以采用单例模式,整个系统只有一个DataManage实例,确保数据采集对象管理的一致性。
需要说明的是,进程模块301用于基于预先定义的数据采集宏,接收每一数据采集对象对应的模块数据。
进程模块301还可以用于将每一数据采集对象对应的模块数据转换为格式化字符串存储于输出流对象ostringstream中。
进程模块301还可以用于基于用于保存二进制数据流的文件接口,接收每一数据采集对象对应的模块数据。
本申请实施例提供的数据采集装置,用于执行本申请上述数据采集方法,其实施方式与本申请提供的数据采集方法的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
该数据采集装置用于前述各实施例的数据采集方法。因此,在前述各实施例中的数据采集方法中的描述和定义,可以用于本申请实施例中各执行模块的理解。
本申请实施例通过双缓冲区缓存模块数据后再将数据写入磁盘,不是直接存储到硬盘中,能基于不同的缓存,改善冲突,数据采集的实时性更好,能提高系统的性能。并且,通过采用独立线程、双缓冲机制,能满足当前自动驾驶系统等场景高并发日志吞吐量,该线程优先级较低,不会影响自动驾驶系统等场景中高优先级算法处理线程的运行。
基于上述各实施例的内容,进程模块,具体用于若判断获知每一数据采集对象的采集标识表示可写,则接收每一数据采集对象对应的模块数据。
具体地,进程模块针对每个DataGather对象,判断采集标识表示可写还是不可写。
DataGather对象的采集标识设置为可写时,接收该DataGather对象对应的模块数据,并存入数据缓冲区。
本申请实施例通过采集标识来判断是否接收数据采集对象对应的模块数据,能更方便、灵活地实现数据采集和停止数据采集。
图4是本申请提供的数据采集装置的管理模块的结构示意图。基于上述各实施例的内容,如图4所示,管理模块包括:
获取单元401,用于基于预设的时间间隔,根据读写标志位,确定双缓冲区中当前能读出数据的缓冲区;
写入单元402,用于基于线程,将当前能读出数据的缓冲区中的数据写入磁盘中。
具体地,获取单元401与写入单元402电连接。
获取单元401可以按照预设的时间间隔,根据每一DataGather对象的读写标志位,确定可以从该DataGather对象对应的双缓冲区中的哪一个缓冲区读出数据,该缓冲区为当前能读出数据的缓冲区。
写入单元402可以单独起线程写磁盘,从当前能读出数据的缓冲区中读出数据,并将读出的数据写入磁盘中。
本申请实施例基于预设的时间间隔,根据读写标志位,确定双缓冲区中当前能读出数据的缓冲区,基于线程,将当前能读出数据的缓冲区中的数据写入磁盘中,能更及时地将模块数据写入磁盘,能提高系统的性能。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储在存储器530中并可在处理器510上运行的逻辑指令,以执行上述各方法实施例提供的数据采集方法,该方法包括:获取每一数据采集对象对应的模块数据;将每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与目标缓冲区对应;基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中;其中,目标缓冲区为双缓冲区中的一个;读写标志位,为进行原子性封装后的变量,用于标识双缓冲区中当前可写的缓冲区。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例提供的电子设备中的处理器510可以调用存储器530中的逻辑指令,其实施方式与本申请提供的数据采集方法的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
另一方面,本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的数据采集方法,该方法包括:获取每一数据采集对象对应的模块数据;将每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与目标缓冲区对应;基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中;其中,目标缓冲区为双缓冲区中的一个;读写标志位,为进行原子性封装后的变量,用于标识双缓冲区中当前可写的缓冲区。
本申请实施例提供的计算机程序产品被执行时,实现上述数据采集方法,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
又一方面,本申请实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的数据采集方法,该方法包括:获取每一数据采集对象对应的模块数据;将每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与目标缓冲区对应;基于用于写磁盘的线程和读写标志位,将双缓冲区中的数据写入磁盘中;其中,目标缓冲区为双缓冲区中的一个;读写标志位,为进行原子性封装后的变量,用于标识双缓冲区中当前可写的缓冲区。
本申请实施例提供的非暂态计算机可读存储介质上存储的计算机程序被执行时,实现上述数据采集方法,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (11)
1.一种数据采集方法,其特征在于,包括:
获取每一数据采集对象对应的模块数据;
将所述每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与所述目标缓冲区对应;
基于用于写磁盘的线程和所述读写标志位,将所述双缓冲区中的数据写入磁盘中;
其中,所述目标缓冲区为所述双缓冲区中的一个;所述读写标志位,为进行原子性封装后的变量,用于标识所述双缓冲区中当前可写的缓冲区。
2.根据权利要求1所述的数据采集方法,其特征在于,所述获取每一数据采集对象对应的模块数据的具体步骤包括:
若判断获知所述每一数据采集对象的采集标识表示可写,则接收所述每一数据采集对象对应的模块数据。
3.根据权利要求1或2所述的数据采集方法,其特征在于,所述基于用于写磁盘的线程和所述读写标志位,将所述双缓冲区中的数据写入磁盘中的具体步骤包括:
基于预设的时间间隔,根据所述读写标志位,确定所述双缓冲区中当前能读出数据的缓冲区;
基于所述线程,将所述当前能读出数据的缓冲区中的数据写入磁盘中。
4.根据权利要求2所述的数据采集方法,其特征在于,所述接收所述每一数据采集对象对应的模块数据的具体步骤包括:
基于预先定义的数据采集宏,接收所述每一数据采集对象对应的模块数据。
5.根据权利要求2所述的数据采集方法,其特征在于,所述接收所述每一数据采集对象对应的模块数据的具体步骤包括:
基于用于保存二进制数据流的文件接口,接收所述每一数据采集对象对应的模块数据。
6.根据权利要求4所述的数据采集方法,其特征在于,所述基于预先定义的数据采集宏,接收所述每一数据采集对象对应的模块数据之后,还包括:
将所述每一数据采集对象对应的模块数据转换为格式化字符串存储于输出流对象ostringstream中。
7.一种数据采集装置,其特征在于,包括:
进程模块,用于获取每一数据采集对象对应的模块数据;
采集模块,用于将所述每一数据采集对象对应的模块数据写入双缓冲区中的目标缓冲区,并将读写标志位修改为与所述目标缓冲区对应;
管理模块,用于基于用于写磁盘的线程和所述读写标志位,将所述双缓冲区中的数据写入磁盘中;
其中,所述目标缓冲区为所述双缓冲区中的一个;所述读写标志位,为进行原子性封装后的变量,用于标识所述双缓冲区中当前可写的缓冲区。
8.根据权利要求7所述的数据采集装置,其特征在于,所述进程模块,具体用于若判断获知所述每一数据采集对象的采集标识表示可写,则接收所述每一数据采集对象对应的模块数据。
9.根据权利要求7或8所述的数据采集装置,其特征在于,所述管理模块包括:
获取单元,用于基于预设的时间间隔,根据所述读写标志位,确定所述双缓冲区中当前能读出数据的缓冲区;
写入单元,用于基于所述线程,将所述当前能读出数据的缓冲区中的数据写入磁盘中。
10.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述数据采集方法的步骤。
11.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述数据采集方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011475482.8A CN112631957B (zh) | 2020-12-14 | 2020-12-14 | 数据采集方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011475482.8A CN112631957B (zh) | 2020-12-14 | 2020-12-14 | 数据采集方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112631957A true CN112631957A (zh) | 2021-04-09 |
CN112631957B CN112631957B (zh) | 2024-04-05 |
Family
ID=75312824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011475482.8A Active CN112631957B (zh) | 2020-12-14 | 2020-12-14 | 数据采集方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112631957B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641306A (zh) * | 2021-07-28 | 2021-11-12 | 通号城市轨道交通技术有限公司 | 车载ato与车载atp的数据交互方法及装置 |
CN114040136A (zh) * | 2021-11-05 | 2022-02-11 | 北京京东乾石科技有限公司 | 轨道巡检装置、图像处理方法、装置、设备和介质 |
CN116700965A (zh) * | 2023-05-30 | 2023-09-05 | 北京瑞泰兴成工程技术有限公司 | 一种基于分布式的数据采集方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309767A (zh) * | 2012-03-08 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种客户端日志处理方法和装置 |
US20140006698A1 (en) * | 2012-06-28 | 2014-01-02 | Robert S. Chappell | Hybrid Cache State And Filter Tracking Of Memory Operations During A Transaction |
US20140032828A1 (en) * | 2012-07-27 | 2014-01-30 | Nvidia Corporation | System, method, and computer program product for copying data between memory locations |
CN103577158A (zh) * | 2012-07-18 | 2014-02-12 | 阿里巴巴集团控股有限公司 | 数据处理方法与装置 |
CN107305525A (zh) * | 2016-04-22 | 2017-10-31 | 上海真虹信息科技有限公司 | 一种基于双缓冲同步机制的测试数据处理方法 |
WO2019057000A1 (zh) * | 2017-09-21 | 2019-03-28 | 阿里巴巴集团控股有限公司 | 日志写入方法、装置及系统 |
CN111666330A (zh) * | 2019-03-06 | 2020-09-15 | 阿里巴巴集团控股有限公司 | 数据的读写方法和装置 |
-
2020
- 2020-12-14 CN CN202011475482.8A patent/CN112631957B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309767A (zh) * | 2012-03-08 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种客户端日志处理方法和装置 |
US20140006698A1 (en) * | 2012-06-28 | 2014-01-02 | Robert S. Chappell | Hybrid Cache State And Filter Tracking Of Memory Operations During A Transaction |
CN103577158A (zh) * | 2012-07-18 | 2014-02-12 | 阿里巴巴集团控股有限公司 | 数据处理方法与装置 |
US20140032828A1 (en) * | 2012-07-27 | 2014-01-30 | Nvidia Corporation | System, method, and computer program product for copying data between memory locations |
CN107305525A (zh) * | 2016-04-22 | 2017-10-31 | 上海真虹信息科技有限公司 | 一种基于双缓冲同步机制的测试数据处理方法 |
WO2019057000A1 (zh) * | 2017-09-21 | 2019-03-28 | 阿里巴巴集团控股有限公司 | 日志写入方法、装置及系统 |
CN111666330A (zh) * | 2019-03-06 | 2020-09-15 | 阿里巴巴集团控股有限公司 | 数据的读写方法和装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641306A (zh) * | 2021-07-28 | 2021-11-12 | 通号城市轨道交通技术有限公司 | 车载ato与车载atp的数据交互方法及装置 |
CN114040136A (zh) * | 2021-11-05 | 2022-02-11 | 北京京东乾石科技有限公司 | 轨道巡检装置、图像处理方法、装置、设备和介质 |
CN116700965A (zh) * | 2023-05-30 | 2023-09-05 | 北京瑞泰兴成工程技术有限公司 | 一种基于分布式的数据采集方法及系统 |
CN116700965B (zh) * | 2023-05-30 | 2024-06-21 | 北京瑞泰兴成工程技术有限公司 | 一种基于分布式的数据采集方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112631957B (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112631957A (zh) | 数据采集方法、装置、电子设备及存储介质 | |
CN108874624B (zh) | 服务器、监控Java进程的方法及存储介质 | |
CN107809467B (zh) | 一种云环境下容器镜像数据的删减方法 | |
CN110046029A (zh) | 应用于集群内多级缓存的数据处理方法和装置 | |
CN104735107A (zh) | 分布式存储系统中数据副本恢复方法及装置 | |
CN104462612A (zh) | 一种监控数据库信息的方法和设备 | |
CN108829345B (zh) | 日志文件的数据处理方法和终端设备 | |
CN117591327A (zh) | core文件生成方法、装置、电子设备及存储介质 | |
CN110764962A (zh) | 日志处理方法和装置 | |
CN115840654B (zh) | 消息的处理方法、系统、计算设备及可读存储介质 | |
CN112015159B (zh) | 一种基于双核mcu的故障记录存储方法及计算机系统 | |
CN112015529A (zh) | 数据任务调度方法、系统、电子设备及存储介质 | |
CN112948336B (zh) | 数据加速方法及缓存单元、电子设备及存储介质 | |
CN112631513A (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN112817717A (zh) | 一种定时任务的调度方法及装置 | |
CN108664578B (zh) | 一种文件循环存储方法及系统 | |
CA2373698C (en) | Method, system and computer program for comparing a first specification with a second specification | |
CN115640269B (zh) | 一种基于按需复制的安卓应用安装加速方法 | |
CN118394284B (zh) | 数据处理方法、独立磁盘冗余阵列卡、产品、装置及介质 | |
CN118626143A (zh) | 基于bmt的内存数据交换控制方法和系统 | |
CN116578413B (zh) | 一种基于云+端架构的信号级仿真模型云化方法 | |
CN112559052B (zh) | 一种指令集调用方法、装置、终端及存储介质 | |
CN118354004B (zh) | 一种卫星图像传输方法、装置、介质及设备 | |
CN116894275B (zh) | 页表的更新方法、服务器、图形处理器、芯片及存储介质 | |
CN112000517B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240513 Address after: Room 6227, No. 999, Changning District, Shanghai 200050 Patentee after: Shenlan robot (Shanghai) Co.,Ltd. Country or region after: China Address before: 518000 room 115, building 8, 1970 Science Park, Minzhi community, Minzhi street, Longhua District, Shenzhen City, Guangdong Province Patentee before: Shenlan artificial intelligence (Shenzhen) Co.,Ltd. Country or region before: China |
|
TR01 | Transfer of patent right |