[发明专利]云详单查询管理系统及方法有效

专利信息
申请号: 201610922026.0 申请日: 2016-10-21
公开(公告)号: CN106649530B 公开(公告)日: 2020-12-15
发明(设计)人: 刘健;吴镔;姜科 申请(专利权)人: 北京卡拉卡尔科技股份有限公司
主分类号: G06F16/2453 分类号: G06F16/2453;G06F16/2458;G06F16/27
代理公司: 北京市盛峰律师事务所 11337 代理人: 席小东
地址: 100029 北京市朝阳区北辰*** 国省代码: 北京;11
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 云详单 查询 管理 系统 方法
【权利要求书】:

1.一种云详单查询管理系统,其特征在于,包括:详单文件管理模块、接口服务模块、数据路由模块和数据存储模块;

详单文件管理模块,用于接收外部系统上传的新的详单文件,读取到所述新的详单文件的详单文件内容;然后,向所述接口服务模块发送数据写入指令;其中,所述数据写入指令中携带有所述详单文件内容;

接口服务模块,分别与所述详单文件管理模块以及外部详单查询系统对接,用于接收所述详单文件管理模块下发的数据写入指令,解析到需要被写入的详单文件内容;然后,根据所述详单文件内容生成详单写入请求,将所述详单写入请求下发到所述数据路由模块;

或者,用于接收所述外部详单查询系统发送的详单查询指令,从所述详单查询指令中解析到详单查询参数,根据所述详单查询参数生成详单查询请求,并将所述详单查询请求下发到所述数据路由模块;

数据路由模块,用于预制定数据路由策略,接收来自于所述接口服务模块的详单操作指令;其中,所述详单操作指令包括详单写入请求或详单查询请求;然后,根据所述数据路由策略,对所述详单操作指令中的数据进行数据特征提取,并根据数据特征查找到对应的数据存储模块,最后将详单操作指令传输给相对应的数据存储模块;

数据存储模块,用于接收来自于所述数据路由模块的详单操作指令,并执行对应的操作;即:当接收到来自于所述数据路由模块的详单写入请求时,写入并存储详单数据;当接收到来自于所述数据路由模块的详单查询请求时,根据所述详单查询参数,查询到对应的详单数据,并将查询到的详单数据返回给所述外部详单查询系统;

所述数据存储模块的静态主体结构包括读写内存表、只读内存表、log文件以及CCTable文件;其中,所述读写内存表和所述只读内存表位于内存中;所述log文件以及所述CCTable文件位于磁盘上;

所述数据存储模块采用以下方法写入数据:

(1)当所述数据存储模块需要写入一条Key:Value记录的时候,所述数据存储模块首先将所述Key:Value记录写入到所述log文件;

(2)所述读写内存表中Key:Value对是根据Key大小有序存储的,因此,在将Key:Value记录成功写入到所述log文件后,所述数据存储模块再将所述Key:Value记录写入到所述读写内存表中的对应位置,以保证所述读写内存表中存储数据的有序性;

(3)如此不断循环,实现所述读写内存表和所述log文件的一致性;当所述读写内存表写入的数据占用内存到达设定界限后,所述数据存储模块生成新的Log文件和新的读写内存表;原先的读写内存表转为只读内存表,所述只读内存表指:只能进行读操作,不能进行写入操作或者删除操作;后续当需要写入新的Key:Value记录时,将新的Key:Value记录分别被写入所述新的Log文件和新的读写内存表;

(4)数据存储模块将所述只读内存表中存储的数据导出到所述磁盘并进行压缩操作后,形成一个新的CCTable文件;其中,所述CCTable文件为层级结构,第一层为Level 0、第二层为Level 1、依此类推,其层级逐渐增高;所述CCTable文件所存储的记录是根据记录的Key由小到大排列的;

所述数据存储模块采用以下方法查询数据:

(1)所述数据存储模块首先查看内存中的读写内存表,判断所述读写内存表中是否包含key及其对应的value,如果包含,则返回value值即可;如果不包含,则执行步骤(2);

(2)所述数据存储模块查看内存中的只读内存表,判断所述只读内存表中是否包含key及其对应的value,如果包含,则返回value值即可;如果不包含,则执行步骤(3);

(3)所述数据存储模块查看磁盘中的多个CCTable文件,对于每个CCTable文件,由于其为层级结构,因此,首先查找属于level 0的文件,如果查找到所需的key及其对应的value,则返回value值即可;如果未查找到,则查找属于level1的文件,如此循环往复,直到在某层CCTable文件中查找到所需要的key及其对应的value为止;

所述数据存储模块查询数据时,当所述读写内存表和所述只读内存表中均不存在需要查询的key及其对应的value时,采用以下方法查询:

