CN112445413A - 一种数据存储的方法、装置及相关设备 - Google Patents

一种数据存储的方法、装置及相关设备 Download PDF

Info

Publication number
CN112445413A
CN112445413A CN201910808960.3A CN201910808960A CN112445413A CN 112445413 A CN112445413 A CN 112445413A CN 201910808960 A CN201910808960 A CN 201910808960A CN 112445413 A CN112445413 A CN 112445413A
Authority
CN
China
Prior art keywords
data
cache
written
subspace
copy
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
CN201910808960.3A
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201910808960.3A priority Critical patent/CN112445413A/zh
Publication of CN112445413A publication Critical patent/CN112445413A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供了一种数据存储的方法,应用于存储节点,所述存储节点包括缓存,所述方法包括:存储节点接收主机发送的写数据请求,其中,所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据;将所述待写数据写入所述缓存的第一缓存子空间中;将所述待写数据的副本写入所述缓存的第二缓存子空间中。

Description

一种数据存储的方法、装置及相关设备
技术领域
本申请涉及通信技术领域,尤其涉及一种数据存储的方法、装置及相关设备。
背景技术
由于后端机械盘的机械属性访问速率无法满足前端高性能访问的需要,当前的存储设备中通常会使用内存SSD、NVDIMM等缓存加速器进行缓存加速访问,以提高前端访问的速度。实际上就是将下载到的数据先保存于缓存中(比如内存),当缓存中的数据达到一个程度时,再将数据统一写入后端机械盘中,这样可以减少实际的磁盘操作,有效的保护磁盘免于重复的读写操作而导致的损坏。
但是,当前的缓存加速器多为高速存储介质,非常容易发生故障,而缓存一旦发生故障,比如缓存中的一根内存条发生了故障,在该内存条中暂时存储的、正在等待统一写入后端机械盘中的缓存数据将会丢失,造成用户数据丢失,为用户带来不便。
发明内容
本申请提供了一种数据存储的方法、装置及相关设备,用于解决缓存数据丢失,造成用户数据丢失的问题。
第一方面,本申请提供了一种数据存储的方法,应用于存储节点,所述存储节点包括缓存,所述方法包括:
存储节点接收主机发送的写数据请求,其中,所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据;
将所述待写数据写入所述缓存的第一缓存子空间中;
将所述待写数据的副本写入所述缓存的第二缓存子空间中。
实施第一方面描述的方法,可以将所述待写数据以及待写数据的副本数据同时写入所述缓存空间中,并且待写数据以及副本数据分别位于不同的缓存子空间,使得在第一缓存子空间故障时,第二缓存子空间仍存有所述待写数据的副本数据,从而避免了用户数据丢失问题的产生,提高缓存数据的可靠性。
在一些实施方式中,所述待写数据包括副本标识,所述副本标识用于指示所述待写数据是否具有存储在其他存储节点中的数据副本。
在一些实施方式中,在所述将所述待写数据的副本写入所述缓存的第二缓存子空间中之前,还包括:根据所述副本标记,确定所述待写数据不具有存储在其他存储节点中的数据副本。
在一些实施方式中,所述第一缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。
在一些实施方式中,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。
上述实施方式中,在确定所述待写数据不具有存储在其他存储结点中的数据副本的情况下,也就是说,所述待写数据成为单副本数据的情况下,将所述待写数据和副本数据分别存储于所述存储节点缓存的不同缓存子空间中,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM卡上,从而在不占用过多缓存空间的同时,确保了单存储节点内缓存数据的可靠性,解决了当单个存储节点内的缓存变为单副本数据后,缓存数据丢将失去可靠性的问题。
第二方面,提供了一种数据存储的装置,所述装置位于存储节点中,包括:
接收单元,所述接收单元用于接收主机发送的写所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据;
写入单元,所述写入单元用于将所述待写数据写入所述缓存的第一缓存子空间中;
所述写入单元还用于将所述待写数据的副本写入所述缓存的第二缓存子空间中。
在一些实施方式中,所述待写数据包括副本标识,所述副本标识用于指示所述待写数据是否具有存储在其他存储节点中的数据副本。
在一些实施方式中,所述装置还包括确定单元,所述确定单元用于在所述写入单元将所述待写数据的副本写入所述缓存的第二缓存子空间中之前,根据所述副本标记,确定所述待写数据不具有存储在其他存储节点中的数据副本。
在一些实施方式中,所述第一缓存子空间的类型是随机存储器RAM、固态硬盘SSD和非易失性双列直插式内存卡NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。
在一些实施方式中,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。
第三方面,提供了一种缓存,包括第一缓存子空间以及第二缓存子空间,其中,所述第一缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。
在一些实施方式中,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。
第四方面,提供了一种电子设备,包括处理器以及存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,所述处理器执行所述指令时实现如上述第一方面描述的方法。
第五方面,提供了一种非瞬态的计算机存储介质,所述计算机存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如上述第一方面描述的方法。
第六方面,提供了一种计算机程序产品,当所述计算机程序产品被计算机读取并执行时,实现如上述第一方面描述的方法。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是一种数据存储系统的框架示意图;
图2是一种数据存储方法的流程示意图;
图3是一种可靠性缓存加速存储方法的流程示意图;
图4是另一种可靠性缓存加速存储方法的流程示意图;
图5是本申请提供的一种数据存储系统的框架示意图;
图6是本申请提供的一种数据存储方法的流程示意图;
图7是本申请提供的一种数据存储的装置的结构示意图;
图8是本申请提供的一种数据存储方法的流程示意图;
图9是本申请提供的一种数据存储方法的流程示意图;
图10是一种电子设备的结构示意图。
具体实施方式
本申请的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。
为了便于理解本申请实施例,这里先说明本申请涉及的数据存储系统框架。参见图1,图1是本申请涉及的数据存储框架的结构示意图。如图1所示,数据存储系统包括主机10,、一个或者多个存储节点20以及一个或者多个存储介质30。
主机10,用于向存储节点20发送写数据请求。主机10,也可以称之为计算存储节点,是指具备数据处理能力或计算能力的设备,其可包括但不限于中央处理器(CentralProcessing Unit,CPU)、通用处理器或其他设备等
存储节点20可用于接收主机10发送的写数据请求,并根据所述写数据请求进行写数据,其中,所述写数据请求中携带有待写数据、待写数据的LBA以及长度。存储节点20,也可以称之为存储控制器(Controller),所述存储节点20包括缓存(Cache)21。具体地,存储节点20包括缓存211,存储节点22包括缓存212,存储节点23包括缓存213。其中,所述多个存储节点20还可以是位于同一个存储引擎下的多个存储节点,也可以是位于不同引擎中的多个存储节点,本申请不作具体限定。
存储节点(例如存储节点210)可响应该写数据请求,根据预先存储的至少一个逻辑区块地址(Logical Block Address,LBA)和物理区块地址(Physical Block Address,PBA)之间的对应关系,确定写数据请求中待写数据的LBA所对应的PBA以及该PBA所在的存储介质,进而将写数据请求中的待写数据发送至该存储介质中,以将该待写数据存储至该存储介质中与数据的LBA所对应的PBA处,从而实现数据的存储。具体实现中,由于存储介质30的机械属性访问速率往往无法满足主机10高性能访问的需要,为了达到加速访问的效果,每个存储节点20中通过在增设缓存资源21进行存储加速。简单来讲,主机10产生写数据请求的速度快,而存储节点20根据写数据请求将所述待写数据存储至存储介质30的速度慢,因此主机10可以将写数据请求先放入存储节点20的缓存资源21中(比如内存中),等待缓存池中的数据达到阈值时,再将缓存池中的数据统一写入存储介质30(比如磁盘或硬盘)中。可以理解的,通过将数据先放入缓存资源,再统一写入存储介质,使得主机10透过I/O访问存储介质的次数大大减少,从而大大提高存储介质的访问速率,也在一定程度上保护存储介质免于重复读写操作而导致的损坏。在实际应用中,每个存储节点中部署的缓存数量通常为一个,缓存资源可以是为内存类型的缓存资源,比如随机存储器(Random-AccessMemory,RAM);还可以是硬盘或卡类型的缓存资源,比如固态硬盘(Solid State Drice,SSD)缓存、非易失性双列直插式内存模块(Non-Volatile Dual In-line Memory Module,NVDIMM)卡等高速存储介质。
具体实现中,图1所示的架构可以是数据中心的分布式云存储应用场景。云存储是云计算概念上延伸和发展出的一个新的概念,分布式云存储系统是通过集群应用、网格技术以及分布存储文件系统协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
在分布式云存储应用场景中,主机10可以是实体设备,也可以是虚拟设备。当主机10是实体设备时,主机10可以具有处理器、硬盘、内存、网卡以及系统总线等等。比如,主机10可以是服务器。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。比通用的计算机架构,在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求更高。当主机10是虚拟设备时,主机10可以通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中计算设备。比如,主机10可以是服务器上虚拟出来的虚拟机。虚拟机在计算机上运行的应用程序,它可以模拟一个基于x86的标准PC环境。这个环境和真实的计算机一样,都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器、小型计算机系统接口(Small Computer SystemInterface,SCSI)控制器等等中的一种或者多种设备。
在分布式云存储应用场景中,存储节点20可以是数据中心中的存储域网络(Storage Area Network,SAN)中的存储设备,SAN中的存储设备是智能设备,比如独立磁盘副本阵列(Redundant Arrays of Independent Drives,RAID,RAID),也可称之为基于对象的存储设备(Object-based Storage Device,OSD),每个OSD具有自己的存储控制器/处理器、缓存以及网络系统,可以提供OSD对象接口,使得存储节点20可以通过OSD对象接口和主机10通信,为主机10提供数据存储和业务访问的功能。
需要说明的,本申请对所述存储系统中的存储节点数量以及存储介质的数量并不做限定,如图2中以三个存储节点20,存储介质30数量为x个为例示出。x为系统自定义设置的正整数,例如根据系统实际需求自定义设置的。其中所述x个存储介质可以是用于存储数据的全部载体,比如软盘、光盘、硬盘、闪存、磁盘、记忆棒等等,本申请不作具体限定。
需要说明的,本申请涉及的应用场景还可以是集中式存储的应用场景,也就是说,图1所示的应用场景中,只有单个存储节点(比如存储节点21)的应用场景,可以理解的,对于集中式存储场景来说,数据存储也是通过存储节点20接收待写数据的写数据请求,然后根据写数据请求将待写数据写入缓存空间211中,再将缓存空间211中的缓存数据统一写入存储介质30,具体可参考图1实施例描述的存储节点进行存储的流程,因此这里不再展开进行赘述。
结合图1所示的数据存储框架,下面将详细介绍主机通过存储节点将待写数据存储于存储介质的具体流程。参见图2,图2是本申请涉及的一种数据存储方法的流程示意图。在本实施方式的数据存储方法包括如下步骤:
S201:主机10向存储节点20发送写数据请求,存储节点20接收由主机发送的写数据请求。
具体实现中,主机10可以获取写数据请求(Input/Output,IO请求),该写数据请求用于请求将待写数据写入至存储介质中。具体的,主机10可以接收其他设备发送的写数据请求,也可以根据应用程序的自身需求生成写数据请求,例如在邮件应用程序中需更新并保存邮件时即可生成相应地写数据请求。其中,该写数据请求用于对已存储数据进行更新,或请求存储待写数据。写数据请求中携带有待写数据相关的信息,例如具体的待写数据、待写数据的逻辑块地址(Logical Block Address,LBA)的起始地址以及待写数据的大小或长度等信息。
S202:存储节点20将所述待写数据写入缓存空间。
具体实现中,存储节点20可以先向缓存发送缓存资源申请消息,该申请消息中包含了所述待写数据的长度以及标题等描述信息,缓存在确定所述缓存空间有足够的缓存资源存储所述待写数据的情况下,从缓存空间中分配用于存储所述待写数据的缓存资源,并将该缓存资源的缓存地址发送给存储节点20,比如,将资源地址D_Addr0分配给所述待写数据,使得所述存储节点将所述待写数据写入所述缓存地址对应的缓存空间中。
S203:缓存向所述存储节点20发送所述缓存空间内的数据量达到第一阈值的消息。存储节点20接收所述缓存空间内的数据量达到第一阈值的消息。
S204:当所述缓存空间内的数据量达到第一阈值后,存储节点20将所述待写数据写入存储介质中。
具体实现中,当存储节点接收到所述缓存空间内的数据量达到第一阈值的消息后,存储节点可以先个根据预先存储的至少一个LBA和PBA之间的对应关系,确定所述待写数据的LBA对应的PBA以及该PBA所在的目标存储介质(比如磁盘A),然后将待写数据从缓存中转移至所述目标存储介质(磁盘A)的PBA对应的存储空间中,具体可以通过向所述目标存储介质的驱动器(磁盘A的磁盘驱动器)发送刷盘请求,所述刷盘请求包括所述待写数据、待写数据的长度以及待写数据对应的PBA,从而将所述待写数据写入存储介质中(刷入磁盘A)。
S205:接收所述待写数据写入所述存储介质成功的消息。
S206:释放所述待写数据占用的缓存空间。
参考图2实施例可知,通过缓存进行数据存储方法中,由于主机10向存储节点20发送待写数据之后,数据将在缓存22中存储一段时间才会通过刷盘操作写入存储介质23中。因此,缓存一旦发生故障,仍在缓存中等待刷盘的缓存数据将会丢失。而作为高速存储介质的缓存又非常容易发生故障,为了防止缓存数据在缓存故障时丢失,缓存数据通常会在不同的存储节点或者存储节点上采用冗余备份(Redundant Back-up)的方案进行可靠性保护。其中,冗余备份指的是对待写数据进行镜像获得备份数据,使得同一个待写数据存储在不同的缓存中,提高待写数据存储的可靠性。下面以图1的架构、图2的数据存储的方法为例,对当前主流技术中为了保证缓存可靠性的两种存储方案进行简要介绍。
(一)双存储节点缓存的冗余备份
参见图3,图3是本申请提供的一种可靠性缓存加速存储的方法流程示意图。由图3可知,该方法通过对存储节点21的缓存211与存储节点22的缓存212之间进行镜像,使得存储节点21的缓存数据成为存储节点22的缓存数据的副本数据,而存储节点22的缓存数据成为存储节点21的缓存数据的副本数据,换句话说,两个节点的缓存中存储的数据是相同的、互为冗余的。关于图3实施例中未示出或未描述的内容,可参见前述图1-图2所述实施例中的相关阐述,这里不再赘述。
具体实现中,S301:存储节点21将待写数据写入缓存211中,存储节点22将待写数据的副本数据写入缓存212中。S302-S303:当所述缓存空间内的数据量达到第一阈值后,将所述待写数据或者副本数据写入存储介质中。也就是说,当缓存211内的数据量达到第一阈值后,将待写数据写入存储介质301中,当缓存212内的数据量达到第一阈值后,将副本数据写入存储介质302中。其中,由于缓存211和缓存212的缓存空间可能大小不同,存储的数据量也不同,因此步骤S302和步骤S303可以是同时进行的,也可以是不同时进行的,换句话说,哪个存储节点的缓存空间内的数据量达到第一阈值,哪个存储节点的缓存先执行步骤S302或S303;S304-S305:当待写数据以及副本数据都被写入存储介质后,可以释放待写数据或者副本数据占用的缓存空间,从而完成一次可靠性缓存加速存储。同理,S304或S305可以是同时进行的,也可以是不同时进行的,本申请不作具体限定。
需要说明的,图3实施例是以待写数据通过存储节点21存入存储介质301中,副本数据通过存储节点22存入存储介质302中为例进行说明的,具体实现中,还可以出现待写数据通过存储节点22存入存储介质302中,副本数据通过存储节点21存入存储介质301中的情况,本申请不再对此进行赘述。
可以理解的,图3所示的可靠性缓存加速存储方法,由于待写数据及其副本数据同时被写入存储节点21的缓存211以及存储节点22的缓存212中,因此,当存储节点21中的缓存211出现故障之后,待写数据丢失了,但是待写数据的副本数据仍存在于存储节点22中,从而避免了数据丢失情况;同理,当存储节点22的缓存212出现故障之后,副本数据丢失了,但是待写数据仍存储于存储节点21中,也可以避免数据丢失的情况,从而实现了可靠性缓存加速存储。
但是,如果存储节点21和存储节点22都出现了故障,数据仍会丢失。比如,存储节点21是首先出现了故障,而该存储节点的可更换时间为7天后,那么这7天时间内,存储节点21的缓存212中的数据将一直保持为单缓存无备份的状态,如果存储节点22在这7天内出现了异常,比如某个内存条发生了故障,那么该内存条上的缓存数据将丢失,使得用户的业务数据丢失,为用户带来极大不便。
(二)多副本缓存的分布式冗余备份
图4是另一种可靠性缓存加速存储方法流程示意图。由图4可知,该方法通过将每一个数据块(图2中的P1、P2、P3、P4、P5以及P6)分布存储于不同的存储节点上,并且每一个数据块都有多个(图4中以3个为例)副本数据,从而确保数据的可靠性存储。比如,存储于存储节点21的数据块P2,在存储节点22上存储了其副本数据P2’,在存储节点23上存储了其副本数据P2”;存储于存储节点20的数据块P3,在存储节点23上存储了其副本数据P3’,在存储节点24上存储了其副本数据P3”。需要说明的,图4实施例与图3实施例不同的是,图3实施例是对缓存进行镜像,而图4实施例是对数据块进行镜像,也就是说,图3实施例中存储节点21的缓存211与存储节点22的缓存212中存储的数据是相同的,而图4实施例中存储节点21的缓存211与存储节点22的缓存212中存储的数据是不同的,每个数据块及副本数据块都是分布式存储在不同的存储节点上。关于图4实施例中未示出或未描述的内容,可参见前述图1-图2所述实施例中的相关阐述,这里不再赘述。
其中,实线描绘的数据块指的是当前T1时刻存储了的数据块,比如数据块P1的实线表示该数据块当前T1时刻存储于缓存211中,数据块P2的实线表示该数据块当前T1时刻存储于存储介质301中。虚线描绘的数据块指的是上一时刻T0曾经在这里存储的数据块,比如数据块P2在T0时刻处于缓存211中,数据块P3在T0时刻存储于缓存211中,副本数据P2’在T0时刻存储于缓存212中。应理解,上述举例仅用于说明,并不能构成具体限定。
下面以P1是待写数据为例,对图4实施例描述的可靠性缓存加速存储的实现流程进行简要说明。如图4所示,步骤1:存储节点将待写数据及其副本数据写入缓存中,其中,存储节点201将所述待写数据P1写入存储节点21的缓存211,同时存储节点22将所述副本数据P1’写入存储节点22的缓存212,同时存储节点23将副本数据P1”写入存储节点23的缓存213。步骤2-步骤4:当所述缓存空间内的数据量达到第一阈值后,将所述待写数据及其副本数据写入存储介质中,也就是说,当缓存211内的数据量达到第一阈值后,将待写数据P1写入存储介质301中,当缓存212内的数据量达到第一阈值后,将副本数据P1’写入存储介质302中,当缓存213内的数据量达到第一阈值后,将副本数据P1”写入存储介质303中。其中,由于缓存211、缓存212以及缓存213的缓存空间可能大小不同,存储的数据量也不同,因此步骤2、步骤3以及步骤4可以是同时进行的,也可以是不同时进行的,换句话说,哪个存储节点的缓存空间内的数据量达到第一阈值,哪个存储节点的缓存先执行步骤2、步骤3或者步骤4。在步骤2-步骤4之后,当待写数据以及副本数据都被写入存储介质后,可以释放待写数据或者副本数据占用的缓存空间,从而完成一次可靠性缓存加速存储。同理,每个存储节点释放缓存可以是同时进行的,也可以是不同时进行的,本申请不作具体限定。
需要说明的,图3以及图4中,为了更好的体现可靠性缓存加速存储的流程,因此每个节点的缓存均绘制于存储节点的外部。应理解,实际情况中,缓存是所述存储节点的缓存。并且,下文中关于缓存的描述均是指存储节点的缓存。
可以理解的,图4所示的可靠性缓存加速存储方法,由于待写数据生成了多个副本数据,并分布式存储在不同的存储节点上,比如待写数据P1及其副本数据P1’和P1”被同时被写入存储节点21的缓存211、存储节点22的缓存212以及存储节点23的缓存213中,因此,相比于图3实施例,可靠性得到了一定的提升。但是,如果数据块变为单副本的情况下,单副本所在的存储节点的缓存发生任何故障,数据都会丢失。比如,T1时刻数据块P1存储于缓存211中,数据块P1’存储于缓存212中,数据块P1”存储于缓存213中,T2时刻缓存211、缓存212的发生了故障,也就是说,T2时刻数据块P1”变成了单副本,而存储数据块P1”的缓存213在T6时刻才会进行刷盘操作,那么在T2-T6时刻,如果缓存213发生了任何故障,比如,存储数据块P1的内存条或者SSD发生故障,但是缓存213的其他内存条或者SSD仍保持工作状态,数据块P1还是会丢失,系统的复位保内存功能将无法恢复数据块P1,使得用户的业务数据丢失,为用户带来极大不便。
综上可知,当前缓存的可靠性是通过在不同存储节点上对缓存或者数据块进行冗余备份来实现的。但是,无论是图3或图4实施例中的任意一种方案,对于已变为单副本的数据来说,数据可靠性非常低,一旦单副本数据所在的存储节点的缓存或者存储节点发生故障,数据一定会丢失。换句话说,当前单个存储节点内,缓存数据是没有副本数据的,其副本数据都存储于其他存储节点上,从而导致当其他存储节点上的副本数据丢失后,该单个存储节点内的缓存数据变为单副本数据,缓存数据将失去可靠性,该单个存储节点一旦出现一个内存条的或者一个磁盘的损坏,系统的复位保内存功能都将无法恢复,造成用户数据丢失,为用户带来极大不便。
本申请为了解决上述问题,提出了一种数据存储的方法,通过在确认待写数据为单副本的情况下,对所述待写数据进行镜像备份获得副本数据,并将所述待写数据和副本数据分别存储于所述存储节点缓存的不同缓存子空间中,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM卡上,从而在不浪费缓存空间的情况下,确保了单存储节点内缓存数据的可靠性,解决了当单个存储节点内的缓存变为单副本数据后,缓存数据将失去可靠性的问题。
图5是本申请提供的一种数据存储方法的系统架构示意图,如图5所示,该数据存储系统包括:主机/计算节点50、至少一个存储节点/存储控制器60以及至少一个存储介质70,其中,图5以存储系统包括存储节点601、存储节点602以及存储节点603,共三个存储节点为例进行说明。并且,主机50与前述内容中的主机10相同,存储介质70与前述内容中的存储介质30相同,这里不再进行赘述,下面主要对存储节点60进行详细说明。
如图5所示,每个存储节点60包括缓存61。本申请实施例中,每个缓存61被划分为多个缓存子空间。例如,图5中每个缓存62被划分为2个缓存子空间。具体地,存储节点601中的缓存被划分为第一缓存子空间6011以及第二缓存子空间6012,存储节点602中的缓存被划分为第一缓存子空间6021以及第二缓存子空间6022,存储节点603中的缓存被划分为第一缓存子空间6031以及第二缓存子空间6032。需要说明的,图5仅用于举例说明,每个存储节点中的缓存子空间的个数还可以是两个以上,并且,每个存储节点中缓存子空间的个数可以是相同的,也可以是不同的,每个缓存中可划分缓存子空间的数量可以根据缓存容量、缓存损坏频率进行设定,本申请不作具体限定。
在本申请实施例中,所述第一缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。或者,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。举例来说,不同的缓存子空间的内存类型不同可以是:缓存子空间6011的数据存储于内存条上A上,缓存子空间6012的数据存储于硬盘A上,或者,缓存子空间6011的数据存储于内存条上A上,缓存子空间6012的数据存储于NVIDIMM卡A上,这里不再进行赘述。再例如,不同缓存子空间不属于同一个存储器可以是:缓存子空间6011的数据存储于内存条A上,缓存子空间6012的数据存储于内存条B上,或者,缓存子空间6011的数据存储于硬盘A上,缓存子空间6012的数据存储于硬盘B上,以此类推,这里不再进行赘述。也就是说,对于内存类型的缓存资源来说,缓存子空间的划分可以按照不同的内存条进行划分,同一根内存条的缓存资源只能被划分至同一个缓存子空间中;对于SSD/NVIDIMM卡类型的缓存资源来说,缓存子空间的划分可以按照不同的硬盘或卡来划分,同一个硬盘或者同一张卡的缓存资源只能划分至同一个缓存子空间中。
可以理解的,对于单副本数据来说,由于单副本数据在其他节点并没有没有备份的副本数据,当数据被存储节点放入缓存资源,等待刷盘的过程中,一旦存储节点或者缓存资源出现故障,那么缓存数据将会丢失,导致还未刷盘至存储介质的数据丢失,为用户带来不便。而本申请将单副本数据,以双份或者多份副本写的方式,将所述单副本数据及其副本数据分别存储在两个缓存子空间上,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM卡上,从而在一个一个内存条或者一个硬盘(一个缓存子空间)出现故障后,该单副本数据仍存储在另一个缓存子空间(另一个内存条或者一个硬盘)中,从而避免数据丢失导致系统的复位保内存功能都将无法恢复的问题。
下面以图5所示的系统架构中的存储节点601为例,对本申请提供的数据存储的方法进行详细说明。其中,缓存如图6所示,本申请提供的数据存储方法的具体步骤可以如下:
S601:存储节点601接收主机发送的写数据请求,其中,所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据。
在本申请实施例中,所述待写数据包括副本标识,所述副本标识用于指示所述待写数据是否具有存储在其他存储节点中的数据副本。简单来说,所述副本标识用于指示所述待写数据是否是单副本数据。
S602:存储节点601根据所述副本标记,确定所述待写数据不具有存储在其他存储节点中的数据副本。也就是说,确定所述待写数据是否是单副本数据。在所述待写数据是单副本数据的情况下,执行步骤S603、步骤S604以及步骤S606-步骤S609,在所述待写数据不是单副本数据的情况下,执行步骤S605以及步骤S606-步骤S609。
S603:存储节点601对所述待写数据进行镜像,获得所述待写数据的副本数据。其中,所述单副本数据在其他存储节点上没有副本数据,所述待写数据以及所述副本数据均包括副本标识,所述副本标识用于获取所述待写数据以及所述副本数据的缓存地址。
S604:存储节点61将所述待写数据以及副本数据分别写入不同的缓存子空间中,每个缓存子空间存储一个待写数据或者副本数据。举例来说,待写数据X将被写入第一缓存子空间6011中,副本数据X’将被写入第二缓存子空间6012中。应理解,上述举例仅用于说明,并不能构成具体限定。
S605:存储节点601将所述待写数据写入所述缓存子空间。这里,由于该待写数据没有副本数据,因此可以将所述待写数据写入任一个缓存子空间中。具体实现中,还可以根据每个缓存子空间当前剩余的缓存资源情况,将所述待写数据写入当前拥有最多剩余缓存资源的缓存子空间中。
S606:缓存6011向存储节点601发送第一数据所在的缓存子空间中的缓存数据的数据量达到第一阈值的消息,存储节点601接收所述第一数据所在的缓存子空间中的缓存数据的数据量达到第一阈值的消息。其中,所述第一数据是所述待写数据以及所述副本数据中的任意一个数据,也就是说,如果待写数据P所在的第一缓存子空间6011的缓存数据的数据量首先达到第一阈值,那么存储节点601将接收到第一缓存子空间6011的数据量达到第一阈值的消息,如果副本数据P1’所在的第二缓存子空间6012的缓存数据的数据量首先达到第一阈值,那么存储节点601将接收到第二缓存子空间6012的数据量达到第一阈值的消息。并且,第一阈值可以是预先设定的阈值,具体可以根据缓存子空间的空间容量进行确定,因此每个缓存子空间的第一阈值可能相同,也可能不同,本申请不作具体限定。
S607:存储节点601将所述第一数据写入存储介质71中。
S608:存储介质71向存储节点601发送所述第一数据写入所述存储介质成功的消息,存储节点601接收所述第一数据写入所述存储介质成功的消息。
S609:存储节点601释放所述第一数据占用的缓存空间。
在本申请实施例中,所述单副本数据包括从未被镜像过的数据,以及曾经被镜像过但副本文件已损坏的数据。总之,单副本数据是当前在其他存储节点上没有对应的副本数据的待写数据。因此,步骤S602中,对于所述待写数据是否是单副本数据的判断,可以通过确定所述待写数据是否包含副本标识,以及副本地址是否合法、副本地址所在的存储节点是否故障来实现。可以理解的,待写数据在经过副本备份后,将会包含副本标识,所述副本标识包括所述待写数据的副本文件的地址。
具体实现中,所述方法还包括:在所述待写数据不包含副本标识的情况下,确定所述待写数据为单副本数据;或者,在所述待写数据包含副本标识,并且,所述待写数据的副本数据的副本地址所在的存储节点发生故障的情况下,确定所述待写数据是单副本数据,所述副本地址是根据所述副本标识获取得到的。在所述待写数据包含副本标识,并且,所述副本地址所在的存储节点没有发生故障的情况下,确定所述待写数据不是单副本数据。可以理解的,当一个存储节点发生故障后,剩余的所有存储节点均会通过分布地图(Distribute Map)获取故障存储节点的地址信息,如果某个数据块的副本地址是故障存储节点上的存储地址,副本数据将无法存储在该故障存储节点上,此时该数据块也可以被看作是一个单副本数据;同理,当一个副本地址是不合法地址的情况下,副本数据也将无法存储在该副本地址上,此时该数据块也可以被看做是一个单副本数据。上述举例仅用于说明,并不能构成具体限定。
举例来说,假设业务A的数据包括{A1,A2,…,Am}共m个数据块,每隔时间t存储一个数据块,比如,主机在t时刻生成存储数据块A1的写数据请求,在2t时刻生成存储数据块A2的写数据请求等等。其中,业务A的数据块均存储于存储节点601上,其副本数据存储于存储节点602上,比如,在t时刻,数据块A1存储于存储节点601中,数据块A1的副本数据A1’存储于存储节点602中。假设在2t时刻,存储节点601发生了故障,当主机向所述存储节点601发送存储数据块A2的写数据请求时,存储节点601首先确定所述数据块A2包含副本标识,接着获取所述数据块A2的副本地址,在确定该副本地址所在的存储节点(存储节点620)已经发生故障的情况下,将所述数据块A2确定为单副本数据,最后,存储节点601将执行步骤S603,对所述数据块A2进行镜像生成副本数据A2’,并将所述数据块A2以及副本数据A2’分别存储在所述存储节点610的两个不同的缓存子空间中,从而实现了单副本缓存的可靠性存储。
可以理解的,缓存容量一般都很小,如果每个数据都是副本备份的方式存储在单存储节点的缓存空间里,会导致缓存空间的浪费,进而使得存储性能下降。而本申请通过对待写数据是否是单副本进行了判断,只对没有可靠性保护的单副本数据进行副本备份,使得数据存储的可靠性大大提升的同时,降低了对存储性能的影响。
在本申请实施例中,在所述待写数据的单副本数据的情况下,如果当前缓存子空间中只有k个缓存子空间拥有足够的缓存资源,可以存储所述待写数据或者副本数据,那么在步骤S604,只有待写数据以及k-1个副本数据将被分别写入不同的缓存子空间中,剩下的数据可以被丢弃。也就是说,所述写数据请求包括所述待写数据的长度信息,所述将所述待写数据以及所述副本数据分别写入不同的缓存子空间中包括:根据所述待写数据的长度信息,确定拥有足够缓存资源存储所述待写数据或者副本数据的k个缓存子空间;将所述待写数据以及k-1个副本数据写入不同的k个缓存子空间中,其中,所述k个缓存子空间中的每个缓存子空间,只有一个待写数据或者副本数据;删除剩余的副本数据。
举例来说,假设待写数据A需要存储在存储节点601上,所述存储节点601已经确定了所述待写数据A是单副本数据,并且对所述待写数据A进行了副本备份,获得了副本数据A’,然而,第二缓存子空间6012的剩余缓存资源很少,无法存储待写数据A,因此,即使待写数据是单副本数据且已经进行了副本备份获得了副本数据A’,所述待写数据将仍以单副本数据的形态写入所述存储节点601的第一缓存子空间6011缓存中,而副本数据A’将被删除。
需要说明的,对于上述已确定为单副本数据,但是由于缓存资源不足而无法将其副本数据存储在不同缓存子空间中的待写数据,可以将其标记为高优先级存储于缓存子空间中,使得该待写数据可以被优先写入所述存储介质(刷盘),从而缩短所述单副本数据在缓存子空间中等待刷盘的时间,降低缓存丢失的可能性。虽然所述缓存子空间的数据量达到第一阈值后,会统一写入所述存储介质中,但是限制于所述存储介质的驱动器(比如硬盘驱动器,磁盘驱动器等等)的处理能力,可能无法将全部缓存数据同时写入所述存储介质,因此,将该待写数据作为优先级最高的数据被优先写入所述存储介质,可以减少由于缓存故障导致单副本数据丢失的情况,提升单副本数据缓存的可靠性。
在本申请实施例中,所述释放所述第一数据占用的缓存空间包括:确定所述第一数据是否包含副本标识;在所述第一数据包含副本标识的情况下,根据所述副本标识,获取所述第一数据的副本数据的缓存地址;释放所述第一数据的副本数据占用的缓存空间;释放所述第一数据占用的缓存空间;或者,在所述第一数据不包含副本标识的情况下,释放所述第一数据占用的缓存空间。可以理解的,本申请针对的是单副本数据在缓存中可靠性低的问题,虽然缓存中存储了待写数据以及副本数据,但是存储介质(比如磁盘)中只需要存储一份待写数据即可。因此为了避免所述待写数据重复写入所述存储介质,当待写数据或者副本数据中的任意一个数据被写入所述存储介质后,每个缓存子空间中的待写数据或者副本数据都将被释放。
综上可知,实施本申请实施例提供的数据存储方法,可以在确认待写数据为单副本的情况下,对所述待写数据进行镜像备份获得副本数据,并将所述待写数据和副本数据分别存储于所述存储节点缓存的不同缓存子空间中,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM卡上,从而在不浪费缓存空间的情况下,确保了单存储节点内缓存数据的可靠性,解决了当单个存储节点内的缓存变为单副本数据后,缓存数据将失去可靠性的问题。
结合上文图1-图6所述实施例中的相关描述,下面介绍本申请适用的相关装置。请参见图7,图7是本申请提供的一种数据存储的装置的结构示意图。其中,所述数据存储的装置可以是前述内容中的存储节点(比如图6中的存储节点61)。如图7所示的数据存储装置700包括接收单元710、写入单元720以及确定730。
接收单元710,所述接收单元用于接收主机发送的写数据请求,所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据;
写入单元720,所述写入单元用于将所述待写数据写入所述缓存的第一缓存子空间中;
所述写入单元720还用于将所述待写数据的副本写入所述缓存的第二缓存子空间中。
在本申请实施例中,所述待写数据包括副本标识,所述副本标识用于指示所述待写数据是否具有存储在其他存储节点中的数据副本。所述装置还包括确定单元730,所述确定单元730用于在所述写入单元将所述待写数据的副本写入所述缓存的第二缓存子空间中之前,根据所述副本标记,确定所述待写数据不具有存储在其他存储节点中的数据副本。具体实现中,所述确定单元730在所述待写数据不包含副本标识的情况下,确定所述待写数据不具有存储在其他存储节点中的数据副本,也就是说,所述待写数据是单副本数据;或者,在所述待写数据包含副本标识,并且,所述待写数据的副本数据的副本地址所在的存储节点发生故障的情况下,确定所述待写数据是单副本数据,所述副本地址是根据所述副本标识获取得到的。
在实际应用中,本申请实施例的电子设备可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现,当由软件实现时,数据存储装置700以及设备的各个模块的功能也都可以是软件模块。
需要说明的,图7仅仅是本申请实施例的一种实现方式,本申请实施例中提到的多个模块或单元,本领域技术人员应该知道上述多个模块或单元的功能可以拆分到更多的子模块或子单元中,也可以组合成更少的模块或单元中实现同样的技术效果,因此都应落入本申请实施例的保护范围。
综上可知,通过实施本申请实施例,可以在确认待写数据为单副本的情况下,对所述待写数据进行镜像备份获得副本数据,并将所述待写数据和副本数据分别存储于所述存储节点缓存的不同缓存子空间中,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM卡上,从而在不浪费缓存空间的情况下,确保了单存储节点内缓存数据的可靠性,解决了当单个存储节点内的缓存变为单副本数据后,缓存数据将失去可靠性的问题。
下面以图4实施例中描述的应用场景为例(存储节点22以及存储节点23发生了故障,导致待写数据P1变为了单副本数据),详细说明图7中的数据存储装置700(比如存储节点601)中的各个单元模块在图6所示的据存储方法中的协作关系,具体请参考图8-图9。其中,图8将以待写数据P1以及副本数据P1’写入所述缓存过程为例进行举例说明(步骤S601-步骤S605),图9将以所述待写数据P1写入所述存储介质后,释放所述待写数据P1及其副本数据P1’占用的缓存空间的过程进行举例说明(步骤S606-步骤S609)。
需要说明的,图8、图9中的存储节点601即为图4实施例中的存储节点21,缓存601即为图4实施例中的缓存212,存储介质613即为图4实施例中的存储介质213。在图8、图9中的实施例中未示出或未描述的内容具体可参考图4实施例,这里不再进行赘述。
假设图8实施例中的缓存62包括内存条A以及内存条B,因此该缓存62被被分为了两个缓存子空间,分别为缓存子空间0(对应内存条A)以及缓存子空间1(对应内存条B),使用本申请提供的数据存储方法将待写数据P1写入存储介质71的过程可以如下:
1、主机50向所述存储节点601发送写数据请求,存储节点601的接收单元710接收所述写数据请求。所述写数据请求包含所述待写数据P1。
2、存储节点601的确认单元720判断所述待写数据P1所述待写数据是否具有存储在其他存储节点中的数据副本。也就是说,确认所述待写数据P1是否是单副本数据,在所述待写数据P1是单副本数据的情况下,执行步骤3;在所述待写数据P1不是单副本数据的情况下,执行步骤8。
其中,单副本数据可以是没有经过镜像备份的数据,也可以是经过副本备份,但是副本数据存储失败的数据。总之,单副本数据是没有对应的副本数据的待写数据。确定单元720可以通过确定所述待写数据是否包含副本标识,以及副本地址是否合法来判断所述待写数据P1是否为单副本数据,具体可参考前述实施例,这里不再进行赘述。
3、确定单元720生成待写数据P1的副本数据P1’,向所述写入单元730申请双份缓存资源。可以理解的,由于在图8所示的应用场景中,缓存61根据物理资源被划分为两个缓存子空间,因此步骤3对待写数据P1生成1个副本数据P1’,需要申请双份缓存资源。
4、写入单元730判断两个缓存子空间中是否有足够的缓存资源,可以存储所述待写数据P1以及副本数据P1’。当第一缓存子空间6011和第二缓存子空间6012中均有足够缓存资源的情况下,执行步骤5;当缓存子空间0或缓存子空间1中没有足够缓存资源的情况下,执行步骤8。
可以理解的,对于在步骤2已确认为单副本数据,但是在步骤4由于缓存资源不足而无法将其副本数据存储在不同缓存子空间中的待写数据,可以将其标记为高优先级存储于缓存子空间中,使得该待写数据可以被优先写入所述存储介质(刷盘),从而缩短所述单副本数据在缓存子空间中等待刷盘的时间,降低缓存丢失的可能性。具体可参考前述实施例,这里不再进行赘述。
5、从第一缓存子空间中分配资源,缓存地址为D_Addr0,从第二缓存子空间中分配资源,缓存地址为D_Addr1。应理解,上述缓存地址仅用于说明,并不能构成具体限定。
6.设置D_Addr0对应的副本地址为D_Addr1,设置D_Addr1对应的副本地址为D_Addr0。
7.将待写数据P1写入地址D_Addr0,副本数据P1’写入D_Addr1,或者,将待写数据P1写入地址D_Addr1,副本数据P1’写入D_Addr0,本申请不作具体限定。使得待写数据P1和副本数据P1’均包含副本标识,每个数据的副本标识包括该数据的副本地址,比如,P1的缓存地址为D_Addr0,副本地址为D_Addr1;P1’的缓存地址为D_Addr1,副本地址为D_Addr0。
8.写入单元720申请单份缓存资源。由图8可知,申请单份缓存资源的情况主要有两种,一种是待写数据P1不是单副本数据的情况,一种是待写数据P1是单副本数据,但是当前缓存资源不足,无法存储待写数据P1的副本数据的情况。从而达到在不影响缓存运行性能的情况下,实现缓存的可靠性保护。
9.写入730判断剩余资源数量大的缓存子空间。具体实现中,可以通过判断当前第一缓存子空间的剩余资源数量是否高于第二缓存子空间,如果当前第一缓存子空间的剩余资源数量高于第二缓存子空间,将执行步骤11、步骤13以及步骤14;如果当前第一缓存子空间的剩余资源数量不高于第二缓存子空间,将执行步骤10、步骤12以及步骤14。
10.从第一缓存子空间中分配资源,地址为D_Addr1。
11.从第二缓存子空间中分配资源,地址为D_Addr0。
12.设置Addr_1的副本地址为NULL,即没有副本数据。
13.设置Addr_0的副本地址为NULL,即没有副本数据。
14将待写数据P1写入地址D_Addr0或D_Addr1。
参考前述内容可知,如果仍以图4实施例描述的数据存储方法对待写数据P1进行存储,那么即使存储节点21整体并没有发生故障,只是存储待写数据P1的内存条(或者SSD、NVDIMM卡等其他缓存资源)发生了小故障,待写数据P1将会丢失。而如果使用本申请提供的数据存储方法,由于第一缓存子空间和第二缓存子空间1分别存储了待写数据P1以及副本数据P1’,仅损坏一个内存条A(第一缓存子空间),内存条B(第二缓存子空间)上的数据仍存储于缓存空间内,因此数据块P1将不会丢失。
综上,实施本申请实施例,可以在确认待写数据为单副本的情况下,对所述待写数据进行镜像备份获得副本数据,并将所述待写数据和副本数据分别存储于所述存储节点缓存的不同缓存子空间中,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM上,从而在不浪费缓存空间的情况下,确保了单存储节点内缓存数据的可靠性,解决了当单个存储节点内的缓存变为单副本数据后,缓存数据将失去可靠性的问题。
下面假设在步骤14之后,当前第一缓存子空间中的数据量先于第二缓存子空间达到第一阈值,写入单元730接收到存储于缓存地址D_Addr0的待写数据P1的写数据请求后,由图10所示,使用本申请提供的数据存储方法将所述待写数据P1写入所述存储介质70,并释放所述待写数据P1及其副本数据P1’占用的缓存空间过程可以如下:
1.写入单元730将存储于Addr_0中的待写数据P1,写入所述存储介质70中。
参考前述内容可知,当主机10向存储节点61发送所述写数据请求时,所述写数据请求包括所述待写数据P1、所述待写数据P1的存储地址以及所述待写数据P1的长度,其中,所述存储地址即为存储介质的地址,因此写入单元730可以直接根据所述存储地址,将存储于缓存地址Addr_0中的待写数据P1,写入所述存储地址对应的存储介质中。
2.判断待写数据P1是否包含副本标识。当所述待写数据P1包含副本地址的情况下,执行步骤3,当待写数据不包含副本地址的情况下,执行步骤7。
3.根据所述副本标识,获得副本数据P1’的副本地址Addr_1。
可以理解的,根据图8实施例中的步骤7可知,待写数据P1和副本数据P1’均包含副本标识,每个数据的副本标识包括该数据的副本地址,其中待写数据P1的缓存地址为D_Addr0,副本地址为D_Addr1,因此可以根据副本标识获得待写数据P1的副本数据的缓存地址。
4.判断Addr1是否是合法地址。当Addr1是合法地址的情况下,执行步骤6,当Addr1不是合法地址的情况下,执行步骤7。
5.Addr1的副本数据的地址是否为Addr0。
6.释放Addr1缓存资源。
7.释放Addr0缓存资源。
可以理解的,参考图9可知,由于在步骤1将存储于Add0的待写数据P1写入了存储介质,因此Addr0缓存资源一定被释放,但是Addr0对应的副本地址不一定被释放,只有在确认待写数据P1有副本数据,且副本地址合法的情况下,副本地址Addr1对应的缓存也将被释放。
同理,如果缓存子空间1中的数据先于缓存子空间0达到了第一阈值,那么在步骤1可以将存储于缓存地址D_Addr1的副本数据P1’写入所述存储介质中,并释放缓存地址D_Addr1以及D_Addr0的缓存资源。这里不再进行赘述。
综上,实施本申请实施例,可以在确认待写数据为单副本的情况下,对所述待写数据进行镜像备份获得副本数据,并将所述待写数据和副本数据分别存储于所述存储节点缓存的不同缓存子空间中,并且不同的缓存子空间位于不同的内存条、不同的SSD或者不同的NVIDIMM卡上,从而在不浪费缓存空间的情况下,确保了单存储节点内缓存数据的可靠性,解决了当单个存储节点内的缓存变为单副本数据后,缓存数据将失去可靠性的问题。
请参见图10,图10是本申请实施例提供的一种电子设备81的结构示意图。其中,所述电子设备81可以是前述内容中的存储节点或者数据存储装置,如图10所示,电子设备81包括一个或多个处理器812、通信接口811和存储器813。处理器811、通信接口812和存储器813可通过总线方式连接,也可通过无线传输等其他手段实现通信。本申请实施例以通过总线814连接为例,其中,该存储器813用于存储指令,该处理器812用于执行该存储器813存储的指令。该存储器813存储程序代码,且处理器812可以调用存储器813中存储的程序代码实现图6、图8以及图9实施例中描述的数据存储的方法。
如图10所示的存储器813包括多个缓存子空间(8131和8132),其中,该存储器813是内存类型的存储器,比如内存条,该存储器(8213和8223)还可以是硬盘类型的存储器,比如SSD以及NVDIMM卡等等。每个缓存子空间的内存类型不同,或者,内存类型相同但是不在同一个SSD、内存条或者NVDIMM卡上。存储器可用于存储一组指令,以便于处理器或驱动器调用该存储器中存储的指令以执行相应地操作步骤,还用于存储图6、图8以及图9实施例中的待写数据或副本数据
应理解的,处理器812可以由一个或者多个通用处理器构成,例如中央处理器(Central Processing Unit,CPU)。处理器可用于运行相关的程序代码中以执行相应操作,实现相关功能模块的功能。示例性地,处理器812可运行相关的程序代码实现如图5、图7、图8以及图9所示的模块、方法或单元,具体的图7所示的确定模块、写入管理以及接收模块。关于这里提及的各个功能模块或单元具体可参见前述实施例中的相关阐述,这里不再赘述。
通信接口811,可以为内部接口(例如高速串行计算机扩展总线(PeripheralComponent Interconnect express,PCIe)总线接口)、有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与其他模块/设备进行通信。例如,本申请实施例中通信接口811具体可用于向缓存82的驱动器控制电路发送存储待写数据的指令等等。
需要说明的,图10仅仅是本申请实施例的一种可能的实现方式,实际应用中,所述电子设备还可以包括更多或更少的部件,这里不作限制。关于本申请实施例中未示出或未描述的内容,可参见前述图1-图9所述实施例中的相关阐述,这里不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在处理器上运行时,图6、图8或图9所示的方法流程得以实现。
本申请实施例还提供一种计算机程序产品,当所述计算机程序产品在处理器上运行时,图6、图8或图9所示的方法流程得以实现。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (12)

