CN115080584A - 数据持久化方法、装置、设备和介质 - Google Patents

数据持久化方法、装置、设备和介质 Download PDF

Info

Publication number
CN115080584A
CN115080584A CN202210844454.1A CN202210844454A CN115080584A CN 115080584 A CN115080584 A CN 115080584A CN 202210844454 A CN202210844454 A CN 202210844454A CN 115080584 A CN115080584 A CN 115080584A
Authority
CN
China
Prior art keywords
file
persistent
data
persistent file
database
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.)
Pending
Application number
CN202210844454.1A
Other languages
English (en)
Inventor
李佳
武文斌
黄海鹏
李晓萌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202210844454.1A priority Critical patent/CN115080584A/zh
Publication of CN115080584A publication Critical patent/CN115080584A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/80Database-specific techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种数据持久化方法,涉及金融领域。该方法包括:利用监控进程监控第一持久化文件的占用空间,其中,所述第一持久化文件为所述数据库当前写入数据的文件,所述监控进程独立于所述数据库的主进程;在所述占用空间大于或等于第一阈值的情况下,利用所述监控进程调用重定向命令来创建第二持久化文件,其中,所述重定向命令用于切换所述数据库写入所述数据的持久化文件;令所述数据库将所述数据写入所述第二持久化文件。由于监控进程独立于主进程,不会对主进程的性能造成影响,并且通过创建新的持久化文件的方式,能够保留原有的数据。本公开还提供了一种数据持久化装置、设备、存储介质和程序产品。

Description