(a)所述数据存储模块预建立Table缓存和Block缓存;其中,所述Block缓存用于缓存上一次返回给用户的key及其对应的value;所述Table缓存用于缓存分别指向CCTable文件中不同block区域的文件指针以及Block缓存的位置信息;

(b)当所述数据存储模块接收到用户发出的读取请求时,所述读取请求中携带有目标key;

(c)所述数据存储模块首先查询所述Block缓存,判断所述Block缓存中是否存在所述目标key,如果存在,则查找到与所述目标key对应的目标value,并向所述用户返回所述目标value,结束流程;如果不存在,则执行步骤d;

(d)所述数据存储模块查询所述Table缓存中的文件指针,获得包含所述目标key的文件指针,然后,根据所述文件指针的指向,查找到所述CCTable文件中对应的一个block区域数据;

然后,所述数据存储模块根据所述Table缓存中的Block缓存的位置信息,定位到Block缓存,再将所述block区域数据传输到所述Block缓存;

(e)所述数据存储模块查询所述Block缓存,判断所述Block缓存中是否存在所述目标key,如果存在,则查找到与所述目标key对应的目标value,并向所述用户返回所述目标value,结束流程;如果不存在,则执行步骤f;

(f)所述数据存储模块从磁盘的CCTable文件中查找与所述目标key对应的目标value,然后,将所述目标key及对应的所述目标value插入到Block缓存;

(g)返回步骤c;

其中,所述外部系统为详单计费系统;

其中,所述接口服务模块还用于:在接收到所述详单文件管理模块下发的数据写入指令,或者,在接收到所述外部详单查询系统发送的详单查询指令时,首先进行安全性验证,只有安全验证通过后,再进行后续数据解析操作;

其中,所述安全性验证包括两种:

第一种,对来源地址和身份进行合法性验证;

第二种,针对特定来源设定接口调用的频度限制,然后,验证特定来源接口调用的频度是否超过设定值,如果超过,则为频繁异常的调用,进行屏蔽处理;如果未超过,则通过验证;

其中,所述详单文件管理模块、所述接口服务模块、所述数据路由模块和所述数据存储模块均作为独立的服务运行于不同的服务器节点,或者部署在同一台服务器上;

所述详单文件管理模块、所述接口服务模块、所述数据路由模块和所述数据存储模块均可运行于物理x86服务器环境或者虚拟化/云服务器环境;

所述详单文件管理模块、所述接口服务模块、所述数据路由模块和所述数据存储模块均支持多节点同时部署运行,支持系统冗余备份;

所述详单文件管理模块、所述接口服务模块、所述数据路由模块和所述数据存储模块在进行多节点部署时,在前端配置负载均衡设备,负载均衡设备根据各个节点的负载,分发详单操作指令;

数据存储模块的静态主体结构还包括Current文件和Manifest文件;所述Current文件和所述Manifest文件位于磁盘上;

(4.1)日志文件

日志文件在系统中用于系统崩溃恢复时不丢失数据;数据存储模块在写入内存前,首先将操作记录到Log文件中,然后再记入内存中;因此,即使系统崩溃,读写内存表中的数据没有来得及转存到磁盘的CCTable文件,数据存储模块也根据log文件恢复内存的读写内存表数据结构内容,不会造成系统丢失数据;

对于一个log文件,数据存储模块会将其切割成以32K为单位的物理Block,每次以一个Block作为基本读取单位,log文件由3个Block构成,在物理布局上,一个log文件由连续的32K大小Block构成;

在应用中看不到Block,看到的是一系列的Key:Value对,在数据存储模块内部,会将一个Key:Value对看做一条记录的数据,在这个数据前增加一个记录头,用来记载管理信息,以方便内部处理;

(4.2)CCTable文件

数据存储模块中存在不同层级的CCTable文件,所有CCTable文件内部布局都是一样的;CCTable文件内部是根据记录的Key由小到大排列的;每个Block分为三个部分,包括:数据存储区、Type区和CRC区;其中,Type区用于标识数据存储区是否采用了数据压缩算法,CRC区是数据校验码,用于判别数据是否在生成和传输中出错;

将CCTable文件划分为数据存储区和数据管理区,其中,数据存储区存放实际的Key:Value数据,数据管理区则提供索引指针管理数据,以查找相应的记录;数据存储区和数据管理区都是基于分块原理进行存储数据;索引指针管理数据分为四种不同类型: MetaBlock、 MetaBlock 索引和数据索引块以及一个文件尾部块;

(4.3)读写内存表和只读内存表

