流程数据的内存存取方法

文档序号:6424145阅读:213来源:国知局
专利名称:流程数据的内存存取方法
技术领域
本发明涉及工业实时数据库,尤其是涉及实时数据库的流程数据的内存存取方法。
背景技术
实时数据库(Real Time Data Base,RTDB)用于采集装置的运行数据,掌握装置的运行状况,并对生产过程的关键数据进行监控和分析,对出现的问题进行及时处理,对历史数据进行科学分析,使生产运行状态平稳,物料供应平衡,减少单耗,提高经济效益,降低成本。目前少数美国公司垄断着工业实时数据库领域。他们的产品价格昂贵,通常只针 对大型巨型企业,中等规模企业所需要的实时数据库产品报价可能要上百万人民币,高额的配置成本成为了过程控制自动化与信息化的一道门槛,制约了国内中小型企业的发展。图I示出工业实时数据库的数据处理流程。参照图I所示,来自数据源10的数据首先在压缩过滤器20进行过滤,然后送入缓存结构30,当存档时机到来时,数据将存入到历史数据库40中,持久地保持。其中缓存结构30是使用计算机的内存实现,而历史数据库40通常以计算机的硬盘实现。传统的实时数据库厂商都把主要精力放在如何提高数据压缩率和减少存储空间上,对于数据在内存中的组织都没有注重。这种处理方式将更多任务留在持久化时再做,为了有效的利用硬盘性能,在写入数据时需要一定的优化。同时由于内存缓冲区结构简单,造成对内存中历史数据的检索存在一定困难,效率不高。例如美国OSI Software公司PI (Plant Information System)系统是把压缩过的重要数据放入高速缓存(cache)中,该高速缓存在内存中以内存Buffer实现,并没有对数据进行归类处理。这么做看似简化了操作,提高了吞吐量,但是在写入硬盘过程中,需要大量的CPU干预。持久化过程如果不进行优化会造成频繁的硬盘请求,而优化过程实际上又降低了系统的吞吐能力。在美国艾斯本(Aspen Tech)公司的Info Plus系统中,历史数据以记录结构存储在内存中,每个记录结构属于特定的类或族。这种做法相比PI系统的高速缓存(cache)存储方式,尽管需要更多的CPU处理时间,而且会降低系统吞吐量,但其客户化的数据结构将满足进一步应用的请求,而且更容易嵌入数据处理进程(如时间标签,超限报警等)。然而,这种设计的存储模型仍然不是结构化的,这就造成数据持久化时依旧需要干预,进一步降低性能。

发明内容
本发明提供一种基于倒排表的流程数据的内存存取方法,以解决现有内存存储结构存在的问题。本发明为解决上述技术问题而采用的技术方案是提出一种流程数据的内存存取方法,包括以下步骤
进行一初始化步骤,该初始化步骤在内存中建立映射表、倒排表头结构以及数据存储区域,该映射表记载每一数据源与一唯一 ID的映射关系,该倒排表头结构记载每一数据源的ID、属性信息、以及数据队列指针,该数据存储区域以数据队列储存每一数据源的一个或多个数据项;接收一数据项;寻找产生该数据项的数据源所对应的ID ;如果该数据源没有对应的ID,则将该数据源映射到一新ID,并且为该数据源建立倒排表头结构体;如果数据源有对应的ID,则使用对应的ID找到倒排表头结构体;应用倒排表头结构体中记录的信息进行过滤和压缩,以决定是否存储数据项,如 果存储数据项,则将数据项存入该数据存储区域中,如果不存储数据项,则丢弃数据项。在本发明的一实施例中,该倒排表头结构包括多个头结构体,每一头结构体对应
一数据源。在本发明的一实施例中,每一该数据源的数据项占用的内存大小恒定。在本发明的一实施例中,该数据队列指针记录该数据存储区域的起始指针和当前可用指针。在本发明的一实施例中,上述方法还包括在倒排表头结构中维持快照存储,其记载每个数据源的最新数据项。在本发明的一实施例中,上述方法还包括在倒排表头结构中维持压缩相关数据,其记载上述压缩流程中的临时数据项。在本发明的一实施例中,上述方法还包括在持久化时,直接将该数据存储区域中的数据项队列写入硬盘。本发明由于采用以上技术方案,使之与现有技术相比,可在系统启动时对内存进行结构化,从而有利于系统运行中对内存数据的检索,并使得持久化时只需将内存数据直接写入硬盘而无需经过归类和优化,因此,本发明可以达到更高的吞吐量。