数据持久化方法、装置、设备和介质
技术领域
本公开涉及金融领域,更具体地,涉及一种数据持久化方法、装置、设备、介质和程序产品。
背景技术
Redis是一个高性能键值型内存数据库,具有访问性能高、数据类型丰富、可扩展性好等特点,在互联网领域得到广泛应用。Redis日常的数据持久化可以采用AOF(AppendOnly File)方式。根据AOF方式,Redis每次执行一个更改数据的命令时,将这个命令及参数追加到AOF文件的末尾。当Redis有频繁更新操作时,会导致AOF的文件越来越大,占用大量磁盘空间,在数据恢复时也要花费更长时间。针对此问题,Redis会在满足预定条件时进行AOF重写,以减少AOF文件的大小。
在进行AOF重写时,会调用fork函数创建主进程的子进程来执行重写。在进行fork操作时,会复制主进程的空间内存页表,对主进程的性能造成影响,fork操作也会导致出现耗时和降低内存资源利用率的问题。另外,AOF重写会丢失之前的操作历史记录,导致排查故障原因时无法回溯等问题。
发明内容
鉴于上述问题,本公开提供了能够避免对主进程造成影响,且可以避免丢失数据的数据持久化方法、装置、设备、介质和程序产品。
本公开实施例的一个方面提供了一种数据持久化方法,包括:利用监控进程监控第一持久化文件的占用空间,其中,所述第一持久化文件为所述数据库当前写入数据的文件,所述监控进程独立于所述数据库的主进程;在所述占用空间大于或等于第一阈值的情况下,利用所述监控进程调用重定向命令来创建第二持久化文件,其中,所述重定向命令用于切换所述数据库写入所述数据的持久化文件;令所述数据库将所述数据写入所述第二持久化文件。
根据本公开的实施例,在预定时间段内所述数据库将所述数据写入到N个持久化文件,所述N个持久化文件包括所述第一持久化文件和所述第二持久化文件,N大于等于2,所述方法还包括:利用所述监控进程监控所述N个持久化文件的总占用空间;在所述总占用空间大于或等于第二阈值的情况下,利用辅助进程将第三持久化文件确定为数据持久化来源,其中,所述第三持久化文件为所述N个持久化文件中数据写入时间最早的文件,所述辅助进程独立于所述主进程;令所述数据库将所述数据写入所述第三持久化文件以执行文件重写功能。
根据本公开的实施例,在所述利用辅助进程将第三持久化文件确定为数据持久化来源之前,所述方法还包括:确定配置文件的配置内容,其中,所述配置内容包括网卡地址、所述第三持久化文件的信息、端口信息和所述文件重写功能开关标识中的至少一种;根据所述配置内容创建所述辅助进程。
根据本公开的实施例,在所述文件重写功能执行完成后,所述方法还包括:退出所述辅助进程,并继续利用所述监控进程监控所述总占用空间。
根据本公开的实施例,所述调用重定向命令来创建第二持久化文件包括:关闭所述第一持久化文件的文件句柄;根据所述第二持久化文件的名称创建并打开所述第二持久化文件;更新所述第二持久化文件的文件句柄。
根据本公开的实施例,在所述关闭所述第一持久化文件的文件句柄之前,还包括:检查基于所述第一持久化文件的刷盘操作,所述刷盘操作用于将所述第一持久化文件中的数据持久化到磁盘;在检查到所述刷盘操作的情况下,等待所述刷盘操作完成。
根据本公开的实施例,在所述数据库每次向所述第一持久化文件或所述第二持久化文件写入所述数据之前,所述方法还包括:基于当前时间生成时间戳记录,并写入所述第一持久化文件或所述第二持久化文件;和/或在所述数据库读取所述第一持久化文件或所述第二持久化文件进行数据恢复时,跳过所述时间戳记录。
本公开实施例的另一方面提供了一种数据持久化装置,包括:文件监控模块,用于利用监控进程监控第一持久化文件的占用空间,其中,所述第一持久化文件为所述数据库当前写入数据的文件,所述监控进程独立于所述数据库的主进程;重定向模块,用于在所述占用空间大于或等于第一阈值的情况下,利用所述监控进程调用重定向命令来创建第二持久化文件,其中,所述重定向命令用于切换所述数据库写入所述数据的持久化文件;持久化模块,用于令所述数据库将所述数据写入所述第二持久化文件。
本公开实施例的另一方面提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行如上所述的方法。
本公开实施例的另一方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。
本公开实施例的另一方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上所述的方法。
上述一个或多个实施例具有如下有益效果:通过独立于主进程的监控进程对当前写入数据的第一持久化文件进行占用空间监控,若占用空间大于或等于第一阈值,则利用重定向命令来创建第二持久化文件,并令数据库将数据写入第二持久化文件。一方面,监控进程独立于主进程,不会对主进程的性能造成影响,另一方面,通过创建新的持久化文件的方式,既能够保留原有的数据,又能够避免执行AOF重写,从而无需基于主进程fork出子进程,避免了因为fork子进程而导致的问题。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的数据持久化方法的应用场景图;
图2示意性示出了根据本公开实施例的数据持久化方法的流程图;
图3示意性示出了根据本公开实施例的重定向过程的流程图;
图4示意性示出了根据本公开实施例的AOF分段文件重写的流程图;
图5示意性示出了根据本公开实施例的创建辅助进程的流程图;
图6示意性示出了根据本公开实施例的AOF重写的架构图;
图7示意性示出了根据本公开的另一实施例的数据持久化方法的流程图;
图8示意性示出了根据本公开实施例的数据持久化装置的结构框图;以及
图9示意性示出了根据本公开实施例的适于实现数据持久化方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
LINUX系统在执行fork操作后,子进程和父进程会共享所有的内存页,当任意一方要更改数据的时候,就会触发COW(Copy On Write)机制,将原来的物理内存页拷贝一份,然后建立新的页表映射关系,然后再修改新内存页中的数据。
因为COW机制,会预留额外物理内存,导致实际资源利用率比较低。拷贝内存页过程所花费的时间导致了fork操作耗时。在高流量的Redis数据库中,fork操作耗时导致较高数量的命令延迟执行。另外,基于主进程fork出的子进程与主进程指向相同的内存地址空间,此时主进程依然会有流量写入,如果操作较大的字符串,主进程会出现阻塞风险,性能降低。
本公开实施例提供了一种数据持久化方法,通过独立于主进程的监控进程对当前写入数据的第一持久化文件进行占用空间监控,若占用空间大于或等于第一阈值,则利用重定向命令来创建第二持久化文件,并令数据库将数据写入第二持久化文件。一方面,监控进程独立于主进程,不会对主进程的性能造成影响,另一方面,通过创建新的持久化文件的方式,既能够保留原有的数据,又能够避免执行AOF重写,从而无需基于主进程fork出子进程,避免了因为fork子进程而导致的问题。
图1示意性示出了根据本公开实施例的数据持久化方法的应用场景图。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103,网络104和Redis服务器105。网络104用以在终端设备101、102、103和Redis服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与Redis服务器105交互,以接收或发送消息等,如发送数据读取操作或主从节点同步。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103中可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
Redis服务器105其中可以部署Redis数据库和/或Redis客户端,可以是提供各种服务的服务器(如硬件服务器、云服务器或虚拟web服务器),例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
根据本公开的实施例,可以将持久化文件存储到终端设备101、102、103和Redis服务器105中的任一台机器。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的场景,通过图2~图7对本公开实施例的数据持久化方法进行详细描述。
图2示意性示出了根据本公开实施例的数据持久化方法的流程图。
如图2所示,该实施例的数据持久化方法包括操作S210~操作S230。
在操作S210,利用监控进程监控第一持久化文件的占用空间,其中,第一持久化文件为数据库当前写入数据的文件,监控进程独立于数据库的主进程。
示例性地,监控进程可以是agent进程,或可以设置为守护进程。在启动agent进程后,可以定时检查第一持久化文件的占用空间大小。在一些实施例中,监控进程与主进程两者运行期间不产生交集,各自独立运行。监控进程独立于主进程的作用在于,不对主进程的性能产生影响,令主进程可以更好的对外提供服务。
可使主进程向第一持久化文件中利用AOF方式写入数据。例如将每个收到的写命令通过write函数写入。
在操作S220,在占用空间大于或等于第一阈值的情况下,利用监控进程调用重定向命令来创建第二持久化文件,其中,重定向命令用于切换数据库写入数据的持久化文件。
示例性地,第一阈值可以根据实际情况设置。重定向命令可以是根据本公开实施例的方法在开源的社区标准板Redis源码中新增的命令,其可以进行AOF分段文件的重定向。第一持久化文件和第二持久化文件可以称为AOF分段文件。
例如,修改社区标准版Redis源码,新增AOF重定向命令aoffedirect,命令格式:aofredirect new_file_name。可在Redis正常服务过程中,原子性的关闭当前的AOF分段文件,并打开另一个新的AOF分段文件。
在操作S230,令数据库将数据写入第二持久化文件。
在一些实施例中,可以利用Redis数据库实例中的时间事件触发,例如,运行serverCron()函数监控当前持久化文件的占用空间。但是,该方法是将serverCron()函数糅合在主进程的工作流中,依然会对主进程的性能造成影响,不利于主进程进行对外服务。
根据本公开的实施例,提出了一种分而治之的算法,基于AOF多分段文件,一方面,监控进程独立于主进程,不会对主进程的性能造成影响,另一方面,通过创建新的持久化文件的方式,既能够保留原有的数据,又能够避免执行AOF重写,从而无需基于主进程fork出子进程,避免了因为fork子进程而导致的问题。
在执行操作S210~操作S240之前,可以进行如下配置。
在一些实施例中,关闭社区标准版Redis的AOF自动重写功能,防止历史操作记录丢失,也避免数据量太大时,fork操作对主节点父进程(主进程)的影响,以及LINUX COW机制额外占用的物理内存。
在一些实施例中,在社区标准AOF文件格式的基础上,新增AOF时间戳记录,可作为客户端操作的审计记录。例如修改AOF写入部分,追加记录时,针对每个客户端的写操作命令,先生成一条记录时间戳记录,格式:@YYYY-MM-DD HH:MM:SS,例如:@2022-05-01 01:02:03。根据本公开的实施例,在数据库每次向第一持久化文件或第二持久化文件写入数据之前,还包括:基于当前时间生成时间戳记录,并写入第一持久化文件或第二持久化文件。
在一些实施例中,例如修改AOF读取部分,在读取AOF分段文件做数据恢复时,首先判断是否是时间戳,如果是时间戳(时间戳可以用于操作记录审计),则跳过当前行不处理,继续处理下一行。在异常情况下数据恢复时,可识别时间戳记录并跳过,仅处理数据部分,仍可保证Redis数据持久化恢复功能。根据本公开的实施例,在数据库读取第一持久化文件或第二持久化文件进行数据恢复时,跳过时间戳记录。例如读取持久化文件中的数据修改命令记录,来恢复数据库中的内容。
图3示意性示出了根据本公开实施例的重定向过程的流程图。
如图3所示,该实施例的重定向过程可以包括操作S310~操作S390。
在操作S310,监控进程调用执行重定向命令。重定向命令可以执行以下操作。
在操作S320,检查是否有基于第一持久化文件的刷盘操作,刷盘操作用于将第一持久化文件中的数据持久化到磁盘。若有刷盘操作,则执行操作S330。如无刷盘操作,则执行操作S360。
示例性地,刷盘操作可以包括同步刷盘或异步刷盘。待持久化数据先存放在缓冲区,然后通过刷盘操作可以将其持久化到磁盘。例如检查是否有后台线程正在进行异步刷盘操作,若有则休眠等待,若无则开始创建新的AOF分段文件。如果不等待而直接关闭第一持久化文件,可能导致数据丢失。
在操作S330,在检查到刷盘操作的情况下,等待刷盘操作完成,例如休眠一会等待完成。
在操作S340,判断等待时间是否超过阈值。若是,则执行操作S350。如否,则执行操作S320。
在操作S350,返回错误结果ERR,命令结束。
在操作S360,关闭第一持久化文件的文件句柄。文件句柄(file handle)对于打开的文件是唯一的识别依据。
在操作S370,保存新的AOF分段文件(第二持久化文)名称。
示例性地,可以获取当前时间作为时间戳timestamp并加入到文件名中,命名格式可以是appendonly.timestamp.aof(仅为示例)。
在操作S380,根据第二持久化文件的名称创建并打开第二持久化文件。
在操作S390,更新第二持久化文件的文件句柄。其作用在于,可以根据第二持久化文件的文件句柄确定AOF的数据写入目标文件。
图4示意性示出了根据本公开实施例的AOF分段文件重写的流程图。
在预定时间段内数据库将数据写入到N个持久化文件,N个持久化文件包括第一持久化文件和第二持久化文件,N大于等于2。如图4所示,该实施例的AOF分段文件重写包括操作S410~操作S430。
在操作S410,利用监控进程监控N个持久化文件的总占用空间。
示例性地,监控进程可以检查所有AOF分段文件的长度总和,判断是否超总阈值(第二阈值)。考虑到用于持久化的磁盘的大小是有限的,如果不断的进行AOF文件分段会导致所有AOF分段文件占用空间越来越大,磁盘可以可能不再满足需求。所以对整体的总占用空间进行监控。
在操作S420,在总占用空间大于或等于第二阈值的情况下,利用辅助进程将第三持久化文件确定为数据持久化来源,其中,第三持久化文件为N个持久化文件中数据写入时间最早的文件,辅助进程独立于主进程。
在数据持久化过程中,随着时间的延长,早期持久化的数据(如一月前、一年前的操作记录)可能不再有用,所以对数据写入时间最早的文件进行AOF重写。
辅助进程可以是Redis辅助进程。在一些实施例,其可以是独立于主进程和监控进程。在另一些实施例,可以将监控进程作为父进程,调用fork函数fork出子进程作为该辅助进程。该情况下监控进程还可以执行其他操作,辅助进程也可以复用监控进程的部分命令,实现重写。
在操作S430,令数据库将数据写入第三持久化文件以执行文件重写功能。第三持久化文件可与第一持久化文件或第二持久化文件相同或不同。
在一些实施例中,N个持久化文件中可以在写入修改命令之前,写入当前时间戳。根据文件中的时间戳来判断每个持久化文件的数据写入时间。在另一些实施例中,N个持久化文件的文件名称可以包括创建时的时间戳,利用文件名称的时间戳进行排序,确定最早的第三持久化文件。在重写过程中,可以获取当前时间戳对第三持久化文件重新命名。
示例性地,AOF重写时进程内已经超时的数据可不再写入文件、可删除AOF分段文件中的旧的无效命令、可将多条命令合并为一个、可以将过大的单条命令拆分为多条等,从而降低AOF分段文件的占用空间。
相关技术中,仅是针对一个AOF文件持久化和重写操作,若该文件过大,重写时会导致数据丢失,删除原AOF文件时也会耗时。根据本公开的实施例,利用辅助进程独立进行AOF重写的方式,对主进程无影响,减少了相关技术中fork期间由于COW机制对主进程的内存占用。另外,通过每次针对某个AOF分段文件进行重写,不仅可以减小总占用空间、节省重写时间,还可以保留其余AOF分段文件的数据。
根据本公开的实施例,在文件重写功能执行完成后,还包括:退出辅助进程,并继续利用监控进程监控总占用空间。在重写完成后,可以不再保留辅助进程,节省运行进程的系统资源。
图5示意性示出了根据本公开实施例的创建辅助进程的流程图。
在利用辅助进程将第三持久化文件确定为数据持久化来源之前,如图5所示,该实施例的创建辅助进程包括操作S510~操作S520。
在操作S510,确定配置文件的配置内容,其中,配置内容包括网卡地址、第三持久化文件的信息、端口信息和文件重写功能开关标识中的至少一种。
示例性地,可以准备一个Redis.conf配置文件,设置待进行重写的AOF分段文件为第三持久文件的名称,修改参数bind的地址为127.0.0.1,即不提供对外服务,修改参数port值与主节点Redis.conf配置文件不同,避免端口冲突。设置appendonly=yes,开启AOF持久化功能。
在操作S520,根据配置内容创建辅助进程。
辅助进程启动后,会加载第三持久文件的名称作为数据持久化来源,待启动成功后,执行bgrewriteaof命令,将第三持久文件重写,以减少磁盘空间占用。
图6示意性示出了根据本公开实施例的AOF重写的架构图。图7示意性示出了根据本公开的另一实施例的数据持久化方法的流程图。
如图6所示,Redis主节点运行主进程,对外服务进行业务处理。AOF分段1、AOF分段2和AOF分段3为持久化过程中N个持久化文件的部分文件。如图7所示,该实施例的数据持久化方法包括操作S710~操作S780。
在操作S710,启动一个agent监控进程,用于监测当前AOF分段文件占用磁盘空间。
在操作S720,agent进程每隔一段时间T1,检查当前AOF分段文件大小是否超第一阈值SIZE1。若是,则执行操作S730。如否,则执行操作S740。
在操作S730,获取当前时间作为时间戳timestamp并加入到文件名中。调用重定向aofredirect命令,将AOF重定向到新的文件分段。
根据本公开的实施例,在标准社区版Redis的基础上,修改源码,新增了aofredirect命令,支持AOF文件重命名,可实时在线、原子性修改AOF持久化文件名,并且防止数据丢失。
在操作S740,agent进程每隔一段时间T2,检查所有AOF分段文件的长度总和,判断是否超第二阈值SIZE2。若是,则执行操作S750。如否,则执行操作S720。
在操作S750,将所有AOF分段文件按文件名中的时间戳进行排序,获取最早的AOF分片文件名FNAME,准备一个Redis.conf配置文件。
在操作S760,根据配置文件中的内容创建Redis辅助进程,用于重写AOF分段文件。
在操作S770,重写最早的AOF分段文件。Redis辅助进程启动后,会加载FNAME作为数据持久化来源,待启动成功后,执行bgrewriteaof命令,将FNAME对应的AOF分段文件重写,并修改文件名中的时间戳,以减少磁盘空间占用。
根据本公开的实施例,利用多分段的AOF文件,减小单个AOF文件的大小,也减少了AOF重写时,fork子进程后COW的消耗。
在操作S780,Redis辅助进程AOF重写完成后,进程退出,跳转到操作S740步骤,重复循环执行。
参照图6,辅助进程独立于Redis主节点中的主进程,可以将持久化过程中的AOF分段文件作为输入,按照时间顺序以分段为粒度进行AOF重写。
示例性地,如果在重写某个AOF分段文件后,总占用空间不再超阈值,则转为对当前AOF分段文件的监控,并确定是否继续分段。如果依然超阈值,则继续执行操作S750~操作S780。
可以直接定位AOF分段文件名称的时间戳,以及该文件中写入的时间戳,进行数据恢复或问题定位。
根据本公开的实施例,在标准AOF文件格式的基础上,新增时间戳记录,即能保证在故障后做数据恢复,还能保存数据的原始操作记录,在发现问题后,具备按时间追溯能力。
基于上述数据持久化方法,本公开还提供了一种数据持久化装置。以下将结合图8对该装置进行详细描述。
图8示意性示出了根据本公开实施例的数据持久化装置的结构框图。
如图8所示,该实施例的数据持久化装置800包括文件监控模块810、重定向模块820和持久化模块830。
文件监控模块810可以执行操作S210,用于利用监控进程监控第一持久化文件的占用空间,其中,第一持久化文件为数据库当前写入数据的文件,监控进程独立于数据库的主进程。
重定向模块820可以执行操作S220,用于在占用空间大于或等于第一阈值的情况下,利用监控进程调用重定向命令来创建第二持久化文件,其中,重定向命令用于切换数据库写入数据的持久化文件。
根据本公开的实施例,重定向模块820可以执行操作S310~操作S390,在此不做赘述。
持久化模块830可以执行操作S230,用于令数据库将数据写入第二持久化文件。
根据本公开的实施例,数据持久化装置800还可以包括分段重写模块,该模块可以执行操作S410~操作S430,操作S510~操作S520,在此不做赘述。
需要说明的是,装置部分实施例中各模块/单元/子单元等的实施方式、解决的技术问题、实现的功能、以及达到的技术效果分别与方法部分实施例中各对应的步骤的实施方式、解决的技术问题、实现的功能、以及达到的技术效果相同或类似,在此不再赘述。
根据本公开的实施例,文件监控模块810、重定向模块820和持久化模块830中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。
根据本公开的实施例,文件监控模块810、重定向模块820和持久化模块830中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,文件监控模块810、重定向模块820和持久化模块830中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图9示意性示出了根据本公开实施例的适于实现数据持久化方法的电子设备的方框图。
如图9所示,根据本公开实施例的电子设备900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 903中,存储有电子设备900操作所需的各种程序和数据。处理器901、ROM902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,程序也可以存储在除ROM902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。电子设备900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906。包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907。包括硬盘等的存储部分908。以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的。也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 902和/或RAM 903和/或ROM 902和RAM 903以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器901执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分909被下载和安装,和/或从可拆卸介质911被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (11)

