CN113220729A - 数据存储方法、装置、电子设备及计算机可读存储介质 - Google Patents

数据存储方法、装置、电子设备及计算机可读存储介质 Download PDF

Info

Publication number
CN113220729A
CN113220729A CN202110594663.0A CN202110594663A CN113220729A CN 113220729 A CN113220729 A CN 113220729A CN 202110594663 A CN202110594663 A CN 202110594663A CN 113220729 A CN113220729 A CN 113220729A
Authority
CN
China
Prior art keywords
data
node
transaction
transaction log
slave node
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.)
Granted
Application number
CN202110594663.0A
Other languages
English (en)
Other versions
CN113220729B (zh
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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202110594663.0A priority Critical patent/CN113220729B/zh
Publication of CN113220729A publication Critical patent/CN113220729A/zh
Application granted granted Critical
Publication of CN113220729B publication Critical patent/CN113220729B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • 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/22Indexing; Data structures therefor; Storage structures
    • 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

Landscapes

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

Abstract

本申请的实施方式提供了一种数据存储方法、数据存储装置、电子设备以及计算机可读存储介质,涉及数据库技术领域。该方法包括:当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中;获取主节点的本地事务文件中各事务日志对应的易失性数据;将各事务日志对应的易失性数据写入主节点的一级缓存中;基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。在本申请的实施方式中,可以利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传至远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。

Description

数据存储方法、装置、电子设备及计算机可读存储介质
技术领域
本申请的实施方式涉及数据库技术领域,更具体地,本申请的实施方式涉及数据存储方法、数据存储装置、电子设备以及计算机可读存储介质。
背景技术
云原生数据库(Cloud-Native Database)是基于共享存储的关系型数据库,大部分云原生数据库是公有云厂商基于开源关系型数据库MySQL进行二次开发得到的。云原生数据库一般是基于Shared Everything架构+Shared Storage架构的存储计算分离架构,可以分布式实现Shared Nothing水平扩展。
其中,Shared Everything架构是一种传统的数据库系统实现架构,采用的是计算节点和存储节点耦合的模式,即,一个计算节点和一个存储节点组成一个完整的数据库系统,多个计算节点间不共享存储节点。Shared Storage架构区别于Shared-Nothing架构,允许多个计算节点间访问同一个存储节点,可高效的进行计算节点扩展和存储节点扩容。MySQL采用的是传统的Shared-Nothing实现架构,主从间通过二进制日志(binlog)进行数据复制和状态同步。
现有的云原生数据库通常采用远程直接数据存取、高性能存储等非通用硬件的加速方式,且软件层的技术实现和协议栈优化也不是开源的。如果用户想要部署云原生数据库,则需要使用公有云厂商提供的标准硬件和软件服务,而现有的云原生数据库通常依赖远端的共享存储节点实现即时的日志存储,向远端的共享存储节点上传日志数据通常伴随着延迟较高的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此,不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
基于上述问题,发明人进行了相应的思考,做出了有针对性的改进,提供了数据存储方法、数据存储装置、电子设备以及计算机可读存储介质,可以利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传至远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。
根据本申请实施例的第一方面,公开了一种数据存储方法,包括:
当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中;
获取主节点的本地事务文件中各事务日志对应的易失性数据;
将各事务日志对应的易失性数据写入主节点的一级缓存中;
基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。
在一个实施例中,基于前述方案,将事务提交事件对应的事务日志写入主节点的本地事务文件中之后,上述方法还包括:
将事务日志发送至与主节点对应的从节点,以使得从节点根据事务日志对应的事务级别从多种复制模式中确定目标复制模式;
根据目标复制模式将事务日志复制到从节点的本地事务文件中。
在一个实施例中,基于前述方案,多种复制模式包括同步复制模式、半同步复制模式和异步复制模式。
在一个实施例中,基于前述方案,若目标复制模式为同步复制模式,则根据目标复制模式将事务日志复制到从节点的本地事务文件中的步骤包括:
基于同步复制模式读取事务日志并将事务日志发送至从节点,以使得从节点回放事务日志并将回放后的事务日志存储至从节点的本地事务文件中;
当接收到由从节点发送的第一反馈结果时,判定同步复制完成;其中,第一反馈结果表征事务日志已由主节点完全同步至从节点。
在一个实施例中,基于前述方案,若目标复制模式为半同步复制模式,则根据目标复制模式将事务日志复制到从节点的本地事务文件中的步骤包括:
基于半同步复制模式读取事务日志并将事务日志发送至从节点;
当接收到由从节点发送的第二反馈结果时,判定半同步复制完成;其中,第二反馈结果表征事务日志已由主节点半同步至从节点。
在一个实施例中,基于前述方案,若目标复制模式为异步复制模式,则根据目标复制模式将事务日志复制到从节点的本地事务文件中的步骤包括:
基于异步复制模式读取事务日志;
将事务日志发送至从节点,并判定异步复制完成。
在一个实施例中,基于前述方案,将事务日志发送至与主节点对应的从节点,包括:
将事务日志发送至与主节点对应的从节点,以使得从节点读取事务日志的配置参数,并在配置参数满足持久化条件时对事务日志进行持久化存储。
在一个实施例中,基于前述方案,将各事务日志对应的易失性数据写入主节点的一级缓存中,包括:
确定主节点的一级缓存中的写入标识;其中,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据;
将各事务日志对应的易失性数据写入与写入标识对应的第一子区域;其中,一级缓存包括多个子区域,多个子区域中包括第一子区域。
在一个实施例中,基于前述方案,数据筛选规则用于限定易失性数据的筛选条件,基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化,包括:
确定主节点的一级缓存中的回刷标识;
确定回刷标识对应的第二子区域;多个子区域中包括第二子区域;
基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域;
将目标子区域中的易失性数据上传至存储系统进行持久化。
在一个实施例中,基于前述方案,基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域,包括:
确定一级缓存对应的区域写入顺序;其中,区域写入顺序用于标识多个子区域的写入顺序;
根据区域写入顺序确定第一子区域之前以及第二子区域之后的待回刷的目标子区域。
在一个实施例中,基于前述方案,将目标子区域中的易失性数据存储至存储系统之后,上述方法还包括:
将目标子区域中的易失性数据标记为可覆盖;
解除第二子区域与回刷标识的对应关系,并构建回刷标识与第三子区域的对应关系;第三子区域是目标子区域中基于区域写入顺序的最后一个目标子区域。
在一个实施例中,基于前述方案,将目标子区域中的易失性数据更新为已持久化的易失性数据之后,上述方法还包括:
当接收到新的易失性数据时,将第三子区域存储的已持久化的易失性数据写入二级缓存中;
通过新的易失性数据覆盖第三子区域中的已持久化的易失性数据。
在一个实施例中,基于前述方案,上述方法还包括:
当检测到数据查询操作时,确定数据查询操作对应的数据标识;
确定各节点的全局缓存中是否存在与数据标识对应的目标数据;其中,各节点包括主节点和从节点,全局缓存包括相对应节点的一级缓存和二级缓存;
确定各节点的全局缓存中是否存在与数据标识对应的目标数据,包括:
查询各节点的一级缓存中是否存在目标数据;
如果各节点的一级缓存中不存在目标数据,则查询各节点的二级缓存中是否存在目标数据;
如果各节点的二级缓存中不存在目标数据,则向存储系统请求目标数据并接收存储系统反馈的目标数据。
在一个实施例中,基于前述方案,上述方法还包括:
若主节点的全局缓存中存在待回刷数据且待回刷数据不存在于主节点的一级缓存中,则检测待回刷数据对应的日志编号;
若日志编号大于主节点的二级缓存中的最大日志编号,则将待回刷数据写入主节点的二级缓存。
在一个实施例中,基于前述方案,将待回刷数据写入主节点的二级缓存,包括:
若主节点的二级缓存的剩余存储空间不足以进行数据存储,则释放主节点的二级缓存中最小日志编号对应的数据,并将待回刷数据写入主节点的二级缓存。
在一个实施例中,基于前述方案,上述方法还包括:
创建节点文件并根据预设规则划分文件大小;其中,节点文件与目标从节点相对应,节点文件至少包括目标从节点的本地事务文件和缓存文件,目标从节点为新增的从节点;
建立用于接收事务日志的第一线程和回放事务日志的第二线程;
初始化目标从节点中的一级缓存和目标从节点中的二级缓存,并在主节点中注册目标从节点对应的节点信息。
在一个实施例中,基于前述方案,在主节点中注册目标从节点对应的节点信息之后,上述方法还包括:
将目标从节点的二级缓存与主节点的二级缓存同步;或者,
将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中。
在一个实施例中,基于前述方案,上述方法还包括:
关闭主节点的存储服务,并修改主节点中的本地事务文件的文件大小;
触发从节点关闭从节点的存储服务,以使得从节点修改从节点中的本地事务文件的文件大小;
将主节点和从节点进行主从关系切换,新的主节点和新的从节点对应于相同的文件大小。
根据本申请实施例的第二方面,公开了一种数据存储装置,包括:日志写入单元、数据获取单元、数据写入单元和数据回刷单元,其中:
日志写入单元,用于当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中;
数据获取单元,用于获取主节点的本地事务文件中各事务日志对应的易失性数据;
数据写入单元,用于将各事务日志对应的易失性数据写入主节点的一级缓存中;
数据回刷单元,用于基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。
在一个实施例中,基于前述方案,上述装置还包括:
日志发送单元,用于将事务日志发送至与主节点对应的从节点,以使得从节点根据事务日志对应的事务级别从多种复制模式中确定目标复制模式;
日志复制单元,用于根据目标复制模式将事务日志复制到从节点的本地事务文件中。
在一个实施例中,基于前述方案,多种复制模式包括同步复制模式、半同步复制模式和异步复制模式。
在一个实施例中,基于前述方案,若目标复制模式为同步复制模式,日志复制单元根据目标复制模式将事务日志复制到从节点的本地事务文件中,包括:
基于同步复制模式读取事务日志并将事务日志发送至从节点,以使得从节点回放事务日志并将回放后的事务日志存储至从节点的本地事务文件中;
当接收到由从节点发送的第一反馈结果时,判定同步复制完成;其中,第一反馈结果表征事务日志已由主节点完全同步至从节点。
在一个实施例中,基于前述方案,若目标复制模式为半同步复制模式,日志复制单元根据目标复制模式将事务日志复制到从节点的本地事务文件中,包括:
基于半同步复制模式读取事务日志并将事务日志发送至从节点;
当接收到由从节点发送的第二反馈结果时,判定半同步复制完成;其中,第二反馈结果表征事务日志已由主节点半同步至从节点。
在一个实施例中,基于前述方案,若目标复制模式为异步复制模式,日志复制单元根据目标复制模式将事务日志复制到从节点的本地事务文件中,包括:
基于异步复制模式读取事务日志;
将事务日志发送至从节点,并判定异步复制完成。
在一个实施例中,基于前述方案,上述装置还包括:
日志持久化单元,用于将事务日志发送至与主节点对应的从节点,以使得从节点读取事务日志的配置参数,并在配置参数满足持久化条件时对事务日志进行持久化存储。
在一个实施例中,基于前述方案,数据写入单元将各事务日志对应的易失性数据写入主节点的一级缓存中,包括:
确定主节点的一级缓存中的写入标识;其中,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据;
将各事务日志对应的易失性数据写入与写入标识对应的第一子区域;其中,一级缓存包括多个子区域,多个子区域中包括第一子区域。
在一个实施例中,基于前述方案,数据筛选规则用于限定易失性数据的筛选条件,数据回刷单元基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化,包括:
确定主节点的一级缓存中的回刷标识;
确定回刷标识对应的第二子区域;多个子区域中包括第二子区域;
基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域;
将目标子区域中的易失性数据上传至存储系统进行持久化。
在一个实施例中,基于前述方案,数据回刷单元基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域,包括:
确定一级缓存对应的区域写入顺序;其中,区域写入顺序用于标识多个子区域的写入顺序;
根据区域写入顺序确定第一子区域之前以及第二子区域之后的待回刷的目标子区域。
在一个实施例中,基于前述方案,上述装置还包括:
数据更新单元,用于在数据回刷单元将目标子区域中的易失性数据存储至存储系统之后,将目标子区域中的易失性数据标记为可覆盖;
解除第二子区域与回刷标识的对应关系,并构建回刷标识与第三子区域的对应关系;第三子区域是目标子区域中基于区域写入顺序的最后一个目标子区域。
在一个实施例中,基于前述方案,数据写入单元,还用于数据更新单元将目标子区域中的易失性数据更新为已持久化的易失性数据之后,当接收到新的易失性数据时,将第三子区域存储的已持久化的易失性数据写入二级缓存中;通过新的易失性数据覆盖第三子区域中的已持久化的易失性数据。
在一个实施例中,基于前述方案,上述装置还包括:
数据标识确定单元,用于当检测到数据查询操作时,确定数据查询操作对应的数据标识;
数据查询单元,用于确定各节点的全局缓存中是否存在与数据标识对应的目标数据;其中,各节点包括主节点和从节点,全局缓存包括相对应节点的一级缓存和二级缓存;如果各节点的全局缓存中不存在目标数据,则查询各节点的一级缓存中是否存在目标数据;
确定各节点的全局缓存中是否存在与数据标识对应的目标数据,包括:
查询各节点的二级缓存中是否存在目标数据;如果各节点的二级缓存中不存在目标数据,则向存储系统请求目标数据并接收存储系统反馈的目标数据。
在一个实施例中,基于前述方案,上述装置还包括:
数据备份单元,用于在主节点的全局缓存中存在待回刷数据且待回刷数据不存在于主节点的一级缓存中时,检测待回刷数据对应的日志编号;若日志编号大于主节点的二级缓存中的最大日志编号,则将待回刷数据写入主节点的二级缓存。
在一个实施例中,基于前述方案,数据备份单元将待回刷数据写入主节点的二级缓存,包括:
若主节点的二级缓存的剩余存储空间不足以进行数据存储,则释放主节点的二级缓存中最小日志编号对应的数据,并将待回刷数据写入主节点的二级缓存。
在一个实施例中,基于前述方案,上述装置还包括:
节点创建单元,用于创建节点文件并根据预设规则划分文件大小;其中,节点文件与目标从节点相对应,节点文件至少包括目标从节点的本地事务文件和缓存文件,目标从节点为新增的从节点;建立用于接收事务日志的第一线程和回放事务日志的第二线程;初始化目标从节点中的一级缓存和目标从节点中的二级缓存,并在主节点中注册目标从节点对应的节点信息。
在一个实施例中,基于前述方案,上述装置还包括:
缓存同步单元,用于在节点创建单元在主节点中注册目标从节点对应的节点信息之后,将目标从节点的二级缓存与主节点的二级缓存同步;或者,
将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中。
在一个实施例中,基于前述方案,上述装置还包括:
节点扩展单元,用于关闭主节点的存储服务,并修改主节点中的本地事务文件的文件大小;触发从节点关闭从节点的存储服务,以使得从节点修改从节点中的本地事务文件的文件大小;将主节点和从节点进行主从关系切换,新的主节点和新的从节点对应于相同的文件大小。
根据本申请实施例的第三方面,公开了一种电子设备,包括:处理器;以及存储器,存储器上存储有计算机可读指令,计算机可读指令被处理器执行时实现如第一方面公开的数据存储方法。
根据本申请实施例的第四方面,公开了一种计算机程序介质,其上存储有计算机可读指令,当计算机可读指令被计算机的处理器执行时,使计算机执行根据本申请第一方面公开的数据存储方法。
本申请实施例中,当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中;获取主节点的本地事务文件中各事务日志对应的易失性数据;将各事务日志对应的易失性数据写入主节点的一级缓存中;基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。相较现有技术,实施本申请的实施例,一方面可以利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。另一方面,实施本申请实施例,还能够利用本地部署的计算节点的缓存对数据进行暂时性存储,相应计算节点的缓存可以通过在本地增加或减少通用硬件(如SSD盘)的方式来扩充或缩减容量规模,而无需依赖公有云厂商提供的标准硬件和软件服务,从而降低了对于数据库部署环境的要求。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
通过参考附图阅读下文的详细描述,本申请示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本申请的若干实施方式,其中:
图1示出的是根据本申请一示例实施方式的数据存储方法的流程示意图;
图2示出的是根据本申请一示例实施方式的包含主节点和从节点的复制框架示意图;
图3示出的是根据本申请一示例实施方式的同步方式示意图;
图4示出的是根据本申请一示例实施方式的一级缓存(ExBuffer)的空间使用逻辑示意图;
图5示出的是根据本申请一可选实施方式的一级缓存(ExBuffer)的写入逻辑示意图;
图6示出的是根据本申请一示例实施方式的持久化数据的结构示意图;
图7示出的是根据本申请一可选示例实施方式的主从节点结构示意图;
图8示出的是根据本申请一可选示例实施方式的主节点结构示意图;
图9示出的是根据本申请一示例实施方式的本地SSD的结构示意图;
图10示出的是根据本申请一示例实施方式的数据存储方法的流程示意图;
图11示出的是根据本申请另一可选示例实施方式的数据存储装置的结构框图;
图12示出的是根据本申请另一可选示例实施方式的数据存储装置的结构框图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本申请的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本申请,而并非以任何方式限制本申请的范围。相反,提供这些实施方式是为了使本申请更加透彻和完整,并且能够将本申请的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本申请的实施方式可以实现为一种装置、设备、方法或计算机程序产品。因此,本申请可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本申请的实施方式,提出了一种数据存储方法、数据存储装置、电子设备以及计算机可读存储介质。
附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本申请的若干代表性实施方式,详细阐释本申请的原理和精神。
发明概述
现有的云原生数据库,主要是公有云厂商设计实现的,基本上均采用了RDMA、高性能存储等非通用硬件的加速方式,而且软件层的技术实现和协议栈优化也不是开源的。其中,新硬件的引入会提升成本;硬件对所应用的物理服务器也有硬性要求,导致云原生数据库的通用性较差;用于云原生数据库实现、硬件适配和性能加速的软件源码是不开源的,意味着用户被特定的公有云厂商所绑定;用户无法以相比云厂商PaaS服务更廉价的方式在云环境或自有服务器上部署使用云原生数据库。本发明旨在解决目前云原生数据库方案因引入硬件和软件层依赖导致不通用,即使开源也无法像MySQL一样大规模使用的问题。
针对当前云原生数据库产品存在的与公有云厂商绑定、依赖非通用硬件等问题,申请人提出一种基于通用硬件的云原生数据库实现方案,以解决现有云原生数据库存在的问题,具体可以表示为一种基于计算节点的本地硬盘的云原生数据库实现方案,可以基于现有的开源分布式文件系统为共享存储,使用SSD盘等高性能低延迟存储设备来存储MySQL的Redo文件(本地事务文件)、作为数据页写缓冲ExBuffer(一级缓存)和读缓存L2Cache(二级缓存);其中,硬盘的类型可以包括:机械硬盘(HDD)、固态硬盘(SSD)以及混合硬盘(SSHD)。
应用场景总览
需要注意的是,下述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
本申请可以应用于云原生数据库方案中,使用通用/开源的分布式文件系统作为共享存储,利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传至远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。此外,实施本申请实施例还能够利用本地部署的计算节点的缓存对数据进行暂时性存储,相应计算节点的缓存可以通过在本地增加或减少通用硬件(如SSD盘)的方式来扩充或缩减容量规模,而无需依赖公有云厂商提供的标准硬件和软件服务,从而降低了对于数据库部署环境的要求。
示例性方法
下面结合上述的应用场景,参考图1和图10来描述根据本申请示例性实施方式的数据存储方法。
请参阅图1,图1示出的是根据本申请一示例实施方式的数据存储方法的流程示意图,该数据存储方法可以由服务器或终端设备来实现。如图1所示,该数据存储方法,可以包括:
步骤S110:当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中。
步骤S120:获取主节点的本地事务文件中各事务日志对应的易失性数据。
步骤S130:将各事务日志对应的易失性数据写入主节点的一级缓存中。
步骤S140:基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。
优选地,步骤S110~步骤S140可以由主节点服务器执行。
实施图1所示的数据存储方法,可以利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。此外,实施本申请实施例还能够利用本地部署的计算节点的缓存对数据进行暂时性存储,相应计算节点的缓存可以通过在本地增加或减少通用硬件(如SSD盘)的方式来扩充或缩减容量规模,而无需依赖公有云厂商提供的标准硬件和软件服务,从而降低了对于数据库部署环境的要求。
下面对这些步骤进行详细描述。
在步骤S110中,当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中。
具体地,事务日志可以为Redo日志,Redo日志是关系型数据库系统(如,MySQL)用来实现事务数据持久性的一种方式,记录了事务所做的每次修改。另外,事务提交事件用于表示主节点在事务执行过程中存在需要提交的事务。
可选的,一方面,本申请的所有节点中,至少一个节点可以为本地节点/远端节点;另一方面,本申请中的主节点和所有从节点均为本地节点,各节点的全局缓存也为本地缓存。主节点和所有从节点的本地事务文件均存储本地硬件上,本地硬件可以为硬盘。其中,硬盘可以为位于计算节点(如,主节点、从节点)上,计算节点可以为物理机、云主机或容器。若计算节点为云主机或容器,则硬盘位于其宿主机上。硬盘可以用于存储Redo日志、作为一级缓存、作为二级缓存,即,从三个路径上解除对远端存储的依赖。
在一个实施例中,基于前述方案,将事务提交事件对应的事务日志写入主节点的本地事务文件中之后,上述方法还包括:将事务日志发送至与主节点对应的从节点,以使得从节点根据事务日志对应的事务级别从多种复制模式中确定目标复制模式;根据目标复制模式将事务日志复制到从节点的本地事务文件中。
具体地,主节点与从节点的节点结构相同且存储的内容也相同。多种复制模式包括同步复制模式、半同步复制模式和异步复制模式,目标复制模式为同步复制模式、半同步复制模式和异步复制模式中任一种。事务日志对应的事务级别可以为至少三种级别,每种复制模式对应至少一种事务级别。其中,事务级别越高,则优先级越高。优先级最高的一个或多个事务级别可以对应于同步复制模式,以保证优先级最高的事务日志同步复制到从节点中;优先级第二高的一个或多个事务级别可以对应于半同步复制模式,以保证优先级第二高的事务日志至少可以半同步至从节点中,同时保持一定程度的半同步效率;优先级最低的一个或多个事务级别可以对应于异步复制模式,以保证优先级最低的事务日志可以基于最快的速度实现复制。基于上述实施例,可以根据事务日志对应的事务级别确定其对应的复制模式,从而采用相应的复制模式进行复制。
可见,实施该可选的实施例,能够通过主节点和从节点的同步存储机制,使得主节点存储的数据同步/半同步/异步复制到从节点中,这样可以保证主节点和从节点中存储的数据的一致性,以避免单节点崩溃导致的无法调用数据的问题。
请参阅图2,图2示出的是根据本申请一示例实施方式的包含主节点和从节点的复制框架示意图。如图2所示,MySQL主节点可以包括MySQL服务器(mysqld)210、本地事务文件211、一级缓存(ExBuffer)213、二级缓存(L2Cache)212。MySQL从节点可以包括MySQL服务器(mysqld)220、本地事务文件221、一级缓存(ExBuffer)223、二级缓存(L2Cache)222。其中,本地事务文件211、一级缓存(ExBuffer)213、二级缓存(L2Cache)212可以位于MySQL主节点对应的本地SSD中;本地事务文件221、一级缓存(ExBuffer)223、二级缓存(L2Cache)222可以位于MySQL从节点对应的本地SSD中。另外,MySQL主节点对应的本地SSD与MySQL从节点对应的本地SSD可以为同一SSD也可以为不同SSD。
具体地,当MySQL服务器(mysqld)210产生事务日志时,可以将事务日志写入MySQL主节点中的一级缓存(ExBuffer)213和本地事务文件211,以使得本地事务文件211将事务日志同步至MySQL从节点中的本地事务文件221。进而,MySQL从节点中的MySQL服务器(mysqld)220可以基于一级缓存(ExBuffer)223回放事务日志。进而,MySQL主节点中的一级缓存(ExBuffer)213可以将写入的各事务日志对应的易失性数据持久化至分布式文件系统中的MySQL数据文件230,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据,MySQL数据文件230用于向MySQL主节点和MySQL从节点提供数据查询功能。进而,当接收到新的易失性数据时,MySQL主节点可以将一级缓存(ExBuffer)213中存储的已持久化的易失性数据写入二级缓存(L2Cache)212中,通过新的易失性数据覆盖一级缓存(ExBuffer)213已持久化的易失性数据;MySQL从节点可以将一级缓存(ExBuffer)223中存储的已持久化的易失性数据写入二级缓存(L2Cache)222中,通过新的易失性数据覆盖一级缓存(ExBuffer)223已持久化的易失性数据。
在一个实施例中,基于前述方案,若目标复制模式为同步复制模式,则根据目标复制模式将事务日志复制到从节点的本地事务文件中的步骤包括:基于同步复制模式读取事务日志并将事务日志发送至从节点,以使得从节点回放事务日志并将回放后的事务日志存储至从节点的本地事务文件中;当接收到由从节点发送的第一反馈结果时,判定同步复制完成;其中,第一反馈结果表征事务日志已由主节点完全同步至从节点。
可见,实施该可选的实施例,能够在从节点回放了事务日志并进行了结果反馈之后,再判定复制完成,这样可以保持事务日志在主从节点之间的强一致性,在主节点崩溃时,可以直接调用与主节点存储内容完全一致的从节点,从而保证数据调用的效率。
在一个实施例中,基于前述方案,若目标复制模式为半同步复制模式,则根据目标复制模式将事务日志复制到从节点的本地事务文件中的步骤包括:基于半同步复制模式读取事务日志并将事务日志发送至从节点;当接收到由从节点发送的第二反馈结果时,判定半同步复制完成;其中,第二反馈结果表征事务日志已由主节点半同步至从节点。
可见,实施该可选的实施例,能够提升事务日志的复制效率,从节点接收到事务日志之后,无需回放事务日志就可以向主节点反馈结果。从节点可以在向主节点反馈结果之后再进行事务日志回放,这样可以避免事务日志回放对于复制效率的影响。
在一个实施例中,基于前述方案,若目标复制模式为异步复制模式,则根据目标复制模式将事务日志复制到从节点的本地事务文件中的步骤包括:基于异步复制模式读取事务日志;将事务日志发送至从节点,并判定异步复制完成。
可见,实施该可选的实施例,能够在向从节点发送了事务日志之后就判定复制完成,从节点对于事务日志的回刷可以异步执行,从而进一步提升复制效率。
在一个实施例中,基于前述方案,将事务日志发送至与主节点对应的从节点,包括:将事务日志发送至与主节点对应的从节点,以使得从节点读取事务日志的配置参数,并在配置参数满足持久化条件时对事务日志进行持久化存储。
具体地,事务日志的配置参数可以用于指示是否对该日志对应的易失性数据进行持久化,和/或,何时对该日志对应的易失性数据进行持久化,本申请对于配置参数的具体内容不作限定。
可见,实施该可选的实施例,能够在基于共享存储的云原生数据库方案中引入计算节点的本地高性能存储,将Redo文件(即,存储事务日志的文件)上移到本地节点,从而解除事务提交路径上对远端共享存储的依赖,以优化存储性能。
请参阅图3,图3示出的是根据本申请一示例实施方式的同步方式示意图。如图3所示,MySQL主节点可以在存在事务提交311时,将事务日志复制到全局缓存312中,进而,全局缓存312可以将事务日志写入本地事务文件313。MySQL主节点中的Redo转储线程315可以将全局缓存312中的事务日志发送至的MySQL从节点的Redo IO线程322,以使得Redo IO线程322将事务日志半同步至ACK(Acknowledge character)发送线程321,ACK发送线程321可以为一种字符发送线程,ACK发送线程321与发送缓存316之间可以实现数据交换以及日志复制等操作,发送缓存316用于提供响应于数据请求的发送缓存数据的功能。进而,Redo IO线程322接收事务日志后还可以将其写入MySQL从节点的全局缓存323,以使得全局缓存323将事务日志发送至Redo回放协调线程324,以使得Redo回放协调线程324进行日志回放,回放后将第一反馈结果同步至ACK发送线程321,以使得ACK发送线程321将第一反馈结果发送至ACK接收线程314。ACK接收线程314可以响应于事务提交311,以表示事务已完成提交。此外,Redo回放协调线程324还可以从MySQL从节点的本地事务文件325中获取日志,以进行Redo解析和应用。
在步骤S120中,获取主节点的本地事务文件中各事务日志对应的易失性数据。
在步骤S130中,将各事务日志对应的易失性数据写入主节点的一级缓存中。
具体地,一级缓存可以为计算节点(如,主节点或从节点)内的写缓冲(ExBuffer),由一个到多个文件组成,可以基于文件粒度进行在线伸缩,即,在线扩展节点内的文件数量;二级缓存可以为计算节点(如,主节点或从节点)内的读缓存(L2Cache),也由一个到多个文件组成,也可以基于文件粒度进行在线伸缩,即,在线扩展节点内的文件数量。一般来说,以分布式文件系统作为数据库的共享存储时,IO延时较高,容易导致脏数据页回刷不够及时,影响写事务的性能。本申请可以通过使用一级缓存(ExBuffer)扩展写缓冲,脏数据页可以先回刷到本地SSD的一级缓存(ExBuffer)上,再根据步骤S140中的数据筛选规则异步写入远端共享存储中,这样可以在路径上解除对远端共享存储的依赖;其中,数据筛选规则可以确保一级缓存(ExBuffer)中有可覆盖的子区域。
在一个实施例中,基于前述方案,将各事务日志对应的易失性数据写入主节点的一级缓存中,包括:确定主节点的一级缓存中的写入标识;其中,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据;将各事务日志对应的易失性数据写入与写入标识对应的第一子区域;其中,一级缓存包括多个子区域,多个子区域中包括第一子区域。
具体地,一级缓存中的多个子区域占分配得到的存储空间可以相同(如,16k)也可以不同,本申请实施例不作限定。
可见,实施该可选的实施例,能够在计算节点本地高性能存储上引入一级缓存(ExBuffer),解除数据状态点checkpoint路径上对远端共享存储的依赖。并且,可以实现数据库中数据页的原子写,即可以在一级缓存(ExBuffer)写成功之后再持久化,完整的保留下数据页的每个版本,从而避免新版本的数据页把旧版本的数据页覆盖掉,保证事务的原子性和永久性以及数据库状态的一致性,可以用于存储系统的恢复。
请参阅图4,图4示出的是根据本申请一示例实施方式的一级缓存(ExBuffer)的空间使用逻辑示意图。如图4所示,一级缓存(ExBuffer)413和一级缓存(ExBuffer)423可以用于存储基础数据和新增数据,新增数据可以为未持久化的易失性数据,基础数据可以为已持久化的易失性数据;其中,一级缓存(ExBuffer)413和一级缓存(ExBuffer)423通过循环队列的方式进行管理。具体地,当MySQL服务器(mysqld)411产生事务日志时,可以将事务日志写入MySQL主节点中的一级缓存(ExBuffer)413和本地事务文件412,以使得本地事务文件412将事务日志同步至MySQL从节点中的本地事务文件422。进而,MySQL从节点中的MySQL服务器(mysqld)421可以基于一级缓存(ExBuffer)423回放事务日志。进而MySQL主节点中的一级缓存(ExBuffer)413可以将写入的各事务日志对应的易失性数据持久化至分布式文件系统中的MySQL数据文件431,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据,MySQL数据文件431用于向本地主从节点提供数据查询功能。
在步骤S140中,基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。
具体地,将一级缓存中的易失性数据上传至存储系统进行持久化,包括:依据日志编号将一级缓存中的易失性数据上传至存储系统进行持久化。其中,日志编号可以为日志序列号(log sequence number,LSN),Redo日志一般通过LSN进行标识,LSN单调增大。每个易失性数据有相对应的LSN,LSN表示事务最后一次对该数据页所做修改时对应的Redo日志,该Redo日志中的数据为易失性数据。因此,LSN可以用于判定数据页的新旧程度。当最小日志编号LSN之前的Redo日志对应的易失性数据都已经刷到存储上,那么该最小日志编号LSN之前的Redo日志所占空间即可被回收,同时意味着数据状态点checkpoint已经推进到了最小日志编号LSN。其中,数据状态点checkpoint用于指示回刷进度,依据数据状态点checkpoint可以将事务产生的脏数据(即,易失性数据)依次从数据库进程中回刷到存储系统上。
在一个实施例中,基于前述方案,数据筛选规则用于限定易失性数据的筛选条件,基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化,包括:确定主节点的一级缓存中的回刷标识;确定回刷标识对应的第二子区域;多个子区域中包括第二子区域;基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域;将目标子区域中的易失性数据上传至存储系统进行持久化。
具体地,将目标子区域中的易失性数据上传至存储系统进行持久化,包括:调用后台线程(writeback_thread)周期性地将目标子区域中的易失性数据上传至存储系统进行持久化,这样可以避免脏数据页损坏,并约束从节点中一级缓存(ExBuffer)的脏数据页的清理周期,以及规范主节点推进共享存储层中数据状态点checkpoint的节奏。
可见,实施该可选的实施例,能够通过约束云原生数据库主从节点的一级缓存(ExBuffer)的数据回刷行为(即,写共享存储、写二级缓存L2Cache),保障数据的高可用性和实例的高性能。
请参阅图5,图5示出的是根据本申请一可选实施方式的一级缓存(ExBuffer)的写入逻辑示意图。如图5所示,一级缓存(ExBuffer)中可以包含11个子区域,以由左到右(也可以为由右到左)的顺序作为区域写入顺序,11个子区域依次存储了如下数据页:已持久化的数据页P1、已持久化的数据页P2、已持久化的数据页P4、已持久化的数据页P5、未持久化的数据页P6、未持久化的数据页P2、未持久化的数据页P1、未持久化的数据页P4、未持久化的数据页P7、未持久化的数据页P2、已持久化的数据页P4、已持久化的数据页P5。其中,重复的数据页对应于不同的版本,例如,第2个子区域存储的是v1版本的数据页P2,第6个子区域存储的是v2版本的数据页P2。其中,11个子区域中存储的数据页可以为上述的易失性数据。
具体地,一级缓存中的回刷标识对应的第二子区域可以为一级缓存中的第4个子区域,一级缓存中的写入标识对应的第一子区域可以为一级缓存中的第10个子区域。可以将第4个子区域之后以及第10个子区域之前的子区域确定为待回刷的目标子区域,并将目标子区域中的易失性数据上传至存储系统进行持久化。
在一个实施例中,基于前述方案,基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域,包括:确定一级缓存对应的区域写入顺序;其中,区域写入顺序(如,由右到左或由左到右)用于标识多个子区域的写入顺序;根据区域写入顺序确定第一子区域之前以及第二子区域之后的待回刷的目标子区域。
具体地,区域写入顺序可以为预设顺序,待回刷的目标子区域不包括第一子区域和第二子区域,目标子区域的数量可以为一个或多个,本申请的实施例不作限定。
可见,实施该可选的实施例,能够根据回刷标识、写入标识和区域写入顺序确定出待回刷的目标子区域,从而可以精准定位到需要回刷的数据。
在一个实施例中,基于前述方案,将目标子区域中的易失性数据存储至存储系统之后,上述方法还包括:将目标子区域中的易失性数据标记为可覆盖;解除第二子区域与回刷标识的对应关系,并构建回刷标识与第三子区域的对应关系;第三子区域是目标子区域中基于区域写入顺序的最后一个目标子区域。
具体地,将目标子区域中的易失性数据存储至存储系统之后,上述方法还可以包括:更新写入标识与回刷标识与子区域的对应关系。
可见,实施该可选的实施例,能够通过对于易失性数据的标记确定出可以覆盖的子区域,从而实现对于一级缓存中子区域的复用,提升复用效率。
在一个实施例中,基于前述方案,将目标子区域中的易失性数据更新为已持久化的易失性数据之后,上述方法还包括:当接收到新的易失性数据时,将第三子区域存储的已持久化的易失性数据写入二级缓存中;通过新的易失性数据覆盖第三子区域中的已持久化的易失性数据。
具体地,将第三子区域存储的已持久化的易失性数据写入二级缓存中,包括:调用后台线程(cachefill_thread)将第三子区域存储的已持久化的易失性数据写入二级缓存中。
可见,实施该可选的实施例,能够通过对于可覆盖子区域的复用,提升对于易失性数据的存储效率。
请参阅图6,图6示出的是根据本申请一示例实施方式的持久化数据的结构示意图。如图6所示,数据模块610中包括数据页P1和P2,P1中存储的数据为22,P2中存储的数据为50。对数据模块610中的数据页P1和P2进行一种修改之后可以得到包含数据页P1和P2的数据模块620,数据模块620中,P1中存储的数据为22,P2中存储的数据为31。对数据模块610中的数据页P1和P2进行另一种修改之后可以得到包含数据页P1、P2和P3的数据模块630,数据模块630中,P1中存储的数据为50,P2中存储的数据为56,P1中存储的数据为70。
数据模块620中的P1对应的数据子模块640包括数据22、30、R、H、2、3、P。数据子模块640中的P指向数据模块620中的P2对应的数据子模块650,数据子模块650包括数据31、33、G、K、1、2、P。数据子模块650中的P指向数据模块630中的P1对应的数据子模块660,数据子模块660包括数据50、55、F、B、2、1、P。数据子模块660中的P指向数据模块630中的P2对应的数据子模块670,数据子模块670包括数据56、57、A、M、2、1、P。数据子模块670中的P指向数据模块630中的P3对应的数据子模块680,数据子模块680包括数据78、77、J、Y、1、1、P。
举例来说,当一个事务删除了数据子模块680中的数据,则切断指向数据模块630的箭头(即,指针),并回收数据子模块680中的数据。
在一个实施例中,基于前述方案,上述方法还包括:当检测到数据查询操作时,确定数据查询操作对应的数据标识;确定各节点的全局缓存中是否存在与数据标识对应的目标数据;其中,各节点包括主节点和从节点,全局缓存包括相对应节点的一级缓存和二级缓存;
确定各节点的全局缓存中是否存在与数据标识对应的目标数据,包括:查询各节点的一级缓存中是否存在目标数据;如果各节点的一级缓存中不存在目标数据,则查询各节点的二级缓存中是否存在目标数据;如果各节点的二级缓存中不存在目标数据,则向存储系统请求目标数据并接收存储系统反馈的目标数据。
具体地,数据标识可以通过字符串进行表示,目标数据可以为未持久化的易失性数据也可以为已持久化的易失性数据。一级缓存(ExBuffer)用于存储新数据,二级缓存(L2Cache)用于存储热门数据,存储系统用于存储冷数据和旧数据。其中,二级缓存(L2Cache)的大小依据数据库实例的热点数据集确定得到,按需配置二级缓存(L2Cache)的缓存空间。在没有数据热点的情况,L2Cache的大小等于远端共享存储的数据目录大小。
可见,实施该可选的实施例,能够设置具备优先级的多级查询,提升查询效率。
请参阅图7,图7示出的是根据本申请一可选示例实施方式的主从节点结构示意图。如图7所示,当检测到作用于MySQL服务器(mysqld)711的数据查询操作时,可以确定数据查询操作对应的数据标识,并确定各节点的全局缓存中是否存在与数据标识对应的目标数据。进而查询MySQL主节点的一级缓存(ExBuffer)713中是否存在目标数据;如果MySQL主节点的一级缓存(ExBuffer)713中不存在目标数据,则查询MySQL主节点的二级缓存(L2Cache)712中是否存在目标数据;如果MySQL主节点的二级缓存(L2Cache)712中不存在目标数据,则向分布式文件系统(即,存储系统)的MySQL数据文件731请求目标数据并接收分布式文件系统反馈的目标数据。
当检测到作用于MySQL服务器(mysqld)721的数据查询操作时,可以确定数据查询操作对应的数据标识,并确定各节点的全局缓存中是否存在与数据标识对应的目标数据。进而查询MySQL从节点的一级缓存(ExBuffer)723中是否存在目标数据;如果MySQL从节点的一级缓存(ExBuffer)723中不存在目标数据,则查询MySQL从节点的二级缓存(L2Cache)722中是否存在目标数据;如果MySQL从节点的二级缓存(L2Cache)722中不存在目标数据,则向分布式文件系统(即,存储系统)的MySQL数据文件731请求目标数据并接收分布式文件系统反馈的目标数据。
其中,MySQL主节点的一级缓存(ExBuffer)713和MySQL从节点的一级缓存(ExBuffer)723用于存储新数据,MySQL主节点的二级缓存(L2Cache)712和MySQL从节点的二级缓存(L2Cache)722用于存储热门数据。分布式文件系统(即,存储系统)的MySQL数据文件731用于存储冷数据和旧数据。
在一个实施例中,基于前述方案,上述方法还包括:若主节点的全局缓存中存在待回刷数据且待回刷数据不存在于主节点的一级缓存中,则检测待回刷数据对应的日志编号;若日志编号大于主节点的二级缓存中的最大日志编号,则将待回刷数据写入主节点的二级缓存。
具体地,若主节点的全局缓存中存在待回刷数据且待回刷数据存在于主节点的一级缓存中,上述方法还可以包括:检测到主节点的一级缓存中的待回刷数据持久化之后,将该待回刷数据写入主节点的二级缓存,以提升本地数据查询的效率,无需从远端共享存储中读取数据。
另外,若日志编号小于主节点的二级缓存中的最大日志编号,上述方法还可以包括:判定待回刷数据已写入主节点的二级缓存。
可见,实施该可选的实施例,能够基于日志编号将待回刷数据写入二级缓存,从而实现对于二级缓存的有效利用,避免重复写入。
在一个实施例中,基于前述方案,将待回刷数据写入主节点的二级缓存,包括:若主节点的二级缓存的剩余存储空间不足以进行数据存储,则释放主节点的二级缓存中最小日志编号对应的数据,并将待回刷数据写入主节点的二级缓存。
具体地,释放主节点的二级缓存中最小日志编号对应的数据,包括:释放主节点的二级缓存中N个最小日志编号对应的数据,N为正整数。
可见,实施该可选的实施例,能够可以及时释放全局缓存有限的内存空间,以保证缓存效率,以使得在数据库系统出现故障时,减少故障恢复时间,提升故障恢复效率。
请参阅图8,图8示出的是根据本申请一可选示例实施方式的主节点结构示意图。如图8所示,MySQL主节点可以包括MySQL服务器(mysqld)811、二级缓存(L2Cache)812、一级缓存(ExBuffer)813。当检测到作用于MySQL服务器(mysqld)811的数据查询操作时,可以确定数据查询操作对应的数据标识,并确定各节点的全局缓存中是否存在与数据标识对应的目标数据。进而查询MySQL主节点的一级缓存(ExBuffer)813中是否存在目标数据;如果MySQL主节点的一级缓存(ExBuffer)813中不存在目标数据,则查询MySQL主节点的二级缓存(L2Cache)812中是否存在目标数据;如果MySQL主节点的二级缓存(L2Cache)812中不存在目标数据,则向分布式文件系统(即,存储系统)的MySQL数据文件821请求目标数据并接收分布式文件系统反馈的目标数据。
在一个实施例中,基于前述方案,上述方法还包括:创建节点文件并根据预设规则划分文件大小;其中,节点文件与目标从节点相对应,节点文件至少包括目标从节点的本地事务文件和缓存文件,目标从节点为新增的从节点;建立用于接收事务日志的第一线程和回放事务日志的第二线程;初始化目标从节点中的一级缓存和目标从节点中的二级缓存,并在主节点中注册目标从节点对应的节点信息。
具体地,预设规则用于限定分配给不同节点内的各文件的存储空间大小。目标从节点的数量可以为一个或多个,即,对于新增的从节点的数量,本申请实施例不作限定。目标从节点的本地事务文件用于存储事务日志,目标从节点的缓存文件包括一级缓存文件、二级缓存文件。第一线程和第二线程,两者可以为并行线程也可以为串行线程。
其中,初始化目标从节点中的一级缓存和目标从节点中的二级缓存之后,还可以包括:创建一级缓存和二级缓存对应的后台线程。
其中,在主节点中注册目标从节点对应的节点信息,包括:在主节点的从节点列表中记录目标从节点对应的节点信息,其中,目标从节点对应的节点信息包括目标从节点对应的标识,该标识用于在收发数据时标记数据与目标从节点的关系。
可见,实施该可选的实施例,能够解决传统MySQL数据库实例无法灵活进行在线伸缩的问题,可以根据需求增加节点文件的数量,提升存储系统在线伸缩的灵活性。
在一个实施例中,基于前述方案,在主节点中注册目标从节点对应的节点信息之后,上述方法还包括:将目标从节点的二级缓存与主节点的二级缓存同步;或者,将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中。
具体地,将目标从节点的二级缓存与主节点的二级缓存同步之后,或者,将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中之后,上述方法还包括:将从节点的二级缓存中除热点数据之外的其他数据同步至目标从节点的二级缓存中。
可见,实施该可选的实施例,能够实现缓存预热,对新增的目标从节点同步热点数据,提升新增的从节点的可用性。
在一个实施例中,基于前述方案,上述方法还包括:关闭主节点的存储服务,并修改主节点中的本地事务文件的文件大小;触发从节点关闭从节点的存储服务,以使得从节点修改从节点中的本地事务文件的文件大小;将主节点和从节点进行主从关系切换,新的主节点和新的从节点对应于相同的文件大小。
具体地,修改主节点中的本地事务文件的文件大小,包括:在主节点的本地事务文件中增加新事务文件,并根据新的事务文件的数量以及各个新事务文件的大小修改主节点中的本地事务文件的文件大小,从而实现主节点的文件扩容/缩容。从节点修改从节点中的本地事务文件的文件大小,包括:在从节点的本地事务文件中增加新事务文件,并根据新的事务文件的数量以及各个新事务文件的大小修改从节点中的本地事务文件的文件大小,从而实现从节点的文件扩容/缩容。其中,主节点和从节点的扩容/缩容以文件个数为单位。
可选的,修改主节点中的本地事务文件的文件大小,包括:通过MySQL客户端修改一个或多个SSD中的用于存储事务日志的文件组名称的参数并添加新事务文件。
可见,实施该可选的实施例,可以通过本地的主从节点切换,实现对于主从节点的文件扩展,无需在远程共享存储中生成新的节点文件,再从远程共享存储中下载节点文件,可以提升节点文件扩展效率。
请参阅图9,图9示出的是根据本申请一示例实施方式的本地SSD的结构示意图。如图9所示,本地SSD可以包括一个或多个SSD,如,第一本地SSD910和第二本地SSD920。其中,第一本地SSD910中可以包括本地事务文件组911、一级缓存文件组912和二级缓存文件组913,第二本地SSD920中可以包括一级缓存文件组921和二级缓存文件组922。可选的,第二本地SSD920中也可以包括本地事务文件组。
具体地,事务文件组911、一级缓存文件组912和二级缓存文件组913可以用于分别存储多个用于存储事务日志的文件,示例性地,可以根据本申请中存储系统的文件在线伸缩特性在二级缓存文件组913中新增多个新增文件。可选的,也可以在事务文件组911、一级缓存文件组912中新增多个新增文件。其中,事务文件组911中可以包括主从节点的本地事务文件分别对应的多个文件,一级缓存文件组912中可以包括主从节点的一级缓存分别对应的多个文件,二级缓存文件组913中可以包括主从节点的二级缓存分别对应的多个文件。
具体地,一级缓存文件组921和二级缓存文件组922可以用于分别存储多个用于存储事务日志的文件,示例性地,可以根据本申请中存储系统的文件在线伸缩特性在二级缓存文件组922中新增多个新增文件。可选的,也可以在一级缓存文件组921中新增多个新增文件。其中,一级缓存文件组921中可以包括主从节点的一级缓存分别对应的多个文件,二级缓存文件组922中可以包括主从节点的二级缓存分别对应的多个文件。
请参阅图10,图10示出的是根据本申请一示例实施方式的数据存储方法的流程示意图。如图10所示,该数据存储方法包括:步骤S1000~步骤S1024。
步骤S1000:当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中,进而将事务日志发送至与主节点对应的从节点,以使得从节点根据事务日志对应的事务级别从多种复制模式中确定目标复制模式。若目标复制模式为同步复制模式,则执行步骤S1002。若目标复制模式为半同步复制模式,则执行步骤S1004。若目标复制模式为异步复制模式,则执行步骤S1006。
步骤S1002:基于同步复制模式读取事务日志并将事务日志发送至从节点,以使得从节点回放事务日志并将回放后的事务日志存储至从节点的本地事务文件中;当接收到由从节点发送的第一反馈结果时,判定同步复制完成;其中,第一反馈结果表征事务日志已由主节点完全同步至从节点。
步骤S1004:基于半同步复制模式读取事务日志并将事务日志发送至从节点;当接收到由从节点发送的第二反馈结果时,判定半同步复制完成;其中,第二反馈结果表征事务日志已由主节点半同步至从节点。
步骤S1006:基于异步复制模式读取事务日志;将事务日志发送至从节点,并判定异步复制完成。
步骤S1008:获取主节点的本地事务文件中各事务日志对应的易失性数据,并确定主节点的一级缓存中的写入标识,其中,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据;将各事务日志对应的易失性数据写入与写入标识对应的第一子区域;其中,一级缓存包括多个子区域,多个子区域中包括第一子区域。
步骤S1010:确定主节点的一级缓存中的回刷标识,并确定回刷标识对应的第二子区域,多个子区域中包括第二子区域,进而确定一级缓存对应的区域写入顺序,其中,区域写入顺序用于标识多个子区域的写入顺序,进而根据区域写入顺序确定第一子区域之前以及第二子区域之后的待回刷的目标子区域。
步骤S1012:将目标子区域中的易失性数据上传至存储系统进行持久化,将目标子区域中的易失性数据标记为可覆盖,解除第二子区域与回刷标识的对应关系,并构建回刷标识与第三子区域的对应关系,其中,第三子区域是目标子区域中基于区域写入顺序的最后一个目标子区域。
步骤S1014:当接收到新的易失性数据时,将第三子区域存储的已持久化的易失性数据写入二级缓存中,进而通过新的易失性数据覆盖第三子区域中的已持久化的易失性数据。
步骤S1016:当检测到数据查询操作时,确定数据查询操作对应的数据标识,并确定各节点的全局缓存中是否存在与数据标识对应的目标数据;查询各节点的一级缓存中是否存在目标数据;如果各节点的一级缓存中不存在目标数据,则查询各节点的二级缓存中是否存在目标数据;如果各节点的二级缓存中不存在目标数据,则向存储系统请求目标数据并接收存储系统反馈的目标数据。
步骤S1018:若主节点的全局缓存中存在待回刷数据且待回刷数据不存在于主节点的一级缓存中,则检测待回刷数据对应的日志编号;若日志编号大于主节点的二级缓存中的最大日志编号,且主节点的二级缓存的剩余存储空间不足以进行数据存储,则释放主节点的二级缓存中最小日志编号对应的数据,并将待回刷数据写入主节点的二级缓存。
步骤S1020:创建节点文件并根据预设规则划分文件大小;其中,节点文件与目标从节点相对应,节点文件至少包括目标从节点的本地事务文件和缓存文件,目标从节点为新增的从节点,并建立用于接收事务日志的第一线程和回放事务日志的第二线程,初始化目标从节点中的一级缓存和目标从节点中的二级缓存,并在主节点中注册目标从节点对应的节点信息。
步骤S1022:将目标从节点的二级缓存与主节点的二级缓存同步;或者,将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中。
步骤S1024:关闭主节点的存储服务,并修改主节点中的本地事务文件的文件大小;触发从节点关闭从节点的存储服务,以使得从节点修改从节点中的本地事务文件的文件大小,进而将主节点和从节点进行主从关系切换,新的主节点和新的从节点对应于相同的文件大小。
需要说明的是,步骤S1000~步骤S1024与图1所示的各步骤及其实施例相对应,针对步骤S1000~步骤S1024的具体实施方式,请参阅图1所示的各步骤及其实施例,此处不再赘述。
可见,实施图10所示的方法,可以利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。此外,实施本申请实施例还能够利用本地部署的计算节点的缓存对数据进行暂时性存储,相应计算节点的缓存可以通过在本地增加或减少通用硬件(如SSD盘)的方式来扩充或缩减容量规模,而无需依赖公有云厂商提供的标准硬件和软件服务,从而降低了对于数据库部署环境的要求。
此外,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
示例性介质
在介绍了本申请示例性实施方式的方法之后,接下来,对本申请示例性实施方式的介质进行说明。
在一些可能的实施方式中,本申请的各个方面还可以实现为一种介质,其上存储有程序代码,当程序代码被设备的处理器执行时用于实现本说明书上述“示例性方法”部分中描述的根据本申请各种示例性实施方式的数据存储方法中的步骤。
具体地,所述设备的处理器执行所述程序代码时用于实现如下步骤:当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中;获取主节点的本地事务文件中各事务日志对应的易失性数据;将各事务日志对应的易失性数据写入主节点的一级缓存中;基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:将事务日志发送至与主节点对应的从节点,以使得从节点根据事务日志对应的事务级别从多种复制模式中确定目标复制模式;根据目标复制模式将事务日志复制到从节点的本地事务文件中。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:基于同步复制模式读取事务日志并将事务日志发送至从节点,以使得从节点回放事务日志并将回放后的事务日志存储至从节点的本地事务文件中;当接收到由从节点发送的第一反馈结果时,判定同步复制完成;其中,第一反馈结果表征事务日志已由主节点完全同步至从节点。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:基于半同步复制模式读取事务日志并将事务日志发送至从节点;当接收到由从节点发送的第二反馈结果时,判定半同步复制完成;其中,第二反馈结果表征事务日志已由主节点半同步至从节点。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:基于异步复制模式读取事务日志;将事务日志发送至从节点,并判定异步复制完成。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:将事务日志发送至与主节点对应的从节点,以使得从节点读取事务日志的配置参数,并在配置参数满足持久化条件时对事务日志进行持久化存储。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:确定主节点的一级缓存中的写入标识;其中,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据;将各事务日志对应的易失性数据写入与写入标识对应的第一子区域;其中,一级缓存包括多个子区域,多个子区域中包括第一子区域。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:确定主节点的一级缓存中的回刷标识;确定回刷标识对应的第二子区域;多个子区域中包括第二子区域;基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域;将目标子区域中的易失性数据上传至存储系统进行持久化。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:确定一级缓存对应的区域写入顺序;其中,区域写入顺序用于标识多个子区域的写入顺序;根据区域写入顺序确定第一子区域之前以及第二子区域之后的待回刷的目标子区域。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:将目标子区域中的易失性数据标记为可覆盖;解除第二子区域与回刷标识的对应关系,并构建回刷标识与第三子区域的对应关系;第三子区域是目标子区域中基于区域写入顺序的最后一个目标子区域。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:当接收到新的易失性数据时,将第三子区域存储的已持久化的易失性数据写入二级缓存中;通过新的易失性数据覆盖第三子区域中的已持久化的易失性数据。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:当检测到数据查询操作时,确定数据查询操作对应的数据标识;确定各节点的全局缓存中是否存在与数据标识对应的目标数据;其中,各节点包括主节点和从节点,全局缓存包括相对应节点的一级缓存和二级缓存;
确定各节点的全局缓存中是否存在与数据标识对应的目标数据,包括:
查询各节点的一级缓存中是否存在目标数据;如果各节点的一级缓存中不存在目标数据,则查询各节点的二级缓存中是否存在目标数据;如果各节点的二级缓存中不存在目标数据,则向存储系统请求目标数据并接收存储系统反馈的目标数据。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:若主节点的全局缓存中存在待回刷数据且待回刷数据不存在于主节点的一级缓存中,则检测待回刷数据对应的日志编号;若日志编号大于主节点的二级缓存中的最大日志编号,则将待回刷数据写入主节点的二级缓存。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:若主节点的二级缓存的剩余存储空间不足以进行数据存储,则释放主节点的二级缓存中最小日志编号对应的数据,并将待回刷数据写入主节点的二级缓存。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:创建节点文件并根据预设规则划分文件大小;其中,节点文件与目标从节点相对应,节点文件至少包括目标从节点的本地事务文件和缓存文件,目标从节点为新增的从节点;建立用于接收事务日志的第一线程和回放事务日志的第二线程;初始化目标从节点中的一级缓存和目标从节点中的二级缓存,并在主节点中注册目标从节点对应的节点信息。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:将目标从节点的二级缓存与主节点的二级缓存同步;或者,将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中。
在本申请的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:关闭主节点的存储服务,并修改主节点中的本地事务文件的文件大小;触发从节点关闭从节点的存储服务,以使得从节点修改从节点中的本地事务文件的文件大小;将主节点和从节点进行主从关系切换,新的主节点和新的从节点对应于相同的文件大小。
需要说明的是:上述的介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、RF等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
示例性装置
在介绍了本申请示例性实施方式的介质之后,接下来,参考图11对本申请示例性实施方式的数据存储装置进行说明。
请参阅图11,图11示出的是根据本申请一示例实施方式的数据存储装置的结构框图。如图11所示,本申请一示例实施方式的数据存储装置1100包括:日志写入单元1101、数据获取单元1102、数据写入单元1103和数据回刷单元1104,其中:
日志写入单元1101,用于当检测到事务提交事件时,将事务提交事件对应的事务日志写入主节点的本地事务文件中;
数据获取单元1102,用于获取主节点的本地事务文件中各事务日志对应的易失性数据;
数据写入单元1103,用于将各事务日志对应的易失性数据写入主节点的一级缓存中;
数据回刷单元1104,用于基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化。
可见,实施图11所示的装置,可以利用高性能低延迟的本地硬件先将日志数据暂时存储至缓存中,再将缓存中存储的日志数据持久化至存储系统中,避免产生的日志数据需要立即上传远端的存储系统,这样可以解除关系型数据库系统对远端的存储系统的强依赖。此外,实施本申请实施例还能够利用本地部署的计算节点的缓存对数据进行暂时性存储,相应计算节点的缓存可以通过在本地增加或减少通用硬件(如SSD盘)的方式来扩充或缩减容量规模,而无需依赖公有云厂商提供的标准硬件和软件服务,从而降低了对于数据库部署环境的要求。
在一个实施例中,基于前述方案,上述装置还包括:
日志发送单元(未图示),用于将事务日志发送至与主节点对应的从节点,以使得从节点根据事务日志对应的事务级别从多种复制模式中确定目标复制模式;
日志复制单元(未图示),用于根据目标复制模式将事务日志复制到从节点的本地事务文件中。
其中,多种复制模式包括同步复制模式、半同步复制模式和异步复制模式。
可见,实施该可选的实施例,能够通过主节点和从节点的同步存储机制,使得主节点存储的数据同步/半同步/异步复制到从节点中,这样可以保证主节点和从节点中存储的数据在一定程度上保持一致性,以避免单节点崩溃导致的无法调用数据的问题。
在一个实施例中,基于前述方案,若目标复制模式为同步复制模式,日志复制单元根据目标复制模式将事务日志复制到从节点的本地事务文件中,包括:
基于同步复制模式读取事务日志并将事务日志发送至从节点,以使得从节点回放事务日志并将回放后的事务日志存储至从节点的本地事务文件中;
当接收到由从节点发送的第一反馈结果时,判定同步复制完成;其中,第一反馈结果表征事务日志已由主节点完全同步至从节点。
可见,实施该可选的实施例,能够在从节点回放了事务日志并进行了结果反馈之后,再判定复制完成,这样可以保持事务日志在主从节点之间的强一致性,在主节点崩溃时,可以直接调用与主节点存储内容完全一致的从节点,从而保证数据调用的效率。
在一个实施例中,基于前述方案,若目标复制模式为半同步复制模式,日志复制单元根据目标复制模式将事务日志复制到从节点的本地事务文件中,包括:
基于半同步复制模式读取事务日志并将事务日志发送至从节点;
当接收到由从节点发送的第二反馈结果时,判定半同步复制完成;其中,第二反馈结果表征事务日志已由主节点半同步至从节点。
可见,实施该可选的实施例,能够提升事务日志的复制效率,从节点接收到事务日志之后,无需回放事务日志就可以向主节点反馈结果。从节点可以在向主节点反馈结果之后再进行事务日志回放,这样可以避免事务日志回放对于复制效率的影响。
在一个实施例中,基于前述方案,若目标复制模式为异步复制模式,日志复制单元根据目标复制模式将事务日志复制到从节点的本地事务文件中,包括:
基于异步复制模式读取事务日志;
将事务日志发送至从节点,并判定异步复制完成。
可见,实施该可选的实施例,能够在向从节点发送了事务日志之后就判定复制完成,从节点对于事务日志的回刷可以异步执行,从而进一步提升复制效率。
在一个实施例中,基于前述方案,上述装置还包括:
日志持久化单元(未图示),用于将事务日志发送至与主节点对应的从节点,以使得从节点读取事务日志的配置参数,并在配置参数满足持久化条件时对事务日志进行持久化存储。
可见,实施该可选的实施例,能够在基于共享存储的云原生数据库方案中引入计算节点的本地高性能存储,将Redo文件(即,存储事务日志的文件)上移到本地节点,从而解除事务提交路径上对远端共享存储的依赖,以优化存储性能。
在一个实施例中,基于前述方案,数据写入单元1103将各事务日志对应的易失性数据写入主节点的一级缓存中,包括:
确定主节点的一级缓存中的写入标识;其中,各事务日志对应的易失性数据包括从节点已根据事务日志回放的数据;
将各事务日志对应的易失性数据写入与写入标识对应的第一子区域;其中,一级缓存包括多个子区域,多个子区域中包括第一子区域。
可见,实施该可选的实施例,能够在计算节点本地高性能存储上引入一级缓存ExBuffer,解除数据状态点checkpoint路径上对远端共享存储的依赖。并且,可以实现数据库中数据页的原子写,可以在ExBuffer写成功之后再持久化,完整的保留下数据页的每个版本,避免新版本的数据页把旧版本的数据页覆盖掉,保证事务的原子性和永久性以及数据库状态的一致性,可以用于存储系统的恢复。
在一个实施例中,基于前述方案,数据筛选规则用于限定易失性数据的筛选条件,数据回刷单元1104基于数据筛选规则将一级缓存中的易失性数据上传至存储系统进行持久化,包括:
确定主节点的一级缓存中的回刷标识;
确定回刷标识对应的第二子区域;多个子区域中包括第二子区域;
基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域;
将目标子区域中的易失性数据上传至存储系统进行持久化。
可见,实施该可选的实施例,能够通过约束云原生数据库主从节点的一级缓存(ExBuffer)的数据回刷行为(即,写共享存储、写二级缓存L2Cache),保障数据的高可用性和实例的高性能。
在一个实施例中,基于前述方案,数据回刷单元1104基于第一子区域和第二子区域确定多个子区域中待回刷的目标子区域,包括:
确定一级缓存对应的区域写入顺序;其中,区域写入顺序用于标识多个子区域的写入顺序;
根据区域写入顺序确定第一子区域之前以及第二子区域之后的待回刷的目标子区域。
可见,实施该可选的实施例,能够根据回刷标识、写入标识和区域写入顺序确定出待回刷的目标子区域,从而可以精准定位到需要回刷的数据。
在一个实施例中,基于前述方案,上述装置还包括:
数据更新单元(未图示),用于在数据回刷单元1104将目标子区域中的易失性数据存储至存储系统之后,将目标子区域中的易失性数据标记为可覆盖;解除第二子区域与回刷标识的对应关系,并构建回刷标识与第三子区域的对应关系;第三子区域是目标子区域中基于区域写入顺序的最后一个目标子区域。
可见,实施该可选的实施例,能够通过对于易失性数据的标记确定出可以覆盖的子区域,从而实现对于一级缓存中子区域的复用,提升复用效率。
在一个实施例中,基于前述方案,数据写入单元1103,还用于数据更新单元将目标子区域中的易失性数据更新为已持久化的易失性数据之后,当接收到新的易失性数据时,将第三子区域存储的已持久化的易失性数据写入二级缓存中;通过新的易失性数据覆盖第三子区域中的已持久化的易失性数据。
可见,实施该可选的实施例,能够通过对于可覆盖子区域的复用,提升对于易失性数据的存储效率。
在一个实施例中,基于前述方案,上述装置还包括:
数据标识确定单元(未图示),用于当检测到数据查询操作时,确定数据查询操作对应的数据标识;
数据查询单元(未图示),用于确定各节点的全局缓存中是否存在与数据标识对应的目标数据;其中,各节点包括主节点和从节点,全局缓存包括相对应节点的一级缓存和二级缓存;
确定各节点的全局缓存中是否存在与数据标识对应的目标数据,包括:
查询各节点的一级缓存中是否存在目标数据;如果各节点的一级缓存中不存在目标数据,则查询各节点的二级缓存中是否存在目标数据;如果各节点的二级缓存中不存在目标数据,则向存储系统请求目标数据并接收存储系统反馈的目标数据。
可见,实施该可选的实施例,能够设置具备优先级的多级查询,提升查询效率。
在一个实施例中,基于前述方案,上述装置还包括:
数据备份单元(未图示),用于在主节点的全局缓存中存在待回刷数据且待回刷数据不存在于主节点的一级缓存中时,检测待回刷数据对应的日志编号;若日志编号大于主节点的二级缓存中的最大日志编号,则将待回刷数据写入主节点的二级缓存。
可见,实施该可选的实施例,能够基于日志编号将待回刷数据写入二级缓存,从而实现对于二级缓存的有效利用,避免重复写入。
在一个实施例中,基于前述方案,数据备份单元将待回刷数据写入主节点的二级缓存,包括:
若主节点的二级缓存的剩余存储空间不足以进行数据存储,则释放主节点的二级缓存中最小日志编号对应的数据,并将待回刷数据写入主节点的二级缓存。
可见,实施该可选的实施例,能够可以及时释放全局缓存有限的内存空间,以保证缓存效率,以使得在数据库系统出现故障时,减少故障恢复时间,提升故障恢复效率。
在一个实施例中,基于前述方案,上述装置还包括:
节点创建单元(未图示),用于创建节点文件并根据预设规则划分文件大小;其中,节点文件与目标从节点相对应,节点文件至少包括目标从节点的本地事务文件和缓存文件,目标从节点为新增的从节点;建立用于接收事务日志的第一线程和回放事务日志的第二线程;初始化目标从节点中的一级缓存和目标从节点中的二级缓存,并在主节点中注册目标从节点对应的节点信息。
可见,实施该可选的实施例,能够解决传统MySQL数据库实例无法灵活进行在线伸缩的问题,可以根据需求增加节点文件的数量,提升存储系统在线伸缩的灵活性。
在一个实施例中,基于前述方案,上述装置还包括:
缓存同步单元(未图示),用于在节点创建单元在主节点中注册目标从节点对应的节点信息之后,将目标从节点的二级缓存与主节点的二级缓存同步;或者,
将从节点的二级缓存中的热点数据同步至目标从节点的二级缓存中。
可见,实施该可选的实施例,能够实现缓存预热,对新增的目标从节点同步热点数据,提升新增的从节点的可用性。
在一个实施例中,基于前述方案,上述装置还包括:
节点扩展单元(未图示),用于关闭主节点的存储服务,并修改主节点中的本地事务文件的文件大小;触发从节点关闭从节点的存储服务,以使得从节点修改从节点中的本地事务文件的文件大小;将主节点和从节点进行主从关系切换,新的主节点和新的从节点对应于相同的文件大小。
可见,实施该可选的实施例,可以通过本地的主从节点切换,实现对于主从节点的文件扩展,无需在远程共享存储中生成新的节点文件,再从远程共享存储中下载节点文件,可以提升节点文件扩展效率。
应当注意,尽管在上文详细描述中提及了数据存储装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
示例性电子设备
在介绍了本申请示例性实施方式的方法、介质和装置之后,接下来,介绍根据本申请的另一示例性实施方式的电子设备。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图12来描述根据本申请的又一可选示例实施方式的数据存储装置1200。图12显示的数据存储装置1200仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图12所示,数据存储装置1200以电子设备的形式表现。数据存储装置1200的组件可以包括但不限于:上述至少一个处理单元1210、上述至少一个存储单元1220、连接不同系统组件(包括存储单元1220和处理单元1210)的总线1230。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1210执行,使得所述处理单元1210执行本说明书上述示例性方法的描述部分中描述的根据本申请各种示例性实施方式的步骤。例如,所述处理单元1210可以执行如图1和图10中所示的各个步骤。
存储单元1220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)12201和/或高速缓存存储单元12202,还可以进一步包括只读存储单元(ROM)12203。
存储单元1220还可以包括具有一组(至少一个)程序模块12205的程序/实用工具12204,这样的程序模块12205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1230可以为表示几类总线结构中的一种或多种,包括地址总线、控制总线和/或数据总线。
数据存储装置1200也可以与一个或多个外部设备1300(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与数据存储装置1200交互的设备通信,和/或与使得该数据存储装置1200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1250进行。并且,数据存储装置1200还可以通过网络适配器1260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图12所示,网络适配器1260通过总线1230与数据存储装置1200的其它模块通信。应当明白,尽管图中未示出,可以结合数据存储装置1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本申请实施方式的方法。
虽然已经参考若干具体实施方式描述了本申请的精神和原理,但是应该理解,本申请并不限于所发明的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本申请旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (10)

1.一种数据存储方法,其特征在于,包括:
当检测到事务提交事件时,将所述事务提交事件对应的事务日志写入主节点的本地事务文件中;
获取所述主节点的本地事务文件中各事务日志对应的易失性数据;
将所述各事务日志对应的易失性数据写入所述主节点的一级缓存中;
基于数据筛选规则将所述一级缓存中的易失性数据上传至存储系统进行持久化。
2.根据权利要求1所述的方法,其特征在于,将所述事务提交事件对应的事务日志写入主节点的本地事务文件中之后,所述方法还包括:
将所述事务日志发送至与所述主节点对应的从节点,以使得所述从节点根据所述事务日志对应的事务级别从多种复制模式中确定目标复制模式;
根据所述目标复制模式将所述事务日志复制到所述从节点的本地事务文件中。
3.根据权利要求2所述的方法,其特征在于,所述多种复制模式包括同步复制模式、半同步复制模式和异步复制模式。
4.根据权利要求3所述的方法,其特征在于,若所述目标复制模式为所述同步复制模式,则根据所述目标复制模式将所述事务日志复制到所述从节点的本地事务文件中的步骤包括:
基于所述同步复制模式读取所述事务日志并将所述事务日志发送至所述从节点,以使得所述从节点回放所述事务日志并将回放后的事务日志存储至所述从节点的本地事务文件中;
当接收到由所述从节点发送的第一反馈结果时,判定同步复制完成;其中,所述第一反馈结果表征所述事务日志已由所述主节点完全同步至所述从节点。
5.根据权利要求3所述的方法,其特征在于,若所述目标复制模式为所述半同步复制模式,则根据所述目标复制模式将所述事务日志复制到所述从节点的本地事务文件中的步骤包括:
基于所述半同步复制模式读取所述事务日志并将所述事务日志发送至所述从节点;
当接收到由所述从节点发送的第二反馈结果时,判定半同步复制完成;其中,所述第二反馈结果表征所述事务日志已由所述主节点半同步至所述从节点。
6.根据权利要求3所述的方法,其特征在于,若所述目标复制模式为所述异步复制模式,则根据所述目标复制模式将所述事务日志复制到所述从节点的本地事务文件中的步骤包括:
基于所述异步复制模式读取所述事务日志;
将所述事务日志发送至所述从节点,并判定异步复制完成。
7.根据权利要求2所述的方法,其特征在于,将所述事务日志发送至与所述主节点对应的从节点,包括:
将所述事务日志发送至与所述主节点对应的从节点,以使得所述从节点读取所述事务日志的配置参数,并在所述配置参数满足持久化条件时对所述事务日志进行持久化存储。
8.一种数据存储装置,其特征在于,包括:
日志写入单元,用于当检测到事务提交事件时,将所述事务提交事件对应的事务日志写入主节点的本地事务文件中;
数据获取单元,用于获取所述主节点的本地事务文件中各事务日志对应的易失性数据;
数据写入单元,用于将所述各事务日志对应的易失性数据写入所述主节点的一级缓存中;
数据回刷单元,用于基于数据筛选规则将所述一级缓存中的易失性数据上传至存储系统进行持久化。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如权利要求1至7中任一项所述的数据存储方法。
10.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的数据存储方法。
CN202110594663.0A 2021-05-28 2021-05-28 数据存储方法、装置、电子设备及计算机可读存储介质 Active CN113220729B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110594663.0A CN113220729B (zh) 2021-05-28 2021-05-28 数据存储方法、装置、电子设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110594663.0A CN113220729B (zh) 2021-05-28 2021-05-28 数据存储方法、装置、电子设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN113220729A true CN113220729A (zh) 2021-08-06
CN113220729B CN113220729B (zh) 2023-03-21

Family

ID=77099480

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110594663.0A Active CN113220729B (zh) 2021-05-28 2021-05-28 数据存储方法、装置、电子设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN113220729B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113868100A (zh) * 2021-10-27 2021-12-31 北京值得买科技股份有限公司 一种电商领域数据的自动化调度采集系统
CN114201551A (zh) * 2021-12-07 2022-03-18 建信金融科技有限责任公司 数据存储方法和数据存储装置
CN114490543A (zh) * 2022-01-12 2022-05-13 北京元年科技股份有限公司 内存多维数据库的事务日志实现方法、装置、设备及介质
CN114676117A (zh) * 2022-05-27 2022-06-28 成都明途科技有限公司 一种岗位数据存储方法、装置及岗位机器人
CN116431684A (zh) * 2023-04-18 2023-07-14 中船海神医疗科技有限公司 一种便携式生命支持系统诊疗数据存储与回放方法及系统
WO2024041434A1 (zh) * 2022-08-24 2024-02-29 阿里云计算有限公司 存储系统及数据处理方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8775381B1 (en) * 2011-05-14 2014-07-08 Pivotal Software, Inc. Parallel database mirroring
CN104166661A (zh) * 2013-05-20 2014-11-26 方正宽带网络服务股份有限公司 数据存储系统和数据存储方法
CN108073656A (zh) * 2016-11-17 2018-05-25 杭州华为数字技术有限公司 一种数据同步方法及相关设备
CN109446222A (zh) * 2018-08-28 2019-03-08 厦门快商通信息技术有限公司 一种双缓存的数据存储方法、装置及存储介质
CN112035410A (zh) * 2020-08-18 2020-12-04 腾讯科技(深圳)有限公司 日志存储方法、装置、节点设备及存储介质
CN112286728A (zh) * 2020-10-30 2021-01-29 深圳前海微众银行股份有限公司 数据备份方法、装置、设备及计算机存储介质
CN112637284A (zh) * 2020-12-09 2021-04-09 北京金山云网络技术有限公司 重做日志的存储方法和装置、电子设备和存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8775381B1 (en) * 2011-05-14 2014-07-08 Pivotal Software, Inc. Parallel database mirroring
CN104166661A (zh) * 2013-05-20 2014-11-26 方正宽带网络服务股份有限公司 数据存储系统和数据存储方法
CN108073656A (zh) * 2016-11-17 2018-05-25 杭州华为数字技术有限公司 一种数据同步方法及相关设备
CN109446222A (zh) * 2018-08-28 2019-03-08 厦门快商通信息技术有限公司 一种双缓存的数据存储方法、装置及存储介质
CN112035410A (zh) * 2020-08-18 2020-12-04 腾讯科技(深圳)有限公司 日志存储方法、装置、节点设备及存储介质
CN112286728A (zh) * 2020-10-30 2021-01-29 深圳前海微众银行股份有限公司 数据备份方法、装置、设备及计算机存储介质
CN112637284A (zh) * 2020-12-09 2021-04-09 北京金山云网络技术有限公司 重做日志的存储方法和装置、电子设备和存储介质

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113868100A (zh) * 2021-10-27 2021-12-31 北京值得买科技股份有限公司 一种电商领域数据的自动化调度采集系统
CN114201551A (zh) * 2021-12-07 2022-03-18 建信金融科技有限责任公司 数据存储方法和数据存储装置
CN114490543A (zh) * 2022-01-12 2022-05-13 北京元年科技股份有限公司 内存多维数据库的事务日志实现方法、装置、设备及介质
CN114676117A (zh) * 2022-05-27 2022-06-28 成都明途科技有限公司 一种岗位数据存储方法、装置及岗位机器人
CN114676117B (zh) * 2022-05-27 2022-08-16 成都明途科技有限公司 一种岗位数据存储方法、装置及岗位机器人
WO2024041434A1 (zh) * 2022-08-24 2024-02-29 阿里云计算有限公司 存储系统及数据处理方法
CN116431684A (zh) * 2023-04-18 2023-07-14 中船海神医疗科技有限公司 一种便携式生命支持系统诊疗数据存储与回放方法及系统
CN116431684B (zh) * 2023-04-18 2024-03-19 中船海神医疗科技有限公司 一种便携式生命支持系统诊疗数据存储与回放方法及系统

Also Published As

Publication number Publication date
CN113220729B (zh) 2023-03-21

Similar Documents

Publication Publication Date Title
CN113220729B (zh) 数据存储方法、装置、电子设备及计算机可读存储介质
US11068395B2 (en) Cached volumes at storage gateways
CN109074306B (zh) 分布式存储系统中的混合垃圾收集
US9274956B1 (en) Intelligent cache eviction at storage gateways
US9268651B1 (en) Efficient recovery of storage gateway cached volumes
JP5007350B2 (ja) ハードウェアベースのファイルシステムのための装置および方法
EP3518459B1 (en) Object signatures in object stores
US9996421B2 (en) Data storage method, data storage apparatus, and storage device
JP5411250B2 (ja) 冗長データ記憶システムへの指示に従ってのデータ配置
US9559889B1 (en) Cache population optimization for storage gateways
AU2015360953A1 (en) Dataset replication in a cloud computing environment
WO2015010394A1 (zh) 数据发送方法、数据接收方法和存储设备
US10803006B1 (en) Persistent memory key-value store in a distributed memory architecture
CN106873902B (zh) 一种文件存储系统、数据调度方法及数据节点
CN111611223B (zh) 非易失性数据的访问方法、系统、电子设备和介质
US10452496B2 (en) System and method for managing storage transaction requests
US10073874B1 (en) Updating inverted indices
CN111435302B (zh) 一种应用程序的处理方法及装置
CN111400098A (zh) 一种副本管理方法、装置、电子设备及存储介质
WO2020024590A1 (en) Persistent memory key-value store in a distributed memory architecture
CN117591552A (zh) 数据处理方法、介质、装置和计算设备
CN117591523A (zh) 基于共享存储架构的数据处理方法、装置和计算设备
CN117992467A (zh) 数据处理系统、方法、装置及相关设备
CN116490847A (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
GR01 Patent grant
GR01 Patent grant