1.一种数据存储的方法,其特征在于,应用于存储节点,所述存储节点包括缓存,所述方法包括:
存储节点接收主机发送的写数据请求,其中,所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据;
将所述待写数据写入所述缓存的第一缓存子空间中;
将所述待写数据的副本写入所述缓存的第二缓存子空间中。
2.根据权利要求1所述的方法,其特征在于,所述待写数据包括副本标识,所述副本标识用于指示所述待写数据是否具有存储在其他存储节点中的数据副本。
3.根据权利要求2所述的方法,其特征在于,在所述将所述待写数据的副本写入所述缓存的第二缓存子空间中之前,还包括:
根据所述副本标记,确定所述待写数据不具有存储在其他存储节点中的数据副本。
4.根据权利要求1至3任一权利要求所述的方法,其特征在于,所述第一缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。
5.根据权利要求1至4任一权利要求所述的方法,其特征在于,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。
6.一种数据存储的装置,其特征在于,所述装置位于存储节点中,包括:
接收单元,所述接收单元用于接收主机发送的写数据请求,所述写数据请求包括所述待写数据,所述写数据请求用于请求存储所述待写数据;
写入单元,所述写入单元用于将所述待写数据写入所述缓存的第一缓存子空间中;
所述写入单元还用于将所述待写数据的副本写入所述缓存的第二缓存子空间中。
7.根据权利要求5所述的装置,其特征在于,所述待写数据包括副本标识,所述副本标识用于指示所述待写数据是否具有存储在其他存储节点中的数据副本。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括确定单元,
所述确定单元用于在所述写入单元将所述待写数据的副本写入所述缓存的第二缓存子空间中之前,根据所述副本标记,确定所述待写数据不具有存储在其他存储节点中的数据副本。
9.根据权利要求5至7任一权利要求所述的装置,其特征在于,所述第一缓存子空间的类型是随机存储器RAM、固态硬盘SSD和非易失性双列直插式内存卡NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。
10.根据权利要求1至4任一权利要求所述的方法,其特征在于,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。
11.一种缓存,其特征在于,包括第一缓存子空间以及第二缓存子空间,其中,
所述第一缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,所述第二缓存子空间的类型是RAM、SSD和NVDIMM中的其中一种,并且,所述第二缓存子空间的类型与所述第一缓存子空间的类型不同。
12.根据权利要求11所述的缓存,其特征在于,所述第二缓存子空间的类型与所述第一缓存子空间的类型相同,其中,所述第一缓存子空间与所述第二缓存子空间不属于同一个存储器。
CN201910808960.3A 2019-08-29 2019-08-29 一种数据存储的方法、装置及相关设备 Pending CN112445413A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910808960.3A CN112445413A (zh) 2019-08-29 2019-08-29 一种数据存储的方法、装置及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910808960.3A CN112445413A (zh) 2019-08-29 2019-08-29 一种数据存储的方法、装置及相关设备