1.一种数据持久化方法,包括:
利用监控进程监控第一持久化文件的占用空间,其中,所述第一持久化文件为所述数据库当前写入数据的文件,所述监控进程独立于所述数据库的主进程;
在所述占用空间大于或等于第一阈值的情况下,利用所述监控进程调用重定向命令来创建第二持久化文件,其中,所述重定向命令用于切换所述数据库写入所述数据的持久化文件;
令所述数据库将所述数据写入所述第二持久化文件。
2.根据权利要求1所述的方法,其中,在预定时间段内所述数据库将所述数据写入到N个持久化文件,所述N个持久化文件包括所述第一持久化文件和所述第二持久化文件,N大于等于2,所述方法还包括:
利用所述监控进程监控所述N个持久化文件的总占用空间;
在所述总占用空间大于或等于第二阈值的情况下,利用辅助进程将第三持久化文件确定为数据持久化来源,其中,所述第三持久化文件为所述N个持久化文件中数据写入时间最早的文件,所述辅助进程独立于所述主进程;
令所述数据库将所述数据写入所述第三持久化文件以执行文件重写功能。
3.根据权利要求2所述的方法,其中,在所述利用辅助进程将第三持久化文件确定为数据持久化来源之前,所述方法还包括:
确定配置文件的配置内容,其中,所述配置内容包括网卡地址、所述第三持久化文件的信息、端口信息和所述文件重写功能开关标识中的至少一种;
根据所述配置内容创建所述辅助进程。
4.根据权利要求2所述的方法,其中,在所述文件重写功能执行完成后,所述方法还包括:
退出所述辅助进程,并继续利用所述监控进程监控所述总占用空间。
5.根据权利要求1所述的方法,其中,所述调用重定向命令来创建第二持久化文件包括:
关闭所述第一持久化文件的文件句柄;
根据所述第二持久化文件的名称创建并打开所述第二持久化文件;
更新所述第二持久化文件的文件句柄。
6.根据权利要求5所述的方法,其中,在所述关闭所述第一持久化文件的文件句柄之前,还包括:
检查基于所述第一持久化文件的刷盘操作,所述刷盘操作用于将所述第一持久化文件中的数据持久化到磁盘;
在检查到所述刷盘操作的情况下,等待所述刷盘操作完成。
7.根据权利要求1所述的方法,其中,
在所述数据库每次向所述第一持久化文件或所述第二持久化文件写入所述数据之前,所述方法还包括:基于当前时间生成时间戳记录,并写入所述第一持久化文件或所述第二持久化文件;和/或
在所述数据库读取所述第一持久化文件或所述第二持久化文件进行数据恢复时,跳过所述时间戳记录。
8.一种数据持久化装置,包括:
文件监控模块,用于利用监控进程监控第一持久化文件的占用空间,其中,所述第一持久化文件为所述数据库当前写入数据的文件,所述监控进程独立于所述数据库的主进程;
重定向模块,用于在所述占用空间大于或等于第一阈值的情况下,利用所述监控进程调用重定向命令来创建第二持久化文件,其中,所述重定向命令用于切换所述数据库写入所述数据的持久化文件;
持久化模块,用于令所述数据库将所述数据写入所述第二持久化文件。
9.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~7中任一项所述的方法。
11.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~7中任一项所述的方法。
CN202210844454.1A 2022-07-18 2022-07-18 数据持久化方法、装置、设备和介质 Pending CN115080584A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210844454.1A CN115080584A (zh) 2022-07-18 2022-07-18 数据持久化方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210844454.1A CN115080584A (zh) 2022-07-18 2022-07-18 数据持久化方法、装置、设备和介质