数据存储模块,所有Key:Value数据都是存储在读写内存表、只读内存表和CCTable中的,只读内存表从结构上讲和读写内存表是完全一样的,区别在于只读内存表是只读的,不允许写入操作,而读写内存表则是允许写入和读取的;

当读写内存表写入的数据占用内存到达指定数量,则自动转换为只读内存表,等待转存到磁盘中,系统会自动生成新的读写内存表供写操作写入新数据;

数据存储模块的读写内存表提供了将Key:Value数据写入、删除以及读取Key:Value记录的操作接口,读写内存表并不存在真正的删除操作,删除某个Key的Value在读写内存表内是作为插入一条记录实施的,但是会打上一个Key的删除标记;

数据存储模块的读写内存表中Key:Value对是根据Key大小有序存储的,在系统插入新的Key:Value时,数据存储模块要把这个Key:Value插到合适的位置上以保持这种Key有序性;

当读写内存表插入的数据占用内存达到预设界限后,将内存的记录导出到外存文件中,数据存储模块会生成新的Log文件和读写内存表,原先的读写内存表就成为只读内存表,只能读不能写入或者删除;新到来的数据被记入新的Log文件和读写内存表,数据存储模块后台调度会将只读内存表的数据导出到磁盘,形成一个新的CCTable文件;CCTable文件就是由内存中的数据不断导出并进行压缩操作后形成的,而且CCTable的所有文件是一种层级结构,第一层为Level 0,第二层为Level 1,层级逐渐增高;

(4.4)Current文件

Current文件:用于记载当前的manifest文件名;因为在数据存储模块的运行过程中,随着压缩的进行,CCTable文件会发生变化,会有新的文件产生,老文件被废弃,Manifest也会跟着反映这种变化,此时新生成Manifest文件用于记载这种变化,而Current文件用来指出目标Manifest文件;

由于读写内存表存储的是最新鲜的Key:Value对;只读内存表中存储的Key:Value数据对的新鲜程度次之;而所有CCTable文件中的Key:Value数据新鲜程度低于内存中的读写内存表和只读内存表的Key:Value数据新鲜程度;如果同时在level L和Level L+1找到同一个key,level L的信息比level L+1的更新;查找数据的路径顺序按照数据新鲜程度由高到低排列;

CCTable文件很多,level 0和其它level中查找某个key的过程是不一样的;因为level0下的不同文件存在key的范围有重叠,数据存储模块的策略是找出level 0中包含目标key的文件,之后按照文件的新鲜程度排序,新的文件排在前面,之后依次查找,读出key对应的value;

在Table缓存中,key值是CCTable的文件名称,Value部分包含两部分,一个是指向磁盘打开的CCTable文件中不同block区域的文件指针,以读取内容;另外一个是指向内存中CCTable文件对应的Block缓存的结构指针,在内存中配置table结构, table结构保存CCTable文件的index内容以及用来指示Block缓存用的cache_id ;其中,table结构是根据用户需要进行的选配组件,即在配置文件中指定是否打开采用table结构的功能;

数据存储模块会先在只读内存中的Block缓存中查找是否包含CCTable文件的缓存记录,如果包含,则从Block缓存中读取;如果不包含,则打开CCTable文件,同时将CCTable文件的索引部分加载到内存中并放入Block缓存中;这样Block缓存里面就有了CCTable的缓存记录,只有索引部分在只读内存中,之后数据存储模块根据索引定位到CCTable文件,从CCTable文件中读出Block的内容,再根据缓存记录,将从CCTable文件中读出的Block内容与缓存记录进行逐个比较,如果找到则返回结果,如果没有找到,则本级别CCTable文件不包含需要查找的CCTable文件,到下一级别的CCTable文件中去查找;

在读取操作中,数据存储模块确定了需要查找的key在某个级别下某个CCTable文件A的key range范围内,那么需要判断是不是CCTable文件A真的包含需要查找的Key:Value;此时,数据存储模块首先查找Table缓存,看CCTable文件是否在Table缓存里,如果找到,那么根据index部分就查找到包含该key的目标block;如果没有在Table缓存中找到CCTable文件,那么打开CCTable文件,将其index部分读入内存,然后插入Block缓存,去index里面定位包含该key的目标block;如果确定CCTable文件的block包含需要查找的key,那么需要读取定位到的block内容,这是第二次读取;

其中的key是CCTable文件的cache_id加上block在CCTable文件中的起始位置block_offset;而value则是Block的内容;

数据存储模块发现block在Block缓存中,那么避免读取数据,直接在Block缓存里的block内容里面查找key的value就行,如果没找到,那么读入block内容并把它插入Block缓存中,以加快读取速度。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京卡拉卡尔科技股份有限公司,未经北京卡拉卡尔科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201610922026.0/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top