为让本发明的上述目的、特征和优点能更明显易懂,以下结合附图对本发明的具体实施方式
作详细说明,其中图I示出工业实时数据库的数据处理流程。图2示出本发明一实施例的内存存取方法流程图。图3示出根据本发明一实施例的内存存储结构的映射表。图4示出根据本发明一实施例的内存存储结构的倒排表头结构。图5示出根据本发明一实施例的内存存储结构的数据存储区。
具体实施例方式概要地说,本发明采用一种基于倒排表的数据内存存储技术。历史数据在内存中就已经被整理成持久化时应有的结构,既方便对单个数据源状态的追踪,又支持海量数据的存储。内存倒排表的构建虽然一定程度上影响系统吞吐能力,但内存中结构化的数据使硬盘持久化过程变得简单容易,不需要CPU过多干预,而DMA控制器的介入使连续内存的硬盘写入操作效率更高。数据的内存存储结构主要由数据源与ID的映射表、倒排表头结构向量与数据存储区三部分组成。其中后两部分组成一个倒排表,第一部分用来对倒排表内容进行高速访问。图3示出根据本发明一实施例的内存存储结构的映射表。参照图3所示,该映射表300是进行数据源与ID的映射。在表中,数据源以Tag Name表示,每一 Tag Name对应一 ID,并被保存在Hash桶中。Hash桶可包含一项或多项数据源。该映射表在新数据源加入和修改删除时更新,进入的Tag Name被映射器302赋予一个对应的ID。数据项以(id,*值,时间戮)为基本要素,可以通过id找到Tag Name0另外,映射表会在发生更改时及时进行硬盘持久化。
映射表是系统运行的前提。系统启动,错误恢复时必须要首先建立数据源与ID的映射表,同时任何对该表进行的更改操作必须是互斥的且在操作完成后立即进行持久化。为了以ID快速访问数据源,方便历史数据的硬盘存储,设计以ID为数组下标,指针为数组项的快查指针数组301。系统添加新数据源时,使用映射器为数据源分配一个系统ID。在实时数据库内,该ID就是这个数据源的唯一标示,数据源本身的名字被保存在映射表中,在实时数据库系统中这个名字将暂时不被使用。为了后续操作效率考虑,系统ID为顺序正整数。图4示出根据本发明一实施例的内存存储结构的倒排表头结构。参照图4所示,该倒排表头结构400包括多个头结构体401,每一头结构体401是为一个数据源设立。倒排表头结构是存储数据源重要信息的点数据库,也是数据项处理(压缩过滤等)所需辅助信息的存储载体,向量下标为系统ID。如图4右侧所示,每个头结构体401可选择性地包括ID,点数据库属性集,快照存储,压缩相关数据,数据队列指针,统计采集信息等。ID可用于头结构体的索引。点数据库属性集记载这部分数据的属性。快照存储记载每个数据源的最新数据项。压缩相关数据记载进入内存存储结构之前所进行的压缩流程中的一些临时数据项,例如上一观测值,上一存储值,最大斜率Kmax、最小斜率Kmin、最大斜率数据UKmax和一最小斜率数据UKmin,当使用斜率比较法来压缩数据时,这些信息可令压缩过滤器快速访问,从而提高压缩的速率。数据队列指针是指向数据存储区域的数据队列(将在下文参照图5描述)的指针。统计采集信息记载对位于头结构体之后的数据队列的采集信息,这将在后面进一步描述。每个头结构体401中,特定数据记录在特定的位置,访问时只需结构始指针加上数据偏移就可以取出特定项。同时该结构保存着历史数据内存存储区的入口地址,为特定数据源添加重要历史数据(需存入历史数据库的数据)操作也需要访问该数据头。图5示出根据本发明一实施例的内存存储结构的数据存储区。参照图5所示,数据存储区500是由数据队列构成。数据队列是系统为某数据源分配的一块物理地址连续的内存,数据项以基本结构{ID,值,时间戳}写入内存中。对于特定数据源,确保该源的每个数据项占用内存大小恒定以方便检索。同时在图4所示头结构体中记录数据区的起始指针和当前可用指针(数据队列指针统计采集信息),以方便向数据区中添加新的数据项。数据队列满会触发系统为数据源分配新的内存空间。内存中数据的归档由特定事件触发,如内存使用率到达阈值,到达内存数据归档时间点等。归档时,无需额外的处理,只需要将整个数据存储区域放入硬盘中进行持久化。图2示出本发明一实施例的内存存取方法流程图。参照图2所示,在系统启动时进行初始化步骤Si。该步骤在系统启动时完成绝大部分数据点的配置,由此建立如图3所示的映射表,以及如图4和图5所示的倒排表头结构和数据存储区域,该数据存储区域可动态为后续数据点保留内存空间。这就在实时数据到来之前建立好向量结构并为每个项分配好内存。实时数据库处理输入数据时,只需将经过处理后需要持久化的数据项存储在为相应数据点配置的内存空间中。一般地,所进行的处理包括过滤,压缩,平滑等,这些操作需要用到的数据记录与信息也将存储在内存结构中。步骤S2开始,接收数据项,并如步骤S3在映射器(参见图3)中寻找产生该数据项的数据源的映射ID,如果未找到,则该数据项来自新数据源,将新数据源的Tag Name映 射至一 ID,并保存到映射表中。接着在步骤S9为数据项的数据源建立头结构体,然后于步骤S7,将数据项存储至该新建头结构索引的数据存储区中。另外,如果在步骤S3找到映射ID,则进入步骤S5,进一步通过ID找到头结构体。然后在步骤S6,通过头结构体中存储的相关信息,作过滤,压缩操作,以决定是否存储该数据项,如果是,则在步骤S7将相应数据项存入数据存储区中,否则在步骤S8中丢弃这些数据项。当数据存储区达到一定条件时(到达持久化时间点或内存消耗规模到达阈值时),进行批量化持久化。在存入历史数据库时,只需将这些由头结构和数据队列组织起来的内存块写入硬盘即可。这就将过去需要在写硬盘前进行的数据归类和写硬盘优化的大部分工作,放在系统初始化时做,而初始化时,系统并没有实时性要求,从而达到提高系统吞吐量的目的。由于同时为不同数据源分配不同的内存存储区域,因此数据的内存存储操作可以进行多线程并发操作,而不需要同步锁的介入。此外,内存数据存储结构采用了倒排表结构,每个数据源在初始化时都拥有唯一ID且该ID唯一决定了一个倒排表头结构。这样的底层数据存储结构,为系统的分布式化提供了有效的保障。分布式运行时,只有数据源ID发生变化时,各服务器才需要进行同步,其他时刻系统均不需要同步,各服务器均可独立运行。而数据源变化在稳定运行的实时数据库系统中属于小概率事件。这样的构架特性为系统拓展提供了良好的结构基础。同时,基于倒排表的存储,可以进行有效的分布式化。现存实时数据库系统受硬件计算力约束,吞吐能力有极限(PI系统为业内翘楚,他的处理能力在高端服务器上为IOOw数据每秒)。如果有需要,本系统可以搭建廉价集群(可基于Hadoop等开源分布式处理平台),理论上无限扩大处理能力。虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。
权利要求
1.一种流程数据的内存存取方法,包括以下步骤 进行一初始化步骤,该初始化步骤在内存中建立映射表、倒排表头结构以及数据存储区域,该映射表记载每一数据源与一唯一 ID的映射关系,该倒排表头结构记载每一数据源的ID、属性信息、以及数据队列指针,该数据存储区域以数据队列储存每一数据源的一个或多个数据项; 接收一数据项; 寻找产生该数据项的数据源所对应的ID ; 如果该数据源没有对应的ID,则将该数据源映射到一新ID,并且为该数据源建立倒排表头结构体; 如果数据源有对应的ID,则使用对应的ID找到倒排表头结构体; 应用倒排表头结构体中记录的信息进行过滤和压缩,以决定是否存储数据项,如果存储数据项,则将数据项存入该数据存储区域中,如果不存储数据项,则丢弃数据项。
2.如权利要求I所述的方法,其特征在于,该倒排表头结构包括多个头结构体,每一头结构体对应一数据源。
3.如权利要求I所述的方法,其特征在于,每一该数据源的数据项占用的内存大小恒定。
4.如权利要求I所述的方法,其特征在于,该数据队列指针记录该数据存储区域的起始指针和当前可用指针。
5.如权利要求I所述的方法,其特征在于,还包括在倒排表头结构中维持快照存储,其记载每个数据源的最新数据项。
6.如权利要求I所述的方法,其特征在于,还包括在倒排表头结构中维持压缩相关数据,其记载压缩流程中的临时数据项。
7.如权利要求I所述的方法,其特征在于,还包括在持久化时,直接将该数据存储区域中的数据项队列写入硬盘。
全文摘要
本发明涉及一种流程数据的内存存取方法,以提高实时数据库的吞吐量。该方法的特点是利用结构化的倒排表组织数据,其包括进行一初始化步骤,在内存中建立映射表、倒排表头结构以及数据存储区域,映射表记载每一数据源与一唯一ID的映射关系,该倒排表头结构记载每一数据源的ID、属性信息、以及数据队列指针,该数据存储区域以数据队列储存每一数据源的一个或多个数据项;接收数据项时,使用数据项的数据源对应的ID找到倒排表头结构体;然后应用倒排表头结构体中记录的信息进行过滤和压缩,以决定是否存储数据项,如果存储数据项,则将数据项存入该数据源对应的存储区域中,如果不存储数据项,则丢弃数据项。
文档编号G06F12/08GK102779097SQ201110124780
公开日2012年11月14日 申请日期2011年5月13日 优先权日2011年5月13日
发明者杨威 申请人:上海振华重工(集团)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1