Publications (1)

Publication Number Publication Date
CN112445413A true CN112445413A (zh) 2021-03-05

Family

ID=74742383

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910808960.3A Pending CN112445413A (zh) 2019-08-29 2019-08-29 一种数据存储的方法、装置及相关设备

Country Status (1)

Country Link
CN (1) CN112445413A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116257493A (zh) * 2022-12-29 2023-06-13 北京京桥热电有限责任公司 一种基于缓存机制的opc穿网闸接口

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120017033A1 (en) * 2009-12-08 2012-01-19 Hitachi, Ltd. Storage system and storage control apparatus provided with cache memory group including volatile memory and nonvolatile memory
US20140136887A1 (en) * 2012-11-09 2014-05-15 International Business Machines Corporation Disk array having mirror configuration and rebuilding method therefor
US20140201446A1 (en) * 2011-12-28 2014-07-17 Simon C. Steeley, JR. High bandwidth full-block write commands
CN104735119A (zh) * 2013-12-23 2015-06-24 伊姆西公司 用于数据拷贝避免的方法和装置
CN107678689A (zh) * 2017-09-27 2018-02-09 郑州云海信息技术有限公司 一种数据写入的方法及装置
CN109582217A (zh) * 2017-09-28 2019-04-05 慧荣科技股份有限公司 数据储存装置与将数据写入存储器装置的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120017033A1 (en) * 2009-12-08 2012-01-19 Hitachi, Ltd. Storage system and storage control apparatus provided with cache memory group including volatile memory and nonvolatile memory
US20140201446A1 (en) * 2011-12-28 2014-07-17 Simon C. Steeley, JR. High bandwidth full-block write commands
US20140136887A1 (en) * 2012-11-09 2014-05-15 International Business Machines Corporation Disk array having mirror configuration and rebuilding method therefor
CN104735119A (zh) * 2013-12-23 2015-06-24 伊姆西公司 用于数据拷贝避免的方法和装置
CN107678689A (zh) * 2017-09-27 2018-02-09 郑州云海信息技术有限公司 一种数据写入的方法及装置
CN109582217A (zh) * 2017-09-28 2019-04-05 慧荣科技股份有限公司 数据储存装置与将数据写入存储器装置的方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116257493A (zh) * 2022-12-29 2023-06-13 北京京桥热电有限责任公司 一种基于缓存机制的opc穿网闸接口

