首页> 中国专利> 一种海量数据检索方法及装置、海量数据存储方法及系统

一种海量数据检索方法及装置、海量数据存储方法及系统

摘要

本发明公开了一种海量数据检索方法,在不同区域建立第一缓存、第二缓存和第三缓存;接收到数据检索请求后,根据所述数据检索请求查找所要检索的数据的存储区域;查找成功时,在查找获得的存储区域中进行数据检索;查找失败时,根据所述数据检索请求和缓存所属设备的性能在所述第一缓存、第二缓存和第三缓存中进行数据检索。本发明还同时公开了一种海量数据检索装置、一种海量数据存储方法及系统。

著录项

  • 公开/公告号CN105512129A

    专利类型发明专利

  • 公开/公告日2016-04-20

    原文格式PDF

  • 申请/专利权人 中国移动通信集团江苏有限公司;

    申请/专利号CN201410495343.X

  • 发明设计人 胡炜;王鑫;

    申请日2014-09-24

  • 分类号G06F17/30(20060101);

  • 代理机构北京派特恩知识产权代理有限公司;

  • 代理人张颖玲;蒋雅洁

  • 地址 210029 江苏省南京市鼓楼区虎踞路59号

  • 入库时间 2023-12-18 15:29:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-04

    授权

    授权

  • 2016-05-18

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20140924

    实质审查的生效

  • 2016-04-20

    公开

    公开

说明书

技术领域

本发明涉及数据处理技术,尤其涉及一种海量数据检索方法及装置、一种 海量数据存储方法及系统。

背景技术

业务支撑网运营管理系统(BOMC)监控平台承担着整个业务支撑网平台 和应用的集中监控、预警和决策帮助,海量数据的高效访问及检索是实现BOMC 监控平台实时监控、预警、分析的重要步骤。

目前,BOMC监控平台的海量告警历史信息的获取是通过直接检索数据库 的方式实现的;通过在设计层面采用分表、分区、建索引的方式和在开发层面 调优数据库的优化性能、提升代码的质量等方式来提高数据库的操作性能;检 索BOMC监控平台中各模块频繁使用到的告警对象时,通过将告警对象加载到 Java虚拟机(JavaVirtualMachine,JVM)内存中来提高检索性能。

这样,一方面,通过直接检索数据库获取海量告警历史信息时,每次都需 要先从连接池建立一个连接,再进行检索数据库的操作;在建立连接过程中, 会降低数据库的性能;并且,在业务高峰时段,大量的数据检索会造成数据库 的连接瓶颈,导致业务无法正常进行;另一方面,由于告警历史表的数据量巨 大,根据告警类型或告警规则检索数据库的用时比较长,严重影响用户体验; 并且,通过在结构化查询语言(StructuredQueryLanguage,SQL)语句中使用 LIKE运算符对告警数据进行模糊检索时,数据检索性能低。

同时,将多达百万条的告警对象加载到JVM内存中,使得JVM的可用内 存严重减少,JVM可用内存的过多消耗导致垃圾回收(GarbageCollection,GC) 执行频繁、中央处理器(CentralProcessingUnit,CPU)的消耗增加,在业务高 峰时容易出现存储器溢出(MemoryOut)的问题,从而引起BOMC系统崩溃; 由于JVM内存有限,大量的数据检索和频繁调用服务会导致JVM内存堵塞; 需要导出告警数据时,就要频繁地将千万级别的数据加载到JVM内存后再导出 至EXCEL,多人同时进行告警数据导出容易引起BOMC系统瘫痪。

发明内容

有鉴于此,本发明实施例期望提供一种海量数据检索方法及装置,能够提 高数据库检索速度和性能,提高BOMC系统的稳定性,本发明实施例还期望提 供一种海量数据存储方法及系统,实现海量数据的分类存储。

本发明实施例的技术方案是这样实现的:

本发明实施例提供一种海量数据检索方法,包括:在不同区域建立第一缓 存、第二缓存和第三缓存;接收到数据检索请求后,根据所述数据检索请求查 找所要检索的数据的存储区域;查找成功时,在查找获得的存储区域中进行数 据检索;查找失败时,根据所述数据检索请求和缓存所属设备的性能在所述第 一缓存、第二缓存和第三缓存中进行数据检索。

优选地,所述方法还包括:在第一缓存、第二缓存和第三缓存中检索数据 失败时,根据所述数据检索请求在数据库中进行数据检索。

优选地,所述在不同区域建立第一缓存、第二缓存和第三缓存,包括:

