一种支持历史Key信息的内存数据库制造技术

技术编号:5488137 阅读:243 留言:0更新日期:2012-04-11 18:40
支持历史Key信息的内存数据库涉及计算机应用领。在memcached中添加自定义函数get_KeyitemList,对process_update_command、complete_nread、process_get_command和process_delete_command函数改造后成为支持历史Key值存储的Hmemcached。Key值的数据存储采用不断追加记录的方式。一个Key的历史数据的数量根据需要设定。同一KEY值的不同历史数据在Hmemcached内部的存储使用Key_NO作为Key值的形式,NO是从0到系统允许的最大记录数MAX_RECNO-1中的一个数字。记录时若未超过设定的最大记录条数,直接追加;若超过则采用先进先出的方法,删除掉首条记录,再将新记录追加至此Key中。本发明专利技术有效解决了分布式系统中以Key-Value方式对同一Key值存储的历史数据访问问题,数据被写入每个主机的Hmemecached管理的内存中,客户端无需改动,方便实用。

【技术实现步骤摘要】

本专利技术涉及计算机应用领域,尤其涉及内存数据库领域,可用于空中交通管制系 统(ATC)中需要保存历史信息的数据存储。
技术介绍
ATC系统中,在集群或双机服务器环境中,雷达数据处理同一飞机目标的多个跟踪 数据。这些目标跟踪数据是在时间流逝中被雷达探测到并被处理的。一般的,同一个目标被 赋以一个唯一的编号(即航迹号)直到飞机目标消失。随着时间的流逝和处理的进行,一个 目标将在一个航迹号下产生连续的多个处理目标点信息。在集群服务器环境中,雷达的数 据处理集中在主态的进程或主机中。当这些主机关闭或进程失效时,集群将发生主备切换, 备份机变为主态机,这时该主机将重新跟踪目标,而航迹号的生成也会和之前不一致,这为 系统的其它处理带来不便。所以通常主态机的航迹历史数据将定时送往备份机,以便发生 主备切换时,系统可以较好的延续已有的航迹号进行处理。如果在运行过程中,集群中其它 主机存有这些目标的中间处理历史数据,其他主机就可以直接提取这些目标的历史中间数 据,直接进行处理,这样就可以解决没有历史数据而导致的跟踪精度不高的问题。采用这种 方法以后,其它主机或进程在备份状态时可以不接收雷达数据并进行相关处理,也不必进 行这些历史数据的同步操作,大大节省CPU资源。memcached (http//memcached. org/)是著名的内存数据库,通过部署在不同主机 上memcached还具有分布式内存数据库的特征。在本专利技术中为提高访问效率各主机采用了 memcached内存数据库。内存数据库是一种Key-value数据库,它是一种非关系数据库,这 种数据库适合存放对应关系明确、可以用Key值进行检索查询的数据。在一些特殊的应用 中,如集群或双机环境中,雷达数据处理同一目标的多个跟踪数据,这种数据需要在多个主 机间进行存储,即要求对同一 Key有多条数据的存储,但memcahed不支持重复Key的存储, 本专利技术旨在对memcahed进行改造,加入了支持历史Key值存储的技术,对于雷达数据处理 的应用,Key即为航迹号。
技术实现思路
本专利技术的目的是解决以ATC系统为代表的分布式系统中以Key-Value方式对同一 Key值存储的历史数据的访问问题。本专利技术的基本思路是对memcahed进行改造,改造后的memcahed成为能够支持历 史信息的Hmemcached,支持对历史Key值数据的存储。Key值的数据存储不是覆盖,而是采 用不断追加记录的方式。一个Key的历史数据的数量可以根据具体应用的需要而设定。使 用者在追加时不需考虑数据的历史特征。本专利技术的目的是这样达到的对memcahed中的某些函数进行改造,改造后的 memcahed成为能够支持历史信息的Hmemcached。对于同一 KEY值不同的历史数据在 Hmemcached内部的存储使用Key_No作为Key值的形式,No是值从0到MAX_RECN0_1中的某个数。当主机中某个进程提出对某个Key写入请求时,启动数据操作流程,由HMemcached通 过查询当前操作的Key的记录条数,若未超过设定的最大记录条数,则直接追加一条记录; 若超过设定的最大记录条数,则采用先进先出的方法,删除掉首条记录,再将新记录追加至 此Key的记录中。系统中的数据以KEY-VALUE的方式存储,memcached客户端实例化为N个,N为集 群中主机的个数。每个客户端连接一个集群环境中的服务器主机,主态进程调用对Key值 进行赋值操作时,调用每个客户端实例对集群中主机的Hmemcached进行写入操作,数据被 写入每个主机的Hmemecached管理的内存中。所述对memcahed进行改造包括增加自定义get_KeyitemList函数,改造 process_update_command 函数、complete_nread 函数、process_get_command 函数禾口 process_delete_command 函数。在自定义get_KeyitemList函数中,获得Key对应的所有历史item,存储到作为返 回值的item_list链表中,确定返回该Key值有多少条记录。在process_update_command加入对更新的Key值的处理,完成新记录数据的加 入。在completejread函数中加入对更新的Key值的处理,完成新记录数据的加入。在process_get_co_and加入读取指定Key所有记录数据的处理。在prOCeSS_delete_COmmand加入读取指定Key所有记录数据并进行删除处理。数据操作流程包括数据写入、数据读出和数据删除。数据操作流程中的数据写入过程是当Hmemcached需要写入数据时,调用改造后 的process_update_command函数,该函数将当前要操作的Key中的所有的历史记录读出到 一个临时item链表tmpitemList中,此链表中的Key_N0的NO是从0到MAX_RECN0_1,其中 Key_N0记录对应的是数据库中Key_N0+l的值。然后,根据当前最大的Key_N0作加一操作, 得到新的 Key_N0,调用 item_alloc 分配一个 new_item。当 tmpitemList 的 size 大于 MAX_ RECNO时,则新的Key_N0为Key_ MAX_RECN0 ;此后调用改造后的complete_nread进行数据 库的更新操作,调用 store_item 存储 new_item。若 tmpitemList 的 size 大于 MAX_RECN0, 则采用先进先出策略,将Key_N0中No的最小值对应的记录删除,调用d0_item_i^place函 数将tmpitemList里的Key_N0对应的item代替数据库中旧的Key_N0对应的item。数据操作流程中的数据读出过程是当Hmemcached需要读取数据时,调用改造后 的process_get_command的函数读出某个Key的数据,将ΚθΥ_0···Ν0_1的所有数据一起读 出,并返回当前Key值下的记录条目。数据操作流程中的数据删除过程是当memcached需要删除某个Key值数据时,调 用改造后的process_delete_command的函数将Κθγ_(>··Ν0-1的所有数据一起删除。系统中的数据以KEY-VALUE的方式存储,使用memcahed内存数据库软件的客户端 无需改造,支持^^ get Add replace delete常规操作。本专利技术的积极效果是1、有效解决了以ATC系统为代表的分布式系统中以Key-Value方式对同一 Key值存储 的历史数据的访问问题。在发生主备切换时,系统可以较好的延续已有的数据进行处理,解 决没有历史数据而导致的跟踪精度不高的问题。2、其它主机或进程在备份状态时可以不接收雷达数据并进行相关处理,也不必进 行这些历史数据的同步操作,大大节省CPU资源。3、Memcached的客户端实现非常多,本专利技术使用现存的memcached客户端而无需 改动,支持如kt get Add replace delete常规操作,方便、实用。附图说明图1 是 get_Keyitem本文档来自技高网
...

【技术保护点】
一种支持历史Key信息的内存数据库,其特征在于:对memcahed中的某些函数进行改造,改造后的memcahed成为能够支持历史信息的Hmemcached;对于同一KEY值不同的数据在Hmemcached内部的存储使用Key_NO作为Key值的形式,NO是值从0到系统最大记录数MAX_RECNO-1中的某个数,当主机中某个进程提出对某个Key写入请求时,启动数据操作流程,由Hmemcached通过查询当前操作的Key的记录条数,若未超过设定的最大记录条数,则直接追加一条记录;若超过设定的最大记录条数,则采用先进先出的方法,删除掉首条记录,再将新记录追加至此Key的记录中;系统中的数据以KEY-VALUE的方式存储,memcached客户端实例化为N个,N为集群中主机的个数,每个客户端连接一个集群环境中的服务器主机,主态进程调用对Key值进行赋值操作时,调用每个客户端实例对集群中主机的Hmemecached进行写入操作,数据被写入每个主机的Hmemecached管理的内存中;所述对memcahed中的某些函数进行改造包括:增加自定义get_KeyitemList函数,改造process_update_command函数、complete_nread函数、process_get_command函数和process_delete_command函数;在自定义get_KeyitemList函数中,获得Key对应的所有历史item,存储到作为返回值的item_list链表中,确定返回该Key值有多少条记录;在process_update_command加入对更新的Key值的处理,完成新记录数据的加入;在complete_nread函数中加入对更新的Key值的处理,完成新记录数据的加入;在process_get_command加入读取指定Key所有记录数据的处理;在process_delete_command加入读取指定Key所有记录数据并进行删除处理;数据操作流程包括:数据写入、数据读出和数据删除。...

【技术特征摘要】
...

【专利技术属性】
技术研发人员:胡术莫思特李晓峰邱敦国黄戈刘舒刘宇
申请(专利权)人:四川川大智胜软件股份有限公司
类型:发明
国别省市:90[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1