CN114356232B - 数据读写方法和装置 - Google Patents
数据读写方法和装置 Download PDFInfo
- Publication number
- CN114356232B CN114356232B CN202111653982.0A CN202111653982A CN114356232B CN 114356232 B CN114356232 B CN 114356232B CN 202111653982 A CN202111653982 A CN 202111653982A CN 114356232 B CN114356232 B CN 114356232B
- Authority
- CN
- China
- Prior art keywords
- data
- file
- preset
- writing
- identifier
- 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
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000008569 process Effects 0.000 claims abstract description 40
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明提供一种数据读写方法和装置,方法包括数据写入过程,数据写入过程包括:获取待写入文件对应的多个第一数据单元,多个第一数据单元为按照预设单位长度对待写入文件进行分割得到;获取待写入文件的标识和文件后缀信息,并将标识作为第一标识;在预设结构体中进行遍历,查找第一标识对应的起始偏移量,将起始偏移量作为第一起始偏移量;根据文件后缀名,确定待写入文件的数据类型;根据第一起始偏移量和数据类型,将多个第一数据单元逐个写入预设设备的磁盘中,并在多个第一数据单元写入完成后对预设结构体进行信息更新。本发明可以减少第一文件系统在读写时候对磁盘的操作次数,提高写入的效率。
Description
技术领域
本说明书一个或多个实施例涉及分布式存储技术领域,尤其涉及一种数据读写方法和装置。
背景技术
传统的本地文件系统拥有很强大的功能和复杂的索引逻辑,如ext4。参见图1,现有技术中在分布式存储系统HDFS集群的客户端和数据节点之间进行数据传输时,例如,数据从数据节点的磁盘导入到客户端磁盘的过程中,需要数据节点的本地文件系统Ext4将其磁盘Disk上的数据通过网卡NIC、网络、客户端的网卡NIC后,进入客户端,进而利用客户端的本地文件系统存储到磁盘中。分布式存储系统内部的客户端和数据节点之间进行数据读取或写入时或者在分布式存储系统之间进行数据传输时,仅用到客户端的文件系统中的一部分功能,例如,读取、写入等简单操作,这就使得本地文件系统会产生一些不必要的索引开销对数据的读写性能产生影响。
发明内容
本说明书一个或多个实施例描述了一种数据读写方法和装置。
根据第一方面,提供了一种数据读写方法,所述方法包括数据写入过程,所述数据写入过程包括:
获取待写入文件对应的多个第一数据单元,所述多个第一数据单元为按照预设单位长度对所述待写入文件进行分割得到;
获取所述待写入文件的标识和文件后缀名,并将所述标识作为第一标识;
在预设结构体中进行遍历,查找所述第一标识对应的起始偏移量,将所述起始偏移量作为第一起始偏移量;
根据所述文件后缀名,确定所述待写入文件的数据类型;
根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新;
其中,所述预设设备上安装有第一文件系统,所述第一文件系统在挂载后在内存中建立一个预设结构体,所述预设结构体用于存储写入所述预设设备的磁盘中的各个数据块文件的标识以及在所述预设设备的磁盘中的起始偏移量,所述预设设备为分布式存储系统中的设备;将每一个第一数据单元写入所述预设设备的磁盘中的过程包括:
若所述数据类型为元数据,则计算所述第一起始偏移量和n*所述预设单位长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;n的初始值为0,最大值为所述第一数据单元的个数-1。
第二方面,本发明提供一种数据读写装置,所述装置用于数据写入过程,所述装置包括:
第一获取模块,用于获取待写入文件对应的多个第一数据单元,所述多个第一数据单元为按照预设单位长度对所述待写入文件进行分割得到;
第二获取模块,用于获取所述待写入文件的标识和文件后缀名,并将所述标识作为第一标识;
第一查找模块,用于在预设结构体中进行遍历,查找所述第一标识对应的起始偏移量,将所述起始偏移量作为第一起始偏移量;
第一确定模块,用于根据所述文件后缀名,确定所述待写入文件的数据类型;
文件写入模块,用于根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新;
其中,所述预设设备上安装有第一文件系统,所述第一文件系统在挂载后在内存中建立一个预设结构体,所述预设结构体用于存储写入所述预设设备的磁盘中的各个数据块文件的标识以及在所述预设设备的磁盘中的起始偏移量,所述预设设备为分布式存储系统中的设备;所述文件写入模块将每一个第一数据单元写入所述预设设备的磁盘中的过程包括:若所述数据类型为元数据,则计算所述第一起始偏移量和n*所述预设单位长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;n的初始值为0,最大值为所述第一数据单元的个数-1。
本发明实施例提供的数据读取方法和装置,获取待写入文件对应的多个第一数据单元;获取对应的标识和文件后缀名;在预设结构体中查找该标识对应的起始偏移量作为第一起始偏移量;根据所述文件后缀名,确定所述待写入文件的数据类型;根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新。由于在第一文件系统挂载后会在内存中建立预设结构体,用预设结构体存储已经写入到磁盘中的各个数据块文件的相关信息。在数据写入过程中是从预设结构体中获取起始偏移量,这样可以减少第一文件系统在读写时候对磁盘的操作次数,可以提高索引效率。也就是说,建立了预设结构体后,就不必在第一文件系统中获取相关的信息来计算读取位置信息,而是可以从预设结构体中直接获取起始偏移量,提高写入的效率。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中客户端和数据节点之间进行数据传输的系统架构图;
图2是本发明实施例中第一文件系统管理的信息的布局示意图;
图3是本发明实施例中数据写入过程的流程示意图;
图4是本发明实施例中数据写入过程的流程示意图;
图5是本发明实施例中数据读取过程的流程示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
第一方面,本发明实施例提供一种数据读写方法,参见图3,所述方法包括数据写入过程,所述数据写入过程包括如下步骤S1~S5:
S1、获取待写入文件对应的多个第一数据单元,所述多个第一数据单元为按照预设单位长度对所述待写入文件进行分割得到;
可理解的是,发明实施例提供的方法可以下文中的预设设备执行,预设设备具体可以是客户端设备,例如,在分布式存储系统的客户端设备和数据节点进行数据迁移时,可以采用步骤S1~S5实现将数据节点中的文件写入到客户端设备的磁盘中。再例如,在两个分布式存储系统之间进行数据传输时,可以将一个分布式存储系统中的数据写入到另一个分布式存储系统的客户端设备的磁盘中。预设设备不仅可以是客户端设备,也可以是其它设备。
其中,本发明实施例中的待写入文件或待读取文件是指一个数据块文件中的一部分,一个数据块文件包括元数据文件和块数据文件,元数据文件是块数据的描述信息,块数据文件是真正的数据内容。因此待写入文件和待读取文件有两种类型,一种是元数据文件,一种是块数据文件。同一个数据块文件的两种类型的文件的标识是一样的,但是文件名称的后缀名不同,因此可以通过后缀名对两种类型的文件进行区分。
其中,预设单位长度,例如4K,也就是说,一个待写入文件被分割为很多个大小均为4K的第一数据单元。
其中,所述预设设备上安装有第一文件系统,所述第一文件系统在挂载后在内存中建立一个预设结构体,所述预设结构体用于存储写入所述预设设备的磁盘中的各个数据块文件的标识以及在所述预设设备的磁盘中的起始偏移量,所述预设设备为分布式存储系统中的设备。
其中,第一文件系统用于对预设设备上的磁盘中的信息进行管理,磁盘上的信息包括数据相关信息和数据信息,数据信息为数据块文件,数据相关信息为对磁盘和数据的一些描述信息。具体会在后面中详细描述。
其中,第一文件系统的存储逻辑是专为了存储分布式存储系统的数据所设计,其通过用户空间文件系统Fuse提供的接口来实现所需要的功能。与传统文件系统ext4相比,第一文件系统没有冗余的功能和索引逻辑,只针对分布式存储系统中数据块的高效存储和读取。且第一文件系统是一个只用于存储数据块文件的文件系统,其不能存储数据块以外的文件或者目录。在对磁盘进行格式化时根据第一文件系统设计的索引关系,对磁盘进行逻辑分区并将磁盘信息存储在超级快中。Fuse在读取或写入文件时将数据块文件切分成数据单元进行操作。
在第一文件系统挂载后,第一文件系统会在内存中建立一个预设结构体,这个结构体的作用是用来存储已经写入预设设备的磁盘中的数据块文件的相关信息,例如,上文提到的标识、在磁盘中的起始偏移量,当然还可以有数据块文件的长度、数量等信息。
在具体实施时,S1中,预设设备上的第一文件系统可以从其它系统中获取待写入文件对应的多个第一数据单元,例如,从用户空间文件系统Fuse(即filesysteminuserspace)中获取待写入文件对应的多个第一数据单元。当然,第一文件系统也可以自己对待写入文件进行分割,得到多个第一数据单元。
S2、获取所述待写入文件的标识和文件后缀名,并将所述标识作为第一标识;
可理解的是,为了便于描述和区分,这里将待写入文件的标识作为第一标识。根据后缀名可以区分待写入文件是元数据文件还是块数据文件,从而便于在S4中对待写入文件的数据类型进行区分。
S3、在预设结构体中进行遍历,查找所述第一标识对应的起始偏移量,将所述起始偏移量作为第一起始偏移量;
可理解的是,如果能在预设结构体中找到第一标识,则说明在预设设备的磁盘中已经写入了同一个标识的文件,此时需要再次写入同一个标识对应的文件,将原来的文件进行覆盖。故将在预设结构体中第一标识对应的起始偏移量作为第一起始偏移量。
当然,如果在预设结构体中没有找到第一标识,则说明在预设设备的磁盘中没有写入同一个标识的文件,此时可以在一个可用的空间中写入待写入文件。找一个可用空间的方式有多种,例如,在第一文件系统管理的位图信息中查找可用数据块文件对应的标识,将该标识在磁盘中的起始偏移量作为第一起始偏移量。其中,第一文件系统管理的位图信息中包含已经使用的空间信息和可用的空间信息,从可用的空间信息中找一个可用空间来存储待写入文件。
也就是说,本发明实施例提供的方法中,所述数据写入过程还可以包括:
若在所述预设结构体中未查找到所述第一标识,则从所述第一文件系统管理的位图中查找可用数据块文件对应的标识,将该标识作为第二标识,计算所述第二标识在预设设备的磁盘中对应的起始偏移量,将该起始偏移量作为第一起始偏移量。
即,在位图信息中查找可用数据块文件对应的标识,计算出该标识在磁盘中的起始偏移量,将该起始偏移量之后的空间作为存储待写入文件的空间。
S4、根据所述文件后缀名,确定所述待写入文件的数据类型;
在具体实施时,S4具体包括:若所述文件后缀名为meta,则所述数据类型为元数据,否则为块数据。元数据文件的后缀名为meta,块数据文件的名称为blk加数字的形式,两者容易区分,很容易确定待写入文件的数据类型。
S5、根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新;
在实际中,一个数据块文件中的元数据文件和块数据文件一般是元数据文件在前,块数据文件在后,两者构成一个数据块文件。可见元数据文件和块数据文件的写入位置是有差异的。
在写入时,是一个第一数据单元写入后,再写入下一个第一数据单元,以此类推,直到将所有的第一数据单元全部写入完成。各个第一数据单元是逐个写入的。
在具体实施时,S5中将每一个第一数据单元写入所述预设设备的磁盘中的过程可以包括:若所述数据类型为元数据,则计算所述第一起始偏移量和n*所述预设单位长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;n的初始值为0,最大值为所述第一数据单元的个数-1。
针对第一个第一数据单元,其写入位置信息为第一起始偏移量。在第一个数据单元写入完成后,将n加1,得到n为1。对于第二个第一数据单元,其写入位置信息为第一起始偏移量加上一个预设单位长度得到的偏移量,在第二个数据单元写入完成后,将n加1,得到n为2。对于第三个第一数据单元,其写入位置信息为第一起始偏移量加上两个预设单位长度后得到的偏移量。在第三个第一数据单元写入完成后,将n加1,得到n为3,进而进行第四个第一数据单元的写入位置信息的计算。
其中,对于n*所述预设单位长度的计算以及n递增的过程,可以由预设设备执行,当然也可以直接从FUSE中获取,即在写入一个第一数据单元后,FUSE就会传来一个数值,该值的大小为n*所述预设单位长度,n的递增由FUSE控制,第一文件系统只需要对传来的数值和第一起始偏移量求和即可。
在具体实施时,S5中将每一个第一数据单元写入所述预设设备的磁盘中的过程还可以包括:若所述数据类型为块数据,则计算所述第一起始偏移量、n*所述预设单位长度和元数据的预留长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1。
由于块数据文件的写入位置在元数据文件之后,因此块数据文件的写入位置要加上元数据的预留长度,即在磁盘中的写入位置为第一起始偏移量、n*所述预设单位长度和元数据的预留长度的和。
可理解的是,在整个文件的各个第一数据单元均写入完成后,需要对预设结构体进行信息更新,如果预设结构体中查找到第一标识,则需要对预设结构体中第一标识的文件的长度等信息进行更新。如果是在位图中找到的第二标识,则需要在预设结构体中增加第二标识的相关信息。
以上为数据写入的过程,下面对数据读取的过程进行介绍。
在具体实施时,所述数据读取过程可以包括:
S6、获取待读取文件对应的多个第二数据单元,所述多个第二数据单元为按照所述预设单位长度对所述待读取文件进行分割得到;
可理解的是,待读取文件的多个第二数据单元可以从FUSE中获取,也可以由预设设备对待读取文件进行分割得到。
其中,待读取文件可以为元数据文件,也可以为块数据文件,同一个标识的元数据文件和块数据文件组成一个数据块文件。
其中,待读取文件是目前存储在预设设备的磁盘中的,可以通过本发明实施例提供的方法读取出来进行展示,或者存储到其它存储介质中。
其中,预设单位长度可以根据需要设置,例如,设置为4K。
S7、获取所述待读取文件的标识和文件后缀名,将该标识作为第三标识;
可理解的是,为了便于描述和区分,将待读取文件的标识作为第三标识。
S8、在所述预设结构体中进行遍历,查找所述第三标识对应的起始偏移量,将该起始偏移量作为第二起始偏移量;
可理解的是,若在预设结构体中查找到第三标识,则说明在预设设备的磁盘中存储有对应的待读取文件,可以进行读取;如果不能查找到第三标识,则说明在预设设备的磁盘中未存储有待读取文件,不可以进行读取,至此结束整个读取过程。
S9、根据所述文件后缀名,确定所述待读取文件的数据类型;
可理解的是,根据文件后缀名可以区分文件是元数据文件还是块数据文件。若后缀名为meta,则为元数据文件,否则为块数据文件。
S10、根据所述第二起始偏移量和所述数据类型,从所述预设设备的磁盘中逐个读取所述多个第二数据单元;
可理解的是,在读取完一个第二数据单元后,再读取下一个第二数据单元,直到将整个文件中的各个第二数据单元全部读取完成。
在具体实施时,S10中从所述预设设备的磁盘中读取每一个第二数据单元的过程,包括:若所述数据类型为元数据,则计算所述第二起始偏移量和,将所述和作为该第二数据单元的读取位置信息,根据所述读取位置信息将从所述预设设备的磁盘的对应位置上读取一个第二数据单元,并将n加1;n的初始值为0,最大值为所述第二数据单元的个数-1。
可理解的是,由于在磁盘中,一个数据块文件中的元数据文件位于块数据文件之前,因此元数据的读取位置为将第二起始偏移量和n*所述预设单位长度求和后得到的偏移量,n*所述预设单位长度可以是预设设备计算得到,也可以是直接从FUSE中获取得到,如果是从FUSE中获取得到,则对n的递增过程也是由FUSE处理。
在具体实施时,S10中从所述预设设备的磁盘中读取每一个第二数据单元的过程,还可以包括:
若所述数据类型为块数据,则计算所述第二起始偏移量、n*所述预设单位长度和元数据的预留长度的和,将所述和作为该第二数据单元的读取位置信息,根据所述读取位置信息从所述预设设备的磁盘的对应位置上读取一个第二数据单元,并将n加1。
可理解的是,由于块数据文件位于元数据文件之后,因此块数据文件的读取位置信息需要加上元数据的预留长度。
参见图2,本发明实施例中第一文件系统所管理的数据相关信息和数据信息的示意图。第一文件系统可以更加高效的存储和读写数据节点中的数据块文件。而数据块文件中包含两部分:一种是数据本身即块数据,其命名blk加数字的形式,另一种是元数据,具体为数据块长度、校验和以及时间戳等信息,其命名特点是有mate后缀。数据块文件存储在数据部分,而数据相关信息存储在数据相关部分,数据相关部分分为四部分:超级块(即SuperBlock,缩写为sb)、位图(即Bitmap)、数据块信息(即Block Info,缩写为bi)、文件信息(即File Info)。其中:
超级块(即Super Block)中存放了客户端磁盘的基本信息,包括磁盘大小、数据块文件的大小、块的总数量、第一个数据块文件的偏移地址等信息。
位图(即Bitmap)是用来记录磁盘中可用空间和已用空间的信息,通过位图可以获得的两个列表,一个列表中存放的是磁盘中已被占用的数据块文件的信息,另一个列表中存放的是磁盘中可用的数据块文件的信息,列表中的数据块data_block_id是数据块文件在磁盘中的编号。
数据块信息(即Block Info)中存储着每个数据块文件的标识(即block_id)、磁盘中存储的数据块文件的长度,数据块文件的创建时间和更新时间等信息,在每次写入新的数据块文件或者修改数据块文件时block info中的信息也会被修改。图1中的csm是指元数据。
文件信息(即File Info)中记录着文件和数据块文件的对应关系,通常一个文件对应许多个数据块文件。
数据部分包含多个块,每一个块中存放一个数据块文件,而一个数据块文件中包含数据本身和后缀有meta的元数据,由于数据本身和元数据的后缀是不同的,可以通过后缀区分出是数据本身还是元数据。
也就是说,所述第一文件系统可以用于管理所述数据相关部分和数据部分;数据相关部分用于存储所述数据相关信息;所述数据相关部分包括超级块、数据块信息、位图和文件信息;所述数据部分包含多个块,每一个块用于存储元数据和块数据对应的数据块文件;其中:所述超级块中用于存储预设设备的磁盘信息,所述磁盘信息中包括磁盘的大小、存储的数据块文件的总数量和第一个数据块文件的偏移地址;所述位图中用于存储预设设备的磁盘的可用空间信息和已用空间信息;所述数据块信息中用于存储每一个数据块的标识、长度、创建时间和更新时间;所述文件信息中用于存储文件和数据块文件之间的对应关系。
基于以上第一文件系统,上述写入或读取时涉及到的第一起始偏移量和第二起始偏移量实际上也可以根据第一文件系统中的数据相关信息计算得到,但是更优的方式是从预设结构体中直接获取,这样可以减少第一文件系统在读写时候对磁盘的操作次数,可以提高索引效率。也就是说,建立了预设结构体后,就不必在第一文件系统中获取相关的信息来计算读取位置信息,而是可以从预设结构体中直接获取起始偏移量,提高读取或写入的效率。而且,由于本发明实施例中第一文件系统只针对数据块文件,相对于传统的文件系统可以更加高效的存储和读写数据节点中的数据块文件。
可理解的是,在写入完成后,对所述第一文件系统进行信息更新,例如,对第一文件系统管理的数据相关信息进行更新,保持数据相关信息和数据信息的一致性。
参见图4,为本发明一个实施例中进行数据写入的流程示意图,第一文件系统是专为存储分布式系统的数据块文件所设计的文件系统,其写入的逻辑与传统的文件系统有所不同。在图2中展示的流程大致如下:
(1)解析待写入文件的path,这里的路径为相对路径,通过解析相对路径可以得到block_id和文件后缀名。其中block_id是第一文件系统中重要的索引数据。block_id为第一标识。
(2)遍历第一文件系统的内存中的预设结构体,并查看block_id是否已经存在:若已经存在,则直接获取预设结构体中block_id在磁盘中的起始偏移量,将其作为第一起始偏移量。若不存在,遍历位图bitmap找到可用的数据块文件的标识data_block_id,将其作为第二标识。根据第二标识计算出对应的起始偏移量,作为第一起始偏移量。
(3)根据步骤(1中)的path解析出来后缀信息,确定待写入文件是否为元数据meta,根据步骤(2)中的第一起始偏移量可以计算出来需要写入的第一数据单元在磁盘中的偏移量,作为写入位置信息。根据写入位置信息对各个第一数据单元逐个进行写入,在写入后更新第一文件系统中的数据相关信息,以及更新预设结构体中的记录的文件长度。
其中,若待写入文件的数据类型为meta,其每一个第一数据单元在磁盘中的偏移量为第一起始偏移量与n*预设单位长度之和。否则,每一个第一数据单元在磁盘中的偏移量为第一起始偏移量、n*预设单位长度和元数据meta的预留长度的和。
参见图5,为本发明实施例中进行数据读写的流程示意图,在图5中展示的流程大致如下:
(1)首先解析待读取文件的相对路径path,从而获取到block_id和后缀信息,将block_id作为第三标识。
(2)判断block_id是否在file结构体中:
若没有,则代表预设设备的磁盘中没有存储该待读取文件;
若存在,则从预设结构体中找到第三标识对应的起始偏移量,作为第二起始偏移量。根据后缀名信息确定读取位置信息:若为meta,则第二数据单元的读取位置信息为第二起始偏移量和n*预设单位长度之和。如果不是meta,则第二数据单元的读取位置信息为第二起始偏移量、n*预设单位长度和元数据meta的预留长度的和。对各个第二数据单元进行逐个读取。
第二方面,本发明实施例提供一种数据读写装置,该装置位于预设设备中,所述装置用于数据写入过程,所述装置包括:
第一获取模块,用于获取待写入文件对应的多个第一数据单元,所述多个第一数据单元为按照预设单位长度对所述待写入文件进行分割得到;
第二获取模块,用于获取所述待写入文件的标识和文件后缀名,并将所述标识作为第一标识;
第一查找模块,用于在预设结构体中进行遍历,查找所述第一标识对应的起始偏移量,将所述起始偏移量作为第一起始偏移量;
第一确定模块,用于根据所述文件后缀名,确定所述待写入文件的数据类型;
文件写入模块,用于根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新;
其中,所述预设设备上安装有第一文件系统,所述第一文件系统在挂载后在内存中建立一个预设结构体,所述预设结构体用于存储写入所述预设设备的磁盘中的各个数据块文件的标识以及在所述预设设备的磁盘中的起始偏移量,所述预设设备为分布式存储系统中的设备;所述文件写入模块将每一个第一数据单元写入所述预设设备的磁盘中的过程包括:若所述数据类型为元数据,则计算所述第一起始偏移量和n*所述预设单位长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;n的初始值为0,最大值为所述第一数据单元的个数-1。
在一些实施例中,所述文件写入模块将每一个第一数据单元写入所述预设设备的磁盘中的过程还包括:若所述数据类型为块数据,则计算所述第一起始偏移量、n*所述预设单位长度和元数据的预留长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1。
在一些实施例中,所述装置还用于数据读取过程,所述装置还包括:
第三获取模块,用于获取待读取文件对应的多个第二数据单元,所述多个第二数据单元为按照所述预设单位长度对所述待读取文件进行分割得到;
第四获取模块,用于获取所述待读取文件的标识和文件后缀名,将该标识作为第三标识;
第二查找模块,用于在所述预设结构体中进行遍历,查找所述第三标识对应的起始偏移量,将该起始偏移量作为第二起始偏移量;
第二确定模块,用于根据所述文件后缀名,确定所述待读取文件的数据类型;
文件读取模块,用于根据所述第二起始偏移量和所述数据类型,从所述预设设备的磁盘中逐个读取所述多个第二数据单元;其中,所述文件读取模块从所述预设设备的磁盘中读取每一个第二数据单元的过程,包括:若所述数据类型为元数据,则计算所述第二起始偏移量和n*所述预设单位长度的和,将所述和作为该第二数据单元的读取位置信息,根据所述读取位置信息将从所述预设设备的磁盘的对应位置上读取一个第二数据单元,并将n加1;n的初始值为0,最大值为所述第二数据单元的个数-1。
可理解的是,本发明实施例提供的装置和上述方法是相对应的,第二方面提供的装置中的有关内容的解释、举例、有益效果等内容可以参考第一方面中的相关内容,此处不再赘述。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员应该可以意识到,在上述一个或至少一个示例中,本发明所描述的功能可以用硬件、软件、挂件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或至少一个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (2)
1.一种数据读写方法,其特征在于,所述方法包括数据写入过程,所述数据写入过程包括:
获取待写入文件对应的多个第一数据单元,所述多个第一数据单元为按照预设单位长度对所述待写入文件进行分割得到;
获取所述待写入文件的标识和文件后缀名,并将所述标识作为第一标识;
在预设结构体中进行遍历,查找所述第一标识对应的起始偏移量,将所述起始偏移量作为第一起始偏移量;
根据所述文件后缀名,确定所述待写入文件的数据类型;
根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新;
其中,所述预设设备上安装有第一文件系统,所述第一文件系统在挂载后在内存中建立一个预设结构体,所述预设结构体用于存储写入所述预设设备的磁盘中的各个数据块文件的标识以及在所述预设设备的磁盘中的起始偏移量,所述预设设备为分布式存储系统中的设备;将每一个第一数据单元写入所述预设设备的磁盘中的过程包括:
若所述数据类型为元数据,则计算所述第一起始偏移量和n*所述预设单位长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;n的初始值为0,最大值为所述第一数据单元的个数-1;
将每一个第一数据单元写入所述预设设备的磁盘中的过程还包括:
若所述数据类型为块数据,则计算所述第一起始偏移量、n*所述预设单位长度和元数据的预留长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;
所述根据所述文件后缀名,确定所述待写入文件的数据类型,包括:
若所述文件后缀名为meta,则所述数据类型为元数据,否则为块数据;所述数据写入过程还包括:
若在所述预设结构体中未查找到所述第一标识,则从所述第一文件系统管理的位图中查找可用数据块文件对应的标识,将该标识作为第二标识,计算所述第二标识在预设设备的磁盘中对应的起始偏移量,将该起始偏移量作为第一起始偏移量;
所述方法还包括数据读取过程,所述数据读取过程包括:
获取待读取文件对应的多个第二数据单元,所述多个第二数据单元为按照所述预设单位长度对所述待读取文件进行分割得到;
获取所述待读取文件的标识和文件后缀名,将该标识作为第三标识;
在所述预设结构体中进行遍历,查找所述第三标识对应的起始偏移量,将该起始偏移量作为第二起始偏移量;
根据所述文件后缀名,确定所述待读取文件的数据类型;
根据所述第二起始偏移量和所述数据类型,从所述预设设备的磁盘中逐个读取所述多个第二数据单元;
其中,从所述预设设备的磁盘中读取每一个第二数据单元的过程,包括:
若所述数据类型为元数据,则计算所述第二起始偏移量和n*所述预设单位长度的和,将所述和作为该第二数据单元的读取位置信息,根据所述读取位置信息将从所述预设设备的磁盘的对应位置上读取一个第二数据单元,并将n加1;n的初始值为0,最大值为所述第二数据单元的个数-1;
从所述预设设备的磁盘中读取每一个第二数据单元的过程,还包括:
若所述数据类型为块数据,则计算所述第二起始偏移量、n*所述预设单位长度和元数据的预留长度的和,将所述和作为该第二数据单元的读取位置信息,根据所述读取位置信息从所述预设设备的磁盘的对应位置上读取一个第二数据单元,并将n加1;
所述第一文件系统用于管理数据相关部分和数据部分;数据相关部分用于存储数据相关信息;所述数据相关部分包括超级块、数据块信息、位图和文件信息;所述数据部分包含多个块,每一个块用于存储元数据和块数据对应的数据块文件;其中:
所述超级块中用于存储预设设备的磁盘信息,所述磁盘信息中包括磁盘的大小、存储的数据块文件的总数量和第一个数据块文件的偏移地址;所述位图中用于存储预设设备的磁盘的可用空间信息和已用空间信息;所述数据块信息中用于存储每一个数据块的标识、长度、创建时间和更新时间;所述文件信息中用于存储文件和数据块文件之间的对应关系;
对应的,所述方法还包括:
在数据写入完成后,对所述第一文件系统进行信息更新。
2.一种数据读写装置,其特征在于,所述装置用于数据写入过程,所述装置包括:
第一获取模块,用于获取待写入文件对应的多个第一数据单元,所述多个第一数据单元为按照预设单位长度对所述待写入文件进行分割得到;
第二获取模块,用于获取所述待写入文件的标识和文件后缀名,并将所述标识作为第一标识;
第一查找模块,用于在预设结构体中进行遍历,查找所述第一标识对应的起始偏移量,将所述起始偏移量作为第一起始偏移量;
第一确定模块,用于根据所述文件后缀名,确定所述待写入文件的数据类型;
文件写入模块,用于根据所述第一起始偏移量和所述数据类型,将所述多个第一数据单元逐个写入预设设备的磁盘中,并在所述多个第一数据单元写入完成后对所述预设结构体进行信息更新;
其中,所述预设设备上安装有第一文件系统,所述第一文件系统在挂载后在内存中建立一个预设结构体,所述预设结构体用于存储写入所述预设设备的磁盘中的各个数据块文件的标识以及在所述预设设备的磁盘中的起始偏移量,所述预设设备为分布式存储系统中的设备;所述文件写入模块将每一个第一数据单元写入所述预设设备的磁盘中的过程包括:若所述数据类型为元数据,则计算所述第一起始偏移量和n*所述预设单位长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;n的初始值为0,最大值为所述第一数据单元的个数-1;
所述文件写入模块将每一个第一数据单元写入所述预设设备的磁盘中的过程还包括:若所述数据类型为块数据,则计算所述第一起始偏移量、n*所述预设单位长度和元数据的预留长度的和,将所述和作为该第一数据单元的写入位置信息,根据所述写入位置信息将该第一数据单元写入所述预设设备的磁盘的对应位置上,并将n加1;
所述装置还用于数据读取过程,所述装置还包括:
第三获取模块,用于获取待读取文件对应的多个第二数据单元,所述多个第二数据单元为按照所述预设单位长度对所述待读取文件进行分割得到;
第四获取模块,用于获取所述待读取文件的标识和文件后缀名,将该标识作为第三标识;
第二查找模块,用于在所述预设结构体中进行遍历,查找所述第三标识对应的起始偏移量,将该起始偏移量作为第二起始偏移量;
第二确定模块,用于根据所述文件后缀名,确定所述待读取文件的数据类型;
文件读取模块,用于根据所述第二起始偏移量和所述数据类型,从所述预设设备的磁盘中逐个读取所述多个第二数据单元;其中,所述文件读取模块从所述预设设备的磁盘中读取每一个第二数据单元的过程,包括:若所述数据类型为元数据,则计算所述第二起始偏移量和n*所述预设单位长度的和,将所述和作为该第二数据单元的读取位置信息,根据所述读取位置信息将从所述预设设备的磁盘的对应位置上读取一个第二数据单元,并将n加1;n的初始值为0,最大值为所述第二数据单元的个数-1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111653982.0A CN114356232B (zh) | 2021-12-30 | 2021-12-30 | 数据读写方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111653982.0A CN114356232B (zh) | 2021-12-30 | 2021-12-30 | 数据读写方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114356232A CN114356232A (zh) | 2022-04-15 |
CN114356232B true CN114356232B (zh) | 2024-04-09 |
Family
ID=81103333
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111653982.0A Active CN114356232B (zh) | 2021-12-30 | 2021-12-30 | 数据读写方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356232B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622350A (zh) * | 2011-01-26 | 2012-08-01 | 腾讯科技(深圳)有限公司 | 一种写数据的方法、装置及系统 |
CN103389992A (zh) * | 2012-05-09 | 2013-11-13 | 北京百度网讯科技有限公司 | 一种结构化数据存储方法及装置 |
WO2015051641A1 (zh) * | 2013-10-12 | 2015-04-16 | 华为技术有限公司 | 一种磁盘镜像空间回收的方法及装置 |
CN106970958A (zh) * | 2017-03-17 | 2017-07-21 | 浙江大华技术股份有限公司 | 一种流文件的查询与存储方法和装置 |
CN108763531A (zh) * | 2018-05-31 | 2018-11-06 | 深圳市易甲文技术有限公司 | 一种mdvr文件存储系统及其运行方法 |
CN110546620A (zh) * | 2017-04-14 | 2019-12-06 | 华为技术有限公司 | 数据处理方法、存储系统和交换设备 |
CN110658978A (zh) * | 2018-06-28 | 2020-01-07 | 杭州海康威视系统技术有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN111258956A (zh) * | 2019-03-22 | 2020-06-09 | 深圳市远行科技股份有限公司 | 一种面向远端海量数据文件预读的方法及设备 |
CN112463724A (zh) * | 2020-11-05 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种轻量级文件系统的数据处理方法和系统 |
CN112748877A (zh) * | 2020-12-30 | 2021-05-04 | 华录光存储研究院(大连)有限公司 | 一种文件的整合上传方法及装置、文件的下载方法及装置 |
CN112765151A (zh) * | 2019-10-21 | 2021-05-07 | 深圳市茁壮网络股份有限公司 | 基于分布式存储系统随机写方法、装置及分布式存储系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6443572B1 (ja) * | 2018-02-02 | 2018-12-26 | 富士通株式会社 | ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラム |
-
2021
- 2021-12-30 CN CN202111653982.0A patent/CN114356232B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622350A (zh) * | 2011-01-26 | 2012-08-01 | 腾讯科技(深圳)有限公司 | 一种写数据的方法、装置及系统 |
CN103389992A (zh) * | 2012-05-09 | 2013-11-13 | 北京百度网讯科技有限公司 | 一种结构化数据存储方法及装置 |
WO2015051641A1 (zh) * | 2013-10-12 | 2015-04-16 | 华为技术有限公司 | 一种磁盘镜像空间回收的方法及装置 |
CN106970958A (zh) * | 2017-03-17 | 2017-07-21 | 浙江大华技术股份有限公司 | 一种流文件的查询与存储方法和装置 |
CN110546620A (zh) * | 2017-04-14 | 2019-12-06 | 华为技术有限公司 | 数据处理方法、存储系统和交换设备 |
CN108763531A (zh) * | 2018-05-31 | 2018-11-06 | 深圳市易甲文技术有限公司 | 一种mdvr文件存储系统及其运行方法 |
CN110658978A (zh) * | 2018-06-28 | 2020-01-07 | 杭州海康威视系统技术有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN111258956A (zh) * | 2019-03-22 | 2020-06-09 | 深圳市远行科技股份有限公司 | 一种面向远端海量数据文件预读的方法及设备 |
CN112765151A (zh) * | 2019-10-21 | 2021-05-07 | 深圳市茁壮网络股份有限公司 | 基于分布式存储系统随机写方法、装置及分布式存储系统 |
CN112463724A (zh) * | 2020-11-05 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种轻量级文件系统的数据处理方法和系统 |
CN112748877A (zh) * | 2020-12-30 | 2021-05-04 | 华录光存储研究院(大连)有限公司 | 一种文件的整合上传方法及装置、文件的下载方法及装置 |
Non-Patent Citations (2)
Title |
---|
CarrierFS:基于虚拟内存的分布式文件系统;许春聪;黄小猛;徐鹏志;吴诺;刘松彬;杨广文;;华中科技大学学报(自然科学版);20100615(S1);第37-42页 * |
面向城轨线网的海量小文件存储方法;刘靖;廖家赵;刘琼;;计算机应用与软件;20160815(08);第76-80页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114356232A (zh) | 2022-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5579516A (en) | Method for storing data files on a multiple volume media set | |
US9128950B2 (en) | Representing de-duplicated file data | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
CN111651127B (zh) | 一种基于叠瓦式磁记录盘的监控数据存储方法及装置 | |
CN106709014B (zh) | 一种文件系统转换方法及装置 | |
CN108304144B (zh) | 数据写入、读取方法与系统、数据读写系统 | |
CN113448946A (zh) | 数据迁移方法及装置、电子设备 | |
CN114356232B (zh) | 数据读写方法和装置 | |
CN109542860B (zh) | 基于hdfs的业务数据管理方法、终端设备 | |
US7949632B2 (en) | Database-rearranging program, database-rearranging method, and database-rearranging apparatus | |
CN114217741A (zh) | 存储装置的存储方法及存储装置 | |
CN111444114B (zh) | 一种非易失性内存中数据的处理方法、装置及系统 | |
JP3769775B2 (ja) | 分散リンク情報維持方法 | |
CN111984598A (zh) | 一种高性能元数据日志文件管理方法、系统、介质及终端 | |
CN114327283B (zh) | 分布式存储系统内的数据迁移方法及分布式存储系统 | |
RU2621628C1 (ru) | Способ организации хранения связанных данных | |
JPH0844609A (ja) | データバックアップ方法 | |
CN111209304A (zh) | 数据处理方法、装置及系统 | |
CN114281267B (zh) | 分布式存储系统间的数据迁移方法和装置 | |
WO2021189315A1 (en) | Proxy server crash recovery in object storage system using enhanced meta structure | |
CN114442943B (zh) | 一种数据迁移方法、系统及设备 | |
WO2021189314A1 (en) | Data server crash recovery in object storage system using enhanced meta structure | |
CN114442941B (zh) | 一种数据迁移方法、系统、存储介质及设备 | |
WO2021189312A1 (en) | Meta server crash recovery in object storage system using enhanced meta structure | |
CN117170942B (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 |