一种数据存储系统的维护方法、装置和移动终端与流程

文档序号:17926144发布日期:2019-06-15 00:25阅读:164来源:国知局
一种数据存储系统的维护方法、装置和移动终端与流程

本发明涉及数据库技术领域,尤其涉及一种数据存储系统的维护方法、装置和移动终端。



背景技术:

在互联网行业中,在整个系统里面,频繁操作的数据往往只占整体数据的一小部分,这一小部分数据,我们称之为热点数据。而这一小部分数据的操作效率,却往往影响整个系统的吞吐量、稳定性以及用户体验。

如何高效地操作(增删改查)这些热点数据,一直是数据存储技术领域的追求。并且,对于传统的数据库,因为在设计上需要提供各种复杂的查询功能,所以单台数据库的并发查询性能并不高,不是很适合直接用在高并发场景。

现有技术中在数据库上面再加一层缓存,以适应高并发场景,但是没有自动识别出热点数据并保持热点数据长期缓存在内存、自动识别出“冷”数据并持久化到磁盘的功能,所以存在内存被浪费掉,磁盘空间不能得到有效利用的问题。



技术实现要素:

本发明公开了一种数据存储系统的维护方法、装置和移动终端,以解决现有技术中数据存储系统中存在大量冷数据,浪费内存资源的问题。

第一方面,本发明提供了一种数据存储系统的维护方法,所述数据存储系统包括存储在内存中的热点统计哈希表、多个数据哈希表和多个索引哈希表,以及存储在磁盘中的多个数据文件和多个索引文件;

所述数据存储系统中设置有持久化线程、整理线程和淘汰线程;

所述方法包括:

所述持久化线程将所述数据哈希表持久化处理至所述数据文件中;

所述持久化线程将所述索引哈希表持久化处理至所述索引文件中;

所述整理线程根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中对应的索引信息;

所述淘汰线程删除过期的只读数据哈希表。

优选地,所述持久化线程将所述数据哈希表持久化处理至所述数据文件中,包括:

所述持久化线程获取第一索引哈希表的读锁;其中,所述第一索引哈希表中对应待持久化处理的第一数据哈希表;

在获取到所述读锁的情况下,创建第二数据哈希表;

在所述第一索引哈希表中将索引信息修改为对应所述第二数据哈希表;

将所述第一数据哈希表设置为只读状态;

从多个数据文件中确定待写入的第一数据文件;

遍历所述第一数据哈希表;

在所述第一数据文件存在写入空间的情况下,将所述第一数据哈希表中的待持久化数据写入所述第一数据文件;

更新所述第一索引哈希表中的索引信息;

释放所述第一索引哈希表的读锁。

优选地,在所述遍历所述第一数据哈希表之后,所述方法还包括:

在所述第一数据文件不存在写入空间的情况下,创建第二数据文件;

将所述第一数据哈希表中的待持久化数据写入所述第二数据文件中。

优选地,所述持久化线程将所述索引哈希表持久化处理至所述索引文件中,包括:

所述持久化线程复制第二索引哈希表得到快照索引哈希表;其中所述第二索引哈希表为待持久化处理的索引哈希表;

将所述快照索引哈希表中的索引信息写入所述索引文件中;

删除所述快照哈希索引表。

优选地,所述整理线程根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中的索引信息,包括:

所述整理线程根据第三索引哈希表确定待整理的第三数据文件;

将所述第三数据文件中的待整理数据写入到第四数据文件中;

根据所述第四数据文件更新所述第三索引哈希表中的索引信息;

删除所述第三数据文件。

优选地,所述整理线程根据第三索引哈希表确定待整理的第三数据文件,包括:

所述整理线程获取所述第三索引哈希表的写锁;

遍历所述第三索引哈希表;

根据所述第三索引哈希表从多个索引文件中确定目标索引文件;

根据所述目标索引文件确定所述待整理的第三数据文件。

优选地,所述将所述第三数据文件中的待整理数据写入到第四数据文件中,包括:

从所述第三数据文件中获取待整理数据;

将所述待整理数据写入临时数据文件中;

将所述第三数据文件修改为旧数据文件;

将所述临时数据文件修改为所述第四数据文件;

所述将所述待整理数据写入临时数据文件中,包括:

在第一临时数据文件存在写入空间的情况下,将所述待整理数据写入所述第一临时数据文件中;

在所述第一临时文件不存在写入空间的情况下,创建第二临时数据文件;

将所述待整理数据写入所述第二临时数据文件中;

所述根据所述第四数据文件更新所述第三索引哈希表中的索引信息,包括:

在所述第三索引哈希表中将所述待整理数据的索引信息修改为对应所述第四数据文件;

释放所述第三索引哈希表的写锁。

优选地,所述淘汰线程删除过期的只读数据哈希表,包括:

所述淘汰线程判断所述只读数据哈希表是否已过期;

在所述只读数据哈希表已过期的情况下,根据所述热点统计哈希表从所述只读数据哈希表中查找热点数据;

