CN105988899B - 实现数据缓存的方法和装置 - Google Patents
实现数据缓存的方法和装置 Download PDFInfo
- Publication number
- CN105988899B CN105988899B CN201510099063.1A CN201510099063A CN105988899B CN 105988899 B CN105988899 B CN 105988899B CN 201510099063 A CN201510099063 A CN 201510099063A CN 105988899 B CN105988899 B CN 105988899B
- Authority
- CN
- China
- Prior art keywords
- key
- data
- assignment
- log sheet
- log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/21—Employing a record carrier using a specific recording technology
- G06F2212/214—Solid state disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/281—Single cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/31—Providing disk cache in a specific location of a storage system
- G06F2212/313—In storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7207—Details relating to flash memory management management of metadata or control data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7209—Validity control, e.g. using flags, time stamps or sequence numbers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明公开了一种实现数据缓存的方法和装置。响应于针对指定键的数据变更指令,变更指定键在易失性存储器上的缓存中对应的缓存值;将表示数据变更指令的代码追加记录到非易失性存储器上的日志文件中紧接有效内容之后的当前记录位置,并成为有效内容的一部分。响应于满足预定数据备份条件,执行数据备份操作,即将日志文件的有效内容中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区;在完成数据备份操作之后,使日志文件原来的有效内容无效。由此,实现了一种既具有持久化功能,又可以在重启时快速重新构建数据的键值数据缓存方案。
Description
技术领域
本发明涉及一种实现数据缓存的方法和装置。
背景技术
目前,在一些例如涉及互联网的应用中,缓存技术得到了广泛的使用。其中比较常见的缓存是memcached和redis,它们都可以提供k-v(key-value,key是键,value是值)缓存服务,但是它们各自存在相应的缺点,在要求提供可靠k-v缓存服务的场景下往往不能满足实际的业务需要。
众所周知,memcached是没有持久化功能的。一旦重启,就会造成数据丢失。应用程序需要执行额外的业务逻辑来重建数据。例如,需要从数据库中取出数据再存储到memcached中。
redis虽然具有持久化功能,但是在数据量大的场景下,持久化功能对内存资源要求高、重启恢复慢。另外,还存在丢失数据的可能。
因此,需要设计一种新的k-v(键值)缓存方案,其既具有持久化功能,又可以在重启时快速重新构建数据。
发明内容
本发明所要解决的一个问题是提供一种实现数据缓存的方法和装置,其既具有持久化功能,又可以在重启时快速重新构建数据。
根据本发明的一个方面,提供了一种实现数据缓存的方法,包括:
响应于针对指定键的数据变更指令,
变更指定键在易失性存储器上的缓存中对应的缓存值;
将表示数据变更指令的代码追加记录到非易失性存储器上的日志文件中紧接有效内容之后的当前记录位置,并成为有效内容的一部分;
响应于满足预定数据备份条件,
执行数据备份操作,即将日志文件的有效内容中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区;
在完成数据备份操作之后,使日志文件原来的有效内容无效。
根据本发明,在完成数据备份操作之后,日志文件的有效内容被使得无效。这样,在日志文件的有效内容中记录了自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后执行过的所有数据变更指令。
这样,在执行数据备份时,只需要将日志文件的有效内容中涉及到的键和对应的缓存值关联地存储到键值存储区中,即可确保当前在缓存中的值均已保存在键值存储区中。
由于在非易失性存储器中既存储了执行数据备份操作时缓存中的键和值,又存储了执行数据备份操作以后执行过的数据变更指令,所以即使易失性存储器中的所有数据丢失,也可以根据非易失性存储器中存储的内容来重建缓存中的数据。由此,可靠地实现了数据持久性。
而在执行数据重建时,可以针对各个键,以键值存储区中与该键关联存储的值为初始值,依次执行日志文件的有效内容中所记录的针对该键的数据变更指令,即可获得该键先前在缓存中的缓存值。从而可以方便地实现数据重建。
由于每次执行数据备份之后,日志文件的有效内容都清零并重新开始记录,因此,日志文件的有效内容不会变得越来越大,重建数据时需要考虑的数据变更指令也就不会太多,从而可以在例如重启时快速重建缓存中的数据。
优选地,该方法还可以包括:
响应于针对指定键的数据变更指令,
在易失性存储器中的日志表中维护指定键的指令链,以便将数据变更指令追加到指令链的末尾;
响应于满足预定数据备份条件,
在完成数据备份操作之后,将日志表清空,
其中,执行数据备份操作的步骤是通过将日志表中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区来执行的。
这样,在易失性存储器中维护一个日志表,在执行数据变更指令时,在其中更新指定键的指令链,在执行数据备份操作后,将日志表清空,使得日志表中的指令链与日志文件中的数据变更指令记录同步。即在日志表中也记录了自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后执行过的所有数据变更指令。
而从易失性存储器中的日志表中存取数据变更指令更加方便快速。并且,由于以指令链的形式依次记录针对各个键的数据变更指令,与日志文件相比,需要获取对某个键执行过的数据变更指令时,更加快捷。
当执行数据备份操作时,从日志表得知自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后针对哪些键执行了数据变更指令,以便针对这些键执行数据备份操作,避免了从日志文件获知针对哪些键执行了数据变更指令的繁琐操作。
优选地,维护指定键的指令链的步骤可以包括:
在数据变更指令是操作结果与初始值无关的指令的情况下,删除日志表中指定键的原来的指令链,并将数据变更指令记录在指定键的指令链的开头;和/或
在日志表中没有指定键的指令链的情况下,建立指定键的指令链,并将数据变更指令记录在指定键的指令链的开头。
操作结果与初始值无关的指令例如可以包括设置指令(set)、删除指令(delete)等。
在数据变更指令的操作结果与初始值无关的指令的情况下,先前的指令对于计算重建缓存中的值均已没有意义和效果。因此,没有必要再保留。删除原来的指令链,既可以减小日志表的数据量,也可以减小后期重建数据时的数据变更指令处理量。
优选地,该方法还可以包括:
响应于易失性存储器中数据丢失后的数据预加载指令,
基于日志文件的有效内容重建日志表;
确定热点键;
对于每一个热点键,
从键值存储区获得与热点键对应的存储值;
在日志表中查找热点键;
在查找到热点键的情况下,对热点键对应的存储值依次执行日志表中热点键的指令链上的每一条指令,以获得推算值,并将推算值与热点键关联地存储到缓存中;以及
在没有查找到热点键的情况下,将上述存储值与热点键关联地存储到缓存中。
缓存中并不是所有数据都是还会继续会用到的。这样,在执行预加载操作时,只需先针对热点键进行数据重建,即可满足大部分的需求。并且可以大幅减小数据预加载操作所需的时间,提高数据预加载操作的效率。
例如,热点键可以是最后执行的预定数量的数据变更指令所针对的键。或者,也可以是最后被变更过的预定数量个键。或者,也可以是被变更次数最多的预定数量个键。
热点键可以通过对日志文件的有效内容进行分析来确定。或者,也可以在键值存储区中记录热点键信息,从而可以从键值存储区确定热点键。或者,也可以在非易失性存储器上日志文件和键值存储区之外记录热点键信息,以便在数据预加载时使用。
优选地,该方法还可以包括:
响应于从缓存中读取指定键对应的值的指令,
在缓存中没有指定键的情况下,基于日志表和键值存储区来获得指定键对应的推算值;以及
返回推算值,并将推算值与指定键关联地存储到缓存中。
缓存中没有指定键,说明该指定键不是热点键,在数据预加载时没有预加载该指定键对应的值。此时可以根据日志表和键值存储区来获得推算值。这样,即使是用到非热点键时,也可以快速获得相应的值。
基于日志表和键值存储区来获得指定键对应的推算值的步骤可以包括如下几种情况。
在日志表中没有指定键的情况下,从键值存储区获得指定键对应的存储值,并以存储值为推算值。这种情况表明,在最后一次数据备份操作之后没有针对该指定键进行数据变更操作,因此键值存储区中的存储值是最新值。
在日志表中指定键的指令链的开头是操作结果与初始值无关的指令的情况下,依次执行指令链上的指令,以得到推算值。这种情况下,无需从键值存储区读取存储值,可以直接根据指令链获得推算值。
在日志表中指定键的指令链的开头不是操作结果与初始值无关的指令的情况下,从键值存储区获得指定键对应的存储值,对存储值依次执行日志表中指定键的指令链上的每一条指令,以获得推算值。
由此,在上述各种情况下,都可以方便快捷地获得推算值。
优选地,基于日志文件的有效内容重建日志表的步骤可以包括:获取日志文件的有效部分的开始位置和结束位置。相应地,使日志文件原来的有效内容无效的步骤可以包括:将日志文件的有效内容的开始位置设置为日志文件的当前记录位置。
这种使原来的有效内容变为无效的方式非常简单易用。
优选地,日志文件可以包括具有预定次序的多个预先定义的日志子文件,每个日志子文件具有固定文件尺寸,当预定次序中的最后一个日志子文件被写满时,将当前记录位置调整到预定次序中的第一个日志子文件的开头。
通过循环地覆盖式记录,避免了日志文件无限制地扩大。
优选地,预定数据备份条件可以包括以下条件中的一项或多项:到达预定时刻;自上一次执行数据备份操作以来经过了预定时间段;当前记录位置到达日志文件的预定位置;日志文件的有效内容达到预定数量个日志文件;以及接收到数据备份指令。
这样,可以根据需要设定各种数据备份条件。
根据本发明的另一个方面,提供了一种实现数据缓存的装置,包括:缓存值变更装置,用于响应于针对指定键的数据变更指令,变更指定键在易失性存储器上的缓存中对应的缓存值;日志记录装置,用于响应于针对指定键的数据变更指令,将表示数据变更指令的代码追加记录到非易失性存储器上的日志文件中紧接有效内容之后的当前记录位置,并成为有效内容的一部分;数据备份装置,用于响应于满足预定数据备份条件,执行数据备份操作,即将日志文件的有效内容中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区;以及有效内容管理装置,用于在数据备份装置完成数据备份操作之后,使日志文件原来的有效内容无效。
由此,可以方便可靠地实现数据变更和数据备份。
优选地,该装置还可以包括:日志表维护装置,用于响应于针对指定键的数据变更指令,在易失性存储器中的日志表中维护指定键的指令链,以便将数据变更指令追加到指令链的末尾;日志表清空装置,用于在数据备份装置完成数据备份操作之后,将日志表清空,其中,数据备份装置通过将日志表中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区,来执行数据备份操作。
由此,通过使用日志表,可以使得数据备份操作更加快捷。
优选地,日志表维护装置可以包括:第一维护装置,用于在数据变更指令是操作结果与初始值无关的指令的情况下,删除日志表中指定键的原来的指令链,并将数据变更指令记录在指定键的指令链的开头;和/或第二维护装置,用于在日志表中没有指定键的指令链的情况下,建立指定键的指令链,并将数据变更指令记录在指定键的指令链的开头。
由此,既可以减小日志表的数据量,也可以减小后期重建数据时的数据变更指令处理量。
优选地,该装置还可以包括:日志表重建装置,用于响应于易失性存储器中数据丢失后的数据预加载指令,基于日志文件的有效内容重建日志表;热点键确定装置,用于响应于数据预加载指令,确定热点键;存储值获取装置,用于对于每一个热点键,从键值存储区获得与热点键对应的存储值;热点键查找装置,用于对于每一个热点键,在日志表中查找热点键;第一缓存装置,用于在查找到热点键的情况下,对热点键对应的存储值依次执行日志表中热点键的指令链上的每一条指令,以获得推算值,并将推算值与热点键关联地存储到缓存中;以及第二缓存装置,用于在没有查找到热点键的情况下,将上述存储值与热点键关联地存储到缓存中。
由此,可以快捷地实现数据预加载。
优选地,该装置还可以包括:推算值获取装置,用于响应于从缓存中读取指定键对应的值的指令,在缓存中没有指定键的情况下,基于日志表和键值存储区来获得指定键对应的推算值;以及推算值返回装置,用于返回推算值,并将推算值与指定键关联地存储到缓存中。
由此,可以实现数据读取。
优选地,推算值获取装置可以包括:第一获取装置,用于在日志表中没有指定键的情况下,从键值存储区获得指定键对应的存储值,并以存储值为推算值;和/或第二获取装置,用于在日志表中指定键的指令链的开头是操作结果与初始值无关的指令的情况下,依次执行指令链上的指令,以得到推算值;和/或第三获取装置,用于在日志表中指定键的指令链的开头不是操作结果与初始值无关的指令的情况下,从键值存储区获得指定键对应的存储值,对存储值依次执行日志表中指定键的指令链上的每一条指令,以获得推算值。
由此,可以方便快捷地获得推算值。
优选地,日志表重建装置可以包括:有效部分确定装置,用于获取日志文件的有效部分的开始位置和结束位置。相应地,有效内容管理装置可以包括:开始位置设置装置,用于将日志文件的有效内容的开始位置设置为日志文件的当前记录位置,从而使日志文件原来的有效内容无效。
由此,可以方便地实现使日志文件原来的有效内容无效的目的。
优选地,日志文件包括具有预定次序的多个预先定义的日志子文件,每个日志子文件具有固定文件尺寸。日志记录装置可以包括:当前记录位置调整装置,用于在预定次序中的最后一个日志子文件被写满时,将当前记录位置调整到预定次序中的第一个日志子文件的开头。
如上所述,根据本发明的实现数据缓存的方法和装置既具有持久化功能,又可以在重启时快速重新构建数据。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1是根据本发明实施例的数据变更过程的示意性流程图。
图2是根据本发明实施例的数据备份过程的示意性流程图。
图3是根据本发明改进实施例的数据变更过程的示意性流程图。
图4是日志表中针对各个键维护的指令链的示意图。
图5是维护指令链的方法的示意性流程图。
图6是根据本发明改进实施例的数据备份过程的示意性流程图。
图7是根据本发明实施例的数据预加载过程的示意性流程图。
图8是根据本发明实施例的数据读取过程的示意性流程图。
图9是获得推算值的方法的示意性流程图。
图10是根据本发明实施例的数据缓存装置的示意性框图,其中示出了用于执行数据变更过程和数据备份过程的部分。
图11是根据本发明改进实施例的数据缓存装置的示意性框图,其中示出了用于执行数据变更过程和数据备份过程的部分。
图12是日志表维护装置的示意性框图。
图13是根据本发明实施例的数据缓存装置的示意性框图,其中示出了用于执行数据预加载过程的部分。
图14是根据本发明实施例的数据缓存装置的示意性框图,其中示出了用于执行数据读取过程的部分。
图15是推算值获取装置的示意性框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
根据本发明的实现数据缓存的方法主要可以包括两个方面,即对各个键在易失性存储器中的对应缓存值的数据变更过程和从易失性存储器到非易失性存储器的数据备份过程。
易失性存储器,例如内存或只读存储器(ROM),处理速度快,但是不具有持久性,一但断电或重启,其中的数据就会丢失。
非易失性存储器,例如磁盘等,具有持久性,数据不易丢失,但是处理速度往往不如易失性存储器快。
图1是根据本发明实施例的数据变更过程的示意性流程图。
当要执行数据变更过程时,会收到数据变更指令,即对某个指定键对应的值进行某种预定运算/操作/处理,从而得到新的值。
数据变更指令例如可以有设置指令(set)、删除指令(delete)、加一指令(incr)、减一指令(decr)、比较并交换指令(cas)等。
如图1所示,响应于针对指定键的数据变更指令,可以执行步骤S110和步骤S120。步骤S110和步骤S120可以以任何顺序执行,也可以并行执行。
在步骤S110,变更指定键在易失性存储器上的缓存中对应的缓存值。
在步骤S120,将表示数据变更指令的代码追加记录到非易失性存储器上的日志文件中紧接有效内容之后的当前记录位置,并成为有效内容的一部分。
日志文件例如可以是二进制日志文件(binlog文件),数据变更指令可以在序列化成代码之后,以追加的方式写入日志文件。
与在非易失性存储器中同步更新键值的方案相比,追加记录指令代码的方式简单快捷,耗费的资源也较少。
但是,如果一直这样持续下去,日志文件的有效内容会越来越长。一方面会占用较大的存储空间。另一方面,在后期进行数据重建时,需要对很长的日志文件有效内容进行分析,耗费较多的时间和资源。
通过图2所示的数据备份操作,可以克服上述问题。
图2是根据本发明实施例的数据备份过程的示意性流程图。
可以预先设定数据备份条件。例如,预定数据备份条件可以包括以下条件中的一项或多项:
到达预定时刻;
自上一次执行备份操作以来经过了预定时间段;
当前记录位置到达日志文件的预定位置;
日志文件的有效内容达到预定数量个日志文件;以及
接收到数据备份指令。
这样,可以根据需要设定各种数据备份条件。
如图2所示,在步骤S210,响应于满足预定数据备份条件,执行数据备份操作,即将日志文件的有效内容中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区。
例如,可以采用日志型的levelDb数据库系统来作为存储引擎,来执行数据备份操作。
在执行数据备份操作之前(上次执行数据备份操作之后),可能针对一些键的对应缓存值执行了多次数据变更操作。通过只在满足预定数据备份条件时才执行数据备份操作,只需要对最后一次的操作结果进行备份,减少了在非易失性存储器中更新键值的次数,从而减少了所耗费的资源。
在步骤S220,在完成步骤S210的数据备份操作之后,使日志文件原来的有效内容无效。
另外,日志文件的有效内容可以具有开始位置和结束位置。结束位置一般与当前记录位置相接。在步骤S220,可以通过将日志文件的有效内容的开始位置设置为日志文件的当前记录位置,来实现日志文件原来的有效内容无效的目的。这种使原来的有效内容变为无效的方式非常简单易用。
根据本发明,在完成数据备份操作之后,日志文件的有效内容被使得无效。这样,在日志文件的有效内容中记录了自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后执行过的所有数据变更指令。
这样,在执行数据备份时,只需要将日志文件的有效内容中涉及到的键和对应的缓存值关联地存储到键值存储区中,即可确保当前在缓存中的值均已保存在键值存储区中。
由于在非易失性存储器中既存储了执行数据备份操作时缓存中的键和值,又存储了执行数据备份操作以后执行过的数据变更指令,所以即使易失性存储器中的所有数据丢失,也可以根据非易失性存储器中存储的内容来重建缓存中的数据。由此,可靠地实现了数据持久性。
而在执行数据重建时,可以针对各个键,以键值存储区中与该键关联存储的值为初始值,依次执行日志文件的有效内容中所记录的针对该键的数据变更指令,即可获得该键先前在缓存中的缓存值。从而可以方便地实现数据重建。
由于每次执行数据备份之后,日志文件的有效内容都清零并重新开始记录,因此,日志文件的有效内容不会变得越来越大,重建数据时需要考虑的数据变更指令也就不会太多,从而可以在例如重启时快速重建缓存中的数据。
另外,日志文件可以包括具有预定次序的多个预先定义的日志子文件,每个日志子文件具有固定文件尺寸。当预定次序中的最后一个日志子文件被写满时,将当前记录位置调整到预定次序中的第一个日志子文件的开头。通过循环地覆盖式记录,避免了日志文件无限制地扩大。只是上述预定备份条件需要设置为使得,在日志文件中先前记录的内容被覆盖之前已对其执行了数据备份操作。
日志文件中的数据是按顺序依次写入的,当重建某个键对应的缓存值时,需要得到在日志文件的有效部分中涉及这个键的全部有效指令,即需要随机访问日志文件。
为了更加便于执行备份操作,在根据本发明的改进实施例中,可以进一步在易失性存储器中维护日志表(例如可以是哈希(hash)表),其中针对上次备份操作之后缓存中的对应缓存值被变更过的键,分别维护一个指令链。
图3是根据本发明改进实施例的数据变更过程的示意性流程图。
如图3所示,响应于针对指定键的数据变更指令,响应于针对指定键的数据变更指令,除了如图1所示一样执行上述步骤S110和步骤S120之外,还可以进一步执行步骤S130。步骤S110、步骤S120以及步骤S130可以以任何顺序执行,也可以并行执行。
在步骤S130,在易失性存储器中的日志表中维护指定键的指令链,以便将数据变更指令追加到指令链的末尾。
图4是日志表中针对各个键维护的指令链的示意图。
如图4所示,针对键1和键2,分别依次记录了其所涉及的指令1、指令2、……、指令n/m。
图5是一种可以用来维护指令链的方法的示意性流程图。
如图5所示,响应于针对指定键的数据变更指令,可以如下维护指定键的指令链。
在步骤S131,判断日志表中有没有指定键的指令链。
在日志表中没有指定键的指令链的情况下,在步骤S132,在日志表中建立指定键的指令链,并将数据变更指令记录在指定键的指令链的开头。
在日志表中有指定键的指令链的情况下,在步骤S133,判断数据变更指令是否操作结果与初始值无关的指令。
操作结果与初始值无关的指令例如可以包括设置指令(set)、删除指令(delete)等。
在数据变更指令不是操作结果与初始值无关的指令的情况下,在步骤S134,将数据变更指令追加到针对指定键的指令链的末尾。
而在数据变更指令是操作结果与初始值无关的指令的情况下,在步骤S135,删除日志表中指定键的原来的指令链,并在步骤S136,将数据变更指令记录在指定键的指令链的开头。
例如,键1(key1)当前的指令链为“set->incr->incr->decr”,当接收到delete指令时,键1的指令链可以变为:“delete”,而不必是“set->incr->incr->decr->delete”。
在数据变更指令的操作结果与初始值无关的指令的情况下,先前的指令对于计算重建缓存中的值均已没有意义和效果。因此,没有必要再保留。删除原来的指令链,既可以减小日志表的数据量,也可以减小后期重建数据时的数据变更指令处理量。
图6是根据本发明改进实施例的数据备份过程的示意性流程图。
如图6所示,在如图2所示响应于满足预定数据备份条件而在步骤S210执行数据备份操作之后,除了可以执行上述步骤S220,还可以执行步骤S230。步骤S220和步骤S1230可以以任何顺序执行,也可以并行执行。
在步骤S230,将日志表清空。
由于在易失性存储器中以更加便于存取的方式存储了日志文件中的指令代码,在步骤S210,可以根据易失性存储器中的日志表而不是非易失性存储器中的日志文件来执行数据备份操作。即,通过将日志表中的每一个键在缓存中对应的缓存值与对应的每一个键关联地存储到非易失性存储器上的键值存储区来执行数据备份操作。
这样,在易失性存储器中维护一个日志表,在执行数据变更指令时,在其中更新指定键的指令链,在执行数据备份操作后,将日志表清空,使得日志表中的指令链与日志文件中的数据变更指令记录同步。即在日志表中也记录了自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后执行过的所有数据变更指令。
而从易失性存储器中的日志表中存取数据变更指令更加方便快速。并且,由于以指令链的形式依次记录针对各个键的数据变更指令,与日志文件相比,需要获取对某个键执行过的数据变更指令时,更加快捷。
当执行数据备份操作时,从日志表得知自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后针对哪些键执行了数据变更指令,以便针对这些键执行数据备份操作,避免了从日志文件获知针对哪些键执行了数据变更指令的繁琐操作。
在由于断电或重启而导致易失性存储器中的数据丢失的情况下,可以进行数据预加载,即根据非易失性存储器上的键值存储区中存储的数据和日志文件的有效内容中记录的指令来恢复缓存中的数据。
例如在如上所述使用levelDb作为存储引擎的情况下,LevelDb的读操作性能不如写操作性能,因此,希望能够减少读操作的次数和复杂性。
一方面,可以建立索引以便快速定位到目标键对应的存储值所在的块,然后再从该块中读取出该存储值。
另一方面,如上所述,如果指令链的链首(开头)是操作结果与初始值无关的指令,可以避免从键值存储区读取数据的操作。
再一方面,可以只预加载部分热点数据到缓存中。例如,可以根据非易失性存储器上的键值存储区中的数据量,来指定一部分或者全部数据都加载到缓存。
下面参考图7描述根据本发明实施例的数据预加载过程,其中只预加载了热点键对应的存储值。
图7是根据本发明实施例的数据预加载过程的示意性流程图。
响应于易失性存储器中数据丢失后的数据预加载指令,在步骤S710,基于日志文件的有效内容重建日志表。
如上所述,日志文件的有效内容中记录了自初次启动之后(尚未执行过数据备份操作的情况下)或上次数据备份操作之后执行过的所有数据变更指令。这样,就可以根据日志文件的有效内容中记录的指令,为其中涉及的键(针对其对应的值执行过数据变更指令的键),建立指令链,从而可以在易失性存储器中恢复日志表。
在步骤S710,基于日志文件的有效内容重建日志表时,可以首先通过获取日志文件的有效部分的开始位置和结束位置来确定日志文件的有效内容。
接下来,在步骤S720,确定热点键。
例如,热点键可以是最后执行的预定数量的数据变更指令所针对的键。或者,也可以是最后被变更过的预定数量个键。或者,也可以是被变更次数最多的预定数量个键。
由于日志文件中按顺序记录了所执行过的数据变更指令,所以可以通过对日志文件的有效内容进行分析来确定热点键。
或者,也可以在键值存储区中记录热点键信息,从而可以从键值存储区确定热点键。
或者,也可以在非易失性存储器上日志文件和键值存储区之外记录热点键信息,以便在数据预加载时使用。
接下来,在步骤S730,从第一个热点键开始,对每一个热点键执行步骤S740至步骤S770/S780的操作。
在步骤S740,从键值存储区获得与该热点键对应的存储值。
在步骤S750,在日志表中查找热点键。
在步骤S760,判断是否在日志表中查找到热点键。
在日志表中查找到该热点键的情况下,在步骤S770,对热点键对应的存储值依次执行日志表中热点键的指令链上的每一条指令,以获得推算值,并将推算值与热点键关联地存储到缓存中。
在日志表中没有查找到该热点键的情况下,在步骤S780,将上述存储值与热点键关联地存储到缓存中。
然后在步骤S790判断是否还有下一个热点键,如果有,则针对下一个热点键执行步骤S740至步骤S770/S780的操作。
如果没有下一个热点键了,则预加载操作结束。
缓存中并不是所有数据都是还会继续会用到的。这样,在执行预加载操作时,只需先针对热点键进行数据重建,即可满足大部分的需求。并且可以大幅减小数据预加载操作所需的时间,提高数据预加载操作的效率。
需要注意的是,如果在上面参考图7描述的预加载过程中,不执行步骤S720,并且在步骤S730至步骤S790中,不只是对热点键执行相应操作,而是对日志表或日志文件中涉及的所有键执行相应操作,则可以实现完全的预加载,即完全恢复缓存中原有的数据。
下面,参考图8描述在已经执行了预加载操作之后,在运行过程中,执行从缓存读取数据的数据读取过程。
图8是根据本发明实施例的数据读取过程的示意性流程图。
如图8所述,响应于从缓存中读取指定键对应的值的指令,在步骤S810,查看在缓存中有没有该指定键(或该指定键对应的缓存值)。
如果有,说明没有发生过(至少针对该缓存值的)数据丢失,或者数据丢失后已经通过例如预加载操作或先前的数据读取操作而加载了该缓存值。这种情况下,在步骤S820,直接从缓存中读取对应的缓存值,并返回该缓存值即可。
在缓存中没有该指定键(或该指定键对应的缓存值)的情况下,在步骤S830,可以基于日志表和键值存储区来获得指定键对应的推算值。然后,在步骤S840,返回推算值。进一步地,可以将推算值与指定键关联地存储到缓存中,以便于以后使用。
缓存中没有指定键,说明该指定键不是热点键,在数据预加载时没有预加载该指定键对应的值。此时可以根据日志表和键值存储区来获得推算值。这样,即使是用到非热点键时,也可以快速获得相应的值。
下面参考图9进一步描述步骤730中基于日志表和键值存储区来获得指定键对应的推算值的操作可能涉及的几种情况。
图9是获得推算值的方法的示意性流程图。
在步骤S810中判定缓存中没有指定键的情况下,在步骤S831,查看日志表中有无该指定键。
在日志表中也没有该指定键的情况下,表明在最后一次数据备份操作之后没有针对该指定键进行数据变更操作,因此键值存储区中的存储值是最新值。于是,在步骤S832,从键值存储区获得指定键对应的存储值,并以存储值为推算值,然后,操作前进到步骤S840。
在日志表中有该指定键的情况下,在步骤S833,判断日志表中该指定键的指令链的开头(链首)是否是操作结果与初始值无关的指令。如上所述,操作结果与初始值无关的指令例如可以包括设置指令(set)、删除指令(delete)等。
在日志表中指定键的指令链的开头是操作结果与初始值无关的指令的情况下,在步骤S834,依次执行指令链上的指令,以得到推算值,然后,操作前进到步骤S840。这种情况下,无需从键值存储区读取存储值,可以直接根据指令链获得推算值。当使用例如levelDb存储引擎来对键值存储区进行存取时,可以减少读操作。
在日志表中指定键的指令链的开头不是操作结果与初始值无关的指令的情况下,在步骤S835,从键值存储区获得指定键对应的存储值,对存储值依次执行日志表中指定键的指令链上的每一条指令,以获得推算值,然后,操作前进到步骤S840。
由此,在上述各种情况下,都可以方便快捷地获得推算值。
以上参考图1至9详细描述了根据本发明实现数据缓存的方法。下面参考图10至15详细描述根据本发明实现数据缓存的装置。
根据本发明实现数据缓存的装置(数据缓存装置)的各个子装置的功能与上面描述的方法的各个步骤分别大致对应。为了节省篇幅,对其中一些细节,在此不再赘述。
图10是根据本发明实施例的数据缓存装置300的示意性框图,其中示出了用于执行数据变更过程和数据备份过程的部分。
如图10所示,针对数据变更过程和数据备份过程,数据缓存装置300可以包括缓存值变更装置310、日志记录装置320、数据备份装置330、有效内容管理装置340。
缓存值变更装置310用于响应于针对指定键的数据变更指令,变更指定键在易失性存储器100上的缓存120中对应的缓存值。
日志记录装置320用于响应于针对指定键的数据变更指令,将表示数据变更指令的代码追加记录到非易失性存储器200上的日志文件220中紧接有效内容之后的当前记录位置,并成为有效内容的一部分。
数据备份装置330用于响应于满足预定数据备份条件,执行数据备份操作,即将日志文件220的有效内容中的每一个键在缓存120中对应的缓存值与对应的每一个键关联地存储到非易失性存储器200上的键值存储区240。
有效内容管理装置340用于在数据备份装置330完成数据备份操作之后,使日志文件220原来的有效内容无效。
日志文件220可以包括具有预定次序的多个预先定义的日志子文件,每个日志子文件具有固定文件尺寸。日志记录装置可以包括:当前记录位置调整装置用于在预定次序中的最后一个日志子文件被写满时,将当前记录位置调整到预定次序中的第一个日志子文件的开头。
日志文件220的有效内容可以具有开始位置和结束位置。有效内容管理装置340可以包括开始位置设置装置(未示出)。开始位置设置装置用于将日志文件220的有效内容的开始位置设置为日志文件220的当前记录位置,从而使日志文件220原来的有效内容无效。
图11是根据本发明改进实施例的数据缓存装置300的示意性框图,其中示出了用于执行数据变更过程和数据备份过程的部分。
如图11所示,针对数据变更过程和数据备份过程,数据缓存装置300除了可以包括缓存值变更装置310、日志记录装置320、数据备份装置330、有效内容管理装置340,还可以进一步包括日志表维护装置350和日志表清空装置360。
日志表维护装置350用于响应于针对指定键的数据变更指令,在易失性存储器100中的日志表140中维护指定键的指令链,以便将数据变更指令追加到指令链的末尾。
日志表清空装置360用于在数据备份装置330完成数据备份操作之后,将日志表140清空。
其中,数据备份装置330通过将日志表140中的每一个键在缓存120中对应的缓存120值与对应的每一个键关联地存储到非易失性存储器200上的键值存储区240,来执行数据备份操作。
图12是日志表维护装置350的示意性框图。
如图12所示,日志表维护装置350可以包括:第一维护装置352和/或第二维护装置354。
第一维护装置352用于在数据变更指令是操作结果与初始值无关的指令的情况下,删除日志表140中指定键的原来的指令链,并将数据变更指令记录在指定键的指令链的开头。
第二维护装置354用于在日志表140中没有指定键的指令链的情况下,建立指定键的指令链,并将数据变更指令记录在指定键的指令链的开头。
图13是根据本发明实施例的数据缓存装置300的示意性框图,其中示出了用于执行数据预加载过程的部分。
如图13所示,针对数据预加载过程,数据缓存装置300可以包括日志表重建装置371、热点键确定装置372、热点键查找装置373、存储值获取装置374、第一缓存装置375以及第二缓存装置376。
日志表重建装置371用于响应于易失性存储器100中数据丢失后的数据预加载指令,基于日志文件220的有效内容重建日志表140。
作为一个示例,日志表重建装置371可以包括有效部分确定装置(未示出)。有效部分确定装置用于获取日志文件220的有效部分的开始位置和结束位置。
热点键确定装置372用于响应于数据预加载指令,确定热点键。
存储值获取装置374用于对于每一个热点键,从键值存储区240获得与热点键对应的存储值。
热点键查找装置373用于对于每一个热点键,在日志表140中查找热点键。
第一缓存装置375用于在查找到热点键的情况下,对热点键对应的存储值依次执行日志表140中热点键的指令链上的每一条指令,以获得推算值,并将推算值与热点键关联地存储到缓存120中。
第二缓存装置376用于在没有查找到热点键的情况下,将上述存储值与热点键关联地存储到缓存120中。
图14是根据本发明实施例的数据缓存装置300的示意性框图,其中示出了用于执行数据读取过程的部分。
如图14所示,针对数据读取过程,数据缓存装置300可以包括推算值获取装置381和推算值返回装置382。
推算值获取装置381用于响应于从缓存120中读取指定键对应的值的指令,在缓存120中没有指定键的情况下,基于日志表140和键值存储区240来获得指定键对应的推算值。
推算值返回装置382用于返回推算值,并将推算值与指定键关联地存储到缓存120中。
图15是推算值获取装置381的示意性框图。
如图15所示,推算值获取装置可以包括:第一获取装置381-1、第二获取装置381-2和/或第三获取装置381-3。
第一获取装置381-1用于在日志表140中没有指定键的情况下,从键值存储区240获得指定键对应的存储值,并以存储值为推算值。
第二获取装置381-2用于在日志表140中指定键的指令链的开头是操作结果与初始值无关的指令的情况下,依次执行指令链上的指令,以得到推算值。
第三获取装置381-3用于在日志表140中指定键的指令链的开头不是操作结果与初始值无关的指令的情况下,从键值存储区240获得指定键对应的存储值,对存储值依次执行日志表140中指定键的指令链上的每一条指令,以获得推算值。
上文中已经参考附图详细描述了根据本发明的实现数据缓存的方法和装置。
此外,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (17)
1.一种实现数据缓存的方法,包括:
响应于针对指定键的数据变更指令,
变更所述指定键在易失性存储器上的缓存中对应的缓存值;
将表示所述数据变更指令的代码追加记录到非易失性存储器上的日志文件中紧接有效内容之后的当前记录位置,并成为所述有效内容的一部分;
响应于满足预定数据备份条件,
执行数据备份操作,即将所述日志文件的有效内容中的每一个键在所述缓存中对应的缓存值与所述每一个键关联地存储到非易失性存储器上的键值存储区;
在完成所述数据备份操作之后,使所述日志文件原来的有效内容无效。
2.根据权利要求1所述的方法,还包括:
响应于所述针对指定键的数据变更指令,
在所述易失性存储器中的日志表中维护所述指定键的指令链,以便将所述数据变更指令追加到所述指令链的末尾;
响应于满足所述预定数据备份条件,
在完成所述数据备份操作之后,将所述日志表清空,
其中,所述执行数据备份操作的步骤是通过将所述日志表中的每一个键在所述缓存中对应的缓存值与所述每一个键关联地存储到所述非易失性存储器上的键值存储区来执行的。
3.根据权利要求2所述的方法,其中,所述维护指定键的指令链的步骤包括:
在所述数据变更指令是操作结果与初始值无关的指令的情况下,删除所述日志表中所述指定键的原来的指令链,并将所述数据变更指令记录在所述指定键的指令链的开头;和/或
在所述日志表中没有所述指定键的指令链的情况下,建立所述指定键的指令链,并将所述数据变更指令记录在所述指定键的指令链的开头。
4.根据权利要求2所述的方法,还包括:
响应于所述易失性存储器中数据丢失后的数据预加载指令,
基于所述日志文件的有效内容重建所述日志表;
确定热点键;
对于每一个所述热点键,
从所述键值存储区获得与所述热点键对应的存储值;
在所述日志表中查找所述热点键;
在查找到所述热点键的情况下,对所述热点键对应的存储值依次执行所述日志表中所述热点键的指令链上的每一条指令,以获得推算值,并将所述推算值与所述热点键关联地存储到所述缓存中;以及
在没有查找到所述热点键的情况下,将所述存储值与所述热点键关联地存储到所述缓存中。
5.根据权利要求4所述的方法,还包括:
响应于从所述缓存中读取指定键对应的值的指令,
在所述缓存中没有所述指定键的情况下,基于所述日志表和所述键值存储区来获得所述指定键对应的推算值;以及
返回所述推算值,并将所述推算值与所述指定键关联地存储到所述缓存中。
6.根据权利要求5所述的方法,其中,所述基于日志表和键值存储区来获得所述指定键对应的推算值的步骤包括:
在所述日志表中没有所述指定键的情况下,从所述键值存储区获得所述指定键对应的存储值,并以所述存储值为所述推算值;和/或
在所述日志表中所述指定键的指令链的开头是操作结果与初始值无关的指令的情况下,依次执行所述指令链上的指令,以得到所述推算值;和/或
在所述日志表中所述指定键的指令链的开头不是操作结果与初始值无关的指令的情况下,从所述键值存储区获得所述指定键对应的存储值,对所述存储值依次执行所述日志表中所述指定键的指令链上的每一条指令,以获得所述推算值。
7.根据权利要求4所述的方法,其中,
所述基于日志文件的有效内容重建所述日志表的步骤包括:获取日志文件的有效部分的开始位置和结束位置,
所述使日志文件原来的有效内容无效的步骤包括:将所述日志文件的有效内容的开始位置设置为所述日志文件的当前记录位置。
8.根据权利要求1所述的方法,其中,
所述日志文件包括具有预定次序的多个预先定义的日志子文件,每个日志子文件具有固定文件尺寸,
当所述预定次序中的最后一个日志子文件被写满时,将所述当前记录位置调整到所述预定次序中的第一个日志子文件的开头。
9.根据权利要求8所述的方法,其中,所述预定数据备份条件包括以下条件中的一项或多项:
到达预定时刻;
自上一次执行数据备份操作以来经过了预定时间段;
所述当前记录位置到达所述日志文件的预定位置;
所述日志文件的有效内容达到预定数量个日志文件;以及
接收到数据备份指令。
10.一种实现数据缓存的装置,包括:
缓存值变更装置,用于响应于针对指定键的数据变更指令,变更所述指定键在易失性存储器上的缓存中对应的缓存值;
日志记录装置,用于响应于所述针对指定键的数据变更指令,将表示所述数据变更指令的代码追加记录到非易失性存储器上的日志文件中紧接有效内容之后的当前记录位置,并成为所述有效内容的一部分;
数据备份装置,用于响应于满足预定数据备份条件,执行数据备份操作,即将所述日志文件的有效内容中的每一个键在所述缓存中对应的缓存值与所述每一个键关联地存储到非易失性存储器上的键值存储区;以及
有效内容管理装置,用于在所述数据备份装置完成所述数据备份操作之后,使所述日志文件原来的有效内容无效。
11.根据权利要求10所述的装置,还包括:
日志表维护装置,用于响应于所述针对指定键的数据变更指令,在所述易失性存储器中的日志表中维护所述指定键的指令链,以便将所述数据变更指令追加到所述指令链的末尾;
日志表清空装置,用于在所述数据备份装置完成所述数据备份操作之后,将所述日志表清空,
其中,所述数据备份装置通过将所述日志表中的每一个键在所述缓存中对应的缓存值与所述每一个键关联地存储到所述非易失性存储器上的键值存储区,来执行所述数据备份操作。
12.根据权利要求11所述的装置,其中,所述日志表维护装置包括:
第一维护装置,用于在所述数据变更指令是操作结果与初始值无关的指令的情况下,删除所述日志表中所述指定键的原来的指令链,并将所述数据变更指令记录在所述指定键的指令链的开头;和/或
第二维护装置,用于在所述日志表中没有所述指定键的指令链的情况下,建立所述指定键的指令链,并将所述数据变更指令记录在所述指定键的指令链的开头。
13.根据权利要求11所述的装置,还包括:
日志表重建装置,用于响应于所述易失性存储器中数据丢失后的数据预加载指令,基于所述日志文件的有效内容重建所述日志表;
热点键确定装置,用于响应于所述数据预加载指令,确定热点键;
存储值获取装置,用于对于每一个所述热点键,从所述键值存储区获得与所述热点键对应的存储值;
热点键查找装置,用于对于每一个所述热点键,在所述日志表中查找所述热点键;
第一缓存装置,用于在查找到所述热点键的情况下,对所述热点键对应的存储值依次执行所述日志表中所述热点键的指令链上的每一条指令,以获得推算值,并将所述推算值与所述热点键关联地存储到所述缓存中;以及
第二缓存装置,用于在没有查找到所述热点键的情况下,将所述存储值与所述热点键关联地存储到所述缓存中。
14.根据权利要求13所述的装置,还包括:
推算值获取装置,用于响应于从所述缓存中读取指定键对应的值的指令,在所述缓存中没有所述指定键的情况下,基于所述日志表和所述键值存储区来获得所述指定键对应的推算值;以及
推算值返回装置,用于返回所述推算值,并将所述推算值与所述指定键关联地存储到所述缓存中。
15.根据权利要求14所述的装置,其中,所述推算值获取装置包括:
第一获取装置,用于在所述日志表中没有所述指定键的情况下,从所述键值存储区获得所述指定键对应的存储值,并以所述存储值为所述推算值;和/或
第二获取装置,用于在所述日志表中所述指定键的指令链的开头是操作结果与初始值无关的指令的情况下,依次执行所述指令链上的指令,以得到所述推算值;和/或
第三获取装置,用于在所述日志表中所述指定键的指令链的开头不是操作结果与初始值无关的指令的情况下,从所述键值存储区获得所述指定键对应的存储值,对所述存储值依次执行所述日志表中所述指定键的指令链上的每一条指令,以获得所述推算值。
16.根据权利要求13所述的装置,其中,
所述日志表重建装置包括:有效部分确定装置,用于获取日志文件的有效部分的开始位置和结束位置,
所述有效内容管理装置包括:开始位置设置装置,用于将所述日志文件的有效内容的开始位置设置为所述日志文件的当前记录位置,从而使所述日志文件原来的有效内容无效。
17.根据权利要求10所述的装置,其中,
所述日志文件包括具有预定次序的多个预先定义的日志子文件,每个日志子文件具有固定文件尺寸,
所述日志记录装置包括:当前记录位置调整装置,用于在所述预定次序中的最后一个日志子文件被写满时,将所述当前记录位置调整到所述预定次序中的第一个日志子文件的开头。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510099063.1A CN105988899B (zh) | 2015-03-05 | 2015-03-05 | 实现数据缓存的方法和装置 |
US15/004,197 US9892038B2 (en) | 2015-03-05 | 2016-01-22 | Method, apparatus, and system for data caching |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510099063.1A CN105988899B (zh) | 2015-03-05 | 2015-03-05 | 实现数据缓存的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105988899A CN105988899A (zh) | 2016-10-05 |
CN105988899B true CN105988899B (zh) | 2019-04-02 |
Family
ID=56849684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510099063.1A Active CN105988899B (zh) | 2015-03-05 | 2015-03-05 | 实现数据缓存的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9892038B2 (zh) |
CN (1) | CN105988899B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776150A (zh) * | 2017-01-04 | 2017-05-31 | 上海上讯信息技术股份有限公司 | 一种获取事务日志转储文件信息的方法及设备 |
US10509724B2 (en) * | 2017-01-20 | 2019-12-17 | Mz Ip Holdings, Llc | Systems and methods for reconstructing cache loss |
CN107894919A (zh) * | 2017-11-30 | 2018-04-10 | 中国平安财产保险股份有限公司 | 定时任务触发方法、装置、设备及可读存储介质 |
CN111782707B (zh) * | 2020-06-19 | 2024-04-16 | 京东科技信息技术有限公司 | 一种数据查询方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102694828A (zh) * | 2011-03-23 | 2012-09-26 | 中兴通讯股份有限公司 | 一种分布式缓存系统数据存取的方法及装置 |
CN102867070A (zh) * | 2012-09-29 | 2013-01-09 | 瑞庭网络技术(上海)有限公司 | 更新key-value分布式存储系统缓存的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8239416B2 (en) * | 2008-05-30 | 2012-08-07 | Armanta, Inc. | System, method, and computer program product for modeling changes to large scale datasets |
US8499121B2 (en) * | 2011-08-31 | 2013-07-30 | Hewlett-Packard Development Company, L.P. | Methods and apparatus to access data in non-volatile memory |
US9697267B2 (en) * | 2014-04-03 | 2017-07-04 | Sandisk Technologies Llc | Methods and systems for performing efficient snapshots in tiered data structures |
-
2015
- 2015-03-05 CN CN201510099063.1A patent/CN105988899B/zh active Active
-
2016
- 2016-01-22 US US15/004,197 patent/US9892038B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102694828A (zh) * | 2011-03-23 | 2012-09-26 | 中兴通讯股份有限公司 | 一种分布式缓存系统数据存取的方法及装置 |
CN102867070A (zh) * | 2012-09-29 | 2013-01-09 | 瑞庭网络技术(上海)有限公司 | 更新key-value分布式存储系统缓存的方法 |
Also Published As
Publication number | Publication date |
---|---|
US20160259727A1 (en) | 2016-09-08 |
US9892038B2 (en) | 2018-02-13 |
CN105988899A (zh) | 2016-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
CN107391628B (zh) | 数据同步方法及装置 | |
US8868926B2 (en) | Cryptographic hash database | |
CN110073344A (zh) | 利用合成基线快照和逐出状态刷新来减少稳定数据逐出 | |
CN105988899B (zh) | 实现数据缓存的方法和装置 | |
CN110062925A (zh) | 用于云集成的快照元数据布置 | |
US7406489B2 (en) | Apparatus, system and method for persistently storing data in a data synchronization process | |
EP1806668B1 (en) | System and method for managing log information for transaction | |
EP3262512B1 (en) | Application cache replication to secondary application(s) | |
CN103902479A (zh) | 一种基于元数据日志的元数据缓存快速重建机制 | |
CN103530387A (zh) | 一种hdfs针对小文件的改进方法 | |
CN109997118A (zh) | 在永久存储器系统中以超高速一致地存储大量数据的方法 | |
US9213501B2 (en) | Efficient storage of small random changes to data on disk | |
CN103198088A (zh) | 基于阴影分页的日志段目录 | |
US11645114B2 (en) | Distributed streaming system supporting real-time sliding windows | |
CN103595797A (zh) | 一种分布式存储系统中的缓存方法 | |
CN107888687B (zh) | 一种基于分布式存储系统的代理客户端存储加速方法及系统 | |
CN103365926B (zh) | 在文件系统中用于保存快照的方法和装置 | |
CN113377868A (zh) | 一种基于分布式kv数据库的离线存储系统 | |
CN113590612A (zh) | Dram-nvm混合索引结构的构建方法及操作方法 | |
US20060277221A1 (en) | Transactional file system with client partitioning | |
CN102687113A (zh) | 程序、控制方法以及控制装置 | |
US9471437B1 (en) | Common backup format and log based virtual full construction | |
CN111694806A (zh) | 一种事务日志的缓存方法、装置、设备和存储介质 | |
CN103177026A (zh) | 数据管理方法和数据管理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200710 Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Patentee after: Alibaba (China) Co.,Ltd. Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping B radio 14 floor tower square Patentee before: Guangzhou Dongjing Computer Technology Co.,Ltd. |
|
TR01 | Transfer of patent right |