在产生数据的会话的线程变量中建立第一缓存,在REDIS中建立第二缓 存,在JVM内存中建立第三缓存;其中,

所述第一缓存用于存储历史检索数据结果,所述第二缓存用于存储频繁使 用的告警对象、告警规则、告警内容和告警历史数据,所述第三缓存用于存储 热数据。

优选地,所述在所述第一缓存、第二缓存和第三缓存中进行数据检索,包 括:

能够排除所要检索的数据不存在于第一缓存、第二缓存和第三缓存中的一 个缓存时,对剩余的两个缓存进行数据检索;

不能够排除所要检索的数据不存在于第一缓存、第二缓存和第三缓存中的 一个缓存,缓存所属设备的性能低于预设的阈值时,分别在第一缓存、第二缓 存和第三缓存中同时进行数据检索;缓存所属设备的性能高于预设的阈值时, 依次在第一缓存、第三缓存和第二缓存中进行数据检索。

优选地,所述依次在第一缓存、第三缓存和第二缓存中进行数据检索,包 括:根据所述数据检索请求在第一缓存中进行数据检索;确认在第一缓存中检 索数据失败,且所述检索为文本检索时,在第二缓存中进行文本检索;确认在 第一缓存中检索数据失败,且所述检索为非文本检索时,在第三缓存中进行数 据检索;确认文本检索失败或在第三缓存中检索数据失败时,在第二缓存中进 行数据检索。

本发明实施例还提供一种海量数据检索装置,所述装置包括:构建模块、 接收模块、查找模块和检索模块;其中,

所述构建模块,用于在不同区域建立第一缓存、第二缓存和第三缓存;

所述接收模块,用于接收业务检索请求;

所述查找模块,用于根据所述数据检索请求查找所要检索的数据的存储区 域;

所述检索模块,用于在查找获得的存储区域中进行数据检索,或根据所述 数据检索请求在所述第一缓存、第二缓存和第三缓存中进行数据检索。

优选地,所述检索模块,还用于在第一缓存、第二缓存和第三缓存中检索 数据失败时,根据所述数据检索请求在数据库中进行数据检索。

优选地,所述构建模块,具体用于在产生数据的会话的线程变量中建立第 一缓存,在REDIS中建立第二缓存,在JVM内存中建立第三缓存;其中,

所述第一缓存用于存储历史检索数据结果,所述第二缓存用于存储频繁使 用的告警对象、告警规则、告警内容和告警历史数据,所述第三缓存用于存储 热数据。

优选地,所述检索模块,具体用于能够排除所要检索的数据不存在于第一 缓存、第二缓存和第三缓存中的一个缓存时,对剩余的两个缓存进行数据检索; 不能够排除所要检索的数据不存在于第一缓存、第二缓存和第三缓存中的一个 缓存,缓存所属设备的性能低于预设的阈值时,分别同时在第一缓存、第二缓 存和第三缓存中进行数据检索;缓存所述设备的性能高于预设的阈值时,依次 在第一缓存、第三缓存和第二缓存中进行数据检索。

优选地,所述检索模块,进一步用于根据所述数据检索请求在第一缓存中 进行数据检索;

确认在第一缓存中检索数据失败,且所述检索为文本检索时,在第二缓存 中进行文本检索;确认在第一缓存中检索数据失败,且所述检索为非文本检索 时,在第三缓存中进行数据检索;

确认文本检索失败或在第三缓存中检索数据失败时,在第二缓存中进行数 据检索。

本发明实施例还提供一种海量数据存储方法,所述方法包括:在不同区域 建立第一缓存、第二缓存和第三缓存;

将历史数据检索结果存储至第一缓存,将频繁使用的告警对象、告警规则、 告警具体内容和告警历史数据存储至第二缓存,将热数据存储至第三缓存。

优选地,在不同区域建立第一缓存、第二缓存和第三缓存包括:在会话线 程变量中建立第一缓存,在REDIS建立第二缓存,在JVM内存中建立第三缓 存。

优选地,所述方法还包括:确定第三缓存存储热数据后有冗余存储空间时, 将冷数据存储至第三缓存。

优选地,所述方法还包括:在第三缓存中建立冷数据索引队列、热数据索 引队列和第三缓存队列,所述第三缓存队列用于存储热数据和冷数据。

优选地,所述方法还包括:将第三缓存队列中的热数据和冷数据进行置换。

本发明实施例还提供一种海量数据存储系统,所述系统包括:第一缓存、 第二缓存和第三缓存;其中,

所述第一缓存,用于存储历史数据检索结果;

所述第二缓存,用于存储频繁使用的告警对象、告警规则、告警具体内容 和告警历史数据;