在从所述只读数据哈希表中查找到所述热点数据的情况下,判断与所述只读数据哈希表对应的所述数据哈希表中是否存在所述热点数据;

在所述数据哈希表中不存在所述热点数据的情况下,修改所述热点数据的记录状态,并将所述热点数据存储至一个所述数据哈希表中;

删除所述只读数据哈希表。

优选地,所述根据所述热点统计哈希表从所述只读数据哈希表中查找热点数据,包括:

根据所述热点统计哈希表确定所述只读数据哈希表中各数据对应的统计信息;

将所述统计信息大于预设值的数据确定为所述热点数据。

第二方面,本发明提供了一种数据存储系统的维护装置,所述数据存储系统包括存储在内存中的热点统计哈希表、多个数据哈希表和多个索引哈希表,以及存储在磁盘中的多个数据文件和多个索引文件;

所述数据存储系统中设置有持久化线程、整理线程和淘汰线程;

所述装置包括:

数据持久化模块,用于所述持久化线程将所述数据哈希表持久化处理至所述数据文件中;

索引持久化模块,用于所述持久化线程将所述索引哈希表持久化处理至所述索引文件中;

整理模块,用于所述整理线程根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中对应的索引信息;

淘汰模块,用于所述淘汰线程删除过期的只读数据哈希表。

优选地,所述数据持久化模块包括:

读锁获取子模块,用于所述持久化线程获取第一索引哈希表的读锁;其中,所述第一索引哈希表中对应待持久化处理的第一数据哈希表;

数据哈希表创建子模块,用于在获取到所述读锁的情况下,创建第二数据哈希表;

索引信息修改子模块,用于在所述第一索引哈希表中将索引信息修改为对应所述第二数据哈希表;

状态修改子模块,用于将所述第一数据哈希表设置为只读状态;

第一数据文件确定子模块,用于从多个数据文件中确定待写入的第一数据文件;

第一遍历子模块,用于遍历所述第一数据哈希表;

第一数据写入子模块,用于在所述第一数据文件存在写入空间的情况下,将所述第一数据哈希表中的待持久化数据写入所述第一数据文件;

第一索引哈希表更新子模块,用于更新所述第一索引哈希表中的索引信息;

读锁释放子模块,用于释放所述第一索引哈希表的读锁。

优选地,在所述第一遍历子模块之后,所述装置还包括:

数据文件创建子模块,用于在所述第一数据文件不存在写入空间的情况下,创建第二数据文件;

第二数据写入子模块,用于将所述第一数据哈希表中的待持久化数据写入所述第二数据文件中。

优选地,所述索引持久化模块包括:

快照索引哈希表获得子模块,用于所述持久化线程复制第二索引哈希表得到快照索引哈希表;其中所述第二索引哈希表为待持久化处理的索引哈希表;

索引信息写入子模块,用于将所述快照索引哈希表中的索引信息写入所述索引文件中;

快照索引哈希表删除子模块,用于删除所述快照哈希索引表。

优选地,所述整理模块包括:

第二数据文件确定子模块,用于所述整理线程根据第三索引哈希表确定待整理的第三数据文件;

第三数据写入子模块,用于将所述第三数据文件中的待整理数据写入到第四数据文件中;

第二索引哈希表更新子模块,用于根据所述第四数据文件更新所述第三索引哈希表中的索引信息;

数据文件删除子模块,用于删除所述第三数据文件。

优选地,所述第二数据文件确定子模块包括:

写锁获取单元,用于所述整理线程获取所述第三索引哈希表的写锁;

第二遍历单元,遍历所述第三索引哈希表;

目标索引文件确定单元,用于根据所述第三索引哈希表从多个索引文件中确定目标索引文件;

数据文件确定单元,用于根据所述目标索引文件确定所述待整理的第三数据文件。

优选地,所述第三数据写入子模块包括:

待整理数据获取单元,用于从所述第三数据文件中获取待整理数据;

待整理数据写入单元,用于将所述待整理数据写入临时数据文件中;

第一数据文件修改单元,用于将所述第三数据文件修改为旧数据文件;

第二数据文件修改单元,用于将所述临时数据文件修改为所述第四数据文件;

所述待整理数据写入单元包括:

第一待整理数据写入子单元,用于在第一临时数据文件存在写入空间的情况下,将所述待整理数据写入所述第一临时数据文件中;

临时数据文件创建子单元,用于在所述第一临时文件不存在写入空间的情况下,创建第二临时数据文件;

第二待整理数据写入子单元,用于将所述待整理数据写入所述第二临时数据文件中;

所述第二索引哈希表更新子模块包括:

索引信息修改单元,用于在所述第三索引哈希表中将所述待整理数据的索引信息修改为对应所述第四数据文件;

写锁释放单元,用于释放所述第三索引哈希表的写锁。

优选地,所述淘汰模块包括:

过期判断子模块,用于所述淘汰线程判断所述只读数据哈希表是否已过期;