Publications (1)

Publication Number Publication Date
CN115080584A true CN115080584A (zh) 2022-09-20

Family

ID=83259374

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210844454.1A Pending CN115080584A (zh) 2022-07-18 2022-07-18 数据持久化方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN115080584A (zh)

Similar Documents

Publication Publication Date Title
US10891175B2 (en) System having in-memory buffer service, temporary events file storage system and events file uploader service
US9304815B1 (en) Dynamic replica failure detection and healing
US10785320B2 (en) Managing operation of instances
US9772911B2 (en) Pooling work across multiple transactions for reducing contention in operational analytics systems
US10853157B2 (en) Compact binary event log generation
US10031948B1 (en) Idempotence service
US9374417B1 (en) Dynamic specification auditing for a distributed system
US9575827B2 (en) Memory management program, memory management method, and memory management device
CN110427258A (zh) 基于云平台的资源调度控制方法及装置
US9473561B2 (en) Data transmission for transaction processing in a networked environment
CN116594752A (zh) 流程调度方法、装置、设备、介质和程序产品
US10558528B2 (en) Reconstruction of system definitional and state information
CN115080584A (zh) 数据持久化方法、装置、设备和介质
US8762776B2 (en) Recovering from a thread hang
US11086556B2 (en) System and method for overprotection mitigation
US9251101B2 (en) Bitmap locking using a nodal lock
CN114640585B (zh) 一种资源更新方法、装置、电子设备和存储介质
US20230222107A1 (en) Database record bit
CN117435569A (zh) 缓存系统动态扩容方法、装置、设备、介质和程序产品
US20200142807A1 (en) Debugger with hardware transactional memory
CN116737721A (zh) 数据处理方法、装置、计算机设备及存储介质
CN117193740A (zh) 数据分配方法、装置、计算设备及存储介质
CN116719551A (zh) 一种热部署方法、云服务系统、电子设备及存储介质
CN114138245A (zh) 基于管道通信的数据处理方法及装置
CN115470045A (zh) 虚拟化数据备份方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination