数据存储方法及数据存储系统技术方案

技术编号:8271286 阅读:139 留言:0更新日期:2013-01-31 03:28
本发明专利技术公开了一种数据存储方法及数据存储系统。该方法包括:接收数据更新命令,为数据更新命令分配游标;将接收的数据更新命令以及分配的游标写入不断添加模式AOF文件,并将AOF文件写入磁盘;根据数据更新命令更新数据,在更新数据成功后,按照预先设置的时间周期,将数据写入磁盘中的数据文件,将为数据更新命令分配的游标写入磁盘中的游标文件;重启服务,加载磁盘数据文件中的数据,获取游标文件中顺序位最高的游标,从存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令。应用本发明专利技术,可以降低数据恢复所需的时间、避免数据丢失。

【技术实现步骤摘要】
本专利技术涉及数据存储技术,尤其涉及一种数据存储方法及数据存储系统
技术介绍
目前,内存数据持久化存储主要采用纯内存存储引擎,主要包括持久化消息队列(mcq, MemcacheQ)、远程字典服务器(Redis, Remote Dictionary Server)以及关系型数据库管理系统(Mysql)等,Memcached暂时没有自带的数据落地方法,Redis则自带有不断添加模式(A0F, Append Only Mode)文件和快照(snapshot)两种方式,Mysql的内存表则通过主动调用转储(dump)命令来将数据全部导出,然后写入磁盘。现有支持数据落地的内存存储引擎,Redis的AOF文件实现了增量备份(binlog),即对新增加的数据更新命令进行备份,通过将数据更新命令追加写入到磁盘,这样,可保证 用户的数据更新命令能够被及时写入到磁盘,服务异常退出后,可以根据AOF文件中存储的数据更新命令来恢复数据,但该方法随着数据更新命令的不断增多,使得AOF文件的数据量越来越大,数据恢复所需的时间会越来越长。为了降低数据恢复所需的时间,Redis引入了 AOF文件重写机制,其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的数据更新命令只会有一次,而现有常规的AOF文件,记录了对同一数据的多次更新命令,这样,可以减小AOF文件的大小,但该方法在重写AOF文件时,由于Redis在重写AOF文件时会占用大量的CPU和内存资源,导致负载过高,出现短暂的服务暂停现象,因而,在重写时,导致数据丢失问题,不能保障数据的安全性;而且,AOF文件的重写,也将影响Redis的数据处理性能,降低了数据更新命令的写入速度。对于Redis的snapshot模式,是定期dump模式,即定期将内存数据批量写入磁盘,与Mysql的内存表的dump命令性质相同,如果发生服务重启或中断等异常,在两次snapshot期间发生的数据更新,由于未能及时写入磁盘,将会全部丢失;而且,随着更新的数据不断增多,从磁盘恢复数据所需的时间会越来越长。由上述可见,现有的数据存储方法,无论是采用AOF文件存储方式还是snapshot存储方式,或是Mysql的dump存储方式,在恢复数据时,都存在数据恢复所需的时间较长、数据丢失的技术问题。
技术实现思路
本专利技术的实施例提供一种数据存储方法,降低数据恢复所需的时间、避免数据丢失。本专利技术的实施例还提供一种数据存储系统,降低数据恢复所需的时间、避免数据丢失。为达到上述目的,本专利技术实施例提供的一种数据存储方法,包括接收数据更新命令,为数据更新命令分配游标;将接收的数据更新命令以及分配的游标写入不断添加模式AOF文件,并将AOF文件写入磁盘;根据数据更新命令更新数据,在更新数据成功后,按照预先设置的时间周期,将数据写入磁盘中的数据文件,将为数据更新命令分配的游标写入磁盘中的游标文件;重启服务,加载磁盘数据文件中的数据,获取游标文件中顺序位最高的游标,从存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令。其中,所述为数据更新命令分配游标包括判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息;如果不是,将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号 信息。其中,所述为数据更新命令分配游标包括判断AOF文件中是否存在写入的数据更新命令,如果不存在,为接收的数据更新命令分配游标序列号;如果存在,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号。其中,所述将为数据更新命令分配的游标写入磁盘中的游标文件包括获取预先设置的时间周期内,更新数据成功对应的数据更新命令,将为所述更新数据成功对应的数据更新命令分配的游标写入磁盘中的游标文件。其中,所述将为数据更新命令分配的游标写入磁盘中的游标文件进一步包括读取游标文件中最新存储的游标序列号;判断为数据更新命令分配的游标序列号是否大于游标文件中最新存储的游标序列号,如果是,将为数据更新命令分配的游标写入磁盘中的游标文件;否则,不作处理。其中,所述将数据写入磁盘中的数据文件之后,进一步包括删除数据文件中除最近更新数据外的其他数据。其中,所述将为数据更新命令分配的游标写入磁盘中的游标文件之后,进一步包括存储游标文件中最大的游标序列号,删除游标文件中除最大游标序列号外的其他游标序列号。其中,所述加载磁盘数据文件中的数据,获取游标文件中顺序位最高的游标,从存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令包括读取数据文件,获取数据文件中最近更新的数据;从游标文件中,获取游标文件中顺序位最大的游标序列号;根据该最大的游标序列号,查询存储的AOF文件,根据AOF文件中的映射关系,获取最大的游标序列号对应的数据更新命令;对获取的数据文件中最近更新的数据,依序执行最大的游标序列号对应的数据更新命令之后的数据更新命令。一种数据存储系统,该数据存储系统包括游标分配器、不断添加模式AOF文件存储器、数据文件存储器、游标文件存储器以及数据恢复器,其中,游标分配器,用于接收数据更新命令,为数据更新命令分配游标;AOF文件存储器,用于将接收的数据更新命令以及分配的游标写入AOF文件,存储写入的AOF文件;数据文件存储器,用于根据数据更新命令更新数据,在更新数据成功后,按照预先设置的时间周期,存储写入的数据文件,向游标文件存储器输出触发信息;游标文件存储器,用于接收触发信息,存储将为数据更新命令分配的游标信息;数据恢复器,用于重启服务,加载磁盘中数据文件存储器中的数据,获取游标文件存储器中顺序位最高的游标,从AOF文件存储器存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令。所述AOF文件存储器、数据文件存储器以及游标文件存储器分别为一个或多个。所述游标分配器包括接收模块、判断模块、分配模块以及累加模块,其中,接收模块,用于接收数据更新命令,输出至判断模块;判断模块,用于判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,输出至分配模块,如果不是,输出至累加模块;分配模块,用于为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息;累加模块,用于将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号信息。所述游标分配器包括接收模块、判断模块、分配模块、获取模块以及累加模块,其中,接收模块,用于接收数据更新命令,输出至判断模块;判断模块,用于判断AOF文件中是否存在写入的数据更新命令,如果不存在,通知分配模块,如果存在,通知获取模块;分配模块,用于接收通知,为接收的数据更新命令分配游标序列号;获取模块,用于接收通知,获取AOF文件中当前已写入的数据更新命令的游标序列号信息;累加模块,用于对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号。所述数据恢复器包括重启模块、数据文件读取模块、游标文件读取模块、查询模块以及更新模块,其中,重启模块,用于重启服务;数据文件读取模块,用于读取数据文件存储器中存本文档来自技高网
...

