排序集数据的存储方法及装置与流程

文档序号:12926838阅读:352来源:国知局
排序集数据的存储方法及装置与流程
本发明涉及数据存储领域,具体地,涉及一种排序集数据的存储方法及装置。

背景技术:
在通信系统中,由于redis系统的数据存放在内存,没有持久存储至磁盘来实现数据的高性能读写,因此,一旦系统宕机,整个数据将全部被清空,虽然redis系统自身有持久化机制,但是系统重启后恢复数据较慢。另外,redis系统的数据处理量受到内存的限制,因为redis系统使用内存比较厉害,而数据一般存放在内存中,因此数据库容量受到物理内存的限制,从而无法实现海量数据的高性能读写。

技术实现要素:
本发明实施例的主要目的在于提供一种排序集数据的存储方法及装置,以解决现有技术中的redis系统数据库容量受到物理内存的限制而导致的无法实现海量数据的高性能读写的问题。为了实现上述目的,本发明实施例提供一种排序集数据的存储方法,该方法包括:接收排序集数据并获取所述排序集数据的标识;将所述排序集数据进行压缩处理;根据所述排序集数据的标识将压缩处理后的排序集数据存储至数据库中对应的排序集;根据所述排序集将所述的数据库进行分片处理;将分片处理后的数据库中的排序集数据映射至内存。具体地,在根据所述排序集数据的标识将压缩处理后的排序集数据存储至数据库中对应的排序集之前,所述方法还包括:根据所述排序集数据的标识判断所述数据库中是否存在所述对应的排序集;如果存在所述对应的排序集,则判断所述对应的排序集中的记录数量是否超出限定值,如果是,则删除所述对应的排序集中最早的记录;如果不存在所述对应的排序集,则根据所述排序集数据的标识建立排序集。将分片处理后的数据库中的排序集数据映射至内存之后,所述的方法还包括:周期性异步备份所述分片处理后的数据库中的排序集数据到预定目录。本发明实施例还提供一种排序集数据的存储装置,所述装置包括:标识获取单元,用于接收排序集数据并获取所述排序集数据的标识;压缩处理单元,用于将所述排序集数据进行压缩处理;数据存储单元,用于根据所述排序集数据的标识将压缩处理后的排序集数据存储至数据库中对应的排序集;分片处理单元,用于根据所述排序集将所述的数据库进行分片处理;数据映射单元,用于将分片处理后的数据库中的排序集数据映射至内存。具体地,上述装置还包括:排序集判断单元,用于根据所述排序集数据的标识判断所述数据库中是否存在所述对应的排序集;记录删除单元,用于在存在所述对应的排序集时,判断所述对应的排序集中的记录数量是否超出限定值,如果是,则删除所述对应的排序集中最早的记录;排序集建立单元,用于如果不存在所述对应的排序集,则根据所述排序集数据的标识建立排序集。上述的装置还包括:备份单元,用于周期性异步备份所述分片处理后的数据库中的排序集数据到预定目录。借助于上述技术方案至少之一,通过将排序集数据压缩处理后存储至数据库,并将数据库分片后将数据映射至内存,可以提升数据库容量,减小内存限制,从而可以实现海量数据的高性能读写。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是根据本发明实施例的排序集数据存储方法的流程图;图2是根据本发明实施例的数据存储示意图;图3是在TC数据库向指定的集合key中添加(Zadd指令)记录的流程图;图4是在TC数据库向指定的集合key中删除(Zrem指令)记录的流程图;图5是Zrange指令的流程图;图6是Zcard指令的流程图;图7是备份的流程图;图8是数据回写至磁盘的流程图;图9是根据本发明实施例的排序集数据存储装置的结构框图;图10是根据本发明实施例的排序集数据存储装置的详细结构框图;图11是根据本发明实施例的排序集数据存储装置的另一结构框图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供一种排序集数据的存储方法及装置。以下结合附图对本发明进行详细说明。实施例一图1是根据本发明实施例的排序集数据的存储方法的流程图,如图1所述,该方法包括:步骤101,接收排序集数据并获取排序集数据的标识;步骤102,将排序集数据进行压缩处理;步骤103,根据排序集数据的标识将压缩处理后的排序集数据存储至数据库中对应的排序集;步骤104,根据排序集将数据库进行分片处理;步骤105,将分片处理后的数据库中的排序集数据映射至内存。由以上描述可以看出,通过将排序集数据压缩处理后存储至数据库,并将数据库分片后将数据映射至内存,可以提升数据库容量,减小内存限制,从而可以实现海量数据的高性能读写。在本发明实施中,可以是将数据库分成256个分片。上述排序集即为:一个集合,在集合中每一个元素都是唯一的,并且是有序的。具体地,在步骤103根据排序集数据的标识将压缩处理后的排序集数据存储至数据库中对应的排序集之前,上述方法还包括:根据排序集数据的标识判断数据库中是否存在对应的排序集;如果存在对应的排序集,则判断对应的排序集中的记录数量是否超出限定值,如果是,则删除对应的排序集中最早的记录,如果否,则直接进行步骤103;如果不存在对应的排序集,则根据排序集数据的标识建立排序集,之后进行步骤103。具体地,在步骤105将分片处理后的数据库中的排序集数据映射至内存之后,上述方法还包括:周期性异步备份分片处理后的数据库中的排序集数据到预定目录。这样,就可以实现redis系统的持久化存储机制,克服现有技术中的redis系统无法实现排序集数据持久化的问题。在实际操作中,上述的数据库可以是TC(tokyocabinet)数据库。数据存储在TC数据库中,TC数据库的设计为:key为字符串标识用户id,每一个key对应一个集合,即为value,value为一个map数据结构,其中以游戏ID作为map中的key,时间作为map中的value,集合中的元素按时间值排序。Map中的记录数可由客户端自由调整,超过限制的记录会按照制定的规则删除一部分数据,使其在限制数以内,在map中每一个key是唯一的,如果添加相同的key,那么会覆盖原先的value。同时,将数据库分片和压缩,并将其映射至内存,以提升读写速度以及减小数据库容量。图2是数据存储示意图。该TC数据库系统是采用tokyocabinet实现redis排序集的存储系统。该系统是一种key-value存储系统。Key即为排序集的名称,每一个key唯一对应一个排序集,value即为集合中的元素。该系统采用redis的协议提供了排序集的zadd、zrem、zrange、zrevrange、zcard以及zdel等指令集,分别用于向集合添加、删除、有序获取元素,以及统计集合中元素的个数和删除集合。以下详细描述各指令的执行过程。图3示出了在TC数据库向指定的集合key中添加(Zadd指令)记录的流程,如图3所示:步骤301,查找key对应的集合;步骤302,判断该集合是否存在,如果不存在,则进行步骤303,否则进行步骤304;步骤303,在数据库中创建集合,写入记录至集合,之后进行步骤307;步骤304,在集合中写入记录;步骤305,判断集合中的记录数是否大于限定值,如果是,则进行步骤306,否则进行步骤307;步骤306,查找并删除最早的记录;步骤307,Zadd结束,返回结果。图4示出了在TC数据库向指定的集合key中删除(Zrem指令)记录的流程,如图4所示:步骤401,查找key对应的集合;步骤402,判断该集合是否存在,如果不存在,则进行步骤404,否则进行步骤403;步骤403,从集合中删除相应的记录;步骤404,Zrem结束,返回结果。Zrange指令和Zrevrange指令,都是从指定的集合中按顺序获取指定区间内的元素(相当于map中的key),其中:Zrange是顺序获取,而Zrevrange是逆序获取。如果携带有withscores功能,则还需返回对应元素的权重值(相当于map中的value)。以下Zrange指令为例描述操作流程,如图5所示:步骤501,查找key对应的集合;步骤502,判断该集合是否存在,如果不存在,则进行步骤507,否则进行步骤503;步骤503,将集合中的记录排序;步骤504,是否带有withsocres功能,如果是,则进行步骤505,否则进行步骤506;步骤505,返回结果为指定区间内的元素和权重值对组成的集合;步骤506,返回结果为指定区间内的元素集合;步骤507,Zrange结束,返回结果。Zcard指令为统计排序集key中元素的个数,Zdel指令是删除key对应的集合。Zcard指令的流程如图6所示:步骤601,查找key对应的集合;步骤602,判断该集合是否存在,如果不存在,则进行步骤603,否则进行步骤604;步骤603,结果为0,之后返回步骤605;步骤604,统计集合中的记录数;步骤605,Zcard结束,返回结果。TC数据库系统使用一个线程用于异步定时备份数据,当设定的时间到达时,将所有的数据库分片备份至指定的目录,备份时,使用TC的数据备份接口,备份相应的数据库文件。备份流程如图7所示:步骤701,等待定时触发;步骤702,判断是否存在需要备份的数据库文件,如果是,则进行步骤703,否则返回步骤701;步骤703,加锁指定的数据库文件;步骤704,备份数据库文件至指定的目录;步骤705,解锁相应的数据库文件,并返回步骤702。系统实现过程中将数据库文件映射至内存,为了保证数据的一致性,以及避免数据丢失,定时检查制定的条件,在满足条件的情况下,会将内存中的数据回写至磁盘。例如,条件可以为一定时间间隔达到一定的数据修改操作,具体操作流程如图8所示:步骤801,等待定时触发;步骤802,根据设定条件判断是否存在需要回写的数据库文件,如果是,则进行步骤803,否则返回步骤801;步骤803,加锁指定的数据库文件;步骤804,回写指定的数据库文件至磁盘;步骤805,解锁相应的数据库文件。实施例二本发明实施例还提供一种排序集数据的存储装置,该装置优选地用于实现上述实施例一中的方法。如图9所示,该装置包括:标识获取单元1,用于接收排序集数据并获取排序集数据的标识;压缩处理单元2,用于将排序集数据进行压缩处理;数据存储单元3,用于根据排序集数据的标识将压缩处理后的排序集数据存储至数据库中对应的排序集;分片处理单元4,用于根据排序集将数据库进行分片处理;数据映射单元5,用于将分片处理后的数据库中的排序集数据映射至内存。由以上描述可以看出,通过压缩处理单元将排序集数据压缩处理后存储至数据库,并通过分片处理单元将数据库分片后将数据映射至内存,可以提升数据库容量,减小内存限制,从而可以实现海量数据的高性能读写。如图10所示,上述装置还包括:排序集判断单元6,用于根据排序集数据的标识判断数据库中是否存在对应的排序集;记录删除单元7,用于在存在对应的排序集时,判断对应的排序集中的记录数量是否超出限定值,如果是,则删除对应的排序集中最早的记录;排序集建立单元8,用于如果不存在对应的排序集,则根据排序集数据的标识建立排序集。上述装置还包括:备份单元(图中未示出),用于周期性异步备份分片处理后的数据库中的排序集数据到预定目录。上述各单元的具体执行过程可以参见上述实施例一中的相关描述,此处不再赘述。在实际操作中,如图11所示,上述装置可以分为三大模块:网络IO模块、协议解析模块以及指令执行模块,其中:网络IO模块:接收客户端请求以及向客户端发送指令执行结果。协议解析模块:解析客户端请求,转换成相应的指令。指令执行模块:执行相应的指令,返回结果给客户端。同时,该装置还设置了异步定时备份数据,在闲时将数据备份,以及定时异步回写数据,将内存中的数据持久化至磁盘。通过上述装置,可以实现排序集数据持久化存储以及高性能读写。综上所述,通过对数据库进行分片处理,之后将每个数据库文件映射至内存,这样可以提升读写性能;由于存入数据库中的数据是经过压缩的,减小了数据库使用大小,从而提升了数据库的容量,并且结合周期性备份等方案,可以实现排序集数据持久化存储以及高性能读写,提升数据库容量,减轻内存限制。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,比如ROM/RAM、磁碟、光盘等。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1