所述第三缓存,用于存储热数据。

优选地,所述第一缓存位于线程变量中,所述第二缓存位于REDIS中,所 述第三缓存位于JVM内存中。

优选地,在第三缓存存储热数据后有冗余存储空间时,第三缓存还用于存 储冷数据。

优选地,所述第三缓存包括:冷数据索引队列、热数据索引队列和第三缓 存队列,所述第三缓存队列用于存储热数据和冷数据。

优选地,所述第三缓存队列中的热数据和冷数据可以进行置换。

本发明实施例所提供的海量数据检索方法及装置,在不同区域建立第一缓 存、第二缓存和第三缓存;接收到数据检索请求后,根据所述数据检索请求中 的数据特征在预存的信息表中查找所要检索的数据的存储区域,查找成功时, 在查找获得的存储区域进行数据检索;查找失败时,根据所述数据检索请求和 缓存所属设备的性能在所述第一缓存、第二缓存和第三缓存中进行数据检索; 如此,通过建立第一缓存来存储历史检索数据结果,建立第二缓存来存储频繁 使用的告警对象、告警规则、告警内容和告警历史数据,建立第三缓存来存储 热数据,并在进行数据检索时,优先在第一缓存、第二缓存和第三缓存中进行 检索,能降低数据检索对数据库连接的依赖性,使得数据库的负载得到有效缓 冲,提高数据检索效率;将频繁使用的热数据存储在位于JVM内的第三缓存中, 减少了BOMC系统的远程访问操作,提高了BOMC系统的稳定性。本发明实 施例提供的海量数据存储方法及系统,在不同区域建立第一缓存、第二缓存和 第三缓存,将历史数据检索结果存储至第一缓存,将频繁使用的告警对象、告 警规则、告警具体内容和告警历史数据存储至第二缓存,将热数据存储至第三 缓存,实现海量数据的分类存储。

附图说明

图1为本发明实施例海量数据检索方法的处理流程示意图;

图2为本发明实施例读节点和写节点的部署示意图;

图3为本发明实施例冷数据和热数据在第三缓存中的分布示意图;

图4为本发明实施例第三缓存队列中冷热数据置换的处理流程示意图;

图5为本发明实施例BOMC监控平台依次在第一缓存、第三缓存和第二缓 存中进行数据检索的处理流程示意图;

图6为本发明实施例海量数据检索装置的组成结构示意图;

图7为本发明实施例海量数据存储方法的处理流程示意图;

图8为本发明实施例海量数据检索系统的组成结构示意图。

具体实施方式

本发明实施例中,在不同区域建立第一缓存、第二缓存和第三缓存;接收 到数据检索请求后,根据所述数据检索请求查找所要检索的数据的存储区域; 查找成功时,在查找获得的存储区域中进行数据检索;查找失败时,根据所述 数据检索请求和缓存所属设备的性能在所述第一缓存、第二缓存和第三缓存中 进行数据检索。

具体地,查找失败后根据实际情况包括三种数据检索方式:查找失败且能 排除所要检索的数据不存在于某一缓存时,对剩余的两个缓存进行数据检索; 查找失败、不能排除所要检索的数据不存在于某一缓存、且设备性能低于预设 的阈值时,分别在第一缓存、第二缓存和第三缓存中同时进行数据检索;查找 失败、不能排除所要检索的数据不存在于某一缓存、且设备性能高于预设的阈 值时,依次在第一缓存、第三缓存和第二缓存中进行数据检索。

本发明实施例海量数据检索方法的处理流程,如图1所示,包括以下步骤:

步骤101,在不同区域建立第一缓存、第二缓存和第三缓存;

首先,在会话线程变量中建立第一缓存;

具体地,本发明实施例所述的海量数据是会话所产生的数据,一次会话过 程中通常会存在很多次业务操作,一次数据检索请求获取的检索数据结果在使 用完毕后并不立即放弃,因此,BOMC监控平台在会话线程变量中建立第一缓 存,将历史数据检索结果存储在第一缓存中;涉及到同一数据的重复检索时, 直接从第一缓存中获取,不再从数据库中进行检索,如此,可减少冗余检索, 提高BOMC系统的性能;所述第一缓存可以为哈希键值对容器(HashMap), 在会话结束后,自动清除历史检索结果。

其次,在REDIS建立第二缓存;这里,所述REDIS是一种数据库;

