CN111221478B - 数据写入、读取方法、装置、设备及机器可读存储介质 - Google Patents
数据写入、读取方法、装置、设备及机器可读存储介质 Download PDFInfo
- Publication number
- CN111221478B CN111221478B CN202010032903.3A CN202010032903A CN111221478B CN 111221478 B CN111221478 B CN 111221478B CN 202010032903 A CN202010032903 A CN 202010032903A CN 111221478 B CN111221478 B CN 111221478B
- Authority
- CN
- China
- Prior art keywords
- data
- image
- read
- written
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003860 storage Methods 0.000 title claims abstract description 358
- 238000000034 method Methods 0.000 title claims abstract description 72
- 238000013507 mapping Methods 0.000 claims description 29
- 238000012217 deletion Methods 0.000 claims description 22
- 230000037430 deletion Effects 0.000 claims description 22
- 230000008859 change Effects 0.000 claims description 15
- 238000003672 processing method Methods 0.000 claims description 3
- 239000000523 sample Substances 0.000 claims 3
- 230000004048 modification Effects 0.000 abstract description 9
- 238000012986 modification Methods 0.000 abstract description 9
- 238000010586 diagram Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 10
- 238000004590 computer program Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据写入、读取方法、装置、设备及机器可读存储介质,该数据写入方法包括:确定待写入数据对应的分层存储映像;从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;将所述待写入数据写入到所述数据文件;生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;将所述数据索引写入到所述索引文件。通过本申请的技术方案,能够支持数据的修改,提高用户体验。
Description
技术领域
本申请涉及互联网技术领域,尤其是涉及一种数据写入、读取方法、装置、设备及机器可读存储介质。
背景技术
随着云计算技术的不断成熟,容器(container)技术逐步成为业界的发展热点,各主流云计算平台均能够提供容器服务。对于容器服务来说,不需要安装操作系统,直接将容器安装在操作系统之上。容器可以看成是装好一组特定应用的虚拟机,直接利用宿主机的内核,更加轻量化,启动速度极快。
在相关技术中,可以将业务运行在虚拟机/容器,但是,虚拟机/容器并不支持应用数据的修改,导致用户体验较差。例如,用户提交商品购买请求后,如果用户需要对商品收货地址进行修改,则虚拟机/容器并不支持对应用数据中的商品收货地址进行修改。
发明内容
本申请提供一种数据写入方法,所述方法包括:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件。
本申请提供一种数据读取方法,所述方法包括:
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
本申请提供一种数据处理方法,所述方法包括:
建立分层存储映像,所述分层存储映像包括可写映像文件和至少一个只读映像文件;所述可写映像文件包括数据文件和索引文件,所述只读映像文件包括原始数据字段和索引字段,所述索引字段包括已写入数据的数据索引;
在需要向所述分层存储映像中写入待写入数据时,将所述待写入数据写入到所述数据文件,并将所述待写入数据对应的数据索引写入到所述索引文件;
在需要从所述分层存储映像中读取待读取数据时,基于所述索引文件中的数据索引和所述只读映像文件的索引字段中的数据索引,从所述数据文件和/或所述只读映像文件的原始数据字段中读取所述待读取数据。
本申请提供一种数据写入装置,所述装置包括:
确定模块,用于确定待写入数据对应的分层存储映像;
获取模块,用于从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
写入模块,用于将所述待写入数据写入到所述数据文件;
生成模块,用于生成待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
所述写入模块,还用于将所述数据索引写入到所述索引文件。
本申请提供一种数据读取装置,所述装置包括:确定模块,用于确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
选取模块,用于根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
读取模块,用于根据所述待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
本申请提供一种存储设备,包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件;或者,
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
本申请提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令;所述计算机指令被执行时进行如下处理:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件;或者,
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
基于上述技术方案,本申请实施例中,通过分层存储映像实现数据的写入与读取,且分层存储映像是支持分层的存储格式,即可以创建多层来实现数据的写入与读取,是支持容器/虚拟机快速扩容的重要组成部分之一。分层存储映像支持数据的分层存储,当对某个文件进行修改时,可以创建新的数据写入层,从而写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前层,而是仍然保存在已有层中,从而避免大量数据的频繁拷贝操作,且能够支持数据的修改,提高用户体验。分层存储映像支持跨层的随机访问,在读取分层存储映像的某一段数据时,可以根据每层的存储位置来确定需要读取的数据位置,从而根据该数据位置实现数据读取,以读取到准确的数据。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其它的附图。
图1是本申请一种实施方式中的分层存储映像的示意图;
图2是本申请一种实施方式中的只读映像文件的结构示意图;
图3是本申请一种实施方式中的数据写入方法的流程示意图;
图4是本申请一种实施方式中的数据删除方法的流程示意图;
图5A是本申请一种实施方式中的映像文件转换方法的流程示意图;
图5B是本申请一种实施方式中的映像文件转换方法的流程示意图;
图6A是本申请一种实施方式中的数据读取方法的流程示意图;
图6B是本申请一种实施方式中的数据读取过程的示意图;
图6C是本申请一种实施方式中的只读层索引的生成示意图;
图6D是本申请一种实施方式中的数据读取方法的流程示意图;
图7是本申请一种实施方式中的数据写入装置的结构示意图;
图8是本申请一种实施方式中的数据读取装置的结构示意图;
图9是本申请一种实施方式中的存储设备的结构示意图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例中,通过分层存储映像实现数据的写入与读取,且分层存储映像是支持分层映像的存储格式,即可以创建多层来实现数据的写入与读取。
分层存储映像可以包括可写映像文件和至少一个只读映像文件,可写映像文件是指同时支持读操作与写操作的映像文件,只读映像文件是指仅支持读操作的映像文件,即只读映像文件不支持写操作。其中,映像文件(image)也可以称为镜像文件,映像文件可以包括存储卷的数据内容和数据结构。
示例性的,分层存储映像可以应用在虚拟机/容器的场景中,即虚拟机/容器将数据写入到分层存储映像,或者从分层存储映像中读取数据。当然,也可以将分层存储映像应用在其它场景中,只要是通过分层存储映像实现数据的写入与读取,且分层存储映像是支持分层映像的存储格式即可,对此不做限制。
参见图1所示,为分层存储映像的示意图,在图1中,以1个可写映像文件和3个只读映像文件为例进行说明。首先,创建第1层的可写映像文件A1,将数据写入到可写映像文件A1中,将可写映像文件A1转换为只读映像文件A1,即只能针对只读映像文件A1进行读操作,而不再对只读映像文件A1进行写操作。然后,创建第2层的可写映像文件A2,将数据写入到可写映像文件A2中,将可写映像文件A2转换为只读映像文件A2。然后,创建第3层的可写映像文件A3,将数据写入到可写映像文件A3中,将可写映像文件A3转换为只读映像文件A3。然后,创建第4层的可写映像文件A4,至此,得到图1所示的分层存储映像,该分层存储映像可以包括第1层的只读映像文件A1、第2层的只读映像文件A2、第3层的只读映像文件A3和第4层的可写映像文件A4。
参见图1所示,针对可写映像文件(如可写映像文件A4)来说,该可写映像文件A4可以包括但不限于数据文件和索引文件。其中,该数据文件可以包括头字段和原始数据字段,该索引文件可以包括头字段和索引字段。
示例性的,数据文件的头字段(Header)与索引文件的头字段可以相同。
参见表1所示,为头字段的一个示例,头字段可以包括表1的部分内容,也可以包括表1的全部内容,还可以包括表1之外的其它内容,对此头字段的内容不做限制,后续以表1为例进行说明。在表1中,MAGIC0和MAGIC1用于文件格式的校验,例如,当MAGIC0为预设第一数值且MAGIC1为预设第二数值时,表示当前文件是分层存储映像的映像文件(即可写映像文件或者只读映像文件),当MAGIC0不为预设第一数值和/或MAGIC1不为预设第二数值时,表示当前文件不是分层存储映像的映像文件。flags表示文件类型,如flags为第一取值(如0)时,表示当前文件是分层存储映像的可写映像文件,flags为第二取值(如1)时,表示当前文件是分层存储映像的只读映像文件。
在表1中,index offset表示索引字段偏移,即索引字段是从映像文件的哪个位置开始,头字段中的索引字段偏移可以为空。index size表示索引字段大小,即索引字段的长度,头字段中的索引字段大小可以为空。uuid(universally unique identifier,通用唯一识别码)表示映像文件的uuid,即当前映像文件的uuid,parent uuid表示父映像文件的uuid,即上一层映像文件的uuid。例如,当前映像文件为可写映像文件A4时,则uuid字段为可写映像文件A4的uuid,parent uuid为只读映像文件A3的uuid;当前映像文件为只读映像文件A3时,则uuid字段为只读映像文件A3的uuid,parent uuid为只读映像文件A2的uuid,以此类推。
关于其它字段的含义,可以参见表1所示,在此不再重复赘述。
表1
示例性的,原始数据字段(Raw data)用于存储数据,即将数据写入到数据文件的原始数据字段。原始数据字段可以由多个长度不等的二进制数据组成,原始数据字段的数据总数与索引字段中未被标记为擦除段的索引数量相当。
示例性的,索引字段(Index)用于记录数据的存储位置,数据在分层存储映像中的存储层数。例如,在将数据B写入到原始数据字段后,可以生成数据B的数据索引B1,将数据索引B1写入到索引字段,数据索引B1包括数据B的存储位置(如数据B相对于分层存储映像起始位置的物理偏移,数据B的长度等),数据B在分层存储映像中的存储层数,如将数据B写入到可写映像文件A4的数据文件的原始数据字段后,数据B在分层存储映像中的存储层数为4。
参见表2所示,为索引字段中的一个数据索引的示例,该数据索引可以包括表2的部分内容,也可以包括表2的全部内容,还可以包括表2之外的其它内容,对此数据索引的内容不做限制,后续以表2为例进行说明。
示例性的,针对写入到原始数据字段的每个数据,均会生成表2所示的数据索引(如16字节的结构体),并将这个数据索引写入到索引字段,即索引字段可以包括多个数据索引,每个数据索引的内容参见表2所示。在表2中,offset表示数据的逻辑地址偏移,length表示数据的长度,基于offset和length,可以从数据文件的实际存储空间查询到数据,并读取数据。例如,基于数据B的数据索引中的offset和length,可以从数据文件的实际存储空间读取数据B。moffset表示数据相对于分层存储映像起始位置的物理偏移,基于moffset和length,可以确定数据在映像文件中的位置。例如,基于数据B的数据索引中的moffset和length,确定数据B在分层存储映像中的起始位置是moffset指示的位置,数据B在分层存储映像中的结束位置是基于moffset指示的位置和length指示的长度确定。zeroed表示数据是否被擦除,例如,若zeroed为0,表示数据被擦除,即数据已经是无效数据,若zeroed为1,表示数据未被擦除,数据仍然是有效数据。tag表示数据在分层存储映像中的存储层数,也可以称为数据在分层存储映像中的存储层号。
表2
示例性的,数据索引的另一种表现形式还可以参见表3所示。
表3
字段名 | 二进制位数 | 作用 |
offset | 50 | 在磁盘中的逻辑地址偏移 |
length | 14 | 数据长度 |
moffset | 55 | 相对于分层存储映像起始位置的物理偏移 |
zeroed | 1 | 数据是否擦除 |
tag | 8 | 数据在分层存储映像中的存储层数 |
参见图1所示,针对只读映像文件(如只读映像文件A1)来说,该只读映像文件可以包括但不限于头字段(Header)、原始数据字段(Raw data)、索引字段(Index)和尾字段(Trailer)。例如,参见图2所示,为只读映像文件的结构示意图,只读映像文件包括头字段、原始数据字段、索引字段和尾字段。
头字段和尾字段的结构相同,主要用于区分映像文件的文件类型(如可写映像文件或只读映像文件),映像文件的次序(如映像文件与父映像文件的次序),原始数据字段在映像文件中的偏移和大小(头字段结束位置,是原始数据字段的起始位置,索引字段开始位置,是原始数据字段的结束位置),索引字段在映像文件中的偏移和大小(如索引字段偏移和索引字段大小)等内容。
示例性的,只读映像文件的头字段的内容,与可写映像文件的头字段的内容类似,可以参见表1所示,在此不再重复赘述。针对只读映像文件的尾字段,flags可以为第二取值,用于表示当前文件是分层存储映像的只读映像文件。
index offset表示索引字段偏移,即索引字段是从映像文件的哪个位置开始,index size表示索引字段大小,即索引字段的长度。显然,由于尾字段之前已经在映像文件中写入索引字段,即,可以获知索引字段是从映像文件的哪个位置开始,且获知索引字段的长度,因此,尾字段中的索引字段偏移是实际偏移,而不为空,尾字段中的索引字段大小是索引字段的实际长度,而不为空。
关于尾字段的其它内容,与只读映像文件的头字段相同,在此不再赘述。
示例性的,原始数据字段用于存储数据,即只读映像文件的原始数据字段已经存储有多个数据。原始数据字段可以由多个长度不等的二进制数据组成,原始数据字段的数据总数与索引字段中未被标记为擦除段的索引数量相当。
索引字段包括多个数据索引,针对每个数据索引来说,该数据索引用于记录数据的存储位置,数据在分层存储映像中的存储层数。数据索引的内容可以参见表2或表3所示,与可写映像文件的数据索引类似,在此不再赘述。
综上所述,基于本实施例中的分层存储映像,可以通过原始数据字段和索引字段共同维护对存储卷中数据的修改(写入操作或者删除操作)。
针对每一次修改:原始数据字段用于存储本次写入的数据,索引字段用于存储本次写入数据的数据索引(如数据的存储位置(即逻辑地址偏移、数据长度、相对于分层存储映像起始位置的物理偏移),数据的存储层数等)。
示例性的,原始数据字段和索引字段共同维护的是相对于头字段的Parent uuid所表示的映像文件的数据变更,因此,按照映像文件的Parent-uuid,可以将多个映像文件按序堆叠,这些按序堆叠的映像文件就组成分层存储映像。
示例性的,分层存储映像还可以包括一个可写映像文件,通过可写映像文件来保存运行时的数据变更。可以对可写映像文件的原始数据字段的数据进行垃圾回收并重建索引,从而将可写映像文件转换为只读映像文件。
综上所述,分层存储映像(即存储卷)可由多个只读映像文件和至多一个可写映像文件堆叠而成,在实际业务中,一个完整的分层存储映像具有严格的堆叠顺序,位于上层的映像文件记录了堆叠在它下方的映像文件的数据变更。
示例性的,读写操作是以512字节的扇区为基本单位,索引字段中的offset以扇区为计数单位,offset表示的数据范围最大可以到2^50*512B=0.5PB。
在上述应用场景下,本申请实施例中提出一种数据写入方法,参见图3所示,为该数据写入方法的流程示意图,该数据写入方法可以包括:
步骤301,确定待写入数据对应的分层存储映像。
示例性的,可以为每个用户维护分层存储映像,该待写入数据可以包括身份信息,因此,可以确定与该身份信息对应的分层存储映像,即该待写入数据对应的分层存储映像。或者,可以为每个类型维护分层存储映像,该待写入数据可以包括数据类型,因此,可以确定与该数据类型对应的分层存储映像,即该待写入数据对应的分层存储映像。当然,上述方式只是两个示例,对此不做限制,只要能够确定待写入数据对应的分层存储映像即可。
示例性的,为了区分方便,将当前需要写入的数据称为待写入数据,例如,假设需要将数据B写入到分层存储映像,则数据B称为待写入数据。
步骤302,从分层存储映像中获取用于存储该待写入数据的可写映像文件;其中,该可写映像文件可以包括数据文件和索引文件。
示例性的,分层存储映像可以包括可写映像文件。或者,分层存储映像可以包括可写映像文件和至少一个只读映像文件。或者,分层存储映像可以包括至少一个只读映像文件。基于此,可以先判断分层存储映像中是否存在可写映像文件。如果是,则可以将已存在的可写映像文件确定为用于存储该待写入数据的可写映像文件;如果否,则可以在分层存储映像中创建可写映像文件,并将创建的可写映像文件确定为用于存储该待写入数据的可写映像文件。
例如,参见图1所示,假设存在只读映像文件A1,只读映像文件A2,只读映像文件A3和可写映像文件A4,则可以将可写映像文件A4确定为用于存储待写入数据的可写映像文件。或者,假设存在只读映像文件A1,只读映像文件A2和只读映像文件A3,则可以在分层存储映像中创建可写映像文件A4,并将可写映像文件A4确定为用于存储待写入数据的可写映像文件。
步骤303,将该待写入数据写入到可写映像文件的数据文件。
示例性的,数据写入方式可以采用LogStructure(记录结构)模式,也就是说,可以采用追加写的方式,将该待写入数据追加写入至数据文件的尾部。
例如,参见图1所示,可写映像文件的数据文件包括头字段和原始数据字段,可以采用追加写的方式,将该待写入数据追加写入至原始数据字段的尾部。
步骤304,生成待写入数据对应的数据索引,该数据索引包括该待写入数据的存储位置,该待写入数据在分层存储映像中的存储层数。
待写入数据的存储位置可以包括:待写入数据的逻辑地址偏移、待写入数据的数据长度、待写入数据相对于分层存储映像的起始位置的物理偏移。
示例性的,该数据索引的内容可以参见表2所示,该数据索引包括待写入数据的逻辑地址偏移(即本次写入到磁盘中的逻辑位置,通过这个逻辑地址偏移可以查询到待写入数据在磁盘中的实际存储位置);待写入数据的数据长度;待写入数据相对于分层存储映像起始位置的物理偏移(即待写入数据写入前数据文件的总长度,通过这个物理偏移可以查询到待写入数据在分层存储映像中的存储位置);待写入数据是否被擦除(由于是待写入数据的写入,因此,zeroed为1,表示数据未被擦除);待写入数据在分层存储映像中的存储层数,由于待写入数据是写入到可写映像文件A4,因此,待写入数据的存储层数是4。
步骤305,将该数据索引写入到可写映像文件的索引文件。
示例性的,数据索引写入方式可以采用LogStructure模式,也就是说,可以采用追加写的方式,将该数据索引追加写入至索引文件的尾部。
例如,参见图1所示,可写映像文件的索引文件包括头字段和索引字段,可以采用追加写的方式,将该数据索引追加写入至索引字段的尾部。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,通过分层存储映像实现数据的写入与读取,且分层存储映像是支持分层的存储格式,即可以创建多层来实现数据的写入与读取,是支持容器/虚拟机快速扩容的重要组成部分之一。分层存储映像支持数据的分层存储,当对某个文件进行修改时,可以创建新的数据写入层,从而写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前层,而是仍然保存在已有层中,从而避免大量数据的频繁拷贝操作,且能够支持数据的修改,提高用户体验。例如,原始数据字段和索引字段共同维护的是相对于头字段的Parent uuid所表示的映像文件的数据变更因此,当对某个文件进行修改时,未修改的数据不会被存入当前层,而是仍然保存在已有层中。
在上述应用场景下,本申请实施例中提出一种数据删除方法,参见图4所示,为该数据删除方法的流程示意图,该数据删除方法可以包括:
步骤401,确定需要从可写映像文件中删除已存储的待删除数据。
示例性的,针对分层存储映像的可写映像文件,由于可写映像文件支持数据写入操作,且数据删除是数据写入的一种操作类型,因此,可以从分层存储映像的可写映像文件中删除待删除数据。基于此,若接收到待删除数据的删除命令,则确定需要从分层存储映像的可写映像文件中删除待删除数据。
示例性的,为了区分方便,将当前需要删除的数据称为待删除数据,例如,假设需要从分层存储映像中删除数据B,则数据B称为待删除数据。
步骤402,生成该待删除数据对应的删除索引,该删除索引包括该待删除数据的存储位置,该待删除数据在分层存储映像中的存储层数。
示例性的,删除索引实际上可以是数据索引,这里只是为了区分方便,将待删除数据对应的数据索引记为删除索引,对此删除索引不做限制。
待删除数据的存储位置可以包括:待删除数据的逻辑地址偏移、待删除数据的数据长度、待删除数据相对于分层存储映像的起始位置的物理偏移。
示例性的,该删除索引的内容可以参见表2所示,该删除索引包括待删除数据的逻辑地址偏移(即本次删除的数据在磁盘中的逻辑位置,通过这个逻辑地址偏移可以查询到待删除数据在磁盘中的实际存储位置);待删除数据的数据长度;待删除数据相对于分层存储映像起始位置的物理偏移(即本次删除的数据在分层存储映像中的物理偏移,通过这个物理偏移可以查询到待删除数据在分层存储映像中的存储位置);待删除数据是否被擦除(由于是数据删除,因此,zeroed为0,表示数据被擦除,在数据读取过程中,由于数据已经被擦除,因此,不再读取这部分的数据);待删除数据在分层存储映像中的存储层数。
步骤403,将该删除索引写入到可写映像文件的索引文件。
示例性的,删除索引的写入方式可以采用LogStructure模式,也就是说,可以采用追加写的方式,将该删除索引追加写入至索引文件的尾部。
例如,参见图1所示,可写映像文件的索引文件包括头字段和索引字段,可以采用追加写的方式,将该删除索引追加写入至索引字段的尾部。
在上述应用场景下,本申请实施例中提出一种映像文件转换方法,参见图5A所示,为该映像文件转换方法的流程示意图,该方法可以包括:
步骤501,确定需要将可写映像文件转换为只读映像文件。
示例性的,针对分层存储映像的可写映像文件,可写映像文件支持数据写入操作和数据读取操作,为了使可写映像文件只支持数据读取操作,不支持数据写入操作,就需要将可写映像文件转换为只读映像文件。基于此,若接收到可写映像文件的转换命令,则确定需要将可写映像文件转换为只读映像文件。
步骤502,当需要将可写映像文件转换为只读映像文件时,则将可写映像文件的索引文件的索引字段写入到数据文件,得到只读映像文件。
在一种可能的实施方式中,参见图1所示,可写映像文件包括数据文件和索引文件,数据文件包括头字段和原始数据字段,索引文件包括头字段和索引字段,可以将索引文件的索引字段写入到数据文件,如写入到原始数据字段的后面,并在索引字段的后面写入尾字段。将修改后的数据文件作为只读映像文件,即,只读映像文件依次包括头字段,原始数据字段,索引字段和尾字段。
示例性的,在索引字段的后面写入尾字段时,尾字段的格式可以参见表1所示。flags表示当前文件是只读映像文件。index offset表示索引字段偏移,即索引字段是从映像文件的哪个位置开始,index size表示索引字段大小,即索引字段的长度。关于尾字段的其它内容,与头字段相同,在此不再赘述。
示例性的,将可写映像文件的索引文件的索引字段写入到数据文件,得到只读映像文件之后,还可以对只读映像文件的原始数据字段中的无效数据进行清理;和/或,对只读映像文件的索引字段中的连续索引区间进行合并。
其中,针对“对只读映像文件的原始数据字段中的无效数据进行清理;和/或,对只读映像文件的索引字段中的连续索引区间进行合并”的执行顺序,可以在“在索引字段的后面写入尾字段”之前执行,对此执行顺序不做限制。
例如,针对原始数据字段中的数据,若存在两个重复的数据,则将其中一个数据作为无效数据,将无效数据从原始数据字段中删除,并从索引字段中删除与该无效数据对应的数据索引。针对原始数据字段中的数据,若某个数据是异常数据(或错误数据),则将该数据作为无效数据,将无效数据从原始数据字段中删除,并从索引字段中删除与该无效数据对应的数据索引。当然,上述只是对无效数据进行清理的两个示例,对此数据清理过程不做限制。
在从索引字段中删除与无效数据对应的数据索引后,还可以对只读映像文件的索引字段中的连续索引区间进行合并,得到有效索引。例如,假设数据1相对于分层存储映像起始位置的物理偏移为5,数据1的长度为100,则数据1的数据索引包括物理偏移5和数据长度100,即只读映像文件中的偏移5-105是数据1。假设数据2相对于分层存储映像起始位置的物理偏移为105,数据2的长度为100,则数据2的数据索引包括物理偏移105和数据长度100,即只读映像文件中的偏移105-205是数据2。假设数据3相对于分层存储映像起始位置的物理偏移为205,数据3的长度为100,则数据3的数据索引包括物理偏移205和数据长度100,即只读映像文件中的偏移205-305是数据3。
在此基础上,假设数据2是无效数据,则从原始数据字段中删除数据2,并从索引字段中删除数据2的数据索引。然后,数据1的数据索引与数据3的数据索引是索引字段中的连续索引区间,可以对索引字段中的连续索引区间进行合并,得到有效索引。例如,有效索引可以为:数据1的数据索引包括物理偏移5和数据长度100,数据3的数据索引包括物理偏移105和数据长度100。
在上述应用场景下,本申请实施例中提出另一种映像文件转换方法,通过compact(契约)操作或者seal(密封)操作等方式,将可写映像文件转换为具有等效数据的只读映像文件。compact操作可以对数据文件中的无效数据进行清理,对索引文件中表示连续区间的数据索引进行合并,seal操作仅将索引文件直接追加至数据文件的末尾。参见图5B所示,为该方法的流程图,该方法包括:
步骤511,获取可写映像文件的数据文件和索引文件。
步骤512,判断是否为seal操作。
如果是,则执行步骤513,如果否,则执行步骤515。
步骤513,将索引文件中的索引字段写入到数据文件的末尾。
步骤514,在数据文件的索引字段的后面写入尾字段,得到只读映像文件。
步骤515,创建只读映像文件的头字段。
步骤516,整理数据文件中的原始数据字段的数据,整理索引文件中的索引字段的数据索引。例如,对原始数据字段中的无效数据进行清理,并从索引字段中删除无效数据对应的数据索引,并对索引字段中的连续索引区间进行合并。
步骤517,将数据文件中的原始数据字段写入到只读映像文件的头字段的后面,并将索引文件中的索引字段写入到只读映像文件的原始数据字段的后面。
步骤518,在只读映像文件的索引字段的后面写入尾字段。
在上述应用场景下,本申请实施例中提出一种数据读取方法,参见图6A所示,为该数据读取方法的流程示意图,该数据读取方法可以包括:
步骤601,确定待读取数据对应的分层存储映像。
示例性的,分层存储映像可以包括至少一个映像文件,针对分层存储映像中的每个映像文件,该映像文件可以为可写映像文件,或者只读映像文件。该映像文件可以包括已写入数据的存储位置和已写入数据的存储层数。
示例性的,可以为每个用户维护分层存储映像,该待读取数据可以包括身份信息,因此,可以确定与该身份信息对应的分层存储映像,即该待读取数据对应的分层存储映像。或者,可以为每个类型维护分层存储映像,该待读取数据可以包括数据类型,因此,可以确定与该数据类型对应的分层存储映像,即该待读取数据对应的分层存储映像。当然,上述方式只是两个示例,对此不做限制,只要能够确定该待读取数据对应的分层存储映像即可。
示例性的,为了区分方便,将当前需要读取的数据称为待读取数据,将映像文件(如可写映像文件或只读映像文件)中已经写入的数据成为已写入数据。
示例性的,针对分层存储映像中的可写映像文件,包括数据文件和索引文件,数据文件包括已写入数据,索引文件包括已写入数据的存储位置和已写入数据的存储层数。例如,数据文件包括原始数据字段,该原始数据字段包括已写入数据。索引文件包括索引字段,该索引字段包括已写入数据对应的数据索引,该数据索引包括已写入数据的存储位置(如逻辑地址偏移、数据长度、相对于分层存储映像起始位置的物理偏移)和已写入数据的存储层数。
示例性的,针对分层存储映像中的只读映像文件,包括原始数据字段和索引字段,该原始数据字段包括已写入数据,该索引字段包括已写入数据对应的数据索引,该数据索引包括已写入数据的存储位置(如逻辑地址偏移、数据长度、相对于分层存储映像起始位置的物理偏移)和已写入数据的存储层数。
步骤602,根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从分层存储映像的映像文件中选取目标映像文件。
在一种可能的实施方式中,可以基于已写入数据的存储位置与待读取数据的存储位置的匹配关系,从分层存储映像的映像文件中选取至少一个初始映像文件。然后,基于每个初始映像文件中的已写入数据的存储层数,从分层存储映像的至少一个初始映像文件中选择存储层数大的映像文件作为目标映像文件。其中,存储层数大的映像文件中的已写入数据的数据写入时间,可以晚于存储层数小的映像文件中的已写入数据的数据写入时间。
例如,待读取数据的存储位置包括待读取数据相对于分层存储映像起始位置的物理偏移和待读取数据的数据长度,基于这两个参数可以确定待读取数据对应的位置区间C,位置区间C表示分层存储映像中的起始位置到终止位置。
已写入数据的存储位置包括已写入数据相对于分层存储映像起始位置的物理偏移和已写入数据的数据长度,基于这两个参数可以确定已写入数据对应的位置区间D,位置区间D表示分层存储映像中的起始位置到终止位置。
由于映像文件包括多个已写入数据,每个已写入数据对应一个数据索引,每个数据索引均包括已写入数据的存储位置,因此存在多个位置区间D。
参见图1所示,基于可写映像文件A4的索引字段,可以确定位置区间D41、位置区间D42、位置区间D43等。基于只读映像文件A3的索引字段,可以确定位置区间D31、位置区间D32、位置区间D33等。基于只读映像文件A2的索引字段,可以确定位置区间D21、位置区间D22、位置区间D23等。基于只读映像文件A1的索引字段,确定位置区间D11、位置区间D12、位置区间D13等。
例如,若位置区间C是位置区间D41的子集,则说明位置区间C与位置区间D41存在匹配关系,将可写映像文件A4作为初始映像文件。若位置区间C是位置区间D32的子集,则将只读映像文件A3作为初始映像文件。若位置区间C是位置区间D21的子集,则将只读映像文件A2作为初始映像文件。
综上所述,可以将可写映像文件A4、只读映像文件A3和只读映像文件A2作为初始映像文件。由于可写映像文件A4中的已写入数据的存储层数为4,只读映像文件A3中的已写入数据的存储层数为3,只读映像文件A2中的已写入数据的存储层数为2,因此,将存储层数大的可写映像文件A4作为目标映像文件。显然,可写映像文件A4中的已写入数据的数据写入时间,晚于只读映像文件A3中的已写入数据的数据写入时间,只读映像文件A3中的已写入数据的数据写入时间,晚于只读映像文件A2中的已写入数据的数据写入时间。
又例如,若位置区间C与位置区间D41存在交集,如位置区间C的子区间C1是位置区间D41的子集,则将可写映像文件A4作为子区间C1的初始映像文件。若子区间C1是位置区间D31的子集,则将读映像文件A3作为子区间C1的初始映像文件。此外,若位置区间C的子区间C2是位置区间D32的子集,则将读映像文件A3作为子区间C2的初始映像文件。若子区间C2是位置区间D21的子集,则将读映像文件A2作为子区间C2的初始映像文件。
综上所述,可以将可写映像文件A4和只读映像文件A3作为子区间C1的初始映像文件,并将存储层数大的可写映像文件A4作为子区间C1的目标映像文件。可以将只读映像文件A3和只读映像文件A2作为子区间C2的初始映像文件,并将存储层数大的只读映像文件A3作为子区间C2的目标映像文件。
在另一种可能的实施方式中,若分层存储映像包括可写映像文件和至少一个只读映像文件,则还可以采用如下步骤选取目标映像文件:
步骤6021,基于每个只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引,只读层索引包括目标只读映像文件(即从至少一个只读映像文件中选择的只读映像文件)中的已写入数据的存储位置,且包括目标只读映像文件的存储层数,即是第几层的映像文件。
具体的,若第一只读映像文件中的已写入数据的存储位置与第二只读映像文件中的已写入数据的存储位置匹配,且第一只读映像文件中的已写入数据的存储层数大于第二只读映像文件中的已写入数据的存储层数,则可以在只读层索引中记录第一只读映像文件中的已写入数据的存储位置和存储层数。
若第一只读映像文件中的已写入数据的存储位置与第二只读映像文件中的已写入数据的存储位置存在交集,且第一只读映像文件中的已写入数据的存储层数大于第二只读映像文件中的已写入数据的存储层数,则针对第一子存储位置(即第一只读映像文件中未与第二只读映像文件重合的存储位置),在只读层索引中记录第一子存储位置和第一只读映像文件的存储层数;针对第二子存储位置(即第二只读映像文件中未与第一只读映像文件重合的存储位置),在只读层索引中记录第二子存储位置和第二只读映像文件的存储层数;针对第三子存储位置(即第一只读映像文件中与第二只读映像文件重合的存储位置),在只读层索引中记录第三子存储位置和第一只读映像文件的存储层数。
例如,已写入数据的存储位置包括已写入数据相对于分层存储映像起始位置的物理偏移和已写入数据的数据长度,基于这两个参数可以确定已写入数据对应的位置区间D,位置区间D表示分层存储映像中的起始位置到终止位置。由于映像文件包括多个已写入数据,每个已写入数据对应一个数据索引,每个数据索引均包括已写入数据的存储位置,因此,可以存在多个位置区间D。
参见图1所示,基于只读映像文件A3的索引字段,可以确定位置区间D31、位置区间D32、位置区间D33等。基于只读映像文件A2的索引字段,可以确定位置区间D21、位置区间D22、位置区间D23等。基于只读映像文件A1的索引字段,可以确定位置区间D11、位置区间D12、位置区间D13等。
若位置区间D31与位置区间D21匹配(如二者相同),由于只读映像文件A3中的已写入数据的存储层数,大于只读映像文件A2中的已写入数据的存储层数,因此,在只读层索引中记录位置区间D31对应的存储位置和存储层数3,该存储位置可以如位置区间D31对应的物理偏移、数据长度、逻辑地址偏移(即已写入数据的逻辑地址偏移)等,且位置区间D31的目标只读映像文件为只读映像文件A3。而且,只读层索引中不需要记录位置区间D21对应的存储位置。
若位置区间D32、位置区间D22、位置区间D12三者匹配,则在只读层索引中记录位置区间D32对应的存储位置和存储层数3,该存储位置可以如物理偏移、数据长度、逻辑地址偏移等,且位置区间D32的目标只读映像文件为只读映像文件A3。而且,只读层索引中不需要记录位置区间D22和位置区间D12对应的存储位置。若位置区间D33不与其它位置区间匹配,则在只读层索引中记录位置区间D33对应的存储位置和存储层数3,且位置区间D33的目标只读映像文件为只读映像文件A3。若位置区间D23不与其它位置区间匹配,则在只读层索引中记录位置区间D23对应的存储位置和存储层数2,且位置区间D23的目标只读映像文件为只读映像文件A2。以此类推,其它位置区间不再赘述。
步骤6022,若待读取数据的存储位置与可写映像文件中的已写入数据的存储位置匹配,则将可写映像文件确定为目标映像文件。
步骤6023,若待读取数据的存储位置与可写映像文件中的已写入数据的存储位置不匹配,且待读取数据的存储位置与只读层索引中的已写入数据的存储位置匹配,则将只读层索引中的目标只读映像文件确定为目标映像文件。
例如,待读取数据的存储位置包括待读取数据相对于分层存储映像起始位置的物理偏移和待读取数据的数据长度,基于这两个参数可以确定待读取数据对应的位置区间C,位置区间C表示分层存储映像中的起始位置到终止位置。
参见图1所示,基于可写映像文件A4的索引字段,可以确定已写入数据的对应的位置区间,如位置区间D41、位置区间D42、位置区间D43等。
例如,若位置区间C是位置区间D41的子集,则说明位置区间C与位置区间D41存在匹配关系,并将可写映像文件A4作为目标映像文件。若位置区间C与可写映像文件A4的每个位置区间均不存在匹配关系,且位置区间C与只读层索引中的位置区间D31存在匹配关系,则只读层索引中的目标只读映像文件作为目标映像文件。显然,由于位置区间D31的目标只读映像文件为只读映像文件A3(基于只读层索引中的存储层数3,获知目标只读映像文件为只读映像文件A3),因此,将只读映像文件A3确定为位置区间C的目标映像文件。
又例如,若位置区间C与位置区间D41存在交集,如位置区间C的子区间C1是位置区间D41的子集,则将可写映像文件A4作为子区间C1的目标映像文件。若位置区间C的子区间C2与可写映像文件A4的每个位置区间均不存在匹配关系,且子区间C2与只读层索引中的位置区间D23存在匹配关系,如子区间C2是位置区间D23的子集,由于位置区间D23的目标只读映像文件为只读映像文件A2,因此,将只读映像文件A2确定为子区间C2的目标映像文件。
步骤603,根据待读取数据的存储位置,从目标映像文件中读取待读取数据。
例如,参见上述实施例,假设待读取数据的存储位置(如位置区间C)与目标映像文件中的已写入数据的存储位置(为了方便描述,将其记为存储位置s1)匹配,则可以根据存储位置s1(如物理偏移、数据长度、逻辑地址偏移等)从目标映像文件中读取待读取数据,对此读取过程不做限制。
假设待读取数据的存储位置(如位置区间C的子区间C1)与目标映像文件(如可写映像文件A4)中的已写入数据的存储位置s2匹配,则可以根据存储位置s2从可写映像文件A4中读取与子区间C1对应的待读取数据。以及,
假设待读取数据的存储位置(如位置区间C的子区间C2)与目标映像文件(如只读映像文件A2)中的已写入数据的存储位置s3匹配,则可以根据存储位置s3从只读映像文件A2中读取与子区间C2对应的待读取数据。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,通过分层存储映像实现数据的写入与读取,且分层存储映像是支持分层的存储格式,即可以创建多层来实现数据的写入与读取,是支持容器/虚拟机快速扩容的重要组成部分之一。分层存储映像支持跨层的随机访问,在读取分层存储映像的某一段数据时,可以根据每层的存储位置来确定需要读取的数据位置,从而根据该数据位置实现数据读取。
参见图6B所示,为数据读取过程的示意图,在只读映像文件A1中存储有数据1、数据2、数据3、数据4和数据5。在只读映像文件A2中存储有数据2’(即对数据2进行修改得到的数据)。在只读映像文件A3中存储有数据3’(即对数据3进行修改得到的数据)。在可写映像文件A4中存储有数据4’(即对数据4进行修改得到的数据)和数据6(即新增数据)。在此基础上,若需要读取数据1-数据6,则从可写映像文件A4读取数据4’和数据6,从只读映像文件A3读取数据3’,从只读映像文件A2读取数据2’,从只读映像文件A1读取数据1和数据5,至此,读取到数据1、数据2’、数据3’、数据4’、数据5和数据6。
示例性的,针对分层存储映像来说,上层映像文件记录的是相对于下层映像文件以扇区为单位的数据变更,在访问一个映像文件时,会出现跨层访问数据的情况。由于分层存储映像为上层应用提供的是一个存储卷,为了保证能读取到最新的数据,需要依次读取每一层映像文件的数据索引,并按数据索引写入时间的先后顺序进行合并,合并后索引的tag字段,记录了该段索引表示的是第几层映像文件的数据,即映像文件的存储层数。此外,为了能支持数据写入,可写映像文件的数据索引不会参与上述合并过程。综上所述,需要维护“可写层索引+合并后的只读层索引”来支持数据访问操作。可写层索引包括可写映像文件中的已写入数据的存储位置,只读层索引即上述实施例中的只读层索引。
示例性的,针对至少一个只读映像文件,可以采用如下方式重建只读层索引:对于任意两段索引IndexA={offsetA,lenA}和IndexB={offsetB,lenB},offset表示已写入数据相对于分层存储映像起始位置的物理偏移,len表示已写入数据的数据长度,假设IndexA创建时间晚于IndexB,即IndexA对应的存储层数大于IndexB对应的存储层数,参见图6C所示,合并时有下面几种情况:
不相交情况:offsetA>offsetB+lenB,或者,offsetB>offsetA+lenA,则返回{offsetA,lenA}和{offsetB,lenB},只读层索引包括{offsetA,lenA}和{offsetB,lenB}。
IndexA被IndexB包含:offsetA>offsetB,且offsetA+lenA<offsetB+lenB,则返回{offsetB,offsetA–offsetB}、{offsetA,lenA}、{offsetA+lenA,offsetB+lenB}。
左相交情况:offsetA>offsetB,且offsetB+lenB>offsetA,且offsetB+lenB<offsetA+lenA,则返回{offsetB,offsetA-offsetB}和{offsetA,lenA}。右相交情况:offsetB>offsetA,且offsetA+lenA>offsetB,且offsetA+lenA<offsetB+lenB,则返回{offsetA,lenA}、{offsetA+lenA,offsetB+lenB–offsetA–lenA}。
IndexA覆盖IndexB:offsetA<offsetB,且offsetA+lenA>offsetB+lenB,则返回{offsetA,lenA}。当然,上述情况只是给出几个示例,对此不做限制。
在上述应用场景下,本申请实施例中提出另一种数据读取方法,数据读取分为两个步骤,先查找可写映像文件的可写层索引,若可写层索引没有完全覆盖需要读取的区间,则将未被覆盖到的各空缺区间拆成子查询,去只读层索引中查找,参见图6D所示,为数据读取方法的流程示意图,该方法可以包括:
步骤611,确定读取区间{offset0,len0}。
步骤612,从可写层索引中查找第一个和读取区间相交的索引{offset1,len1}。
步骤613,判断offset1是否小于或者等于offset0。
如果是,则执行步骤614;如果否,则执行步骤615。
步骤614,从可写映像文件的数据文件中读取对应的数据,将数据存入结果,令offset0=offset0+min(len0,len1),len0=len0-min(len0,len1),执行步骤620。
步骤615,从只读层索引中查找第一个和读取区间相交的索引{offset2,len2}。
步骤616,判断offset2是否小于或者等于offset0。
如果是,则执行步骤617;如果否,则执行步骤618。
步骤617,根据存储层数确定对应的只读映像文件,从该只读映像文件中读取对应的数据,将数据存入结果。然后,令offset0=offset0+min(len0,len2),len0=len0-min(len0,len2),步骤617之后,执行步骤620。
步骤618,将offset0至offset2位置的数据置为0存入结果中。
步骤619,令offset0=offset0+min(len0,len2),len0=len0-min(len0,len2),步骤619之后,执行步骤620。
步骤620,判断len0是否等于0,如果是,则结束读取过程,如果否,则返回步骤611,基于调整后的len0重新确定读取区间{offset0,len0}。
在上述应用场景下,本申请实施例中还提供一种数据处理方法,包括:
步骤a:建立分层存储映像,该分层存储映像包括可写映像文件和至少一个只读映像文件;可写映像文件包括数据文件和索引文件,每个只读映像文件均包括原始数据字段和索引字段,该索引字段包括已写入数据的数据索引。
示例性的,分层存储映像的数据格式可以参见上述实施例,在此不再赘述。
步骤b:在需要向分层存储映像中写入待写入数据时,将待写入数据写入到数据文件,并将待写入数据对应的数据索引写入到索引文件。
示例性的,关于向分层存储映像中写入待写入数据的过程,可以参见上述实施例,如参见图3所示的数据写入流程,在此不再赘述。
步骤c:在需要从分层存储映像中读取待读取数据时,基于索引文件中的数据索引和只读映像文件的索引字段中的数据索引,从可写映像文件的数据文件和/或只读映像文件的原始数据字段中读取待读取数据。
示例性的,关于从分层存储映像中读取待读取数据的过程,可以参见上述实施例,如参见图6A所示的数据读取流程,在此不再赘述。
基于与上述方法同样的申请构思,本申请实施例还提供一种数据写入装置,如图7所示,为所述数据写入装置的结构图,所述装置包括:
确定模块71,用于确定待写入数据对应的分层存储映像;
获取模块72,用于从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
写入模块73,用于将所述待写入数据写入到所述数据文件;
生成模块74,用于生成待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
所述写入模块73,还用于将所述数据索引写入到所述索引文件。
所述获取模块72具体用于:判断所述分层存储映像中是否存在可写映像文件;如果是,则将已存在的可写映像文件确定为用于存储所述待写入数据的可写映像文件;如果否,则在所述分层存储映像中创建可写映像文件,并将创建的可写映像文件确定为用于存储所述待写入数据的可写映像文件。
当需要从所述分层存储映像的可写映像文件中删除已存储的待删除数据时,所述生成模块74还用于:生成所述待删除数据对应的删除索引,所述删除索引包括所述待删除数据的存储位置,所述待删除数据在所述分层存储映像中的存储层数;所述写入模块73还用于:将所述删除索引写入到所述索引文件。
所述数据文件包括原始数据字段,所述索引文件包括索引字段,当需要将所述可写映像文件转换为只读映像文件时,所述写入模块73还用于:将所述索引文件的索引字段写入到所述数据文件,得到只读映像文件,所述只读映像文件包括原始数据字段和索引字段。进一步的,所述写入模块73还用于:对所述只读映像文件的原始数据字段中的无效数据进行清理;和/或,对所述只读映像文件的索引字段中的连续索引区间进行合并。
基于与上述方法同样的申请构思,本申请实施例还提供一种数据读取装置,如图8所示,为所述装置的结构图,所述装置包括:确定模块81,用于确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;选取模块82,用于根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;读取模块83,用于根据所述待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
示例性的,所述分层存储映像中的映像文件为可写映像文件或只读映像文件;所述可写映像文件包括数据文件和索引文件,所述数据文件包括已写入数据,所述索引文件包括已写入数据的存储位置,已写入数据的存储层数;所述只读映像文件包括原始数据字段和索引字段,所述原始数据字段包括已写入数据,所述索引字段包括已写入数据的存储位置,已写入数据的存储层数。
所述选取模块82具体用于:基于已写入数据的存储位置与待读取数据的存储位置的匹配关系,从所述分层存储映像的映像文件中选取至少一个初始映像文件;基于各初始映像文件中的已写入数据的存储层数,从所述至少一个初始映像文件中选择存储层数大的映像文件作为目标映像文件;
其中,存储层数大的映像文件中的已写入数据的数据写入时间,晚于存储层数小的映像文件中的已写入数据的数据写入时间。
所述选取模块82具体用于:若所述分层存储映像包括可写映像文件和至少一个只读映像文件,基于各只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引,所述只读层索引包括目标只读映像文件中的已写入数据的存储位置;若待读取数据的存储位置与所述可写映像文件中的已写入数据的存储位置匹配,则将所述可写映像文件确定为所述目标映像文件;
若待读取数据的存储位置与所述可写映像文件中的已写入数据的存储位置不匹配,且待读取数据的存储位置与所述只读层索引中的已写入数据的存储位置匹配,则将所述目标只读映像文件确定为所述目标映像文件。
所述选取模块82基于各只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引时具体用于:
若第一只读映像文件中的已写入数据的存储位置与第二只读映像文件中的已写入数据的存储位置匹配,且所述第一只读映像文件中的已写入数据的存储层数大于所述第二只读映像文件中的已写入数据的存储层数,则在只读层索引中记录所述第一只读映像文件中的已写入数据的存储位置。
基于与上述方法同样的申请构思,本申请实施例还提供一种存储设备,包括:处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件;或者,
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令;所述计算机指令被执行时进行如下处理:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件;或者,
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
参见图9所示,为本申请实施例中提出的存储设备的结构图,所述存储设备90可以包括:处理器91,网络接口92,总线93,存储器94。存储器94可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据等等。例如,存储器94可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等)。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (20)
1.一种数据写入方法,其特征在于,通过分层存储映像实现数据的写入与读取,且分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录了堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;所述方法包括:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件。
2.根据权利要求1所述的方法,其特征在于,所述分层存储映像还包括至少一个只读映像文件,所述只读映像文件包括原始数据字段和索引字段;
其中,所述原始数据字段包括已写入数据;所述索引字段包括所述已写入数据的存储位置,所述已写入数据在所述分层存储映像中的存储层数。
3.根据权利要求1所述的方法,其特征在于,所述从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件,包括:
判断所述分层存储映像中是否存在可写映像文件;如果是,则将已存在的可写映像文件确定为用于存储所述待写入数据的可写映像文件;
如果否,则在所述分层存储映像中创建可写映像文件,并将创建的可写映像文件确定为用于存储所述待写入数据的可写映像文件。
4.根据权利要求1所述的方法,其特征在于,当需要从所述分层存储映像的可写映像文件中删除已存储的待删除数据时,所述方法还包括:
生成所述待删除数据对应的删除索引,所述删除索引包括所述待删除数据的存储位置,所述待删除数据在所述分层存储映像中的存储层数;
将所述删除索引写入到所述索引文件。
5.根据权利要求1所述的方法,其特征在于,所述数据文件包括原始数据字段,所述索引文件包括索引字段,所述方法还包括:当需要将所述可写映像文件转换为只读映像文件时,则将所述索引文件的索引字段写入到所述数据文件,得到只读映像文件,所述只读映像文件包括原始数据字段和索引字段。
6.根据权利要求5所述的方法,其特征在于,所述将所述索引文件的索引字段写入到所述数据文件,得到只读映像文件之后,所述方法还包括:
对所述只读映像文件的原始数据字段中的无效数据进行清理;和/或,
对所述只读映像文件的索引字段中的连续索引区间进行合并。
7.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;其中,所述分层存储映像中的映像文件为可写映像文件或只读映像文件;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
8.根据权利要求7所述的方法,其特征在于,
所述根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件,包括:
基于已写入数据的存储位置与待读取数据的存储位置的匹配关系,从所述分层存储映像的映像文件中选取至少一个初始映像文件;
基于各初始映像文件中的已写入数据的存储层数,从所述至少一个初始映像文件中选择存储层数大的映像文件作为目标映像文件;
其中,存储层数大的映像文件中的已写入数据的数据写入时间,晚于存储层数小的映像文件中的已写入数据的数据写入时间。
9.根据权利要求7所述的方法,其特征在于,
所述根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件,包括:
若所述分层存储映像包括可写映像文件和至少一个只读映像文件,基于各只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引,所述只读层索引包括目标只读映像文件中的已写入数据的存储位置;
若待读取数据的存储位置与所述可写映像文件中的已写入数据的存储位置匹配,则将所述可写映像文件确定为所述目标映像文件;
若待读取数据的存储位置与所述可写映像文件中的已写入数据的存储位置不匹配,且待读取数据的存储位置与所述只读层索引中的已写入数据的存储位置匹配,则将所述目标只读映像文件确定为所述目标映像文件。
10.根据权利要求9所述的方法,其特征在于,基于各只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引,包括:
若第一只读映像文件中的已写入数据的存储位置与第二只读映像文件中的已写入数据的存储位置匹配,且所述第一只读映像文件中的已写入数据的存储层数大于所述第二只读映像文件中的已写入数据的存储层数,则在只读层索引中记录所述第一只读映像文件中的已写入数据的存储位置。
11.一种数据读取方法,其特征在于,通过分层存储映像实现数据的写入与读取,且分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录了堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;所述方法包括:
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
12.根据权利要求11所述的方法,其特征在于,
所述分层存储映像中的映像文件为可写映像文件或只读映像文件;
所述可写映像文件包括数据文件和索引文件,所述数据文件包括已写入数据,所述索引文件包括已写入数据的存储位置,已写入数据的存储层数;所述只读映像文件包括原始数据字段和索引字段,所述原始数据字段包括已写入数据,所述索引字段包括已写入数据的存储位置,已写入数据的存储层数。
13.根据权利要求11或12所述的方法,其特征在于,
所述根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件,包括:
基于已写入数据的存储位置与待读取数据的存储位置的匹配关系,从所述分层存储映像的映像文件中选取至少一个初始映像文件;
基于各初始映像文件中的已写入数据的存储层数,从所述至少一个初始映像文件中选择存储层数大的映像文件作为目标映像文件;
其中,存储层数大的映像文件中的已写入数据的数据写入时间,晚于存储层数小的映像文件中的已写入数据的数据写入时间。
14.根据权利要求11或12所述的方法,其特征在于,
所述根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件,包括:
若所述分层存储映像包括可写映像文件和至少一个只读映像文件,基于各只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引,所述只读层索引包括目标只读映像文件中的已写入数据的存储位置;
若待读取数据的存储位置与所述可写映像文件中的已写入数据的存储位置匹配,则将所述可写映像文件确定为所述目标映像文件;
若待读取数据的存储位置与所述可写映像文件中的已写入数据的存储位置不匹配,且待读取数据的存储位置与所述只读层索引中的已写入数据的存储位置匹配,则将所述目标只读映像文件确定为所述目标映像文件。
15.根据权利要求14所述的方法,其特征在于,基于各只读映像文件中的已写入数据的存储位置和已写入数据的存储层数,生成只读层索引,包括:
若第一只读映像文件中的已写入数据的存储位置与第二只读映像文件中的已写入数据的存储位置匹配,且所述第一只读映像文件中的已写入数据的存储层数大于所述第二只读映像文件中的已写入数据的存储层数,则在只读层索引中记录所述第一只读映像文件中的已写入数据的存储位置。
16.一种数据处理方法,其特征在于,通过分层存储映像实现数据的写入与读取,且分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录了堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;所述方法包括:
建立分层存储映像,所述分层存储映像包括可写映像文件和至少一个只读映像文件;所述可写映像文件包括数据文件和索引文件,所述只读映像文件包括原始数据字段和索引字段,所述索引字段包括已写入数据的数据索引;
在需要向所述分层存储映像中写入待写入数据时,将所述待写入数据写入到所述数据文件,并将所述待写入数据对应的数据索引写入到所述索引文件;
在需要从所述分层存储映像中读取待读取数据时,基于所述索引文件中的数据索引和所述只读映像文件的索引字段中的数据索引,从所述数据文件和/或所述只读映像文件的原始数据字段中读取所述待读取数据。
17.一种数据写入装置,其特征在于,通过分层存储映像实现数据的写入与读取,且分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录了堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;所述装置包括:
确定模块,用于确定待写入数据对应的分层存储映像;
获取模块,用于从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
写入模块,用于将所述待写入数据写入到所述数据文件;
生成模块,用于生成待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
所述写入模块,还用于将所述数据索引写入到所述索引文件。
18.一种数据读取装置,其特征在于,通过分层存储映像实现数据的写入与读取,且分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录了堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;所述装置包括:
确定模块,用于确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
选取模块,用于根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
读取模块,用于根据所述待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
19.一种存储设备,其特征在于,通过分层存储映像实现数据的写入与读取,且分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录了堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件;
或者,
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
20.一种机器可读存储介质,其特征在于,通过分层存储映像实现数据的写入与读取,分层存储映像创建多层实现数据的写入与读取;分层存储映像由多个只读映像文件和至多一个可写映像文件堆叠而成,分层存储映像具有堆叠顺序,位于上层的映像文件记录堆叠在下方的映像文件的数据变更;分层存储映像支持数据的分层存储,当对文件进行修改时,分层存储映像创建新的数据写入层写入修改数据,并记录相对已有层的数据变更,未修改的数据不会被存入当前的数据写入层,而是保存在已有层中;所述机器可读存储介质上存储有若干计算机指令;所述计算机指令被执行时进行如下处理:
确定待写入数据对应的分层存储映像;
从所述分层存储映像中获取用于存储所述待写入数据的可写映像文件;其中,所述可写映像文件包括数据文件和索引文件;
将所述待写入数据写入到所述数据文件;
生成所述待写入数据对应的数据索引,所述数据索引包括所述待写入数据的存储位置,所述待写入数据在所述分层存储映像中的存储层数;
将所述数据索引写入到所述索引文件;
或者,
确定待读取数据对应的分层存储映像,所述分层存储映像包括至少一个映像文件,各映像文件包括已写入数据的存储位置和已写入数据的存储层数;
根据待读取数据的存储位置,已写入数据的存储位置和已写入数据的存储层数,从所述分层存储映像的映像文件中选取目标映像文件;
根据待读取数据的存储位置,从所述目标映像文件中读取待读取数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010032903.3A CN111221478B (zh) | 2020-01-13 | 2020-01-13 | 数据写入、读取方法、装置、设备及机器可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010032903.3A CN111221478B (zh) | 2020-01-13 | 2020-01-13 | 数据写入、读取方法、装置、设备及机器可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111221478A CN111221478A (zh) | 2020-06-02 |
CN111221478B true CN111221478B (zh) | 2023-06-13 |
Family
ID=70808843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010032903.3A Active CN111221478B (zh) | 2020-01-13 | 2020-01-13 | 数据写入、读取方法、装置、设备及机器可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111221478B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113821704B (zh) * | 2020-06-18 | 2024-01-16 | 华为云计算技术有限公司 | 构建索引的方法、装置、电子设备和存储介质 |
CN113742519A (zh) * | 2021-08-31 | 2021-12-03 | 杭州登虹科技有限公司 | 一种多对象存储的云视频Timeline存储方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009271828A (ja) * | 2008-05-09 | 2009-11-19 | Nec Corp | ストレージ装置、ストレージ装置制御システム、ストレージ装置の制御方法、及びプログラム |
CN103809998A (zh) * | 2012-11-05 | 2014-05-21 | Lsi公司 | 从操作系统安装映像的快照启动多台服务器的系统和方法 |
CN107038206A (zh) * | 2017-01-17 | 2017-08-11 | 阿里巴巴集团控股有限公司 | Lsm树的建立方法、lsm树的数据读取方法和服务器 |
CN107210967A (zh) * | 2014-10-27 | 2017-09-26 | 华睿泰科技有限责任公司 | 用于优化网络传输的系统和方法 |
CN110597762A (zh) * | 2018-05-25 | 2019-12-20 | 杭州海康威视系统技术有限公司 | 文件处理方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6999913B2 (en) * | 2002-12-10 | 2006-02-14 | John Alan Hensley | Emulated read-write disk drive using a protected medium |
-
2020
- 2020-01-13 CN CN202010032903.3A patent/CN111221478B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009271828A (ja) * | 2008-05-09 | 2009-11-19 | Nec Corp | ストレージ装置、ストレージ装置制御システム、ストレージ装置の制御方法、及びプログラム |
CN103809998A (zh) * | 2012-11-05 | 2014-05-21 | Lsi公司 | 从操作系统安装映像的快照启动多台服务器的系统和方法 |
CN107210967A (zh) * | 2014-10-27 | 2017-09-26 | 华睿泰科技有限责任公司 | 用于优化网络传输的系统和方法 |
CN107038206A (zh) * | 2017-01-17 | 2017-08-11 | 阿里巴巴集团控股有限公司 | Lsm树的建立方法、lsm树的数据读取方法和服务器 |
CN110597762A (zh) * | 2018-05-25 | 2019-12-20 | 杭州海康威视系统技术有限公司 | 文件处理方法、装置、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
W. Wang;I. Pollak;T.-S. Wong;C.A. Bouman;M.P. Harper;J.M. Siskind.Hierarchical Stochastic Image Grammars for Classification and Segmentation.《IEEE》.2006,全文. * |
耿朋;陈伟;魏峻.面向Dockerfile的容器镜像构建工具.计算机系统应用.2016,(第11期),全文. * |
进才,刘云生,覃飙,陈基雄.嵌入式实时数据库系统的存储管理.小型微型计算机系统.2003,(01),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111221478A (zh) | 2020-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6360215B2 (ja) | 仮想ハードディスクイメージを圧縮する方法 | |
US5764880A (en) | Method and system for rebuilding log-structured arrays | |
CA1281424C (en) | Modular data storage directories for large-capacity data storage units | |
JP5000316B2 (ja) | オブジェクト・ベースのデータ記憶装置 | |
US6173291B1 (en) | Method and apparatus for recovering data from damaged or corrupted file storage media | |
US20070288711A1 (en) | Snapshot copy management method used for logic volume manager | |
KR101329068B1 (ko) | 블록 관리를 가지는 비휘발성 메모리 | |
US6697795B2 (en) | Virtual file system for dynamically-generated web pages | |
JP6156517B2 (ja) | 書き込み情報記憶装置、方法、及び、プログラム | |
WO2005124530A2 (en) | Method for controlling memory card and method for controlling nonvolatile semiconductor memory | |
CN1983267A (zh) | 延迟验证数据完整性的文件系统 | |
US20080282355A1 (en) | Document container data structure and methods thereof | |
CN111221478B (zh) | 数据写入、读取方法、装置、设备及机器可读存储介质 | |
CN113535670B (zh) | 一种虚拟化资源镜像存储系统及其实现方法 | |
US7689626B2 (en) | System and method for locating log records in multiplexed transactional logs | |
TWI399642B (zh) | 具區塊管理之非揮發性記憶體 | |
US20030172226A1 (en) | System and method for information control block tracking streams for universal disk format file systems | |
CN110231914B (zh) | 数据存储装置及其操作方法 | |
CN116975006A (zh) | 基于磁盘缓存及b树索引的数据去重方法、系统及介质 | |
JP2553751B2 (ja) | ディスクセクタ代替方式 | |
JP2656524B2 (ja) | データ格納方法および装置 | |
CN114547031A (zh) | 键值对数据库操作方法、装置及计算机可读存储介质 | |
CN114063919B (zh) | 用于ssd的物理块分配顺序获取方法及数据恢复方法 | |
CN118567577B (zh) | 基于分布式块存储的数据访问方法、装置、电子设备 | |
US20100138429A1 (en) | Method for building a file information table |
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 |