热点数据查找子模块,用于在所述只读数据哈希表已过期的情况下,根据所述热点统计哈希表从所述只读数据哈希表中查找热点数据;

热点数据判断子模块,用于在从所述只读数据哈希表中查找到所述热点数据的情况下,判断与所述只读数据哈希表对应的所述数据哈希表中是否存在所述热点数据;

热点数据存储子模块,用于在所述数据哈希表中不存在所述热点数据的情况下,修改所述热点数据的记录状态,并将所述热点数据存储至一个所述数据哈希表中;

只读数据哈希表删除子模块,用于删除所述只读数据哈希表。

优选地,所述热点数据查找子模块包括:

统计信息确定单元,用于根据所述热点统计哈希表确定所述只读数据哈希表中各数据对应的统计信息;

热点数据确定单元,用于将所述统计信息大于预设值的数据确定为所述热点数据。

第三方面,本发明提供了一种移动终端,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现所述的数据存储系统的维护方法的步骤。

第四方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现所述的数据存储系统的维护方法的步骤。

相对于现有技术,本发明实施例包括以下优点:

数据存储系统包括存储在内存中的热点统计哈希表、多个数据哈希表和多个索引哈希表,以及存储在磁盘中的多个数据文件和多个索引文件;数据存储系统中设置有持久化线程、整理线程和淘汰线程;持久化线程将数据哈希表持久化处理至数据文件中;持久化线程将所述索引哈希表持久化处理至索引文件中;整理线程根据索引哈希表整理数据文件中的数据,并更新索引哈希表中对应的索引信息;淘汰线程删除过期的只读数据哈希表。通过本发明实施例,数据存储系统可以实现自动识别出热点数据并保持热点数据长期缓存在内存、自动识别出“冷”数据并持久化到磁盘等功能,不仅节省了内存资源,还有效合理地利用了内存和磁盘空间。

附图说明

图1a是本发明的一种数据存储系统的维护方法的步骤流程图;

图1b是本发明的一种数据存储系统的结构示意图;

图1c是本发明的内存数据结构的结构示意图;

图1d是本发明的磁盘数据结构的结构示意图;

图2是本发明的数据持久化的步骤流程图;

图3是本发明的索引持久化的步骤流程图;

图4是本发明的数据整理的步骤流程图;

图5是本发明的淘汰只读数据哈希表的步骤流程图;

图6是本发明的一种数据存储系统的维护装置的结构框图;

图7是本发明的一种移动终端的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参照图1a,示出了本发明的一种数据存储系统的维护方法的步骤流程图。所述数据存储系统包括存储在内存中的热点统计哈希表、多个数据哈希表和多个索引哈希表,以及存储在磁盘中的多个数据文件和多个索引文件。

本实施例中,参照图1b所示的数据存储系统,数据存储系统可以分为内存和磁盘;其中内存中设置有数据哈希表、索引哈希表和热点统计哈希表,磁盘中设置有数据文件和索引文件。

参照图1c所示的内存数据结构,内存中可以设置有热点统计哈希表、数据哈希表集和索引哈希表集,其中数据哈希表集包括多个数据哈希表,索引哈希表集包括多个索引哈希表。数据哈希表中存储近期写入数据和热点数据。近期写入数据和热点数据的数据结构可以是key=hash(主键),value={data,record_status}。其中,hash(主键)是采用murmur哈希算法对查询主键做哈希计算得到关键值;data是数据内容;record_status是记录状态。记录状态可以如default(默认),reload(重载入)等。本发明实施例对此不作详细限定,可以根据实际情况进行设置。

索引哈希表中存储全量的索引信息。索引信息的结构可以是key=hash(主键),value={data_file_name,offset,length}。其中,data_file_name为数据文件名,表示数据内容被存储在哪个数据文件中;offset表示数据内容在文件中的偏移量;length表示数据内容的长度。本发明实施例对此不作详细限定,可以根据实际情况进行设置。

热点统计哈希表中存储是访问量高的数据的统计信息。统计信息的结构可以是key=hash(主键),value={ops_count}。其中ops_count是记录被操作次数,数值越大表示被查询或修改的频率越高,可以作为衡量热点数据的一个指标。

可以对数据哈希表和索引哈希表进行命名并编号。具体地,数据哈希表命名为数据哈希表_表编号,索引哈希表命名为索引哈希表_表编号。其中,表编号为正整数。例如,数据哈希表_1、数据哈希表_2,索引哈希表_1、索引哈希表_2。

采用多个数据哈希表,可以减少单个数据哈希表存储的数据量,并且可以降低哈希碰撞的概率,提高读写性能。采用多个索引哈希表,可以减少单个索引哈希表存储的索引信息,并且可以降低哈希碰撞的概率。

参照图1d所示的磁盘数据结构,磁盘中可以设置有索引文件组和多个数据文件组,索引文件组中包括多个索引文件,每个数据文件组中均包括多个数据文件。可以对数据文件和索引文件进行命名并编号。具体地,数据文件可以命名为数据文件_表编号_文件序号,索引文件可以命名为索引文件_表编号。其中,表编号为正整数。例如,数据文件_1_1、数据文件_1_2,索引文件_1、索引文件_2.。

