一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据写入方法及一种数据读取方法与流程

2022-07-31 00:33:37 来源:中国专利 TAG:


1.本说明书一个或多个实施例涉及计算机应用技术领域,尤其涉及一种数据写入方法及一种数据读取方法。


背景技术:

2.对于用户文件存储系统而言,在有些情况下,用户可能会每隔一段时间向该用户存储在该系统中的一个文件(用户存储在用户文件存储系统的文件下文称之为用户文件)中写入一个数据块,而用于存储数据的节点一般是按照接收顺序来存储数据的,这样使得用户文件中逻辑地址连续的数据存储在:用户文件存储系统内物理地址不连续的位置上。
3.而为了提升用户文件存储系统响应用户读取数据请求的速度,一般会进行预读,也就是在用户读取某一用户文件a位置的数据快时,会将a位置附近的数据块提前读取在内存中,以便用户读取a位置附近的数据时能快速响应。而上述用户文件的写入方式使得文件预读需要占用较多的资源。


技术实现要素:

4.有鉴于此,本说明书一个或多个实施例提供一种数据写入方法及一种数据读取方法。
5.根据本说明书一个或多个实施例的第一方面,提供一种数据写入方法,所述方法包括:
6.接收用户写入的数据块,并将所述用户写入的数据块存储至内存中;
7.在所述内存中整理所述用户写入的数据块得到整理数据;其中,所述整理数据中,同一用户文件的不同数据块连续且按照在用户文件中逻辑地址的先后顺序排序;
8.将所述整理数据持久化存储。
9.根据本说明书一个或多个实施例的第二方面,提供一种数据读取方法,用于基于上述的数据写入方法写入的整理数据,读取所需读取的数据块,所述方法包括:
10.读取目标数据块和预读数据块组;所述目标数据块为所需读取的数据块,所述预读数据块组包括与所述目标数据块物理地址连续的至少一个数据块;
11.向用户返回目标数据块,并将预读数据块组存储至内存中。
12.根据本说明书实施例的第三方面,提供一种数据写入装置,所述装置包括:
13.数据块接收模块,用于接收用户写入的数据块,并将所述用户写入的数据块存储至内存中;
14.数据块整理模块,用于在所述内存中整理所述用户写入的数据块得到整理数据;其中,所述整理数据中,同一用户文件的不同数据块连续且按照在用户文件中逻辑地址的先后顺序排序;
15.持久化存储模块,用于将所述整理数据持久化存储。
16.根据本说明书实施例的第四方面,提供一种数据读取装置,用于基于上述的数据
写入方法写入的整理数据,读取所需读取的数据块,所述装置包括:
17.读取模块,用于读取目标数据块和预读数据块组;所述目标数据块为所需读取的数据块,所述预读数据块组包括与所述目标数据块物理地址连续的至少一个数据块;
18.返回模块,用于向用户返回目标数据块,并将预读数据块组存储至内存中。
19.根据本说明书实施例的第五方面,提供一种计算机设备,所述计算机设备包括:
20.一个或多个处理器;
21.存储器,用于存储一个或多个程序;
22.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的数据写入方法或数据读取方法。
23.根据本说明书实施例的第六方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机指令,所述计算机指令被处理器执行时实现上述的数据写入方法或数据读取方法。
24.根据本说明书实施例的第七方面,提供一种计算机程序,所述计算机程序被处理器执行时实现上述的数据写入方法或数据读取方法。
25.本说明书提供了一种数据写入方法及一种数据读取方法,接收用户写入的数据块,并将所述用户写入的数据块存储至内存中;在所述内存中整理所述用户写入的数据块得到整理数据;其中,所述整理数据中,同一用户文件的不同数据块连续且按照在用户文件中逻辑地址的先后顺序排序;将所述整理数据持久化存储。这样在用户需要读取目标数据块时,读取目标数据块和预读数据块组;读取目标数据块和预读数据块组;所述目标数据块为所需读取的数据块,所述预读数据块组包括与所述目标数据块物理地址连续的至少一个数据块;向用户返回目标数据块,并将预读数据块组存储至内存中。
26.这样在读取目标数据块时顺便完成了预读的过程,将小块读转换成大块读,用很少的资源完成了预读,减少了预读所带来的资源消耗,有效降低数据块读取对系统造成的压力(因为如果预读的数据块被用上了,无需再次读取,这样用较少的资源消耗完成了多次读取的过程)。
27.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
28.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
29.图1是本说明书根据一示例性实施例示出的一种数据写入方法的流程图。
30.图2a是本说明书根据一示例性实施例示出的一种获得整理数据的示意图。
31.图2b是本说明书根据一示例性实施例示出的另一种获得整理数据的示意图。
32.图3是本说明书根据一示例性实施例示出的一种数据读取方法的流程图。
33.图4是本说明书根据一具体实施例示出的数据写入方法和数据读取方法的示意图。
34.图5是本说明书根据一示例性实施例示出的一种数据写入装置的框图。
35.图6是本说明书根据一示例性实施例示出的一种数据读取装置的框图。
36.图7是本说明书根据一示例性实施例示出的一种数据写入装置或一种数据读取装置所在电子设备的一种硬件结构图。
具体实施方式
37.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
38.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
39.用户文件存储系统是一种为用户提供云端文件存储服务的系统,一般包括一个元节点(metasever)和若干数据节点,元节点是分布式存储系统中,中心化的元信息存储节点,通常用于存储文件的状态信息、数据块(chunk)位置信息等,数据块长度信息等;数据节点用于存储用户文件存储系统中用户上传的数据。
40.在用户文件存储系统中,用户上传的文件一般称之为用户文件(inode)。用户每次写入可能会写入一整个用户文件或用户文件的大部分内容,也可能是每次写入一个较小的数据块(比如说用户在用户文件存储系统存储了一个记录网页访问量的用户文件,该用户需要每隔一段时间获取网页访问量,并将网页访问量记录在该用户文件中,再比如用户需要修改某个位置的数据也可能存在上述的情况)。
41.对于用户文件的写入方式而言,其写入方式往往是由用户一次上传的数据块大小决定的。对于较大的数据块而言(即上文中的前者),为了方便写入一般是在用户上传数据块后,直接将数据块写入数据节点,数据节点写入后再将数据块的存储位置等信息告知元节点,以使元节点向用户反馈写入完成。对于较小的数据块而言,如果采用和较大的数据块同样的写入方法,由于需要元节点向用户返回,那么这种方法将使得向用户返回写入成功较慢,因此相关技术中,对于较小的数据块一般是先将数据写入元节点的内存(这时就可以向用户返回写入成功),再由元节点持久化存储至数据节点中。
42.前文针对较小的数据块的写入方式一般称之为小块写,对于小块写而言,由于写入数据块时,一般按照数据块上传的顺序进行写入,而小块写的背景下,使得同一用户文件逻辑地址连续的数据块不会一起上传,那么会使得两个小数据块被存储至了同一数据节点的物理地址不连续的位置,或存储在了不同数据节点上。换言之,小块写会造成数据碎片。
43.对于系统碎片的读取而言,如果短时间内需要读取过多的数据碎片,那么需要去数据节点的不同位置读取数据,或通过不同节点来读取数据,这些数据往往存储的物理地址也较为分散,容易消耗大量资源导致系统不稳定。
44.而用户文件存储系统一般都会进行预读,预读也就是用户在没有显示读某块数据的情况下该系统后端主动提前读取并缓存。预读所需要读取哪些数据,一般是根据用户当
前读取的数据确定的。比如用户当前读取用户文件1的逻辑地址偏移(逻辑地址相对于该用户文件首字节的偏移)800k的数据块,那么用户文件存储系统会提前预读该用户文件的逻辑地址偏移(offset)700k-1000k的数据块(这里只是举例,并不代表对于预读范围的限定)。
45.在存在小块写的情况下,如果需要预读,则可能需要短时间读取大量的数据碎片,影响系统稳定性。
46.为了解决上述问题,首先考虑到对于数据节点来说,一次读取若干个物理地址连续的数据块,和一次读取一个数据块块相比,在数据块数量不是特别多的情况下,并不会多消耗很多资源。因此可以利用这个特性,在正常读取数据块的同时,从数据节点中多读取出几个和正常读取的数据块物理地址连续的数据块来,只要多读取出的数据块有一部分数据块被用上,这个消耗就是值得的。
47.为了进一步提升被用上的数据块的数量,考虑到如果能对存储在数据节点中的数据进行整理,使得物理地址连续的数据块逻辑地址也尽可能相邻,这样将可以提升被用上的数据块的数量,从而使得少量消耗就能带来大量收益。但是对于用户文件存储系统而言,数据节点中包括若干个存储数据块的数据文件(datafile),数据文件是一种只能附加(append only)的文件,这种限制使得这种文件写入数据节点后就无法更改之前写入的数据,也就是不能覆盖写,只能在文件末尾继续添加需要写入的数据。
48.对于具有上述特性的用户文件存储系统而言,为了提高多读取的数据块能帮上预读的忙,在将数据块写入数据节点的数据文件之前(也就是进行持久化存储之前),将数据块暂存在内存中(如果为了提升响应速度,可以存在元节点的内存中),并在内存中对用户写入的数据块进行整理,将属于同一个用户文件的数据块放在一起,并按照逻辑地址的先后顺序进行排序。
49.从而在正常读取数据块时,可以顺带一起读取该数据块物理地址相邻的数据块,这些数据块有更大可能是逻辑地址接近的数据块,使得顺带读取的数据可以成为有效预读的数据,从而减少预读对系统资源的消耗。
50.换言之,本说明书提供了一种数据写入方法及一种数据读取方法,接收用户写入的数据块,并将所述用户写入的数据块存储至内存中;在所述内存中整理所述用户写入的数据块得到整理数据;其中,所述整理数据中,同一用户文件的不同数据块连续且按照在用户文件中逻辑地址的先后顺序排序;将所述整理数据持久化存储。这样在用户需要读取目标数据块时,读取目标数据块和预读数据块组;读取目标数据块和预读数据块组;所述目标数据块为所需读取的数据块,所述预读数据块组包括与所述目标数据块物理地址连续的至少一个数据块;向用户返回目标数据块,并将预读数据块组存储至内存中。
51.这样在读取目标数据块时顺便完成了预读的过程,将小块读转换成大块读,用很少的资源完成了预读,减少了预读所带来的资源消耗,有效降低数据块读取对系统造成的压力(因为如果预读的数据块被用上了,无需再次读取,这样用较少的资源消耗完成了多次读取的过程)。
52.接下来首先将详细叙述本说明书示出的一种数据写入方法。
53.如图1所示,图1是本说明书根据一示例性实施例示出的一种数据写入方法的流程图,包括以下步骤:
54.步骤101,接收用户写入的数据块,并将所述用户写入的数据块存储至内存中。
55.用户写入的数据块,也就是用户通过客户端所写入的数据块。
56.之所以需要将用户写入的数据块存储在内存中,是因为有些云文件存储系统的数据节点中,用于存储数据块的文件是一种append only的文件(具体含义详见上文说明),因此需要在持久化写入之前完成数据的整理,那么就需要将用户写入的数据块暂存在内存中,从而方便整理。
57.还需要说明的是,该数据写入方法可以是数据节点所执行的,如果为了提升用户写入请求的响应速度,数据块是先由元节点接收的,那么该方法也可以由元节点执行。
58.步骤103,在所述内存中整理所述用户写入的数据块得到整理数据。
59.其中,所述整理数据中,同一用户文件的不同数据块连续且按照在用户文件中逻辑地址的先后顺序排序。
60.该步骤也就是在内存中整理用户写入的数据块,从而使得逻辑地址相邻或接近的数据块可以存储在一起,这样使得读取目标数据块的过程中,可以顺带读取和目标数据块物理地址相邻的数据块,且可以保证多读取的数据块是有效读取的概率更高。
61.在对步骤103进行整体目的的说明后,接下来将对步骤103的具体实现方式进行说明。如图2a所示,图2a示出了用户写入的数据和得到的整理数据的示意图,从图2a中可以看出,整理数据中,将同一用户文件的数据放在了一起,且是按照逻辑地址(通过逻辑地址偏移表征)从小到大的顺序进行排序。
62.接下来将对步骤103的执行时机进行说明,步骤103可以在步骤101中用户写入的数据块数量超过预设的数据块数量阈值时执行,也可以在内存中剩余空间小于预设的空间阈值的时候执行,还可以是每到一个周期时执行。本说明书对步骤103的执行时机不做限定。
63.接下来将对步骤103中涉及的名词进行说明,整理数据也就是整理得到的一段数据,该数据和步骤101中写入内存中的数据所包含的数据块相同,只是数据块的位置发生了变化。用户文件和逻辑地址的含义详见上文说明,在此不再赘述,需要说明的是,逻辑地址一般是通过逻辑地址偏移来表征的。
64.此外,有些情况下,云文件存储系统的限制,使得云文件存储系统中,每个用于存储用户数据的数据文件中,只会存储一个用户的数据,这种情况下,如图2b所示,整理数据中,不仅同一用户文件的数据块会连续,同一用户的不同用户文件的数据块也是连续的,也就是图2b中,用户文件1和用户文件2的数据是连续存放的,这样方便将整理数据持久化。
65.还需要对数据文件和用户文件的区别进行说明,用户文件如上文所述,是一种逻辑上的文件,而数据文件是数据节点中存储的物理上的文件,用于存储用户的数据块。一个用户文件可能存储在多个数据文件中,一个用户文件可能存储在多个数据节点上,而一个数据文件只能存储在一个数据节点上。
66.步骤105,将所述整理数据持久化存储。
67.步骤105中,在整理完成后,就需要将数据持久化存储,以便于数据的读取。持久化存储,也就是将整理数据写入非易失性存储介质中。
68.如果该方法是数据节点执行的,持久化存储的过程可以数据节点将整理数据持久化存储至本地磁盘中。如果该方法是元节点执行的,持久化存储的过程可以是元节点将需
要持久化的数据发送给指定的数据节点,以使数据节点持久化存储数据。
69.在后者的情况下,数据节点并不需要改变数据写入的过程,使得方法的实现较为方便,且元节点执行该方法,可以使得在将数据块写入元节点内存中就向用户返回写入成功,提升了响应速度。在后者的情况下,换言之所述方法应用于用户文件存储系统的元节点,步骤105包括:将所述整理数据持久化存储至数据节点中。
70.此外,为了提升数据可靠性,还可以在持久化存储整理数据的同时,针对整理数据添加预读表,预读表中记录了整理数据中,同一个用户文件逻辑地址相近的各个数据块的逻辑地址偏移的数据块大小,从而在数据读取过程中,可以根据预读表来确定是否需要顺带进行预读(即与目标数据块物理地址连续的数据块是否在逻辑地址上和目标数据块相邻或者靠得较近),从而能尽可能保证预读的有效性,进一步节省处理资源。
71.换言之,所述方法还包括:针对所述整理数据添加预读表;其中,所述预读表中按照整理数据中各数据块的顺序存储有数据块的逻辑地址和大小
72.逻辑地址如上文所述,可以通过逻辑地址偏移来表征,由于用户文件是一个逻辑文件,其只有存储的物理地址,逻辑地址只是一个用于描述数据块在用户文件中位置的形象的概念,其可以通过逻辑地址偏移来表征,当然也可以通过其他方式来表征,本说明书对此不作限定。大小即指的是数据块的大小。
73.之所以要按照整理数据中各数据块的顺序,是因为需要标明整理数据中各物理地址连续的数据块逻辑地址是否靠得较近。
74.此外,为了进一步减少预读表占用的空间,以及提升处理效率,可以在下述情况下,不将用户文件包括的数据块的逻辑地址及大小写在预读表中,一是,一个用户文件在整理数据中只对应有一个数据块,二是一个用户文件在整理数据中对应有较多的数据块。
75.这样做的目的是,如果整理数据中只包括某一用户文件的一个数据块,则在读取目标数据块时,仅需要判断预读表中是否记录有该目标数据块的逻辑地址,如果不存在可以直接不针对目标数据块启用预读,减少查找预读表消耗的资源(如果预读表中不记录这些,还要根据预读表判断与目标数据块物理地址连续的数据块是否需要预读)。
76.如果一个用户文件在整理数据中对应有较多数据块,这种情况下,用户客户端可能会发现存在这种现象,并会在上层进行预读,因为为了防止进行重复工作,可以默认这些数据块不进行预读。这样在预读表中未记录有目标数据块的逻辑地址的情况下,直接确定针对目标数据块不启用预读。
77.换言之,在所述整理数据包括的任一用户文件的数据块数量超过预设的数量阈值的情况下,或,在所述整理数据包括的任一用户文件的数据块数量小于2的情况下,所述预读表中不包括该用户文件的数据块的逻辑地址和大小。
78.最后还需要对预读表的存储位置进行说明,预读表可以添加在数据文件的头部,也可以将所有数据文件的预读表统一存储在数据节点中。但是在上述方法是元节点执行的情况下,一般不会将预读表存储在元节点中,具体原因如下。第一,预读表中数据较多,如果都存储在元节点,将会占用元节点大量的存储空间。第二,预读表和存储在元节点的其他数据并不在同一个层次,这样放容易导致多个层次的数据混在一起,打乱系统的分层逻辑。第三,有些情况下,放在元节点的预读表将会产生较大的开销,比如合并多个数据文件的情况下,也需要合并该数据文件对应的预读表,那么合并数据文件将需要元节点来执行合并预
读表的过程,这将给元节点带来较大的处理压力。
79.在对数据写入方法进行说明后,接下来将对本说明书实施例示出的一种数据读取方法进行说明,该方法基于上述的数据写入方法写入的整理数据,读取所需读取的数据块。
80.如图3所示,图3是本说明书根据一示例性实施例示出的一种数据读取方法的示意图,包括以下步骤:
81.步骤301,读取目标数据块和预读数据块组。
82.所述目标数据块为所需读取的数据块,所述预读数据块组包括与所述目标数据块物理地址连续的至少一个数据块。
83.换言之,在步骤301中,在读取目标数据块的时候,将小块读转换成了大块读,顺带读取了预读数据块组,从而通过小的资源消耗节省了读取需要耗费的资源。
84.由于上述数据写入方法中,只要属于同一用户文件中的数据块,就会在整理数据中放在一起,这样,物理地址与目标数据块的物理地址连续的数据块,有很大概率是可能之后会读取到的数据块。在只增加一点消耗的基础上,可以减少更大的资源消耗。
85.其中,预读数据块组中包括数据块数量和与目标数据块的相对物理位置可以是预先定义的,比如预先定义预读数据块组包括2个数据块,分别是目标数据块的物理地址的前一个和后一个的数据块,再比如预先定义预读数据块组包括2个数据块,分别是目标数据块物理地址之后的两个数据块。
86.此外,预读数据块组中包含的数据块的数量可以是根据内存剩余空间确定的,剩余空间越多,预读数据块组中包含的数据块数量越多。换言之,步骤301包括:根据当前内存剩余空间,确定预读数据块组的数据块数量,并读取目标数据块和预读数据块组。
87.考虑到用户一般在读取了逻辑地址为a的数据块时,继续读取a后面的数据的可能性大于读取a前面数据的可能性,因此预读数据块组中包含的数据块还可以确定为目标数据块物理地址后的数据块。换言之,步骤301包括:读取目标数据块和预读数据块组,所述预读数据块组中包括的数据块在用户文件中的逻辑地址,比目标数据块在该用户文件中的逻辑地址大。
88.此外,还可以根据该用户的历史读取记录来确定之前预读上来预读数据块组用户使用的次数多不多,如果使用次数较多,则可以确定启用预读,并多预读一些数据块,如果使用的此处较少,可以减少预读的范围甚至不针对该目标数据块启用预读。换言之,步骤301包括:根据用户历史读取记录中其他预读数据块组的使用情况,确定预读数据块组的数据块数量,并读取目标数据块和预读数据块组。
89.以及,在存储了预读表的情况下,还可以根据预读表,在每次读取目标数据块时来确定是否要针对目标数据块启用预读,以及在启用预读的情况下确定预读数据块组包括的数据块的数量和位置。
90.具体而言,可以根据预读表来确定预读的范围,比如预读表中物理地址连续的两个数据块同属于一个用户文件,但是两个数据块的逻辑地址相距较远,那么则不预读该数据块。如果一个用户文件在预读表中存在很多物理地址连续的数据块,则可以根据各数据块的逻辑地址来确定要读哪些数据块,比如可以限定只读逻辑地址偏移相对于目标数据块相距1000k以内的数据块。
91.换言之,还存储有预读表,所述预读表中按照整理数据中各数据块的顺序存储有
数据块的逻辑地址和大小。步骤301包括:根据所述预读表中记录的与所述目标数据块物理地址连续的其他数据块的逻辑地址,确定预读数据块组包括的数据块;读取目标数据块和预读数据块组。
92.步骤303,向用户返回目标数据块,并将预读数据块组存储至内存中。
93.该步骤中,目标数据块是用户所需要的数据块,因此需要向用户返回。而由于访问非易失性存储介质的速度小于访问内存的速度,因此通过将预读数据块组存储在内存中,可以实现预读,以便在后续用户需要读取预读的数据时,可以快速返回给用户相应的数据。
94.此外,还需要说明的是,预读数据块组由于是存储在内存中的,而内存空间有限,不能让预读数据块组做占用空间无限膨胀,可以在预读数据块组占用空间大于一定值时,删除写入时间最早的预读数据块组;也可以每隔一定周期,删除一个或多个写入时间较早的预读数据块组,以免预读过多影响系统的正常运行。
95.最后,还将对上述方法的执行主体进行说明。和数据写入方法相似,数据读取方法可以由数据节点执行,也能由元节点执行。需要说明的是,在数据节点执行的情况下,可以是数据节点直接对接用户,步骤303中也就是数据节点直接向用户返回目标数据。在元节点执行的情况下,步骤301具体来说是从数据节点获取目标数据块和预读数据块组,且如果是根据预读表确定预读数据块组包含哪些数据块,那通过预读表确定预读数据块组包含哪些数据块是由数据节点执行的。且步骤303中是存储在元节点的内存中。
96.还需要说明的是,目标数据块的大小要小于等于用户写入的数据块的大小。
97.接下来将通过一具体实施例来对本说明书示出的数据写入方法和数据读取方法进行说明。
98.如图4所示,图4是本说明书根据一具体实施例示出的数据写入方法和数据读取方法的示意图。
99.用户首先以小块写模式向元节点发送需要写入的数据块,元节点接收这些数据块后存储在本机的内存中,之后在需要持久化存储的情况下,先对用户写入的数据块进行整理,得到整理数据,整理数据按照用户文件以及数据块在用户文件内的逻辑地址偏移顺序排序,整理完成后,将整理数据持久化写入到指定的数据节点的数据文件中。
100.与此同时,还将该指定的数据文件中增加预读表,数组表里包含一个数组,数组的每一项是一个用户文件在数据文件上物理地址连续的数据块的范围,比如可以是如下形式:
[0101][0102]
即表示数据文件中存在5个物理地址连续的数据块,分别是用户文件1的offset=800k位置的4k大小的数据块,用户文件1的offset=900k位置的4k大小的数据块,用户文件1的offset=1000k位置的4k大小的数据块。
[0103]
其中,如果一个用户文件在整理数据中存在单个数据块(即整理文件中,与该单个
数据块物理地址连续的其他数据块,和该单个数据块不属于同一用户文件),则不记录该单个数据块的逻辑地址偏移和大小。且在一个用户文件在整理数据中存在多个物理地址连续的数据块,且这些数据块的数量超过预设数量阈值,则也不会将这些数据块的信息记录在预读表里。
[0104]
在对数据写入进行说明后,接下来将对数据读取过程进行说明。
[0105]
元节点在接收到用户的数据读取请求时,如果是需要以小块的形式读取目标数据块,则数据节点会判断目标数据块是否在预读表里,如果不在,则只读取该目标数据块。如果在,则可以根据预读表中与该目标数据块物理地址连续的数据块的逻辑地址偏移,确定是否要读取这些数据块(除了目标数据块之外其他读取的数据块共同称为预读数据块组),比如接上例,需要读取的目标数据块是用户文件1的offset=800k位置的2k大小的数据块,那么与该目标数据块物理地址连续的几个数据块和目标数据块逻辑地址偏移相差不大,那么可以将小块读转换大块读,一起读取三个数据块并发送给元节点。
[0106]
元节点将目标数据块返回给用户,并将其他数据块存储在自己的内存中,以备不时之需。
[0107]
与前述方法的实施例相对应,本说明书还提供了装置及其所应用的终端的实施例。
[0108]
如图5所示,图5是本说明书根据一示例性实施例示出的一种数据写入装置的框图,所述装置包括:
[0109]
数据块接收模块510,用于接收用户写入的数据块,并将所述用户写入的数据块存储至内存中。
[0110]
数据块整理模块520,用于在所述内存中整理所述用户写入的数据块得到整理数据;其中,所述整理数据中,同一用户文件的不同数据块连续且按照在用户文件中逻辑地址的先后顺序排序。
[0111]
持久化存储模块530,用于将所述整理数据持久化存储。
[0112]
在一可选的实施例中,所述装置还包括:预读表添加模块540(图中未示出),用于针对所述整理数据添加预读表;其中,所述预读表中按照整理数据中各数据块的顺序存储有数据块的逻辑地址和大小。
[0113]
在一可选的实施例中,在所述整理数据包括的任一用户文件的数据块数量超过预设的数量阈值的情况下,或,在所述整理数据包括的任一用户文件的数据块数量小于2的情况下,所述预读表中不包括该用户文件的数据块的逻辑地址和大小。
[0114]
在一可选的实施例中,所述方法应用于用户文件存储系统的元节点;持久化存储模块530用于:将所述整理数据持久化存储至数据节点中。
[0115]
如图6所示,图6是本说明书根据一示例性实施例示出的一种数据读取装置的框图,该装置用于基于前述的数据写入方法写入的整理数据,读取所需读取的数据块,所述装置包括:
[0116]
读取模块610,用于读取目标数据块和预读数据块组;所述目标数据块为所需读取的数据块,所述预读数据块组包括与所述目标数据块物理地址连续的至少一个数据块.
[0117]
返回模块620,用于向用户返回目标数据块,并将预读数据块组存储至内存中。
[0118]
在一可选的实施例中,还存储有预读表,所述预读表中按照整理数据中各数据块
的顺序存储有数据块的逻辑地址和大小。读取模块610,用于根据所述预读表中记录的与所述目标数据块物理地址连续的其他数据块的逻辑地址,确定预读数据块组包括的数据块;读取目标数据块和预读数据块组。
[0119]
在一可选的实施例中,读取模块610,用于根据当前内存剩余空间,确定预读数据块组的数据块数量,并读取目标数据块和预读数据块组;或,读取目标数据块和预读数据块组,所述预读数据块组中包括的数据块在用户文件中的逻辑地址,比目标数据块在该用户文件中的逻辑地址大;或,根据用户历史读取记录中其他预读数据块组的使用情况,确定预读数据块组的数据块数量,并读取目标数据块和预读数据块组。
[0120]
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0121]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0122]
如图7所示,图7示出了一种数据写入装置或数据读取装置所在计算机设备的一种硬件结构图,该设备可以包括:一个或多个=处理器1010、用于存储一个或多个程序的存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
[0123]
处理器1010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现。当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的数据写入方法或数据读取方法。
[0124]
存储器1020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
[0125]
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
[0126]
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
[0127]
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
[0128]
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运
行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
[0129]
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的数据写入方法或数据读取方法。
[0130]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0131]
本说明书还提供一种计算机程序,所述计算机程序被处理器执行时实现上述的数据写入方法或数据读取方法。
[0132]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0133]
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献