具体地,建立第二缓存前,需先通过读写分离和中央控制节点的结构实现 REDIS的读写分离;在BOMC监控平台启动前,先将频繁使用的告警对象、告 警规则、告警内容和告警历史数据存储至第二缓存;对于新增的告警对象、告 警规则、告警内容和告警历史数据,可自动从数据库刷新至第二缓存;在BOMC 监控平台进行数据检索时,可不经过数据库,直接从REDIS内的第二缓存中进 行检索,极大地提高了检索效率。

其中,实现REDIS的读写分离时,读节点和写节点的部署示意图,如图2 所示,在写节点之间进行一对一的直线型复制,直线的最后一个端点作为所有 写节点的主节点;在进行REDIS的读写分离配置时,将写节点的所有网络协议 (InternetProtocol,IP)端口配置到REDIS的写集群,将读节点的所有IP端口 配置到REDIS读集群;读集群和写集群可采用硬件负载F5或Array,或 haproxy+keepalived的模式;读数据时调用REDIS读应用程序开发接口 (ApplicationProgrammingInterface,API),写数据时调用REDIS写API;其 中,F5和Array为硬件负载均衡产品,haproxy和keepalived为开源负载均衡和 高可用软件。

再次,在JVM内存中建立第三缓存;

具体地,所述第三缓存为在JVM中开辟的一块独立空间,第三缓存的存储 空间可根据实际需要灵活设置,所述第三缓存用于存储热数据,BOMC监控平 台可根据实际使用情况对热数据进行动态调整;其中,所述热数据为近期使用 频率高的数据,相应的,所述冷数据为近期使用频率低的数据;

BOMC监控平台在对热数据进行动态调整时,在第三缓存中优先存放热数 据,第三缓存中的冗余存储空间存放一部分冷数据;冷数据和热数据在第三缓 存中的分布示意图,如图3所示;当热数据超出第三缓存的存储空间上限时, 超出部分的热数据不进行存储;当第三缓存存储全部的热数据后有冗余存储空 间时,冗余存储空间用于存储冷数据;在爆发式业务高峰期时,为保证第三缓 存的弹性使用,可直接释放冷数据存储区;

为实现对热数据的动态调整,即冷热数据置换,需在第三缓存中建立冷数 据索引队列、热数据索引队列和第三缓存队列;其中,冷数据索引队列中存放 冷数据的索引,热数据索引队列中存放热数据的索引,第三缓存队列用于存放 固定大小的冷热数据;冷数据索引队列和热数据索引队列用于动态调整数据进 出第三缓存队列,将近期使用频繁的数据存储至第三缓存队列,在第三缓存队 列存储空间有冗余时,存储部分冷数据;

这里,将单位时间内的调用次数大于等于预设的阈值的数据定义为热数据, 将热数据的主键存入热数据索引队列;判断热数据的依据为:

f(key,now_time)-f(key,(now_time-unit_time))(1);

>=threshold_value*unit_time;