索引文件存储的是索引哈希表中的索引信息;数据文件存储的是数据哈希表中的数据。例如,数据文件组1里的数据文件_1_1存储的是数据哈希表_1的部分数据;索引文件存储的是索引哈希表_1的索引信息。数据哈希表可以设置为16个,数据文件组可以对应设置为16组。索引哈希表可以设置为16个,索引文件可以对应设置为16个。本发明实施例对此不作详细限定,可以根据实际情况进行设置。

采用多个数据文件和多个索引文件,可以控制单个文件的大小,提高数据整理速度,以及根据索引哈希表读取数据的性能。

所述数据存储系统中设置有持久化线程、整理线程和淘汰线程;

本实施例中,数据存储系统中设置有后台自动运行的持久化线程、整理线程、淘汰线程,自动实现持久化处理、数据整理、淘汰只读数据哈希表等功能。

所述方法包括:

步骤101,所述持久化线程将所述数据哈希表持久化处理至所述数据文件中。

本实施例中,持久化线程可以实现数据持久化功能。具体地,持久化线程按照第一预设周期对数据哈希表中的数据进行持久化处理,将数据哈希表中的数据存储至数据文件中。即将内存中的数据存储至磁盘中。

例如,持久化线程每24小时或每48小时对数据哈希表中的数据进行持久化处理,将数据哈希表中的数据存储至数据文件中。本发明实施例对第一预设周期不作详细限定,可以根据实际情况进行设置。

步骤102,所述持久化线程将所述索引哈希表持久化处理至所述索引文件中。

本实施例中,持久化线程可以实现索引持久化功能。具体地,持久化线程按照第二预设周期对索引哈希表中的索引信息进行持久化处理,将索引哈希表中的索引信息存储至索引文件中。即将内存中的索引信息存储至磁盘中。

例如,持久化线程每24小时或每48小时对索引哈希表中的索引信息进行持久化处理,将索引哈希表中的索引信息存储至索引文件中。本发明实施例对第二预设周期不作详细限定,可以根据实际情况进行设置。

步骤103,所述整理线程根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中对应的索引信息。

本实施例中,整理线程根据索引哈希表整理数据文件中的数据。具体地,整理线程按照第三预设周期,从索引哈希表中获取有效索引信息,根据有效索引信息将数据文件中的数据整理到新的数据文件中,并根据整理后的数据更新索引哈希表中对应的索引信息。本发明实施例对第三预设周期不作详细限定,可以根据实际情况进行设置。

整理线程可以定期删除内存中的无效数据,使内存和磁盘的存储空间得到充分利用。

本发明实施例对步骤101-103的顺序不作详细限定,可以根据实际情况进行设置。

步骤104,所述淘汰线程删除过期的只读数据哈希表。

本实施例中,当只读数据哈希表过期时,淘汰线程删除该只读数据哈希表,释放内存。

综上所述,本发明实施例中,数据存储系统中的持久化线程、整理线程、淘汰线程,可以实现自动识别出热点数据并保持热点数据长期缓存在内存,自动识别出“冷”数据并持久化到磁盘等功能。不仅节省了内存资源,还有效合理地利用了内存和磁盘空间。

参照图2,示出了本发明的数据持久化的步骤流程图,具体包括如下步骤:

步骤201,所述持久化线程获取第一索引哈希表的读锁;其中,所述第一索引哈希表对应待持久化处理的第一数据哈希表。

本实施例中采用锁机制,读锁也称共享锁,多条线程可以同时获得同一资源(比如同一索引哈希表)的读锁,拥有读锁的线程可以同时操作该资源。如果某资源的读锁在已经被某线程获取的情况下,其他线程想获取该资源的写锁,则必须阻塞等待,直到获得读锁的线程释放锁。读锁带有表编号后缀。

例如,读锁_1表示索引哈希表_1的读锁,数据哈希表_1为待持久化处理的第一数据哈希表。持久化线程获取数据哈希表_1对应的索引哈希表_1的读锁_1。读锁可以防止整理线程写数据文件和更新索引哈希表,但不影响索引哈希表的查询操作。

步骤202,在获取到所述读锁的情况下,创建第二数据哈希表。

例如,如果获取到读锁_1,创建一个新的、可读写的数据哈希表,如数据哈希表_2。

步骤203,在所述第一索引哈希表中将索引信息修改为对应所述第二数据哈希表。

例如,在索引哈希表_1中,将索引信息由对应数据哈希表_1修改为对应数据哈希表_2。

步骤204,将所述第一数据哈希表设置为只读状态。

例如,将数据哈希表_1设置为只读状态,则数据哈希表_1为内存中的只读数据哈希表。

步骤205,从多个数据文件中确定待写入的第一数据文件。

例如,数据文件组1中有3个数据文件,其中数据文件_1_3,为序号最大的文件,数据文件组1中排在最后的文件,可以将数据文件_1_3确定为待写入的第一数据文件。

