CN111858579A - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN111858579A CN111858579A CN201910361677.0A CN201910361677A CN111858579A CN 111858579 A CN111858579 A CN 111858579A CN 201910361677 A CN201910361677 A CN 201910361677A CN 111858579 A CN111858579 A CN 111858579A
- Authority
- CN
- China
- Prior art keywords
- sample data
- queue
- storing
- data
- remote
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例公开了一种数据存储方法及装置,涉及数据处理技术领域。其中方法包括:获取监控指标的多个样本数据;将所述多个样本数据逐个存储到本地内存和临时缓存队列;监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列;以及将所述远程存储队列中的所述样本数据存储到远程数据库。多个线程同时进行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列,保证临时缓存队列不被打满。降低了将样本数据存入远程数据库的时间,提高了样本数据的存储效率。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种数据存储方法及装置。
背景技术
无论是车间生产流水线,还是大数据云计算等集群类服务,都需要进行系统的监控和告警,从而尽早发现潜在问题,规避风险,保证服务的持续正常运转。目前,通常采用诸如Ganglia等集群监控系统对集群设备中目标设备的监控指标进行监控,采集监控样本数据,并将监控样本数据存储在数据库中。
相关技术中,存储监控样本数据的方式结合了本地存储和远程存储两种方式,即将监控样本数据存储到本地内存和远程数据库中。在这种存储方式中,应用服务器通过访问本地内存获取监控样本数据,与该应用服务器属于同一应用服务器集群的其他应用服务器通过访问远程数据库获取监控样本数据。然而,目前,将监控样本数据存入本地内存和写入远程数据库的存储操作是串行操作,只有当一个监本样本数据完成存入本地内存和写入远程数据库的串行操作之后,才能读取下一个监控样本数据进而将下一个监控样本数据存入本地内存和写入远程数据库。当监控样本数据的样本数非常大时,会导致将全部样本数据写入本地内存和远程数据库的整体时间过长,降低监控样本数据的存储效率。
发明内容
为了克服相关技术中存在的将监控样本数据存入本地内存和写入远程数据库的耗时长、存储效率低的问题,本发明实施例提供了一种数据存储方法和装置,多个线程同时进行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列,保证临时缓存队列不被打满。降低了将样本数据存入远程数据库的时间,提高了样本数据的存储效率。
根据本发明的一方面,提供一种数据存储方法,其特征在于,包括:
获取监控指标的多个样本数据;
将所述多个样本数据逐个存储到本地内存和临时缓存队列;
监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列;以及
将所述远程存储队列中的所述样本数据存储到远程数据库。
优选地,所述的数据存储方法,还包括:
监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将所述样本数据存储到所述远程存储队列。
优选地,所述将所述多个样本数据逐个存储到本地内存和临时缓存队列,包括:
逐个读取所述多个样本数据,将当前读取的所述样本数据作为第一样本数据;
判断所述第一样本数据是否已经被标记为被丢弃;
如果所述第一样本数据已经被标记为被丢弃,则读取下一个所述样本数据;
如果所述第一样本数据没有被标记为被丢弃,则将所述第一样本数据存储到所述本地内存和所述临时缓存队列。
优选地,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,包括:
判断所述本地内存中是否存在所述第一样本数据所属于的所述监控指标对应的本地存储单元;
如果所述本地内存中存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则将所述第一样本数据存储到所述本地存储单元中;
如果所述本地内存中不存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则在所述本地内存创建所述监控指标对应的本地存储单元后,将所述第一样本数据存储到所述本地存储单元中。
优选地,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,还包括:
判断所述临时缓存队列的长度是否超过预设阈值;
如果所述临时缓存队列的长度超过所述预设阈值,则将所述第一样本数据标记为被丢弃并且写入日志信息;
如果所述临时缓存队列的长度没有超过所述预设阈值,则将所述第一样本数据插入到所述临时缓存队列的队尾。
优选地,所述启动空闲线程来将所述样本数据存储到远程存储队列,包括:
将当前处于所述临时缓存队列的队首的所述样本数据作为第二样本数据,对所述第二样本数据进行出队操作;
在所述空闲线程,克隆所述第二样本数据的所述监控指标,为所述第二样本数据添加额外标签,重新调整所述第二样本数据的标签;
对所述第二样本数据进行入队操作,插入所述远程存储队列。
优选地,所述将所述远程存储队列中的所述样本数据存储到远程数据库,包括:
监听所述远程存储队列,如果所述远程存储队列中存储有所述第二样本数据,则当前处于所述远程存储队列的队首的所述第二样本数据出队后,将所述第二样本数据存储到数组中;
如果所述数组中的所述第二样本数据的数量大于等于设定数值,则将所述数组中的所述第二样本数据存储到所述远程数据库;
如果将所述数组中的所述第二样本数据存储到所述远程数据库的等待时间大于等于设定时间,则将所述数组中的所述第二样本数据存储到所述远程数据库。
根据本发明的另一方面,提供一种数据存储装置,包括:
获取单元,被配置为获取监控指标的多个样本数据;
第一存储单元,被配置为将所述多个样本数据逐个存储到本地内存和临时缓存队列;
第二存储单元,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列;以及
第三存储单元,被配置为将所述远程存储队列中的所述样本数据存储到远程数据库。
优选地,所述的数据存储装置,还包括:
第四存储单元,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将所述样本数据存储到所述远程存储队列。
优选地,所述将所述多个样本数据逐个存储到本地内存和临时缓存队列,包括:
逐个读取所述多个样本数据,将当前读取的所述样本数据作为第一样本数据;
判断所述第一样本数据是否已经被标记为被丢弃;
如果所述第一样本数据已经被标记为被丢弃,则读取下一个所述样本数据;
如果所述第一样本数据没有被标记为被丢弃,则将所述第一样本数据存储到所述本地内存和所述临时缓存队列。
优选地,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,包括:
判断所述本地内存中是否存在所述第一样本数据所属于的所述监控指标对应的本地存储单元;
如果所述本地内存中存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则将所述第一样本数据存储到所述本地存储单元中;
如果所述本地内存中不存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则在所述本地内存创建所述监控指标对应的本地存储单元后,将所述第一样本数据存储到所述本地存储单元中。
优选地,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,还包括:
判断所述临时缓存队列的长度是否超过预设阈值;
如果所述临时缓存队列的长度超过所述预设阈值,则将所述第一样本数据标记为被丢弃并且写入日志信息;
如果所述临时缓存队列的长度没有超过所述预设阈值,则将所述第一样本数据插入到所述临时缓存队列的队尾。
优选地,所述启动空闲线程来将所述样本数据存储到远程存储队列,包括:
将当前处于所述临时缓存队列的队首的所述样本数据作为第二样本数据,对所述第二样本数据进行出队操作;
在所述空闲线程,克隆所述第二样本数据的所述监控指标,为所述第二样本数据添加额外标签,重新调整所述第二样本数据的标签;
对所述第二样本数据进行入队操作,插入所述远程存储队列。
优选地,所述将所述远程存储队列中的所述样本数据存储到远程数据库,包括:
监听所述远程存储队列,如果所述远程存储队列中存储有所述第二样本数据,则当前处于所述远程存储队列的队首的所述第二样本数据出队后,将所述第二样本数据存储到数组中;
如果所述数组中的所述第二样本数据的数量大于等于设定数值,则将所述数组中的所述第二样本数据存储到所述远程数据库;
如果将所述数组中的所述第二样本数据存储到所述远程数据库的等待时间大于等于设定时间,则将所述数组中的所述第二样本数据存储到所述远程数据库。
根据本发明的又一方面,提供一种数据存储控制装置,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述的数据存储方法。
根据本发明的再一方面,提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令被执行时实现如上所述的数据存储方法。
根据本发明的再一方面,提供一种计算机程序产品,包括计算机程序产品,所述计算机程序包括程序指令,当所述程序指令被移动终端执行时,使所述移动终端执行上述数据存储方法的步骤。
本发明的一个实施例具有以下优点或有益效果:
获取监控指标的多个样本数据。可以利用Prometheus开源监控系统向目标设备发送http请求,通过http协议周期性抓取目标设备的一个监控指标的多个样本数据。将目标设备的一个监控指标的多个样本数据逐个存储到本地内存和临时缓存队列。监听临时缓存队列,当临时缓存队列中存储有样本数据时,在有空闲线程的情况下,启动空闲线程来将样本数据存储到远程存储队列。将远程存储队列中的样本数据存储到远程数据库。本申请实施例将样本数据写于临时缓存队列,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。多个线程同时进行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列,保证临时缓存队列不被打满。降低了将样本数据存入远程数据库的时间,提高了样本数据的存储效率。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示出本发明的一个实施例的数据存储方法的流程示意图。
图2示出本发明的一个实施例的数据存储方法的流程示意图。
图3示出本发明的一个实施例的数据存储方法的流程框图。
图4示出本发明的一个实施例的数据存储装置的结构示意图。
图5示出本发明的一个实施例的数据存储装置的结构示意图。
图6示出本发明的一个实施例的数据存储控制装置的结构示意图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
图1是本发明的一个实施例的数据存储方法的流程示意图。具体包括以下步骤:
在步骤S101中,获取监控指标的多个样本数据。
Prometheus(普罗米修斯)是一套使用Go语音开发的开源监控系统,基本原理是通过http(超文本传输)协议周期性抓取目标设备的某个监控指标的监控样本数据进行监控,任意目标设备只要提供对应的http接口就可以接入监控。
在本步骤中,获取监控指标的多个样本数据。可以利用Prometheus开源监控系统向目标设备发送http请求,通过http协议周期性抓取目标设备的一个监控指标的多个样本数据。例如,通过http协议周期性抓取云主机的cpu(中央处理器)利用率这一监控指标的多个样本数据。可以默认30秒抓取一次。
在步骤S102中,将所述多个样本数据逐个存储到本地内存和临时缓存队列。
在该步骤中,将目标设备的一个监控指标的多个样本数据逐个存储到本地内存和临时缓存队列。例如,将云主机的cpu利用率这一监控指标的多个样本数据逐个存入本地内存和临时缓存队列。
在步骤S103中,监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列。
在该步骤中,监听临时缓存队列,当临时缓存队列中存储有样本数据时,在有空闲线程的情况下,启动空闲线程来将样本数据存储到远程存储队列。具体地,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数没有达到上限,则启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。可以理解的是,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。
在步骤S104中,将所述远程存储队列中的所述样本数据存储到远程数据库。
在该步骤中,将远程存储队列中的样本数据存储到远程数据库。可以起另外一个线程负责监听远程存储队列,如果远程存储队列中有样本数据,则将其取出加入到数组中。如果数组中的样本数据的数量达到设定数值,例如200,则将数组中的样本数据写入远程数据库;如果数组中的样本数据的数量没有达到设定数值,例如200,则继续将远程存储队列中的样本数据取出并加入到数组中。如果将数组中的样本数据写入远程数据库的等待时间达到设定时间,例如5s,则将数组中的样本数据写入远程数据库;如果将数组中的样本数据写入远程数据库的等待时间没有达到设定时间,例如5s,则继续等待。
根据本发明实施例,获取监控指标的多个样本数据。可以利用Prometheus开源监控系统向目标设备发送http请求,通过http协议周期性抓取目标设备的一个监控指标的多个样本数据。将目标设备的一个监控指标的多个样本数据逐个存储到本地内存和临时缓存队列。监听临时缓存队列,当临时缓存队列中存储有样本数据时,在有空闲线程的情况下,启动空闲线程来将样本数据存储到远程存储队列。将远程存储队列中的样本数据存储到远程数据库。
本申请实施例将样本数据写于临时缓存队列,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。多个线程同时进行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列,保证临时缓存队列不被打满。降低了将样本数据存入远程数据库的时间,提高了样本数据的存储效率。
图2是本发明的一个实施例的数据存储方法的流程示意图。本实施例是比前述实施例更加完善的数据存储方法。
图3是本发明的一个实施例的数据存储方法的流程框图。具体描述:首先,将多个样本数据逐个存储到本地内存和临时缓存队列。然后,监听临时缓存队列,当临时缓存队列中存储有样本数据时,根据线程的工作和空闲情况,启动空闲线程来将样本数据存储到远程存储队列。最后,将远程存储队列中的样本数据存储到远程数据库。
下面结合图3详细描述图2所示的数据存储方法,具体包括以下步骤:
在步骤S201中,获取监控指标的多个样本数据。
该步骤与图1中的步骤S101一致,这里就不再赘述。
在步骤S202中,将所述多个样本数据逐个存储到本地内存和临时缓存队列。
在该步骤中,逐个读取多个样本数据,将当前读取的样本数据作为第一样本数据。判断第一样本数据是否已经被标记为被丢弃。如果第一样本数据已经被标记为被丢弃,则读取下一个样本数据;如果第一样本数据没有被标记为被丢弃,则将第一样本数据存储到本地内存和临时缓存队列。可以通过查询日志信息的方式来判断第一样本数据是否已经被标记为被丢弃。
将第一样本数据存储到本地内存和临时缓存队列,具体包括:
判断本地内存中是否存在第一样本数据所属于的监控指标对应的本地存储单元。如果本地内存中存在第一样本数据所属于的监控指标对应的本地存储单元,则将第一样本数据存储到本地存储单元中。如果本地内存中不存在第一样本数据所属于的监控指标对应的本地存储单元,则在本地内存创建监控指标对应的本地存储单元后,将第一样本数据存储到本地存储单元中。
将第一样本数据存储到本地内存后,判断临时缓存队列的长度是否超过预设阈值。如果临时缓存队列的长度超过预设阈值,则将第一样本数据标记为被丢弃并且写入日志信息。如果临时缓存队列的长度没有超过预设阈值,则将第一样本数据插入到临时缓存队列的队尾。如图3所示,在第一样本数据插入临时缓存队列后,可以读取下一个样本数据,将下一个样本数据存入本地内存,而第一样本数据则在临时缓存队列中按照队列顺序等待,在有空闲线程的情况下,启动空闲线程来将该第一样本数据存储到远程存储队列。
利用Prometheus开源监控系统向目标设备发送http请求,通过http协议周期性抓取目标设备的一个监控指标的多个样本数据。当多个样本数据存入本地内存的时间缩短后,可以进一步的缩短通过http协议周期性抓取目标设备的一个监控指标的多个样本数据的时间周期。
在步骤S203中,监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列。
在该步骤中,监听临时缓存队列,当临时缓存队列中存储有样本数据时,在有空闲线程的情况下,启动空闲线程来将样本数据存储到远程存储队列。具体地,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数没有达到上限,则启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。
启动空闲线程来将样本数据存储到远程存储队列,可以是将当前处于临时缓存队列的队首的样本数据作为第二样本数据,对第二样本数据进行出队操作。在空闲线程,克隆第二样本数据的监控指标,为第二样本数据添加额外标签,重新调整第二样本数据的标签。对第二样本数据进行入队操作,插入远程存储队列。可以理解的是,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。如图3所示,启动3个空闲线程来分别按照临时缓存队列的出队顺序,将临时缓存队列中的3个样本数据存储到远程存储队列。在这三个并行的线程中,分别克隆样本数据的监控指标,为样本数据添加额外标签,重新调整样本数据的标签。按照这3个线程执行完克隆样本数据的监控指标、为样本数据添加额外标签和重新调整样本数据的标签的操作的先后顺序,将这3个线程中的样本数据,逐个插入远程存储队列。
在步骤204中,监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将所述样本数据存储到所述远程存储队列。
在该步骤中,监听临时缓存队列,当临时缓存队列中存储有样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将样本数据存储到远程存储队列。具体地,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数达到上限,则目前没有空闲线程。等待处于工作状态的线程工作完毕后,启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。
启动空闲线程来将样本数据存储到远程存储队列,可以是将当前处于临时缓存队列的队首的样本数据作为第二样本数据,对第二样本数据进行出队操作。在空闲线程,克隆第二样本数据的监控指标,为第二样本数据添加额外标签,重新调整第二样本数据的标签。对第二样本数据进行入队操作,插入远程存储队列。可以理解的是,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。如图3所示,启动3个空闲线程来分别按照临时缓存队列的出队顺序,将临时缓存队列中的3个样本数据存储到远程存储队列。在这三个并行的线程中,分别克隆样本数据的监控指标,为样本数据添加额外标签,重新调整样本数据的标签。按照这3个线程执行完克隆样本数据的监控指标、为样本数据添加额外标签和重新调整样本数据的标签的操作的先后顺序,将这3个线程中的样本数据,逐个插入远程存储队列。
在步骤205中,将所述远程存储队列中的所述样本数据存储到远程数据库。
在该步骤中,监听远程存储队列,如果远程存储队列中存储有第二样本数据,则当前处于远程存储队列的队首的第二样本数据出队后,将第二样本数据存储到数组中。
如果所述数组中的所述第二样本数据的数量大于等于设定数值,例如200,则将数组中的第二样本数据批量存储到远程数据库;如果数组中的第二样本数据的数量小于设定数值,例如200,则继续将远程存储队列中的样本数据取出并加入到数组中。
如果将数组中的第二样本数据存储到远程数据库的等待时间大于等于设定时间,例如5s,则将数组中的第二样本数据批量存储到远程数据库;如果将数组中的样本数据写入远程数据库的等待时间小于设定时间,例如5s,则继续等待。
根据本发明的实施例,判断本地内存中是否存在第一样本数据所属于的监控指标对应的本地存储单元。如果本地内存中存在第一样本数据所属于的监控指标对应的本地存储单元,则将第一样本数据存储到本地存储单元中。如果本地内存中不存在第一样本数据所属于的监控指标对应的本地存储单元,则在本地内存创建监控指标对应的本地存储单元后,将第一样本数据存储到本地存储单元中。判断临时缓存队列的长度是否超过预设阈值。如果临时缓存队列的长度超过预设阈值,则将第一样本数据标记为被丢弃并且写入日志信息。如果临时缓存队列的长度没有超过预设阈值,则将第一样本数据插入到临时缓存队列的队尾。在第一样本数据插入临时缓存队列后,可以读取下一个样本数据,将下一个样本数据存入本地内存,而第一样本数据则在临时缓存队列中按照队列顺序等待,当有空闲线程的情况下,启动空闲线程来将该第一样本数据存储到远程存储队列。将第一样本数据插入临时缓存队列,不阻塞将监控指标的后续多个样本数据存入本地内存,缩短了将样本数据写入本地内存的时间,进一步提高了样本数据的存储效率。
图4是本发明的一个实施例的数据存储装置的结构示意图。如图4所示,该数据存储装置包括:获取单元401、第一存储单元402、第二存储单元403和第三存储单元404。
获取单元401,被配置为获取监控指标的多个样本数据。
Prometheus(普罗米修斯)是一套使用Go语音开发的开源监控系统,基本原理是通过http(超文本传输)协议周期性抓取目标设备的某个监控指标的监控样本数据进行监控,任意目标设备只要提供对应的http接口就可以接入监控。
该单元被配置为获取监控指标的多个样本数据。可以利用Prometheus开源监控系统向目标设备发送http请求,通过http协议周期性抓取目标设备的一个监控指标的多个样本数据。例如,通过http协议周期性抓取云主机的cpu(中央处理器)利用率这一监控指标的多个样本数据。可以默认30秒抓取一次。
第一存储单元402,被配置为将所述多个样本数据逐个存储到本地内存和临时缓存队列。
该单元被配置为将目标设备的一个监控指标的多个样本数据逐个存储到本地内存和临时缓存队列。例如,将云主机的cpu利用率这一监控指标的多个样本数据逐个存入本地内存和临时缓存队列。
第二存储单元403,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列。
该单元被配置为监听临时缓存队列,当临时缓存队列中存储有样本数据时,在有空闲线程的情况下,启动空闲线程来将样本数据存储到远程存储队列。具体地,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数没有达到上限,则启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。可以理解的是,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。
第三存储单元404,被配置为将所述远程存储队列中的所述样本数据存储到远程数据库。
该单元被配置为将远程存储队列中的样本数据存储到远程数据库。可以起另外一个线程负责监听远程存储队列,如果远程存储队列中有样本数据,则将其取出加入到数组中。如果数组中的样本数据的数量达到设定数值,例如200,则将数组中的样本数据写入远程数据库;如果数组中的样本数据的数量没有达到设定数值,例如200,则继续将远程存储队列中的样本数据取出并加入到数组中。如果将数组中的样本数据写入远程数据库的等待时间达到设定时间,例如5s,则将数组中的样本数据写入远程数据库;如果将数组中的样本数据写入远程数据库的等待时间没有达到设定时间,例如5s,则继续等待。
根据本发明的实施例,当多个样本数据存入本地内存的时间缩短后,可以进一步的缩短通过http协议周期性抓取目标设备的一个监控指标的多个样本数据的时间周期。缩短了获取监控指标的多个样本数据的抓取间隔,进一步缩短了将样本数据写入本地内存和远程数据库的时间,从而提高了样本数据的存储效率。
图5是本发明的一个实施例的数据存储装置的结构示意图。如图5所示,该数据存储装置包括:获取单元501、第一存储单元502、第二存储单元503、第四存储单元504和第三存储单元505。
获取单元501,被配置为获取监控指标的多个样本数据。
该单元与图4中的获取单元401一致,这里就不再赘述。
第一存储单元502,被配置为将所述多个样本数据逐个存储到本地内存和临时缓存队列。
该单元被配置为逐个读取多个样本数据,将当前读取的样本数据作为第一样本数据。判断第一样本数据是否已经被标记为被丢弃。如果第一样本数据已经被标记为被丢弃,则读取下一个样本数据;如果第一样本数据没有被标记为被丢弃,则将第一样本数据存储到本地内存和临时缓存队列。可以通过查询日志信息的方式来判断第一样本数据是否已经被标记为被丢弃。
将第一样本数据存储到本地内存和临时缓存队列,具体包括:
判断本地内存中是否存在第一样本数据所属于的监控指标对应的本地存储单元。如果本地内存中存在第一样本数据所属于的监控指标对应的本地存储单元,则将第一样本数据存储到本地存储单元中。如果本地内存中不存在第一样本数据所属于的监控指标对应的本地存储单元,则在本地内存创建监控指标对应的本地存储单元后,将第一样本数据存储到本地存储单元中。
将第一样本数据存储到本地内存后,判断临时缓存队列的长度是否超过预设阈值。如果临时缓存队列的长度超过预设阈值,则将第一样本数据标记为被丢弃并且写入日志信息。如果临时缓存队列的长度没有超过预设阈值,则将第一样本数据插入到临时缓存队列的队尾。如图3所示,在第一样本数据插入临时缓存队列后,可以读取下一个样本数据,将下一个样本数据存入本地内存,而第一样本数据则在临时缓存队列中按照队列顺序等待,在有空闲线程的情况下,启动空闲线程来将该第一样本数据存储到远程存储队列。
利用Prometheus开源监控系统向目标设备发送http请求,通过http协议周期性抓取目标设备的一个监控指标的多个样本数据。当多个样本数据存入本地内存的时间缩短后,可以进一步的缩短通过http协议周期性抓取目标设备的一个监控指标的多个样本数据的时间周期。
第二存储单元503,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列。
该单元被配置为监听临时缓存队列,当临时缓存队列中存储有样本数据时,在有空闲线程的情况下,启动空闲线程来将样本数据存储到远程存储队列。具体地,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数没有达到上限,则启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。
启动空闲线程来将样本数据存储到远程存储队列,可以是将当前处于临时缓存队列的队首的样本数据作为第二样本数据,对第二样本数据进行出队操作。在空闲线程,克隆第二样本数据的监控指标,为第二样本数据添加额外标签,重新调整第二样本数据的标签。对第二样本数据进行入队操作,插入远程存储队列。可以理解的是,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。如图3所示,启动3个空闲线程来分别按照临时缓存队列的出队顺序,将临时缓存队列中的3个样本数据存储到远程存储队列。在这三个并行的线程中,分别克隆样本数据的监控指标,为样本数据添加额外标签,重新调整样本数据的标签。按照这3个线程执行完克隆样本数据的监控指标、为样本数据添加额外标签和重新调整样本数据的标签的操作的先后顺序,将这3个线程中的样本数据,逐个插入远程存储队列。
第四存储单元504,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将所述样本数据存储到所述远程存储队列。
该单元被配置为监听临时缓存队列,当临时缓存队列中存储有样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将样本数据存储到远程存储队列。具体地,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数达到上限,则目前没有空闲线程。等待处于工作状态的线程工作完毕后,启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。
启动空闲线程来将样本数据存储到远程存储队列,可以是将当前处于临时缓存队列的队首的样本数据作为第二样本数据,对第二样本数据进行出队操作。在空闲线程,克隆第二样本数据的监控指标,为第二样本数据添加额外标签,重新调整第二样本数据的标签。对第二样本数据进行入队操作,插入远程存储队列。可以理解的是,当临时缓存队列中有n个样本数据时,在有空闲线程的情况下,可以立即启动n个空闲线程来分别将临时缓存队列中的这n个样本数据存储到远程存储队列。如图3所示,启动3个空闲线程来分别按照临时缓存队列的出队顺序,将临时缓存队列中的3个样本数据存储到远程存储队列。在这三个并行的线程中,分别克隆样本数据的监控指标,为样本数据添加额外标签,重新调整样本数据的标签。按照这3个线程执行完克隆样本数据的监控指标、为样本数据添加额外标签和重新调整样本数据的标签的操作的先后顺序,将这3个线程中的样本数据,逐个插入远程存储队列。
第三存储单元505,被配置为将所述远程存储队列中的所述样本数据存储到远程数据库。
该单元被配置为监听远程存储队列,如果远程存储队列中存储有第二样本数据,则当前处于远程存储队列的队首的第二样本数据出队后,将第二样本数据存储到数组中。
如果所述数组中的所述第二样本数据的数量大于等于设定数值,例如200,则将数组中的第二样本数据批量存储到远程数据库;如果数组中的第二样本数据的数量小于设定数值,例如200,则继续将远程存储队列中的样本数据取出并加入到数组中。
如果将数组中的第二样本数据存储到远程数据库的等待时间大于等于设定时间,例如5s,则将数组中的第二样本数据批量存储到远程数据库;如果将数组中的样本数据写入远程数据库的等待时间小于设定时间,例如5s,则继续等待。
根据本发明的实施例,监听临时缓存队列,如果监听到临时缓存队列中有样本数据,则首先判断当前线程数是否达到上限。如果当前线程数达到上限,则目前没有空闲线程。等待处于工作状态的线程工作完毕后,启动一个空闲线程来执行克隆指标、添加额外标签、重新调整标签的操作以将样本数据存储到远程存储队列。严格控制线程数,避免出现内存溢出。
图6根据本发明实施例的数据存储控制装置的结构图。图6示出的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围构成任何限制。
参考图6,该装置包括通过总线连接的处理器601、存储器602和输入输出设备603。存储器602包括只读存储器(ROM)和随机访问存储器(RAM),存储器602内存储有执行系统功能所需的各种计算机指令和数据,处理器601从存储器602中读取各种计算机指令以执行各种适当的动作和处理。输入输出设备包括键盘、鼠标等的输入部分;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分;包括硬盘等的存储部分;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分。存储器602还存储有以下的计算机指令以完成本发明实施例的数据存储方法规定的操作:获取监控指标的多个样本数据;将所述多个样本数据逐个存储到本地内存和临时缓存队列;监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列;以及将所述远程存储队列中的所述样本数据存储到远程数据库。
相应地,本发明实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机指令,所述计算机指令被执行时实现上述数据存储方法所规定的操作。
相应地,本发明实施例还提供了一种计算机程序产品,包括计算机程序产品,所述计算机程序包括程序指令,当所述程序指令被移动终端执行时,使所述移动终端执行上述数据存储方法的步骤。
附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。
以上所述仅为本发明的一些实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种数据存储方法,其特征在于,包括:
获取监控指标的多个样本数据;
将所述多个样本数据逐个存储到本地内存和临时缓存队列;
监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列;以及
将所述远程存储队列中的所述样本数据存储到远程数据库。
2.根据权利要求1所述的数据存储方法,其特征在于,还包括:
监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将所述样本数据存储到所述远程存储队列。
3.根据权利要求1所述的数据存储方法,其特征在于,所述将所述多个样本数据逐个存储到本地内存和临时缓存队列,包括:
逐个读取所述多个样本数据,将当前读取的所述样本数据作为第一样本数据;
判断所述第一样本数据是否已经被标记为被丢弃;
如果所述第一样本数据已经被标记为被丢弃,则读取下一个所述样本数据;
如果所述第一样本数据没有被标记为被丢弃,则将所述第一样本数据存储到所述本地内存和所述临时缓存队列。
4.根据权利要求3所述的数据存储方法,其特征在于,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,包括:
判断所述本地内存中是否存在所述第一样本数据所属于的所述监控指标对应的本地存储单元;
如果所述本地内存中存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则将所述第一样本数据存储到所述本地存储单元中;
如果所述本地内存中不存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则在所述本地内存创建所述监控指标对应的本地存储单元后,将所述第一样本数据存储到所述本地存储单元中。
5.根据权利要求4所述的数据存储方法,其特征在于,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,还包括:
判断所述临时缓存队列的长度是否超过预设阈值;
如果所述临时缓存队列的长度超过所述预设阈值,则将所述第一样本数据标记为被丢弃并且写入日志信息;
如果所述临时缓存队列的长度没有超过所述预设阈值,则将所述第一样本数据插入到所述临时缓存队列的队尾。
6.根据权利要求1或2所述的数据存储方法,其特征在于,所述启动空闲线程来将所述样本数据存储到远程存储队列,包括:
将当前处于所述临时缓存队列的队首的所述样本数据作为第二样本数据,对所述第二样本数据进行出队操作;
在所述空闲线程,克隆所述第二样本数据的所述监控指标,为所述第二样本数据添加额外标签,重新调整所述第二样本数据的标签;
对所述第二样本数据进行入队操作,插入所述远程存储队列。
7.根据权利要求6所述的数据存储方法,其特征在于,所述将所述远程存储队列中的所述样本数据存储到远程数据库,包括:
监听所述远程存储队列,如果所述远程存储队列中存储有所述第二样本数据,则当前处于所述远程存储队列的队首的所述第二样本数据出队后,将所述第二样本数据存储到数组中;
如果所述数组中的所述第二样本数据的数量大于等于设定数值,则将所述数组中的所述第二样本数据存储到所述远程数据库;
如果将所述数组中的所述第二样本数据存储到所述远程数据库的等待时间大于等于设定时间,则将所述数组中的所述第二样本数据存储到所述远程数据库。
8.一种数据存储装置,其特征在于,包括:
获取单元,被配置为获取监控指标的多个样本数据;
第一存储单元,被配置为将所述多个样本数据逐个存储到本地内存和临时缓存队列;
第二存储单元,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在有空闲线程的情况下,启动空闲线程来将所述样本数据存储到远程存储队列;以及
第三存储单元,被配置为将所述远程存储队列中的所述样本数据存储到远程数据库。
9.根据权利要求8所述的数据存储装置,其特征在于,还包括:
第四存储单元,被配置为监听所述临时缓存队列,当所述临时缓存队列中存储有所述样本数据时,在没有空闲线程的情况下,等待处于工作状态的线程工作完毕后,启动空闲线程来将所述样本数据存储到所述远程存储队列。
10.根据权利要求8所述的数据存储装置,其特征在于,所述将所述多个样本数据逐个存储到本地内存和临时缓存队列,包括:
逐个读取所述多个样本数据,将当前读取的所述样本数据作为第一样本数据;
判断所述第一样本数据是否已经被标记为被丢弃;
如果所述第一样本数据已经被标记为被丢弃,则读取下一个所述样本数据;
如果所述第一样本数据没有被标记为被丢弃,则将所述第一样本数据存储到所述本地内存和所述临时缓存队列。
11.根据权利要求10所述的数据存储装置,其特征在于,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,包括:
判断所述本地内存中是否存在所述第一样本数据所属于的所述监控指标对应的本地存储单元;
如果所述本地内存中存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则将所述第一样本数据存储到所述本地存储单元中;
如果所述本地内存中不存在所述第一样本数据所属于的所述监控指标对应的本地存储单元,则在所述本地内存创建所述监控指标对应的本地存储单元后,将所述第一样本数据存储到所述本地存储单元中。
12.根据权利要求11所述的数据存储装置,其特征在于,所述将所述第一样本数据存储到所述本地内存和所述临时缓存队列,还包括:
判断所述临时缓存队列的长度是否超过预设阈值;
如果所述临时缓存队列的长度超过所述预设阈值,则将所述第一样本数据标记为被丢弃并且写入日志信息;
如果所述临时缓存队列的长度没有超过所述预设阈值,则将所述第一样本数据插入到所述临时缓存队列的队尾。
13.根据权利要求8或9所述的数据存储装置,其特征在于,所述启动空闲线程来将所述样本数据存储到远程存储队列,包括:
将当前处于所述临时缓存队列的队首的所述样本数据作为第二样本数据,对所述第二样本数据进行出队操作;
在所述空闲线程,克隆所述第二样本数据的所述监控指标,为所述第二样本数据添加额外标签,重新调整所述第二样本数据的标签;
对所述第二样本数据进行入队操作,插入所述远程存储队列。
14.根据权利要求13所述的数据存储方法,其特征在于,所述将所述远程存储队列中的所述样本数据存储到远程数据库,包括:
监听所述远程存储队列,如果所述远程存储队列中存储有所述第二样本数据,则当前处于所述远程存储队列的队首的所述第二样本数据出队后,将所述第二样本数据存储到数组中;
如果所述数组中的所述第二样本数据的数量大于等于设定数值,则将所述数组中的所述第二样本数据存储到所述远程数据库;
如果将所述数组中的所述第二样本数据存储到所述远程数据库的等待时间大于等于设定时间,则将所述数组中的所述第二样本数据存储到所述远程数据库。
15.一种数据存储控制装置,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述权利要求1至7任意一项所述的数据存储方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令被执行时实现如权利要求1至1至7任意一项所述的数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910361677.0A CN111858579A (zh) | 2019-04-30 | 2019-04-30 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910361677.0A CN111858579A (zh) | 2019-04-30 | 2019-04-30 | 数据存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111858579A true CN111858579A (zh) | 2020-10-30 |
Family
ID=72965647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910361677.0A Pending CN111858579A (zh) | 2019-04-30 | 2019-04-30 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111858579A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069526A (zh) * | 2023-02-08 | 2023-05-05 | 北京基调网络股份有限公司 | 一种基于无锁消息池的数据存取方法和计算机设备 |
-
2019
- 2019-04-30 CN CN201910361677.0A patent/CN111858579A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069526A (zh) * | 2023-02-08 | 2023-05-05 | 北京基调网络股份有限公司 | 一种基于无锁消息池的数据存取方法和计算机设备 |
CN116069526B (zh) * | 2023-02-08 | 2023-12-05 | 北京基调网络股份有限公司 | 一种基于无锁消息池的数据存取方法和计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109873904B (zh) | 消息推送的用户消息状态上报处理方法、装置及存储介质 | |
US11611634B2 (en) | Method and device for timeout monitoring | |
CN109033814B (zh) | 智能合约触发方法、装置、设备及存储介质 | |
KR20210156243A (ko) | 딥러닝 프레임워크의 훈련 방법, 장치 및 저장 매체 | |
CN113867916A (zh) | 任务处理方法、装置及电子设备 | |
CN110555068A (zh) | 数据导出方法和装置 | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
US11038783B2 (en) | Method and apparatus for managing network connection, and storage medium | |
CN113377809A (zh) | 数据处理方法及装置,计算设备和介质 | |
CN112860706A (zh) | 一种业务的处理方法、装置、设备及存储介质 | |
CN113778644B (zh) | 任务的处理方法、装置、设备及存储介质 | |
CN105677533A (zh) | 应用进程监控方法及应用进程监控装置 | |
CN111858579A (zh) | 数据存储方法及装置 | |
CN116467235B (zh) | 一种基于dma的数据处理方法、装置、电子设备及介质 | |
CN109032821B (zh) | 自动驾驶主题消息处理方法、装置、设备及存储介质 | |
CN113220705A (zh) | 慢查询识别的方法和装置 | |
CN114564149B (zh) | 一种数据存储方法、装置、设备及存储介质 | |
CN116126719A (zh) | 接口测试方法、装置、电子设备及存储介质 | |
CN115878035A (zh) | 一种数据读取方法、装置、电子设备及存储介质 | |
CN110837412B (zh) | 一种作业就绪状态判断方法、装置、设备和存储介质 | |
CN114428711A (zh) | 数据检测方法、装置、设备及存储介质 | |
CN112631843A (zh) | 设备测试方法及装置、电子设备、可读介质、产品 | |
CN113220230B (zh) | 数据导出方法及其装置、电子设备以及存储介质 | |
CN115599828A (zh) | 一种信息处理方法、装置、设备、存储介质 | |
CN113764025B (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 |