其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time 表示时间单位;f(key,now_time)表示一个缓存数据的索引对应的总调用次数; f(key,(now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单 位时间的总调用次数;

将单位时间内的调用次数小于预设的阈值的数据定义为冷数据,将冷数据 的主键存入热数据索引队列;判断冷数据的依据为:

f(key,now_time)-f(key,(now_time-unit_time))(2);

<threshold_value*unit_time;

其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time 表示时间单位;f(key,now_time)表示一个缓存数据的索引对应的总调用次数; f(key,(now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单 位时间的总调用次数。

本发明实施例中第三缓存队列中冷热数据置换的处理流程,如图4所示, 包括以下步骤:

步骤1a,BOMC监控平台将冷数据索引队列与第三缓存队列进行比较,将 第三缓存队列中标识为热数据,同时在冷数据索引队列中找到标识为热数据的 数据状态修改为冷数据。

步骤1b,BOMC监控平台将热数据索引队列与第三缓存队列进行比较,将 热数据索引队列中标识为热数据,但在第三缓存队列中未找到的数据准备加入 第三缓存队列。

步骤1c,BOMC监控平台判断第三缓存队列的存储空间是否足够存放所述 准备加入的数据,判断为否,执行步骤1d,判断为是,执行步骤1e。

步骤1d,BOMC监控平台在第三缓存队列中循环移除一套状态标识为冷数 据的缓存数据,直至第三缓存队列的冗余存储空间足以存放准备加入的数据。

步骤1e,BOMC监控平台将所述准备加入的数据加载至第三缓存队列;

具体地,BOMC监控平台在加载完全不热数据后,第三缓存队列有冗余存 储空间时,加入冷数据,直至第三缓存队列的存储空间全部使用。

步骤102,接收到数据检索请求后,根据所述数据检索请求查找所要检索 的数据的存储区域;

具体地,BOMC监控平台预先存储包括数据特征和存储区域的信息表, BOMC监控平台接收到数据检索请求后,根据所述数据检索请求中的数据特征 在预存的信息表中查找所要检索的数据的存储区域;

其中,所述数据特征包括:配置类数据、历史告警类数据等。

步骤103,查找成功时,在查找获得的存储区域中进行数据检索。

步骤103’,查找失败时,根据所述数据检索请求和缓存所属设备的性能在 所述第一缓存、第二缓存和第三缓存中进行数据检索。

具体地,能够排除所要检索的数据不存在于某一缓存时,对剩余的两个缓 存进行数据检索;即:能够排除所要检索的数据不存在于第一缓存时,BOMC 监控平台对第二缓存和第三缓存进行数据检索;能够排除所要检索的数据不存 在于第二缓存时,BOMC监控平台对第一缓存和第三缓存进行数据检索;能够 排除所要检索的数据不存在于第三缓存时,BOMC监控平台对第一缓存和第二 缓存进行数据检索。

不能够排除所要检索的数据不存在于某一缓存,缓存所属设备的性能低于 预设的阈值时,分别在第一缓存、第二缓存和第三缓存中同时进行数据检索; 利用并行的检索方式进行数据检索,能够有效的提高BOMC监控平台的检索效 率;其中,所述阈值为BOMC监控平台的闲忙阈值,可根据实际使用情况灵活 配置。

缓存所属设备的性能高于预设的阈值时,依次在第一缓存、第三缓存和第 二缓存中进行数据检索;在任何一个缓存中检索成功时,停止数据检索;所述 缓存所属设备的性能包括:缓存所属设备的内存、中央处理器(CentralProcessing Unit,CPU)、磁盘的输入输出接口等;BOMC监控平台依次在第一缓存、第三 缓存和第二缓存中进行数据检索的处理流程,如图5所示,包括以下步骤:

步骤2a,根据所述数据检索请求在第一缓存中进行数据检索;

具体地,BOMC监控平台调用containskey方法,在历史数据检索结果中进 行检索,确保相同条件的检索至发生一次远程调用;检索成功,执行步骤2f; 检索失败,执行步骤2b。

步骤2b,判断所述数据检索是否在文本检索,判断结果为是时,执行步骤 2c;判断结果为否时,执行步骤2d。

步骤2c,在第二缓存中进行文本检索,检索成功,执行步骤2f,检索失败, 执行步骤2d;

具体地,访问检索引擎在第二缓存中进行文本检索,文本检索范围是文字 内容较多、夹杂着中英文等信息的文本;

以一个告警的告警内容为“无法连接采集代理,可能Topea代理已停止或 未正常运行”为例,在进行文本检索时,先使用搜索引擎预先建立告警文本内 容的分词索引;在调用文件检索API在数百万的形如上述文本内容的告警信息 中查找“Toptea代理已停止或未正常运行”;检索成功,执行步骤2f,检索失败, 执行步骤2d。

本发明实施例中,通过第二缓存预先加载告警文本数据,并运用搜索引擎 预先建立告警文本内容的粉刺索引,在根据告警关键字进行模糊搜索时,调用 搜索引擎的API进行搜索,实现了海量文本数据的快速检索,提高了BOMC系 统的性能。

步骤2d,在第三缓存中进行数据检索,检索成功,执行步骤2f,检索失败, 执行步骤2e;

其中,所述第三缓存通过一个线程安全的ConcurrentHashMap承载近期频 繁使用的数据信息。

本发明实施例中,在执行步骤2a至步骤2d的过程中,均不涉及跨主机的 数据访问,极大地减少了跨主机的调用,提高了BOMC监控平台的性能。

步骤2e,在第二缓存中进行数据检索,检索成功,执行步骤2f,检索失败, 结束本处理流程;

具体地,BOMC监控平台通过封装REDIS的客户端访问代理API进行数 据检索,即:代理API通过调用socket接口输入相应的检索参数,在REDIS 中进行数据检索;检索成功,执行步骤2f,检索失败,建立数据库连接,检索 数据并将检索结果反馈至用户。

步骤2f,动态调整冷热数据,反馈检索结果;

具体地,BOMC监控平台根据数据使用的频率进行冷热数据的调整,将检 索结果反馈至用户。

为实现上述海量数据检索方法,本发明实施例还提供一种海量数据检索装 置,所述装置的组成结构如图6所示,包括:构建模块11、接收模块12、查找 模块13和检索模块14;其中,

所述构建模块11,用于在不同区域建立第一缓存、第二缓存和第三缓存;

所述接收模块12,用于接收业务检索请求;

所述查找模块13,用于根据所述数据检索请求查找所要检索的数据的存储 区域;

所述检索模块14,用于在查找获得的存储区域中进行数据检索,或根据所 述数据检索请求在所述第一缓存、第二缓存和第三缓存中进行数据检索。

优选地,所述检索模块14,还用于在第一缓存、第二缓存和第三缓存中检 索数据失败时,根据所述数据检索请求在数据库中进行数据检索。

优选地,所述构建模块11,具体用于在产生数据的会话的线程变量中建立 第一缓存,在REDIS中建立第二缓存,在JVM内存中建立第三缓存;其中,

所述第一缓存用于存储历史检索数据结果,所述第二缓存用于存储频繁使 用的告警对象、告警规则、告警内容和告警历史数据,所述第三缓存用于存储 热数据。

优选地,所述检索模块14,具体用于能够排除所要检索的数据不存在于第 一缓存、第二缓存和第三缓存中的一个缓存时,对剩余的两个缓存进行数据检 索;

不能够排除所要检索的数据不存在于某一缓存,缓存所述设备的性能低于 预设的阈值时,分别同时在第一缓存、第二缓存和第三缓存中进行数据检索; 缓存所述设备的性能高于预设的阈值时,依次在第一缓存、第三缓存和第二缓 存中进行数据检索;所述缓存所属设备的性能包括:缓存所属设备的内存、中 央处理器(CentralProcessingUnit,CPU)、磁盘的输入输出接口等。

优选地,所述检索模块14,进一步用于根据所述数据检索请求在第一缓存 中进行数据检索;

确认在第一缓存中检索数据失败,且所述检索为文本检索时,在第二缓存 中进行文本检索;确认在第一缓存中检索数据失败,且所述检索为非文本检索 时,在第三缓存中进行数据检索;

确认文本检索失败或在第三缓存中检索数据失败时,在第二缓存中进行数 据检索。

所述构建模块11建立第一缓存、第二缓存和第三缓存,具体包括:

一次会话过程中通常会存在很多次业务操作,一次数据检索请求获取的检 索数据结果在使用完毕后并不立即放弃,构建模块11在会话线程变量中建立第 一缓存,所述第一缓存可以为HashMap,在会话结束后,自动清除历史检索结 果。

构建模块11建立第二缓存前,需先通过读写分离和中央控制节点的结构实 现REDIS的读写分离;在BOMC监控平台启动前,将频繁使用的告警对象、 告警规则、告警内容和告警历史数据存储至第二缓存;对于新增的告警对象、 告警规则、告警内容和告警历史数据,可自动从数据库刷新至第二缓存;所述 REDIS是一种数据库。

构建模块11实现REDIS的读写分离时,需要在写节点之间进行一对一的 直线型复制,直线的最后一个端点作为所有写节点的主节点;在进行REDIS的 读写分离配置时,将写节点的所有IP端口配置到REDIS的写集群,将读节点 的所有IP端口配置到REDIS读集群;读集群和写集群可采用硬件负载F5或 Array,或haproxy+keepalived的模式;读数据时调用REDIS读API,写数据时 调用REDIS写API;其中,F5和Array为硬件负载均衡产品,haproxy和keepalived 为开源负载均衡和高可用软件。

构建模块11在JVM内存中建立第三缓存,所述第三缓存为在JVM中开辟 的一块独立空间,第三缓存的存储空间可根据实际需要灵活设置,所述第三缓 存用于存储热数据,热数据可根据实际使用情况动态调整;

构建模块11在对热数据进行动态调整时,可在第三缓存中优先存放热数 据,第三缓存中的冗余存储空间存放一部分冷数据,所述冷数据为近期使用频 率低的数据;冷数据和热数据在第三缓存中的分布示意图,如图2所示;当热 数据超出第三缓存的存储空间上限时,超出部分的热数据不进行存储;当第三 缓存存储全部的热数据后有冗余存储空间时,冗余存储空间用于存储冷数据; 在爆发式业务高峰期时,为保证第三缓存的弹性使用,可直接释放冷数据存储 区;

为实现对热数据的动态调整,即冷热数据置换,需在第三缓存中建立冷数 据索引队列、热数据索引队列、和第三缓存队列;其中,冷数据索引队列中存 放冷数据的索引,热数据索引队列中存放热数据的索引,第三缓存队列用于存 放固定大小的冷热数据;冷数据索引队列和热数据索引队列用于动态调整数据 进出第三缓存队列,将近期使用频繁的数据存储至第三缓存队列,在第三缓存 队列有冗余存储空间时,存储部分冷数据;

这里,将单位时间内的调用次数大于等于预设的阈值的数据定义为热数据, 将热数据的主键存入热数据索引队列;判断热数据的依据为:

f(key,now_time)-f(key,(now_time-unit_time))(1);

>=threshold_value*unit_time;

其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time 表示时间单位;f(key,now_time)表示一个缓存数据的索引对应的总调用次数; f(key,(now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单 位时间的总调用次数;

将单位时间内的调用次数小于预设的阈值的数据定义为冷数据,将冷数据 的主键存入热数据索引队列;判断冷数据的依据为:

f(key,now_time)-f(key,(now_time-unit_time))(2)

<threshold_value*unit_time;

其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time 表示时间单位;f(key,now_time)表示一个缓存数据的索引对应的总调用次数; f(key,(now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单 位时间的总调用次数。

所述检索模块14在第一缓存、第二缓存和第三缓存中进行数据检索,具体 包括:

检索模块14根据所述数据检索请求中的数据特征在预存的信息表中查找 所要检索的数据的存储区域,在检索获得的存储区域进行数据检索;查找所要 检索的数据的存储区域失败,且能排除所要检索的数据不存在于第一缓存、第 二缓存和第三缓存中的一个缓存时,对剩余的两个缓存进行数据检索;不能排 除所要检索的数据不存在于第一缓存、第二缓存和第三缓存中的一个缓存,且 缓存所属设备的性能低于预设的阈值时,分别同时在第一缓存、第二缓存和第 三缓存中进行数据检索;不设备性能高于预设的阈值时,依次在第一缓存、第 三缓存和第二缓存中进行数据检索;其中,所述阈值为BOMC监控平台的闲忙 阈值,可根据实际使用情况灵活配置。

检索模块14依次在第一缓存、第三缓存和第二缓存中进行数据检索,具体 包括:

检索模块14根据所述数据检索请求在第一缓存中进行数据检索;检索失败 时,判断所述数据检索是否在文本检索;判断结果为是时,在第二缓存中进行 文本检索;判断结果为否时,在第三缓存中进行数据检索;文本检索成功或数 据检索失败时,在第二缓存中进行数据检索。

本发明实施例海量数据存储方法的处理流程,如图7所示,包括以下步骤:

步骤201,在不同区域建立第一缓存、第二缓存和第三缓存;

首先,在会话线程变量中建立第一缓存;

具体地,本发明实施例所述的海量数据是会话所产生的数据,一次会话过 程中通常会存在很多次业务操作,一次数据检索请求获取的检索数据结果在使 用完毕后并不立即放弃,因此,BOMC监控平台在会话线程变量中建立第一缓 存,将历史数据检索结果存储在第一缓存中;涉及到同一数据的重复检索时, 直接从第一缓存中获取,不再从数据库中进行检索,如此,可减少冗余检索, 提高BOMC系统的性能;所述第一缓存可以为HashMap,在会话结束后,自动 清除历史检索结果。

其次,在REDIS建立第二缓存;这里,所述REDIS是一种数据库;

具体地,建立第二缓存前,需先通过读写分离和中央控制节点的结构实现 REDIS的读写分离;在BOMC监控平台启动前,先将频繁使用的告警对象、告 警规则、告警内容和告警历史数据存储至第二缓存;对于新增的告警对象、告 警规则、告警内容和告警历史数据,可自动从数据库刷新至第二缓存;在BOMC 监控平台进行数据检索时,可不经过数据库,直接从REDIS内的第二缓存中进 行检索,极大地提高了检索效率。

其中,实现REDIS的读写分离时,读节点和写节点的部署示意图,如图2 所示,在写节点之间进行一对一的直线型复制,直线的最后一个端点作为所有 写节点的主节点;在进行REDIS的读写分离配置时,将写节点的所有IP端口 配置到REDIS的写集群,将读节点的所有IP端口配置到REDIS读集群;读集 群和写集群可采用硬件负载F5或Array,或haproxy+keepalived的模式;读数 据时调用REDIS读API,写数据时调用REDIS写API;其中,F5和Array为 硬件负载均衡产品,haproxy和keepalived为开源负载均衡和高可用软件。

再次,在JVM内存中建立第三缓存;

具体地,所述第三缓存为在JVM中开辟的一块独立空间,第三缓存的存储 空间可根据实际需要灵活设置,所述第三缓存用于存储热数据,BOMC监控平 台可根据实际使用情况对热数据进行动态调整;其中,所述热数据为近期使用 频率高的数据,相应的,所述冷数据为近期使用频率低的数据;

所述第三缓存包括:冷数据索引队列、热数据索引队列和第三缓存队列, 所述第三缓存队列用于存储热数据;可以根据冷数据索引队列和热数据索引队 列,将第三缓存队列中的冷热数据进行置换的处理流程,如前述图4所示,包 括以下步骤:

步骤1a,BOMC监控平台将冷数据索引队列与第三缓存队列进行比较,将 第三缓存队列中标识为热数据,同时在冷数据索引队列中找到标识为热数据的 数据状态修改为冷数据。

步骤1b,BOMC监控平台将热数据索引队列与第三缓存队列进行比较,将 热数据索引队列中标识为热数据,但在第三缓存队列中未找到的数据准备加入 第三缓存队列。

步骤1c,BOMC监控平台判断第三缓存队列的存储空间是否足够存放所述 准备加入的数据,判断为否,执行步骤1d,判断为是,执行步骤1e。

步骤1d,BOMC监控平台在第三缓存队列中循环移除一套状态标识为冷数 据的缓存数据,直至第三缓存队列的冗余存储空间足以存放准备加入的数据。

步骤1e,BOMC监控平台将所述准备加入的数据加载至第三缓存队列;

具体地,BOMC监控平台在加载完全不热数据后,第三缓存队列有冗余存 储空间时,加入冷数据,直至第三缓存队列的存储空间全部使用。

具体地,BOMC监控平台在加载完全不热数据后,第三缓存队列有冗余存 储空间时,加入冷数据,直至第三缓存队列的存储空间全部使用。

这里,将单位时间内的调用次数大于等于预设的阈值的数据定义为热数据, 将热数据的主键存入热数据索引队列;判断热数据的依据为:

f(key,now_time)-f(key,(now_time-unit_time))(1);

>=threshold_value*unit_time;

其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time 表示时间单位;f(key,now_time)表示一个缓存数据的索引对应的总调用次数; f(key,(now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单 位时间的总调用次数;

将单位时间内的调用次数小于预设的阈值的数据定义为冷数据,将冷数据 的主键存入热数据索引队列;判断冷数据的依据为:

f(key,now_time)-f(key,(now_time-unit_time))(2);

<threshold_value*unit_time;

其中,threshold_value为冷热阈值频率,可根据实际需要灵活配置;unit_time 表示时间单位;f(key,now_time)表示一个缓存数据的索引对应的总调用次数; f(key,(now_time-unit_time))表示一缓存数据的索引对应的以距离现在时间为单 位时间的总调用次数。

步骤202,将历史数据检索结果存储至第一缓存,将频繁使用的告警对象、 告警规则、告警具体内容和告警历史数据存储至第二缓存,将热数据存储至第 三缓存。

在将热数据存储至第三缓存后,所述方法还包括:

步骤203,确定第三缓存存储热数据后有冗余存储空间时,将冷数据存储 至第三缓存;

具体地,第三缓存中优先存储热数据,当热数据超出第三缓存的存储空间 上限时,超出部分的热数据不进行存储;当第三缓存存储全部的热数据后有冗 余的存储空间,剩余存储空间用于存储冷数据;在爆发式业务高峰期时,为保 证第三缓存的弹性使用,可直接释放冷数据存储区。

为实现上述数据存储方法,本发明实施例还提供一种海量数据存储系统, 所述系统的组成结构,如图8所示,包括:第一缓存21、第二缓存22和第三 缓存23;其中,所述第一缓存21,用于存储历史数据检索结果;

所述第二缓存22,用于存储频繁使用的告警对象、告警规则、告警具体内 容和告警历史数据;

所述第三缓存23,用于存储热数据。

优选地,所述第一缓存21位于线程变量中,所述第二缓存22位于REDIS 中,所述第三缓存23位于JVM内存中。

优选地,在第三缓存23存储热数据后有冗余存储空间时,第三缓存23还 用于存储冷数据。

优选地,所述第三缓存23包括:冷数据索引队列、热数据索引队列和第三 缓存队列,所述第三缓存队列用于存储热数据。

优选地,所述第三缓存队列中的热数据和冷数据可以进行置换。

需要说明的是,在实际应用中,所述构建模块11、接收模块12、查找模块 13和检索模块14的功能可由位于BOMC监控平台中的CPU、或微处理器 (MPU)、或数字信号处理器(DSP)、或可编程门阵列(FPGA)实现。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号