步骤206,遍历所述第一数据哈希表。

例如,遍历数据哈希表_1。

步骤207,在所述第一数据文件存在写入空间的情况下,将所述第一数据哈希表中的待持久化数据写入所述第一数据文件。

例如,数据哈希表_1中的数据a为待持久化数据,如果数据文件_1_3中还存在写入空间,则将数据哈希表_1中的数据a写入数据文件_1_3中。

判断数据文件是否存在写入空间,可以判断数据文件的大小是否大于预设大小,如果数据文件小于预设大小,则判定数据文件还存在写入空间;如果数据文件不小于预设大小,则判定数据文件不存在写入空间。

例如,预设大小为90mb,数据文件_1_3为50mb,则判定数据文件_1_3存在写入空间。数据文件_1_3为100mb,则判定数据文件_1_3不存在写入空间。

步骤208,在所述第一数据文件不存在写入空间的情况下,创建第二数据文件。

例如,数据文件_1_3不存在写入空间的情况下,创建一个新的数据文件,如数据文件_1_4。

步骤209,将所述第一数据哈希表中的待持久化数据写入所述第二数据文件中。

例如,将数据哈希表_1中的数据a写入到数据文件_1_4中。

步骤210,在所述第一索引哈希表中新增索引信息。

例如,将数据哈希表_1中的数据a写入到数据文件_1中,在索引哈希表_1中新增数据a对应数据文件_1的索引信息。

步骤211,释放所述第一索引哈希表的读锁。

例如,释放索引哈希表_1的读锁_1。

通过本发明实施例,可以将内存中的数据存储到磁盘中,实现数据持久化处理,节省了内存资源,合理地利用了内存和磁盘的空间。

参照图3,示出了本发明的索引持久化的步骤流程图,具体包括如下步骤:

步骤301,所述持久化线程复制第二索引哈希表得到快照索引哈希表;其中所述第二索引哈希表为待持久化处理的索引哈希表。

具体地,持久化线程按照第四预设周期对索引哈希表_2进行复制,得到索引哈希表_2的快照。例如,索引哈希表_2为待持久化处理的索引哈希表,持久化线程每24小时或48小时对索引哈希表_2进行复制得到索引哈希表_快照。本发明实施例对第四预设周期不作详细限定,可以根据实际情况进设置。

步骤302,将所述快照索引哈希表中的索引信息写入所述索引文件中。

例如,将索引哈希表_快照中的索引信息写入索引文件_2中。

步骤303,删除所述快照哈希索引表。

例如,删除索引哈希表_快照。

通过本发明实施例,可以将内存中的索引信息存储到磁盘中,实现索引信息持久化处理,节省了内存资源,合理地利用了内存和磁盘的空间。

参照图4,示出了本发明的数据整理的步骤流程图,具体包括如下步骤:

步骤401,所述整理线程根据第三索引哈希表确定待整理的第三数据文件。

例如,整理线程根据索引哈希表_3中的索引信息确定待整理的数据文件_3。

可选地,所述整理线程根据第三索引哈希表确定待整理的第三数据文件,具体地可以包括如下步骤:

步骤4011,所述整理线程获取所述第三索引哈希表的写锁。

例如,获取索引哈希表_3的写锁_3。

写锁,也称排他锁或独占锁。某一资源的写锁只能被一条线程占有,如果某资源已被其他线程获得读锁或写锁,则当前线程想获得写锁时,必须阻塞等待,直到该资源的读锁和写锁都被释放,才可以获得该资源的写锁。写锁带有表编号后缀,例如,写锁_1表示索引哈希表_1的写锁。

为了减少写锁的影响,可以采用“分段”锁机制,即每一张索引哈希表对应一把读写锁。这样,在数据整理的过程中,对某一张索引哈希表加写锁时,不会影响其他索引哈希表的操作。锁机制可以在查询索引信息、数据持久化以及数据整理的过程中,依然保证整个数据存储系统拥有较高的并发度和性能。

步骤4012,遍历所述第三索引哈希表。

例如,遍历索引哈希表_3,从而确定有效索引信息。

步骤4013,根据所述第三索引哈希表从多个索引文件中确定目标索引文件。

例如,根据索引哈希表_3中的索引信息从索引文件中确定目标索引文件为索引文件_3。

步骤4014,根据所述目标索引文件确定所述待整理的第三数据文件。

例如,根据索引文件_3确定待整理的数据文件为数据文件_3。

步骤402,将所述第三数据文件中的待整理数据写入到第四数据文件中。

例如,数据文件_3中的数据b为待整理数据,将数据b写入到数据文件_4中。

可选地,将所述第三数据文件中的待整理数据写入到第四数据文件中,具体可以包括如下步骤:

步骤4021,从所述第三数据文件中获取待整理数据。

例如,从数据文件_3中获取待整理数据,即获取数据b。

步骤4022,将所述待整理数据写入临时数据文件中。

