航班数据缓存方法及系统的制作方法_3

文档序号:9865706阅读:来源:国知局
地AVS舱位数据(本地数据库中存储的 数据,通过AVS报更新),运样,缓存中非托管航空公司航班数据将更具针对性,对于运价捜 索的查询能够给予更好的支持。
[0063] 步骤40的缓存自检中,缓存系统按预先配置的时间间隔,循环检查是否有失效的 航班数据,如果有,则删除相应的失效节点。
[0064] 运里,如果自检的时间间隔设置过短,缓存中的数据往往还是有效的,自检效率 低,浪费了资源;如果自检的时间间隔设置过长,缓存中的数据就会有不少脏数据(例如,舱 位状态已经变更,但缓存中舱位状态数据未变),如此,数据准确率将会下降。为此,本发明 实施例采用智能的缓存刷新机制。根据不同航线上舱位更新频率不同,实时调整自检的时 间间隔设置。将舱位更新频繁的航线自检的频率加大,即将舱位更新频繁的航线自检的时 间间隔设置短一些,而舱位更新少的航线轮询频率减低,即将舱位更新频率低的航线自检 的时间间隔设置长一些,从而使用最少的资源提升非托管航空公司舱位状态数据缓存准确 率。
[0065] 下面对本发明实施例缓存方法及系统的具体实现过程做详细说明。
[0066] 如图2所示,本发明实施例提供的缓存系统包括:查询模块、更新模块和缓存处理 模块、通信模块和缓存内存,其中,所述查询模块提供数据查询服务,用于在用户请求航班 数据时,采用多层级查询方式从所述缓存内存中查询数据;所述更新模块,提供数据更新服 务,用于更新所述缓存内存中的数据;所述缓存处理模块提供缓存创建、缓存管理及失效处 理等功能,用于按照多层级缓存读写方式在所述缓存内存中创建数据,W及定期进行缓存 自检,也就是说,管理所述缓存内存中的数据W及定时处理所述缓存内存中失效的数据;所 述通信模块,用于在用户请求航班数据时实时地或被触发地向非托管航空公司系统发送直 连请求,并将请求来的数据通过所述更新模块更新到所述缓存内存中。具体地,所述查询模 块没有查到用户请求的数据时或所述缓存处理模块发现缓存内存中的数据过期时或在用 户请求航班数据时,通信模块启动,实时或在被触发时向非托管航空公司系统发送直连请 求。
[0067] 其中,所述更新模块用于缓存数据更新,包括:实时发送非托管航空公司直连请求 更新缓存数据、和/或主动触发更新缓存数据、和/智能轮询方式更新缓存数据。其具体实现 过程与上述方法相应描述相同,不再寶述。
[0068] 其中,所述缓存内存采用多层级缓存航班数据,具体地:不同航空公司的航班数据 配置不同的缓存区域;W及,针对同一航空公司的航班数据,按用户身份分级进行读写配 置;针对同一航空公司的航班数据,配置直飞与联程区分读写。
[0069] 本发明实施例的缓存系统可W使用与业务相关的树形存储结构,比直接使用化sh 存储查询效率更高。本发明实施例的缓存系统核屯、是其缓存内存的结构,称为 SeamlessMem。如图3所示,56日11116 3316111(56日11116 33缓存的内存结构)分为^个部分:控制区 (Conhol Area)、索引及数据区(Index&Data Area)和可利用空间(Available Space)。其 中,控制区包含W下成员:缓存模式(Mode)、已存储的数据单元数目化lem_Num)和配置项 (Config),图3中的共享内存IPCKEY是缓存系统的唯一性ID(Shm_I(巧),其它程序要找到运 个缓存,就需要通过IPCKEY来找。配置项(Config)包括共享内存大小(Capacity)、信号量 (Sem_Key)、信号量个数(Sem_Num)、有效级别数化ffect_Num)、有效时间巧ffect_Time)、各 有效级别对应的用户类型化ffect_User)、特殊有效项(Special_Eft)、最大缓存天数 (Cach_Day)、失效检查的轮巡时间间隔(Chk_Time)、执行管理命令的等待时间(Wait_ Time)、可利用空间下限(Low_Limit)、存取策略(SM_Num)、共享内存中内容持久化文件的 路径(Dump_file)等。运里,存取策略因受POS^oint of Sale)的影响,相同查询条件但不 同Off ice的Seamless数据有可能不同,SeamlessMem不可能为所有Off ice存储其Seamless 数据,为此,实际存取数据时,SeamlessMem提供Ξ种存取方式:精确存取、按城市代码存取 和共享存取。精确存取是指不同的Off ice将存取各自的Seamless数据;按城市代码存取是 指城市代码相同的Office共用一份数据;共享存取是指所有Office共用一份数据。存取策 略用于确定某Office采用W上哪种方式存取。
[0070] 如图3所示,索引及数据区(Index&Data Area)的组织方式为树索引+链表,树索引 为2层36叉+4层10叉树,对应2位航空公司代码和4位航班号(若航班号不足4位则在前面补 0),其树叶节点的数量为12960000(36 X 36 X 10 X 10 X 10 X 10),若某树叶节点决定的航班 存在Seamless数据,则该树叶节点连接一条数据链表化inkNode)。
[007?] LinkNode中含W下数据成员:子链表标识符ID、子链表所含的节点数量 LinkNodeNum、数据存储单元Element、指向本子链表下一个节点的指针化xePtr和指向下一 条子链表的指针化otheriHr,其中,ID、LinkNodeCount和化othe;rPl:;r只在每条子链表的第 一个节点存在,数据存储单元Element中存储的就是舱位状态数据。
[0072] 如图3所示,上述所有数据链表连接的数据链表节点(目化inkNode);从可利用空间 (Available Space)分配,当某个节点中的数据不再有效时,将该节点从数据链表中删除并 交还给可利用空间。初始时,可利用空间为一整块内存,当其从数据链表回收空间后,它逐 渐退化为一条单链表。
[0073] 实施例一
[0074] 应用本发明实施例的缓存系统,查询航班数据的过程可W运样实现:缓存系统的 缓存处理模块定时进行失效管理,删除缓存内存中过期的数据;用户向缓存系统请求非托 管航空公司航班信息时,调用查询模块查询缓存内存,查到相应数据且在有效期内则将相 应数据返回给用户;如果没有查到相应数据或者失效,则调用通信模块向非托管航空公司 相关系统发请求,收到非托管航空公司相关系统的回复后,一方面将回复中的非托管航空 公司航班舱位状态数据返回给用户,另一方面调用缓存处理模块将回复中的数据更新至缓 存内存。
[0075] 应用本发明实施例的缓存系统,查询航班数据的过程中各个服务(查询服务等)的 访问方式如图4所示。
[0076] 实施例二
[0077] 如图5所示,本发明实施例的缓存系统通过查询请求更新缓存数据的过程可W运 样实现:得到非托管航空公司相关系统针对代理人查询请求的回复后,缓存系统将回复中 设及非托管航空公司航班舱位状态的数据提取出来,更新到缓存内存中对应该非托管航空 公司的缓存区域,实现缓存刷新。具体地,代理人请求调用缓存系统的查询模块,查询模块 发现需要异步调用非托管航空公司直连请求,此时查询模块调用通信模块发请求给非托管 航空公司相关系统;查询模块接收非托管航空公司相关系统返回的结果,提取其中的非托 管航空公司航班舱位状态数据并返回给用户,同时调用缓存管理模块将非托管航空公司航 班舱位状态数据写入到缓存内存中。
[007引实施例Ξ
[0079] 存储代理人查询请求中的非托管航空公司数据,是缓存系统的基石,仅仅只有运 一部分数据不足达到足够高的准确率;因为代理人查询请求和运价捜索的查询的内容还是 有所区别,代理人可能更关注他所熟悉的那些热口航线,且对运价捜索的查询范围需求更 广。
[0080] 本发明实施例的缓存系统使用主动触发方法更新缓存数据的过程可W运样实现: 运价捜索用户调用查询引擎,查询请求中发现有非托管航空公司航班,则查询Seamless缓 存系统W获取非托管航空公司航班数据;如果从Seamless缓存系统中没有查到结果,后台 主动触发一条Seamless缓存到非托管航空公司的直连请求,通过非托管航空公司直连访问 获取实时的航班数据;本次查询请求不会等待回报,继续其它业务逻辑处理;对于在缓存系 统中没有的非托管航空公司航班,查询本地的航班数据;其它业务逻辑处理,完成后组报返 回;本次查询流程结束;非托管航空公司回报后,将非托管航空公司回报的结果更新到 Seamless缓存,如此下次同样的查询请求产生时,缓存能够将返回最新的航班数据给用户。
[0081] 实施例四
[0082] 由于舱位数据变化频繁,舱位数据的准确率有待提升,本发明实施例通过使用智 能轮询的方法更新缓存数据,保证舱位结果发生变化后能及时的更新到缓存中,从而提高 缓存中舱位结果的准确率。
[0083] 本发明实施例的缓存系统通过智能轮询更新缓存数据的过程可W运样实现:
[0084] 首先,轮询策略原则可W运样设置:保障需求的同时,减少对现有资源的消耗,降 低对本地数据库的压力;保障需求的同时,不能造成对非托管航空公司相关系统的压力;各 航线对舱位的准确度要求不同,
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1