Similar Documents

Publication Publication Date Title
US10241722B1 (en) Proactive scheduling of background operations for solid state drives
US10719479B2 (en) Data unit cloning in memory-based file systems
US8966195B2 (en) Direct memory access and super page swapping optimizations for a memory blade
CN108733311B (zh) 用于管理存储系统的方法和设备
US8572338B1 (en) Systems and methods for creating space-saving snapshots
CN109725823B (zh) 用于管理混合存储盘阵列的方法和设备
US10261710B2 (en) Volume integrity in a shared-resource environment
US20160011965A1 (en) Pass through storage devices
US20220334733A1 (en) Data restoration method and related device
US10664193B2 (en) Storage system for improved efficiency of parity generation and minimized processor load
CN107203480B (zh) 一种数据预取方法以及装置
JP5893028B2 (ja) キャッシングに対応したストレージ装置上における効率的なシーケンシャルロギングのためのシステム及び方法
US9177177B1 (en) Systems and methods for securing storage space
US11775194B2 (en) Data storage method and apparatus in distributed storage system, and computer program product
US20220129416A1 (en) Dynamic storage group resizing during cloud snapshop shipping
US11099740B2 (en) Method, apparatus and computer program product for managing storage device
CN117591009A (zh) 一种数据管理方法、存储装置及服务器
CN112445413A (zh) 一种数据存储的方法、装置及相关设备
CN112748848A (zh) 用于存储管理的方法、设备和计算机程序产品
CN106020975B (zh) 数据操作方法、装置和系统
US8281096B1 (en) Systems and methods for creating snapshots
CN115904795A (zh) 存储系统中的数据存储方法及装置
KR101569049B1 (ko) 패스 스루 스토리지 디바이스들
CN114327248A (zh) 存储节点、存储设备及网络芯片
US10366014B1 (en) Fast snap copy

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