三缓存的弹性使用,可直接释放冷数据存储区;
[0121]为实现对热数据的动态调整,即冷热数据置换,需在第三缓存中建立冷数据索引队列、热数据索引队列、和第三缓存队列;其中,冷数据索引队列中存放冷数据的索引,热数据索引队列中存放热数据的索引,第三缓存队列用于存放固定大小的冷热数据;冷数据索引队列和热数据索引队列用于动态调整数据进出第三缓存队列,将近期使用频繁的数据存储至第三缓存队列,在第三缓存队列有冗余存储空间时,存储部分冷数据;
[0122]这里,将单位时间内的调用次数大于等于预设的阈值的数据定义为热数据,将热数据的主键存入热数据索引队列;判断热数据的依据为:
[0123]f (key, now_time) -f (key, (now_time_unit_time))(I);
[0124]> = threshoId_value*uni t_t ime ;
[0125]其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time表示时间单位;f (key, now_time)表示一个缓存数据的索引对应的总调用次数;f (key, (now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单位时间的总调用次数;
[0126]将单位时间内的调用次数小于预设的阈值的数据定义为冷数据,将冷数据的主键存入热数据索引队列;判断冷数据的依据为:
[0127]f (key, now_time) -f (key, (now_t ime-uni t_t ime))(2)
[0128]<threshold_value*unit_time ;
[0129]其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time表示时间单位;f (key, now_time)表示一个缓存数据的索引对应的总调用次数;f (key, (now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单位时间的总调用次数。
[0130]所述检索模块14在第一缓存、第二缓存和第三缓存中进行数据检索,具体包括:
[0131]检索模块14根据所述数据检索请求中的数据特征在预存的信息表中查找所要检索的数据的存储区域,在检索获得的存储区域进行数据检索;查找所要检索的数据的存储区域失败,且能排除所要检索的数据不存在于第一缓存、第二缓存和第三缓存中的一个缓存时,对剩余的两个缓存进行数据检索;不能排除所要检索的数据不存在于第一缓存、第二缓存和第三缓存中的一个缓存,且缓存所属设备的性能低于预设的阈值时,分别同时在第一缓存、第二缓存和第三缓存中进行数据检索;不设备性能高于预设的阈值时,依次在第一缓存、第三缓存和第二缓存中进行数据检索;其中,所述阈值为BOMC监控平台的闲忙阈值,可根据实际使用情况灵活配置。
[0132]检索模块14依次在第一缓存、第三缓存和第二缓存中进行数据检索,具体包括:
[0133]检索模块14根据所述数据检索请求在第一缓存中进行数据检索;检索失败时,判断所述数据检索是否在文本检索;判断结果为是时,在第二缓存中进行文本检索;判断结果为否时,在第三缓存中进行数据检索;文本检索成功或数据检索失败时,在第二缓存中进行数据检索。
[0134]本发明实施例海量数据存储方法的处理流程,如图7所示,包括以下步骤:
[0135]步骤201,在不同区域建立第一缓存、第二缓存和第三缓存;
[0136]首先,在会话线程变量中建立第一缓存;
[0137]具体地,本发明实施例所述的海量数据是会话所产生的数据,一次会话过程中通常会存在很多次业务操作,一次数据检索请求获取的检索数据结果在使用完毕后并不立即放弃,因此,BOMC监控平台在会话线程变量中建立第一缓存,将历史数据检索结果存储在第一缓存中;涉及到同一数据的重复检索时,直接从第一缓存中获取,不再从数据库中进行检索,如此,可减少冗余检索,提高BOMC系统的性能;所述第一缓存可以为HashMap,在会话结束后,自动清除历史检索结果。
[0138]其次,在REDIS建立第二缓存;这里,所述REDIS是一种数据库;
[0139]具体地,建立第二缓存前,需先通过读写分离和中央控制节点的结构实现REDIS的读写分离;在BOMC监控平台启动前,先将频繁使用的告警对象、告警规则、告警内容和告警历史数据存储至第二缓存;对于新增的告警对象、告警规则、告警内容和告警历史数据,可自动从数据库刷新至第二缓存;在BOMC监控平台进行数据检索时,可不经过数据库,直接从REDIS内的第二缓存中进行检索,极大地提高了检索效率。
[0140]其中,实现REDIS的读写分离时,读节点和写节点的部署示意图,如图2所示,在写节点之间进行一对一的直线型复制,直线的最后一个端点作为所有写节点的主节点;在进行REDIS的读写分离配置时,将写节点的所有IP端口配置到REDIS的写集群,将读节点的所有IP端口配置到REDIS读集群;读集群和写集群可采用硬件负载F5或Array,或haproxy+keepalived的模式;读数据时调用REDIS读API,写数据时调用REDIS写API ;其中,F5和Array为硬件负载均衡产品,haproxy和keepalived为开源负载均衡和高可用软件。
[0141]再次,在JVM内存中建立第三缓存;
[0142]具体地,所述第三缓存为在JVM中开辟的一块独立空间,第三缓存的存储空间可根据实际需要灵活设置,所述第三缓存用于存储热数据,BOMC监控平台可根据实际使用情况对热数据进行动态调整;其中,所述热数据为近期使用频率高的数据,相应的,所述冷数据为近期使用频率低的数据;
[0143]所述第三缓存包括:冷数据索引队列、热数据索引队列和第三缓存队列,所述第三缓存队列用于存储热数据;可以根据冷数据索引队列和热数据索引队列,将第三缓存队列中的冷热数据进行置换的处理流程,如前述图4所示,包括以下步骤:
[0144]步骤la,BOMC监控平台将冷数据索引队列与第三缓存队列进行比较,将第三缓存队列中标识为热数据,同时在冷数据索引队列中找到标识为热数据的数据状态修改为冷数据。
[0145]步骤lb,BOMC监控平台将热数据索引队列与第三缓存队列进行比较,将热数据索引队列中标识为热数据,但在第三缓存队列中未找到的数据准备加入第三缓存队列。
[0146]步骤lc,BOMC监控平台判断第三缓存队列的存储空间是否足够存放所述准备加入的数据,判断为否,执行步骤ld,判断为是,执行步骤le。
[0147]步骤ld,BOMC监控平台在第三缓存队列中循环移除一套状态标识为冷数据的缓存数据,直至第三缓存队列的冗余存储空间足以存放准备加入的数据。
[0148]步骤le,BOMC监控平台将所述准备加入的数据加载至第三缓存队列;
[0149]具体地,BOMC监控平台在加载完全不热数据后,第三缓存队列有冗余存储空间时,加入冷数据,直至第三缓存队列的存储空间全部使用。
[0150]具体地,BOMC监控平台在加载完全不热数据后,第三缓存队列有冗余存储空间时,加入冷数据,直至第三缓存队列的存储空间全部使用。
[0151]这里,将单位时间内的调用次数大于等于预设的阈值的数据定义为热数据,将热数据的主键存入热数据索引队列;判断热数据的依据为:
[0152]f (key, now_time) -f (key, (now_time_unit_time))(I);
[0153]> = threshoId_value*uni t_t ime ;
[0154]其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time表示时间单位;f (key, now_time)表示一个缓存数据的索引对应的总调用次数;f (key, (now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单位时间的总调用次数;
[0155]将单位时间内的调用次数小于预设的阈值的数据定义为冷数据,将冷数据的主键存入热数据索引队列;判断冷数据的依据为:
[0156]f (key, now_time) -f (key, (now_time_unit_time))(2);
[0157]<threshold_value*unit_time ;
[0158]其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time表示时间单位;f (key, now_time)表示一个缓存数据的索引对应的总调用次数;f (key, (now_time-unit_time))表示一缓存数据的索引对应的以