发明内容
本发明所要解决的技术问题是提供一种对彩信数据进行处理的方法及分布式缓存系统,以克服现有彩信系统中硬件使用成本过高的缺陷。
为解决上述问题,本发明提供了一种对彩信数据进行处理的方法,应用于包含彩信系统及分布式缓存系统的网络结构中,所述方法包括:
所述分布式缓存系统采用全索引扫描(IFS)存储方式对所述彩信系统发来的彩信数据进行存储。
进一步地,所述方法具体包括:
在接收到所述彩信系统发来的携带有待写入的彩信数据及所述彩信数据对应的关键字(key)值的写数据命令时,所述分布式缓存系统先根据所述key值的哈希值在哈希表中查找对应的Keynode的存储地址信息;其中,每一条Keynode为包含所述分布式缓存系统中保存的一条彩信数据的key值、key的长度信息、该彩信数据的长度及该彩信数据在数据文件中的存储位置信息的记录;
如果未找到,则将所述待写入的彩信数据存储到当前活动的数据文件中,并在内存中相应地增加一条Keynode,将所述Keynode的存储地址信息与所述彩信数据对应的key值的对应关系写入所述哈希表中。
进一步地,所述方法还包括:
如果所述分布式缓存系统根据所述key值的哈希值在哈希表中查找到对应的Keynode的存储地址信息,则根据查找的Keynode的存储地址信息找到相应的Keynode,在判断出该条Keynode中包含的key值与所述待写入的彩信数据对应的key值不同时,根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,使用所述待写入的彩信数据对该存储位置存储的数据进行更新,并相应的更新该Keynode中的信息。
进一步地,
当待新增的Keynode中的key值超过预配置的key值最大字节数时,所述将所述Keynode的存储地址信息与所述彩信数据对应的key值的对应关系写入所述哈希表中,具体包括:
先对该key值经过md5处理后,将所述Keynode的存储地址信息与经过md5处理的所述彩信数据对应的key值的对应关系写入所述哈希表中。
进一步地,
当待新增的Keynode中的key值超过预配置的key值最大字节数字节时,所述判断出该条Keynode中包含的key值与所述待写入的彩信数据对应的key值不同,具体包括:
判断出经过md5处理的所述待写入的彩信数据对应的key值与查找到的Keynode中包含的key值不同。
进一步地,所述方法还包括:
在收到删除数据命令时,所述分布式缓存系统根据所述删除数据命令中携带的待删除数据对应的key值在内存中查询包含该key值的Keynode;如果查找到,则根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,将该条彩信数据在该相应的数据文件中标记为删除,并将该条Keynode放到空闲的Keynode的链表中。
进一步地,
所述写数据命令中还携带有待写入的彩信数据的有效时间信息;
所述分布式缓存系统在将所述待写入的彩信数据存储到当前活动的数据文件中时,还将所述待写入的彩信数据的有效时间信息一同进行存储;
所述分布式缓存系统中预配置有开始清理时间信息;
所述方法还包括:在所述开始清理时间到来时,所述分布式缓存系统开始进行数据整理,对每个数据文件进行轮询;
对于每一个数据文件中保存的每一条彩信数据,当判断出该条彩信数据的有效时间已过期且未被标记为删除时,将该条彩信数据标记为删除;
对于每一个数据文件,当判断出整个数据文件中的所有彩信数据都已被标记为删除后,将整个数据文件删除。
相应地,本发明还提供了一种分布式缓存系统,包括:
接收模块,用于接收彩信系统发来的彩信数据;
处理模块,用于采用全索引扫描(IFS)存储方式将所述接收模块接收到的彩信数据写入到存储模块中;
所述存储模块,用于保存所述处理模块写入到本模块中的彩信数据。
进一步地,
所述处理模块用于在所述接收模块接收到所述彩信系统发来的携带有待写入的彩信数据及所述彩信数据对应的关键字(key)值的写数据命令时,根据所述key值的哈希值在哈希表中查找对应的Keynode的存储地址信息;其中,每一条Keynode为包含所述分布式缓存系统中保存的一条彩信数据的key值、key的长度信息、该彩信数据的长度及该彩信数据在数据文件中的存储位置信息的记录;
所述处理模块还用于在未找到对应的Keynode的存储地址信息时,将所述待写入的彩信数据存储到所述存储模块中的当前活动的数据文件中,并在内存中相应地增加一条Keynode,将所述Keynode的存储地址信息与所述彩信数据对应的key值的对应关系写入所述哈希表中。
进一步地,
所述处理模块还用于在根据所述key值的哈希值在哈希表中查找到对应的Keynode的存储地址信息时,根据查找的Keynode的存储地址信息找到相应的Keynode,在判断出该条Keynode中包含的key值与所述待写入的彩信数据对应的key值不同时,根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,使用所述待写入的彩信数据对该存储位置存储的数据进行更新,并相应的更新该Keynode中的信息。
进一步地,
所述处理模块在判断出待新增的Keynode中的key值超过预配置的key值最大字节数时,所述将所述Keynode的存储地址信息与所述彩信数据对应的key值的对应关系写入所述哈希表中,具体包括:
所述处理模块用于先对该key值经过md5处理后,将所述Keynode的存储地址信息与经过md5处理的所述彩信数据对应的key值的对应关系写入所述哈希表中。
进一步地,
所述处理模块还用于在判断出待新增的Keynode中的key值超过预配置的key值最大字节数时,所述判断出该条Keynode中包含的key值与所述待写入的彩信数据对应的key值不同,具体包括:
所述处理模块用于判断出经过md5处理的所述待写入的彩信数据对应的key值与查找到的Keynode中包含的key值不同。
进一步地,
所述接收模块还用于接收删除数据命令;
所述处理模块还用于在所述接收模块收到所述删除数据命令时,根据所述删除数据命令中携带的待删除数据对应的key值在内存中查询包含该key值的Keynode;如果查找到,则根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,将该条彩信数据在该相应的数据文件中标记为删除,并将该条Keynode放到空闲的Keynode的链表中。
进一步地,
所述写数据命令中还携带有待写入的彩信数据的有效时间信息;所述存储模块中还预配置有开始清理时间信息;
所述处理模块还用于在将所述待写入的彩信数据存储到当前活动的数据文件中时,将所述待写入的彩信数据的有效时间信息一同进行存储;所述处理模块还用于在所述开始清理时间到来时,开始进行数据整理,对每个数据文件进行轮询;对于每一个数据文件中保存的每一条彩信数据,当判断出该条彩信数据的有效时间已过期且未被标记为删除时,将该条彩信数据标记为删除;对于每一个数据文件,当判断出整个数据文件中的所有彩信数据都已被标记为删除后,将整个数据文件删除。
本发明使用了分布式缓存系统读写效率较高的IFS存储模式,存储效率与NAS设备相当,但成本更加低廉。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
由于分布式缓存可以部署在廉价的PC Server(服务器)上,并且配合着自身的一些特性(如数据整理,即将过期数据定时进行清理),可以很好的支持彩信系统的应用。
鉴于现有的彩信系统使用NAS设备面临高昂的硬件和维护费用,本实施例提出了一种使用分布式缓存代替传统NAS设备作为彩信系统的数据存储服务器的方法,使彩信系统的相关数据存储于部署在廉价的PC Server上的分布式缓存系统中,结合分布式缓存自身的特性,如:IFS(Index Full Scan,全索引扫描)持久化存储模式、定时整理过期数据的功能,使彩信系统的使用成本大大降低,并且存储性能与之前的NAS设备相当。
传统的持久化存储方案其索引都建立在磁盘文件中,查询索引、更新、读取数据都会产生随机访问磁盘,响应一次应用读或写请求,持久化存储系统要发生若干次磁盘随机IO(Input/Output,输入/输出)访问,因此很容易产生IO瓶颈。IFS存储方案的主要技术特点是使磁盘随机IO访问变成顺序IO访问,并尽可能减少磁盘访问,从而能大大提高持久化存储的效率。
在本实施例中,基于分布式缓存系统进行彩信数据存取的系统结构,如图1所示,包括:彩信系统、客户端及分布式缓存系统。
其中,分布式缓存系统被安装布置在多个数据存储服务器上,使之成为一个集群,对外可视作是一个存储设备,即相当于多个数据存储服务器共同构成了分布式缓存系统,数据更加安全,且系统存储容量也方便动态扩展;通过本系统中提供客户端接口,可将彩信系统的相关数据存入分布式缓存系统中。
在上述系统中,由分布式缓存系统对彩信数据进行处理的方法,包括:
一、将接收到的写请求、更新请求和删除请求转换为顺序写操作,提高了写数据的效率,存取效率与NAS设备基本相当。具体包括:
A、写数据;
在分布式缓存系统中采用IFS存储方式来存储彩信数据;即在写彩信数据时,直接将该彩信数据写入当前活动的数据文件。其中,在任意时刻,活动的数据文件只有一个。
在接收到待写入的彩信数据及该彩信数据对应的key(关键字)值时,分布式缓存系统先会根据该key值的hash(哈希)值在HASH TABLE(哈希表)中查找对应的Keynode的存储地址信息;其中,每一条Keynode即为包含分布式缓存系统中保存的一条彩信数据的key值、key的长度信息、该彩信数据的长度及该彩信数据在数据文件中的存储位置信息的记录。
如果未找到,则将上述待写入的彩信数据存储到当前活动的数据文件中,并在内存中相应地增加一条Keynode,将该Keynode的存储地址信息与该彩信数据对应的key值的对应关系写入HASH TABLE中;
如果找到,则根据查找的Keynode的存储地址信息找到相应的Keynode,比较该条Keynode中包含的key值与待写入的彩信数据对应的key值是否相同,若相同,则不进行更新操作;若不同,则根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,使用上述待写入的彩信数据对该存储位置存储的数据进行更新,并相应的更新该Keynode中的信息(如key值、key的长度信息、该彩信数据的长度中的任意一种或任意组合,需视具体情况而定)。
由于采用IFS存储模式时,一般要求Keynode中存储的key值的长度不能超过预配置的key值最大字节数(现有通常配置为70个字节)。因此,当待新增的Keynode中的key值超过70个字节时,可先对该key值经过md5处理后再进行保存。相应地,在将待写入的彩信数据对应的key值与查找到的Keynode中包含的key值进行比较时,如该待写入的彩信数据对应的key值的长度超过了70个字节,则先对该key值进行md5处理后,再进行比较。
B、删除数据;
在收到删除数据命令时,分布式缓存系统根据该删除数据命令中携带的待删除数据对应的key值在内存中查询包含该key值的Keynode;如未查找到,则返回删除失败提示;如果查找到,则根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,将该条彩信数据在该相应的数据文件中标记为删除,并将该条Keynode放到freelisthead(空闲的Keynode的链表,用于回收重用Keynode)中。同时检查内存缓存中是否有该条彩信数据,如有则一并删除。
二、过期数据的定期整理,定期批量删除过期数据,回收无效数据占用的磁盘空间。具体包括:
步骤A:用户可通过客户端开启分布式缓存系统的过期数据定时清理的功能,并设定清理的时间段,该时间段包括:开始清理时间和结束清理时间,也就是说,清理操作只是在这个时间段内进行,超出该时间段,不进行任何清理操作;
步骤B:由于在向分布式缓存系统中写入彩信数据时,会将该彩信数据的有效时间一同写入数据文件。因此,在开始清理时间到来时,分布式缓存系统开始进行数据整理,对每个数据文件进行轮询;
对于每一个数据文件中保存的每一条彩信数据,当判断出该条彩信数据的有效时间已过期且未被标记为删除时,将该条彩信数据标记为删除;
对于每一个数据文件,当判断出整个数据文件中的所有彩信数据都已被标记为删除后,将整个数据文件删除。
从上述说明可以看出,上述方法将磁盘的随机IO访问变成顺序IO访问,并尽可能减少磁盘访问,同时使用基于内存的存储的索引技术,从而能大大提高持久化存储的效率,在同等磁盘数量下,存取效率与NAS设备基本相当。根据每条数据自身的有效时间,每天定时的将过期的彩信数据进行清理。本发明解决了彩信系统使用传统NAS存储设备价格昂贵的问题。使用分布式缓存作为存储设备以后,硬件可由高成本的NAS变成低成本的PC Server。并且,分布式缓存IFS存储数据和定时清理过期数据的特性,也非常符合彩信系统的需求。
相应地,在本实例中,一种分布式缓存系统,如图2所示,包括:
接收模块,用于接收彩信系统发来的彩信数据;
处理模块,用于采用全索引扫描(IFS)存储方式将所述接收模块接收到的彩信数据写入到存储模块中;
所述存储模块,用于保存所述处理模块写入到本模块中的彩信数据。
较佳地,
所述处理模块用于在所述接收模块接收到所述彩信系统发来的携带有待写入的彩信数据及所述彩信数据对应的关键字(key)值的写数据命令时,根据所述key值的哈希值在哈希表中查找对应的Keynode的存储地址信息;其中,每一条Keynode为包含所述分布式缓存系统中保存的一条彩信数据的key值、key的长度信息、该彩信数据的长度及该彩信数据在数据文件中的存储位置信息的记录;
所述处理模块还用于在未找到对应的Keynode的存储地址信息时,将所述待写入的彩信数据存储到所述存储模块中的当前活动的数据文件中,并在内存中相应地增加一条Keynode,将所述Keynode的存储地址信息与所述彩信数据对应的key值的对应关系写入所述哈希表中。
较佳地,
所述处理模块还用于在根据所述key值的哈希值在哈希表中查找到对应的Keynode的存储地址信息时,根据查找的Keynode的存储地址信息找到相应的Keynode,在判断出该条Keynode中包含的key值与所述待写入的彩信数据对应的key值不同时,根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,使用所述待写入的彩信数据对该存储位置存储的数据进行更新,并相应的更新该Keynode中的信息。
较佳地,
所述处理模块在判断出待新增的Keynode中的key值超过预配置的key值最大字节数时,所述将所述Keynode的存储地址信息与所述彩信数据对应的key值的对应关系写入所述哈希表中,具体包括:
所述处理模块用于先对该key值经过md5处理后,将所述Keynode的存储地址信息与经过md5处理的所述彩信数据对应的key值的对应关系写入所述哈希表中。
较佳地,
所述处理模块还用于在判断出待新增的Keynode中的key值超过预配置的key值最大字节数时,所述判断出该条Keynode中包含的key值与所述待写入的彩信数据对应的key值不同,具体包括:
所述处理模块用于判断出经过md5处理的所述待写入的彩信数据对应的key值与查找到的Keynode中包含的key值不同。
较佳地,
所述接收模块还用于接收删除数据命令;
所述处理模块还用于在所述接收模块收到所述删除数据命令时,根据所述删除数据命令中携带的待删除数据对应的key值在内存中查询包含该key值的Keynode;如果查找到,则根据该条Keynode中包含的彩信数据在数据文件中的存储位置信息,将该条彩信数据在该相应的数据文件中标记为删除,并将该条Keynode放到空闲的Keynode的链表中。
较佳地,
所述写数据命令中还携带有待写入的彩信数据的有效时间信息;所述存储模块中还预配置有开始清理时间信息;
所述处理模块还用于在将所述待写入的彩信数据存储到当前活动的数据文件中时,将所述待写入的彩信数据的有效时间信息一同进行存储;所述处理模块还用于在所述开始清理时间到来时,开始进行数据整理,对每个数据文件进行轮询;对于每一个数据文件中保存的每一条彩信数据,当判断出该条彩信数据的有效时间已过期且未被标记为删除时,将该条彩信数据标记为删除;对于每一个数据文件,当判断出整个数据文件中的所有彩信数据都已被标记为删除后,将整个数据文件删除。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已,并非用于限定本发明的保护范围。根据本发明的发明内容,还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。