例如,将数据b写入临时数据文件中。具体包括如下步骤:

子步骤一,在第一临时数据文件存在写入空间的情况下,将所述待整理数据写入所述第一临时数据文件中。

具体地,判断第一临时数据文件的大小是否小于预设大小,如果第一临时数据文件的大小小于预设大小,判定存在写入空间;如果第一临时数据文件的大小不小于预设大小,判定不存在写入空间。例如,预设大小为90mb,临时数据文件1的大小为80mb,则判定存在写入空间;临时数据文件_1的大小为95mb,则判定不存在写入空间。

在临时数据文件_1存在写入空间时,将数据文件_3中的数据b写入临时数据文件1中。

子步骤二,在所述第一临时文件不存在写入空间的情况下,创建第二临时数据文件。

例如,临时数据文件_1不存在写入空间时,创建临时数据文件_2。

子步骤三,将所述待整理数据写入所述第二临时数据文件中。

例如,将数据文件_3中的数据b写入临时数据文件_2中。

步骤4023,将所述第三数据文件修改为旧数据文件。

具体地,修改第三数据文件的后缀,将第三数据文件修改为旧数据文件。例如,在数据文件_3的后缀中加入old,使数据文件_3变更为数据文件_3.old。

步骤4024,将所述临时数据文件修改为所述第四数据文件。

具体地,修改临时数据文件的后缀,将临时数据文件修改为第四数据文件。例如,临时数据文件为数据文件_4.new,修改后缀后变更为数据文件_4。

步骤403,根据所述第四数据文件更新所述第三索引哈希表中的索引信息。

具体地,在所述第三索引哈希表中将所述待整理数据的索引信息修改为对应所述第四数据文件;释放所述第三索引哈希表的写锁。

例如,将数据文件_3中的数据的索引信息由对应数据文件_3修改为对应数据文件_4,释放索引哈希表_3的写锁_3。

步骤404,删除所述第三数据文件。

例如,删除数据文件_3。

通过本发明实施,可以对磁盘中的数据进行整理,节省了磁盘资源。

参照图5,示出了本发明的淘汰只读数据哈希表的步骤流程图,具体包括如下步骤:

步骤501,所述淘汰线程判断所述只读数据哈希表是否已过期。

本实施例中,可以设置只读数据哈希表的预设存储时限,淘汰线程按照第五预设周期判断只读数据哈希表的存储时长是否超过预设存储时限。例如,预设存储时限为100小时,淘汰线程每50小时判断一次。假设只读数据哈希表的存储时长为50小时,则判定只读数据哈希表未过期。假设只读数据哈希表存储时长为102小时,则判定只读数据哈希表已过期。本发明实施例对第五预设周期和预设存储时限均不作详细限定,可以根据实际情况进行设置。

步骤502,在所述只读数据哈希表已过期的情况下,根据所述热点统计哈希表从所述只读数据哈希表中查找热点数据。

本实施例中,当只读数据哈希表已过期时,则从只读数据哈希表中查找热点数据。具体可以包括如下步骤:

步骤5021,根据所述热点统计哈希表确定所述只读数据哈希表中各数据对应的统计信息。

例如,在热点统计哈希表中,只读数据哈希表中数据c对应的查询次数为56次,数据d对应的查询次数为3次。

步骤5022,将所述统计信息大于预设值的数据确定为所述热点数据。

例如,预设值为50次,则数据c的查询次数大于预设值,数据c为热点数据。数据d的查询次数小于预设值,数据d不是热点数据。

步骤503,在从所述只读数据哈希表中查找到所述热点数据的情况下,判断与所述只读数据哈希表对应的所述数据哈希表中是否存在所述热点数据。

本实施例中,从只读数据哈希表中查找到热点数据时,判断该热点数据是否在对应的数据哈希表中已存在。

例如,只读数据哈希表_1对应数据哈希表_1,从只读数据哈希表_1中查找到数据c时,判断数据哈希表_1中是否存在数据c。

步骤504,在所述数据哈希表中不存在所述热点数据的情况下,修改所述热点数据的记录状态,并将所述热点数据存储至一个所述数据哈希表中。

本实施例中,如果与只读数据哈希表对应的数据哈希表中不存在该热点数据,则将该热点数据的记录状态修改为重载入,并且将该热点数据存储到一个数据哈希表中。

例如,数据哈希表_1中不存在数据c,则将数据c的记录状态修改为reload,并将数据c存储到数据哈希表_1中。

步骤505,删除所述只读数据哈希表。

通过本发明实施例,可以定期清理内存中的只读数据哈希表,节省了内存资源。

综上所述,本发明实施例中,数据存储系统中的持久化线程、整理线程、淘汰线程,可以实现自动识别出热点数据并保持热点数据长期缓存在内存、自动识别出“冷”数据并持久化到磁盘等功能。节省了内存资源,有效合理地利用了内存和磁盘空间。

参照图6,示出了本发明的一种数据存储系统的维护装置的结构框图。