【技术保护点】
一种数据存储方法,该方法包括:接收数据更新命令,为数据更新命令分配游标;将接收的数据更新命令以及分配的游标写入不断添加模式AOF文件,并将AOF文件写入磁盘;根据数据更新命令更新数据,在更新数据成功后,按照预先设置的时间周期,将数据写入磁盘中的数据文件,将为数据更新命令分配的游标写入磁盘中的游标文件;重启服务,加载磁盘数据文件中的数据,获取游标文件中顺序位最高的游标,从存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令。

【技术特征摘要】
1.一种数据存储方法,该方法包括 接收数据更新命令,为数据更新命令分配游标; 将接收的数据更新命令以及分配的游标写入不断添加模式AOF文件,并将AOF文件写入磁盘; 根据数据更新命令更新数据,在更新数据成功后,按照预先设置的时间周期,将数据写入磁盘中的数据文件,将为数据更新命令分配的游标写入磁盘中的游标文件; 重启服务,加载磁盘数据文件中的数据,获取游标文件中顺序位最高的游标,从存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令。2.根据权利要求I所述的方法,其中,所述为数据更新命令分配游标包括 判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息;如果不是,将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号信息。3.根据权利要求I所述的方法,其中,所述为数据更新命令分配游标包括 判断AOF文件中是否存在写入的数据更新命令,如果不存在,为接收的数据更新命令分配游标序列号;如果存在,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号。4.根据权利要求I至3任一项所述的方法,其中,所述将为数据更新命令分配的游标写入磁盘中的游标文件包括 获取预先设置的时间周期内,更新数据成功对应的数据更新命令,将为所述更新数据成功对应的数据更新命令分配的游标写入磁盘中的游标文件。5.根据权利要求4所述的方法,其中,所述将为数据更新命令分配的游标写入磁盘中的游标文件进一步包括 读取游标文件中最新存储的游标序列号; 判断为数据更新命令分配的游标序列号是否大于游标文件中最新存储的游标序列号,如果是,将为数据更新命令分配的游标写入磁盘中的游标文件;否则,不作处理。6.根据权利要求I至3任一项所述的方法,其中,所述将数据写入磁盘中的数据文件之后,进一步包括 删除数据文件中除最近更新数据外的其他数据。7.根据权利要求I至3任一项所述的方法,其中,所述将为数据更新命令分配的游标写入磁盘中的游标文件之后,进一步包括 存储游标文件中最大的游标序列号,删除游标文件中除最大游标序列号外的其他游标序列号。8.根据权利要求I至3任一项所述的方法,其中,所述加载磁盘数据文件中的数据,获取游标文件中顺序位最高的游标,从存储的AOF文件中,加载该游标对应的数据更新命令之后的数据更新命令包括 读取数据文件,获取数据文件中最近更新的数据; 从游标文件中,获取游标文件中顺序位最大的游标序列号; 根据该最大的游标序列号,查询存储的AOF文件,根据AOF文件中的映射关系,获取最大的游标序列号对应的数据更新命令;对获取的数据文件中最近更新的数据,依序执行最大的游标序列号对应的数据更新命令之后的数据更新命令。9.一种数据存储系统,其特征在于,该数据...

【专利技术属性】
技术研发人员:汤晓刚
申请(专利权)人:新浪网技术中国有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1