所述数据存储系统包括存储在内存中的热点统计哈希表、多个数据哈希表和多个索引哈希表,以及存储在磁盘中的多个数据文件和多个索引文件;

所述数据存储系统中设置有持久化线程、整理线程和淘汰线程;

所述装置包括:

数据持久化模块601,用于所述持久化线程将所述数据哈希表持久化处理至所述数据文件中;

索引持久化模块602,用于所述持久化线程将所述索引哈希表持久化处理至所述索引文件中;

整理模块603,用于所述整理线程根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中对应的索引信息;

淘汰模块604,用于所述淘汰线程删除过期的只读数据哈希表。

优选地,所述数据持久化模块包括:

读锁获取子模块,用于所述持久化线程获取第一索引哈希表的读锁;其中,所述第一索引哈希表中对应待持久化处理的第一数据哈希表;

数据哈希表创建子模块,用于在获取到所述读锁的情况下,创建第二数据哈希表;

索引信息修改子模块,用于在所述第一索引哈希表中将索引信息修改为对应所述第二数据哈希表;

状态修改子模块,用于将所述第一数据哈希表设置为只读状态;

第一数据文件确定子模块,用于从多个数据文件中确定待写入的第一数据文件;

第一遍历子模块,用于遍历所述第一数据哈希表;

第一数据写入子模块,用于在所述第一数据文件存在写入空间的情况下,将所述第一数据哈希表中的待持久化数据写入所述第一数据文件;

第一索引哈希表更新子模块,用于更新所述第一索引哈希表中的索引信息;

读锁释放子模块,用于释放所述第一索引哈希表的读锁。

优选地,在所述第一遍历子模块之后,所述装置还包括:

数据文件创建子模块,用于在所述第一数据文件不存在写入空间的情况下,创建第二数据文件;

第二数据写入子模块,用于将所述第一数据哈希表中的待持久化数据写入所述第二数据文件中。

优选地,所述索引持久化模块包括:

快照索引哈希表获得子模块,用于所述持久化线程复制第二索引哈希表得到快照索引哈希表;其中所述第二索引哈希表为待持久化处理的索引哈希表;

索引信息写入子模块,用于将所述快照索引哈希表中的索引信息写入所述索引文件中;

快照索引哈希表删除子模块,用于删除所述快照哈希索引表。

优选地,所述整理模块包括:

第二数据文件确定子模块,用于所述整理线程根据第三索引哈希表确定待整理的第三数据文件;

第三数据写入子模块,用于将所述第三数据文件中的待整理数据写入到第四数据文件中;

第二索引哈希表更新子模块,用于根据所述第四数据文件更新所述第三索引哈希表中的索引信息;

数据文件删除子模块,用于删除所述第三数据文件。

优选地,所述第二数据文件确定子模块包括:

写锁获取单元,用于所述整理线程获取所述第三索引哈希表的写锁;

第二遍历单元,遍历所述第三索引哈希表;

目标索引文件确定单元,用于根据所述第三索引哈希表从多个索引文件中确定目标索引文件;

数据文件确定单元,用于根据所述目标索引文件确定所述待整理的第三数据文件。

优选地,所述第三数据写入子模块包括:

待整理数据获取单元,用于从所述第三数据文件中获取待整理数据;

待整理数据写入单元,用于将所述待整理数据写入临时数据文件中;

第一数据文件修改单元,用于将所述第三数据文件修改为旧数据文件;

第二数据文件修改单元,用于将所述临时数据文件修改为所述第四数据文件。

优选地,所述待整理数据写入单元包括:

第一待整理数据写入子单元,用于在第一临时数据文件存在写入空间的情况下,将所述待整理数据写入所述第一临时数据文件中;

临时数据文件创建子单元,用于在所述第一临时文件不存在写入空间的情况下,创建第二临时数据文件;

第二待整理数据写入子单元,用于将所述待整理数据写入所述第二临时数据文件中。

优选地,所述第二索引哈希表更新子模块包括:

索引信息修改单元,用于在所述第三索引哈希表中将所述待整理数据的索引信息修改为对应所述第四数据文件;

写锁释放单元,用于释放所述第三索引哈希表的写锁。

优选地,所述淘汰模块包括:

过期判断子模块,用于所述淘汰线程判断所述只读数据哈希表是否已过期;

热点数据查找子模块,用于在所述只读数据哈希表已过期的情况下,根据所述热点统计哈希表从所述只读数据哈希表中查找热点数据;

热点数据判断子模块,用于在从所述只读数据哈希表中查找到所述热点数据的情况下,判断与所述只读数据哈希表对应的所述数据哈希表中是否存在所述热点数据;

热点数据存储子模块,用于在所述数据哈希表中不存在所述热点数据的情况下,修改所述热点数据的记录状态,并将所述热点数据存储至一个所述数据哈希表中;

只读数据哈希表删除子模块,用于删除所述只读数据哈希表。

优选地,所述热点数据查找子模块包括:

统计信息确定单元,用于根据所述热点统计哈希表确定所述只读数据哈希表中各数据对应的统计信息;

热点数据确定单元,用于将所述统计信息大于预设值的数据确定为所述热点数据。

本发明实施例提供的装置能够实现图1a、2-6的方法实施例中的各个过程,为避免重复,这里不再赘述。

在本发明实施例中,数据持久化模块将所述数据哈希表持久化处理至所述数据文件中;索引持久化模块将所述索引哈希表持久化处理至所述索引文件中;整理模块根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中对应的索引信息;淘汰模块删除过期的只读数据哈希表。通过本发明实施例,数据存储系统中的持久化线程、整理线程、淘汰线程,可以实现自动识别出热点数据并保持热点数据长期缓存在内存、自动识别出“冷”数据并持久化到磁盘等功能。节省了内存资源,有效合理地利用了内存和磁盘空间。

图7为实现本发明各个实施例的一种移动终端的硬件结构示意图。

该移动终端700包括但不限于:射频单元701、网络模块702、音频输出单元703、输入单元704、传感器705、显示单元706、用户输入单元707、接口单元708、存储器709、处理器710、以及电源711等部件。本领域技术人员可以理解,图7中示出的移动终端结构并不构成对移动终端的限定,移动终端可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,移动终端包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。

其中,处理器710,用于采用所述持久化线程将所述数据哈希表持久化处理至所述数据文件中;采用所述持久化线程将所述索引哈希表持久化处理至所述索引文件中;采用所述整理线程根据所述索引哈希表整理所述数据文件中的数据,并更新所述索引哈希表中对应的索引信息;采用所述淘汰线程删除过期的只读数据哈希表。

通过本发明实施例,数据存储系统中的持久化线程、整理线程、淘汰线程,可以实现自动识别出热点数据并保持热点数据长期缓存在内存、自动识别出“冷”数据并持久化到磁盘等功能。节省了内存资源,有效合理地利用了内存和磁盘空间。

应理解的是,本发明实施例中,射频单元701可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器710处理;另外,将上行的数据发送给基站。通常,射频单元701包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元701还可以通过无线通信系统与网络和其他设备通信。

移动终端通过网络模块702为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。

音频输出单元703可以将射频单元701或网络模块702接收的或者在存储器709中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元703还可以提供与移动终端700执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元703包括扬声器、蜂鸣器以及受话器等。

输入单元704用于接收音频或视频信号。输入单元704可以包括图形处理器(graphicsprocessingunit,gpu)7041和麦克风7042,图形处理器7041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元706上。经图形处理器7041处理后的图像帧可以存储在存储器709(或其它存储介质)中或者经由射频单元701或网络模块702进行发送。麦克风7042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元701发送到移动通信基站的格式输出。

移动终端700还包括至少一种传感器705,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板7061的亮度,接近传感器可在移动终端700移动到耳边时,关闭显示面板7061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别移动终端姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器705还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。

显示单元706用于显示由用户输入的信息或提供给用户的信息。显示单元706可包括显示面板7061,可以采用液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板7061。

用户输入单元707可用于接收输入的数字或字符信息,以及产生与移动终端的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元707包括触控面板7071以及其他输入设备7072。触控面板7071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板7071上或在触控面板7071附近的操作)。触控面板7071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器710,接收处理器710发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板7071。除了触控面板7071,用户输入单元707还可以包括其他输入设备7072。具体地,其他输入设备7072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。

进一步的,触控面板7071可覆盖在显示面板7061上,当触控面板7071检测到在其上或附近的触摸操作后,传送给处理器710以确定触摸事件的类型,随后处理器710根据触摸事件的类型在显示面板7061上提供相应的视觉输出。虽然在图7中,触控面板7071与显示面板7061是作为两个独立的部件来实现移动终端的输入和输出功能,但是在某些实施例中,可以将触控面板7071与显示面板7061集成而实现移动终端的输入和输出功能,具体此处不做限定。

接口单元708为外部装置与移动终端700连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(i/o)端口、视频i/o端口、耳机端口等等。接口单元708可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到移动终端700内的一个或多个元件或者可以用于在移动终端700和外部装置之间传输数据。

存储器709可用于存储软件程序以及各种数据。存储器709可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器709可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

处理器710是移动终端的控制中心,利用各种接口和线路连接整个移动终端的各个部分,通过运行或执行存储在存储器709内的软件程序和/或模块,以及调用存储在存储器709内的数据,执行移动终端的各种功能和处理数据,从而对移动终端进行整体监控。处理器710可包括一个或多个处理单元;优选的,处理器710可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器710中。

移动终端700还可以包括给各个部件供电的电源711(比如电池),优选的,电源711可以通过电源管理系统与处理器710逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。

另外,移动终端700包括一些未示出的功能模块,在此不再赘述。

优选的,本发明实施例还提供一种移动终端,包括处理器710,存储器709,存储在存储器709上并可在所述处理器710上运行的计算机程序,该计算机程序被处理器710执行时实现上述数据存储系统的维护方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述数据存储系统的维护方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1