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

数据存储方法和相关装置与流程

2022-10-26 08:20:06 来源:中国专利 TAG:


1.本公开涉及存储技术领域,具体而言,涉及一种数据存储方法和相关装置。


背景技术:

2.在网络附属存储(network attached storage,简称nas)架构中,一个可能的存储方案是写数据直接落盘,即前端机将从客户端接收的数据直接存储在文件系统的磁盘中后更新元数据服务器。这种存储方案的缺点在于:1)大量写数据一次落盘的情况下,由于每次写请求需要两次落盘(即写数据向文件系统磁盘中落盘和写数据的元数据向元数据服务器落盘),因而时延较为严重;2)append-only(追加写)存储模式下客户端的覆盖写操作会产生大量无用磁盘写,后续客户端的读取性能会受到影响。
3.目前,为了解决时延问题,小块数据会被发送到元数据服务器(meta server)上落盘保存。然而,该改进方案中小块数据的磁盘布局没有变化,客户端的读取性能会因磁盘上无用数据碎片的影响而较为低下。


技术实现要素:

4.有鉴于此,本公开旨在改进nas架构中的数据存储方案,使得数据的磁盘布局得到优化,从而提升客户端的读取性能。
5.根据本公开的第一方面,提供一种数据存储方法,应用于nas架构的元数据服务器,包括:
6.基于接收到的写请求,将用户文件中待写区域要写入的小块数据存储在内存中;
7.在预设条件满足的情况下,将整理后的内存数据转存到文件系统的磁盘中;
8.其中,对于所述待写区域,所述整理后的内存数据只包括所述预设条件满足时所述待写区域在用户最新操作后所存在的数据。
9.可选地,所述预设条件满足时用户对所述待写区域的最新操作为写操作;
10.对于所述待写区域,所述整理后的内存数据只包括所述预设条件满足时用户最新写操作要写入所述待写区域的数据。
11.可选地,所述预设条件满足时用户对所述待写区域的最新操作为擦除操作;
12.对于所述待写区域,所述整理后的内存数据不再包括所述待写区域在所述预设条件满足之前各次写入的数据。
13.可选地,所述整理后的内存数据为对内存中存储的数据在所述预设条件满足之前整理而得到的,且所述整理后的内存数据仍存储在内存中;
14.将整理后的内存数据转存到文件系统的磁盘中,包括:从内存中读取所述整理后的内存数据并将读取到的所述整理后的内存数据存储到文件系统的磁盘中。
15.可选地,将整理后的内存数据转存到文件系统的磁盘中,包括:
16.从内存中读取数据,并判断读取到的数据是否为待舍弃数据;
17.在读取到的数据为所述待舍弃数据的情况下,不再将读取到的数据转存到文件系
统的磁盘中;
18.其中,若在所述预设条件满足时用户对所述待写区域的最新操作为写操作,则所述待舍弃数据为最新写操作之前写入所述待写区域的数据;若在所述预设条件满足时用户对所述待写区域的最新操作为擦除操作,则所述待舍弃数据为所述待写区域在所述预设条件满足之前各次写入的数据。
19.可选地,所述整理后的数据包括多个子数据,将整理后的内存数据转存到文件系统的磁盘中,包括:转存所述多个子数据以使所述多个子数据在文件系统的磁盘中按预设顺序存储。
20.可选地,所述整理后的数据至少包括一个子数据,将整理后的内存数据转存到文件系统的磁盘中,包括:对所述子数据设置索引信息,所述索引信息用于指示所述子数据在文件系统磁盘中的位置且存储在所述元数据服务器中。
21.可选地,所述预设条件为内存中已用空间的大小不小于预设数值;
22.或者,所述预设条件为距离上次向文件系统磁盘中转存数据的时长不小于预设时长。
23.可选地,基于接收到的写请求,将用户文件中待写区域要写入的小块数据存储在内存中,包括:
24.判断当前接收到的写请求是否满足反压条件,所述反压条件为用户持续进行小块写的次数不小于次数阈值;
25.在当前接收到的写请求没有满足所述反压条件的情况下,只将用户文件中待写区域要写入的小块数据存储在内存中;
26.在当前接收到的写请求满足所述反压条件的情况下,将用户文件中在待写区域周围区域中的数据读出并将读出的数据和待写区域中要写入的小块数据一同存储在内存中。
27.根据本公开的第二方面,提供一种nas架构的元数据服务器,包括:
28.存储器,用于存储计算机可执行代码;
29.处理器,用于执行所述计算机可执行代码,以实现第一方面所述的任一种数据存储方法。
30.根据本公开的第三方面,提供一种存储平台,包括:
31.文件系统;
32.以及,第二方面所述的元数据服务器。
33.根据本公开的第四方面,提供一种计算机可读介质,包括计算机可执行代码,所述计算机可执行代码被处理器执行时实现第一方面所述的任一种数据存储方法。
34.本公开实施例中,nas架构的元数据服务器先基于接收到的写请求,将用户文件中待写区域要写入的小块数据存储在内存中;然后在预设条件满足的情况下,将整理后的内存数据转存到文件系统的磁盘中。其中,对于待写区域,整理后的内存数据只包括在预设条件满足时待写区域在用户最新操作后所存在的数据,因而避免了待写区域在文件系统的磁盘上产生大量无用磁盘写,这使得待写区域的数据在磁盘上的布局得以优化,从而达到了提升客户端读取性能的目的。
附图说明
35.通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
36.图1示出nas架构的一种应用示意图;
37.图2示出nas架构的另一种应用示意图;
38.图3示出根据本公开一个实施例的数据存储方法的流程图;
39.图4示出根据本公开一个实施例的nas架构中元数据服务器的应用示意图;
40.图5示出根据本公开一个实施例的基于接收到的写请求将用户文件中待写区域要写入的数据存储在内存中的流程图;
41.图6示出根据本公开一个实施例的计算机设备的结构图。
具体实施方式
42.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
43.本公开实施例提供了一种存储平台,该存储平台包括文件系统和元数据服务器,其中,文件系统的磁盘用于存储用户文件中写入的数据,用户文件中写入的数据存储在磁盘中作为磁盘文件的一部分;元数据服务器作为nas架构的服务器,主要作用在于存储用户文件中各区域数据在磁盘文件中的位置。
44.图1所示为nas架构的一种应用示意图。参照图1,nas架构中设置有前端机和以上所述的元数据服务器,前端机的主要作用在于解析存储请求及转发数据,因而可以为设置在nas架构中的网关。前端机分别和客户端以及文件系统连接,前端机还和元数据服务器连接。在用户文件中待写区域要写入数据时,用户通过客户端向前端机发送存储请求;前端机对存储请求进行解析以解析出用户要写入待写区域的数据,并且将前端机解析出的数据发送到文件系统落盘保存,然后将文件系统返回的数据位置信息(即数据在文件系统的磁盘文件中的位置)发送到元数据服务器落盘保存。该存储方案中,由于需要先等待数据写入文件系统才可使得前端机获得数据位置信息,然后还需要等待前端机将获取到的数据位置信息发送到元数据服务器才可使得数据位置信息写入元数据服务器,所以时延较高,而用户写入小块数据(即数据量小于预设值的数据)的应用一般对时延较敏感,这是因为小块数据更大可能是文件内部的元数据或某种控制结构,小块数据的读写很多情况下都是同步方式,即应用会等待小块数据的输入/输出完成后才能进行下一步,因而小块数据的写延迟会使应用总体性能会受影响,且大量小块数据一次落盘的情况下时延影响更为严重。
45.为了解决时延问题,小块数据会被发送到元数据服务器上落盘保存。如图2所示的nas架构的应用示意图,前端机分别和客户端以及元数据服务器连接,元数据服务器还和文件系统连接。在用户文件中待写区域要写入小块数据时,用户通过客户端向前端机发送存储请求;前端机对存储请求进行解析以解析出用户要写入待写区域的小块数据,然后将解析出的小块数据发送到元数据服务器;接着,元数据服务器将接收到的小块数据发送到文件系统落盘保存,然后在文件系统返回数据位置信息时可以不再通过前端机转发而直接保
存数据位置信息,从而能够在一定程度上降低数据存储的时延。
46.对于要存储数据的文件系统来说,append-only接口为一种可选的数据输入接口,在文件系统选择使用append-only接口的情况下,文件系统只允许用户文件新写入的数据附加到磁盘文件中,但不允许更新或删除磁盘文件的现有行,因而用户文件中同一区域在不同时间写入的数据会作为磁盘文件中的不同部分。这里不同时间写入用户文件同一区域的数据,在用户文件中体现为后一时刻对前一时刻写入数据进行修改,可视为用户对文件中同一区域执行的一种覆盖写操作,但在磁盘文件中体现为用户文件中同一区域的多次重复写。由于磁盘文件存储在磁盘上,因而用户的覆盖写操作会产生大量无用磁盘写。基于图2所示nas架构的存储方案虽然在解决时延问题上取得了一定进展,但由于没有对数据在磁盘上的布局作出改进,因而和基于图1所示nas架构的存储方案一样都无法解决大量无用磁盘写这一技术问题。
47.值得注意的是,大量无用磁盘写不仅导致了文件系统内磁盘资源的消耗,而且还会使得文件系统中元数据服务器以及nas架构中元数据服务器等多个层面的资源浪费。在用户文件的待写区域较小的情况下,待写区域的多次重复写更是会导致nas架构以及底层的文件系统都产生大量的无用数据碎片,这不但需要额外的元数据去跟踪管理碎片,而且以后读取待写区域也需避开无用数据碎片的干扰,从而对整个系统产生更大的压力,用户感知的数据读取性能下降。虽然后台垃圾回收可以有效降低碎片率,但大量无用碎片会导致垃圾回收压力增大等诸多问题,从而影响系统稳定性,况且垃圾回收不及时的情况下客户端读取数据的性能仍然较低。
48.鉴于以上原因,本公开实施例基于图2所示的nas架构作了进一步改进,改进点在于nas架构中的元数据服务器,主要是对元数据服务器向文件系统写入小块数据的过程进行了改进。具体地,nas架构中的元数据服务器不再急于将用户文件中待写区域要写入的小块数据持久化到文件系统的磁盘中,而是先将用户文件中待写区域要写入的小块数据写入自身内存中,当满足预设条件后再将整理后的内存数据转存到文件系统的磁盘中。对于待写区域,整理后的内存数据只包括预设条件满足时待写区域在用户最新操作后所存在的数据,因而避免了待写区域在文件系统的磁盘上产生大量无用数据碎片,这使得待写区域的数据在磁盘上的布局得以优化,从而达到了提升客户端读取性能的目的。
49.图3所示为本公开实施例提供的数据存储方法的流程图。参照图3,该数据存储方法包括:
50.步骤s110,基于接收到的写请求,将用户文件中待写区域要写入的小块数据存储在内存中;
51.步骤s120,在预设条件满足的情况下,将整理后的内存数据转存到文件系统的磁盘中。
52.本公开实施例提供的数据存储方法由nas架构中的元数据服务器执行。每次在预设条件满足时nas架构中的元数据服务器都向文件系统的磁盘中转存一次整理后的内存数据,所转存的整理后的内存数据是对当前时段的内存数据整理后得到的数据,转存后内存中不再存储当前时段的内存数据以及所述整理后的内存数据。当前时段是第一时刻和第二时刻之间的时段,当前时段的内存数据是第一时刻和第二时刻之间基于接收到的各写请求而存入内存中的小块数据,其中,第一时刻为上一次预设条件满足时的时刻,第二时刻为当
前次预设条件满足时的时刻。以下描述中,若无特别说明,当前时段、第一时刻以及第二时刻采用此处释义。
53.图4所示为nas架构中元数据服务器的应用示意图,下面结合图3和图4对nas架构中元数据服务器在数据存储过程中执行的步骤进行详细介绍。
54.参照图4,一些示例中,元数据服务器基于预写日志(write-ahead-log,简称wal)的方式进行小块数据的存储,即先把用户的写请求记入日志文件,然后由后台线程根据日志文件中的写请求执行上述步骤s110和步骤s120,从而实现整理后的内存数据向文件系统磁盘中的转存。一旦用户的写请求成功写入日志,元数据服务器就会反馈成功。预写日志的中心思想是对内存数据文件的修改只能发生在这些修改已经记录了日志之后,任何尚未写入内存数据文件的数据都将先从预先写进日志的记录中重做(这叫向前滚动恢复,也叫做redo),因而即使在接收到写请求后因系统意外退出或链接意外断开而没有将数据写入内存数据文件,也可以用预写的日志来恢复数据,即确保反馈成功的写请求能将数据完整地写入内存数据文件,从而确保了写数据的可靠性。
55.上述写请求可以是前端机基于从客户端接收的存储请求发送的,即前端机从客户端接收到存储请求后对存储请求进行解析而得到用户文件内待写区域要写入的小块数据,然后将用户文件内待写区域要写入的小块数据封装成写请求并将封装得到的写请求发送给元数据服务器。因而,步骤s110中元数据服务器接收到写请求后能得到用户文件中待写区域要写入的小块数据。
56.应当理解的是,用户文件的待写区域是由用户指定的,可以和要写入的小块数据一块封装在写请求中,从而步骤s110中元数据服务器接收到写请求后能确定待写区域。一个写请求对应有一个待写区域,多个写请求可能对应有相同或不同的待写区域。步骤s110中的待写区域要写入小块数据,其是一个较小的区域。
57.各待写区域要写入的小块数据会在元数据服务器中存储对应的元数据(metadata)。元数据又称中介数据或中继数据,是描述数据的数据,主要是描述数据属性的信息,因而不仅包括指示待写区域要写入数据在磁盘文件中的位置,还包括待写区域中的历史数据以及待写区域在用户文件中的范围等,起到了支撑从内存以及文件系统磁盘中查找待写区域内数据的功能,从而实现后续对待写区域内数据的读取。
58.通常情况下,待写区域为用户文件中一个具有特定作用的内容部分。例如,用户文件为服务配置文件,服务配置文件包括服务对象配置部分,服务对象配置部分用于指示服务的对象,待写区域为服务配置文件中的服务对象配置部分。该例子中,待写区域是一个较小的区域,待写区域要写入数据时属于小块写。服务配置文件首次存储时要向服务对象配置部分这一待写区域写入一个初始的服务对象;后续服务对象改变时,用户需要修改服务对象配置部分,在服务配置文件中体现为修改服务对象配置部分的内容或删除服务对象配置部分的内容以使服务对象配置部分缺省,服务对象配置部分缺省即服务公有化。
59.需要说明的是,对于待写区域,整理后的内存数据只包括待写区域在用户最新操作后所存在的数据,其中,最新操作是以预设条件满足时的时刻为参考标准,即在预设条件满足前且距离预设条件满足时刻最近的针对待写区域的用户操作。
60.一些示例中,步骤s120中的预设条件满足时用户对待写区域的最新操作为写操作;对于待写区域,整理后的内存数据只包括用户最新写操作要写入待写区域的数据。对于
当前时段内在最近写操作之前待写区域各次写入的数据,不再包括在整理后的内存数据中,因而文件系统的磁盘中只存储有当前时段内待写区域的有用数据,当前时段内待写区域的无用数据不再存储入文件系统的磁盘中,即待写区域的数据在文件系统的磁盘中得以布局上的优化。对于用户短时间内对文件中小段区域进行多次修改或者说是多次重复写的情况,该示例中的整理后的内存数据在较大程度上节省了文件系统中磁盘的存储空间。
61.另一些示例中,预设条件满足时用户对待写区域的最新操作为擦除操作;对于待写区域,整理后的内存数据不再包括待写区域在预设条件满足之前各次写入的数据,因而当前时段内待写区域各次写入的数据不再存储入文件系统的磁盘中,待写区域的数据在文件系统磁盘中得以布局上的优化。对于用户创建并写入一些小的临时文件后很快删除的情况,该示例中的整理后的内存数据使得这些临时文件不再持久化到磁盘中,即除了写预写日志外写请求要写入的数据在内存就可以全部消化掉而无需在磁盘中持久化,这除了节省磁盘存储空间外还达到了提高数据写效率的目的。
62.应当理解的是,上述元数据服务器的内存为元数据服务器自身内设置的存储单元,文件系统的磁盘为元数据服务器之外的存储单元,因而,元数据服务器对自身内存的读写速率都远远大于对文件系统中磁盘的读写速率。此外,如图4所示,在读取数据的时候,元数据服务器自身内存和文件系统的磁盘皆能被访问,但元数据服务器自身内存的优先级大于文件系统的磁盘,即,元数据服务器会基于接收到的读请求先访问自身内存,以判断所要读的数据是否已被存储于自身内存中,如果是则自身内存命中,此时直接从自身内存中调用所要读取的数据;反之,则访问文件系统的磁盘,以在文件系统的磁盘中查找所要读的数据。
63.基于以上所述,对于用户数据分小块写入后不久一并读取的情况,多个小块写的数据若还未持久化到磁盘中,则可以直接通过访问内存来调用多个小块写而写入的数据。在基于图2所示nas架构的存储方案中,若用户数据分小块写入后不久一并读取,由于多个小块写在时间上跨度可能较大,因而多个小块写最终在磁盘中可能形成大量碎片,这样读取时对文件系统的存储资源消耗较大。因而,相较于基于图2所示nas架构的存储方案,本公开提供的数据存储方法可以使得一些数据直接从内存中读取,从而避免了许多读盘开销。
64.一个可选的实施例中,整理后的内存数据为对内存中存储的数据在预设条件满足之前整理而得到的,且整理后的内存数据仍存储在内存中;步骤s120中,将整理后的内存数据转存到文件系统的磁盘中,包括:从内存中读取整理后的内存数据并将读取到的整理后的内存数据存储到文件系统的磁盘中。
65.具体地,对于一个待写区域来说,在预设条件满足之前整理内存中存储的数据,可以是在每接收到该待写区域的一个新的写请求后就将该待写区域的前一个写请求写入内存的数据从内存中删除,并且若接收到待写区域的删除操作请求也要将该待写区域在之前写入内存的数据从内存中删除,这样在预设条件满足时内存中只有最新操作后待写区域所存在的数据。
66.进一步,在待写区域内写入的数据具有固定长度的情况下,每接收到一个写请求后,若该写请求对应的待写区域在内存中未占用存储空间,则为其在内存中分配一个存储空间;若该写请求对应的待写区域在内存中已占用存储空间,则可以将该待写区域的前一个写请求写入内存的数据从内存中删除,并将当前写请求需要写入的数据写入前一写请求
所占用的存储空间中,从而内存中存储的数据得到空间上的整理,内存空间不会浪费。
67.上述将读取到的整理后的内存数据存储到文件系统的磁盘中,可以是按序进行,即按照读取到的先后顺序依次将读取到的数据转存到文件系统的磁盘中。
68.本公开实施例中预先对内存中存储的数据进行整理而得到整理后的内存数据,这不仅有利于节省数据转存过程所耗费的时间,而且使得被无用数据占用的内存空间得以提早释放。
69.一个可选的实施例中,步骤s120中,将整理后的内存数据转存到文件系统的磁盘中,包括:从内存中读取数据,并判断读取到的数据是否为待舍弃数据;在读取到的数据为待舍弃数据的情况下,不再将读取到的数据转存到文件系统的磁盘中,可以直接将读取到的数据从内存中删除。
70.具体地,若在预设条件满足时用户对待写区域的最新操作为写操作,则待舍弃数据为最新写操作之前写入待写区域的数据;若在预设条件满足时用户对待写区域的最新操作为擦除操作,则待舍弃数据为待写区域在预设条件满足之前各次写入的数据。在数据转存过程中,可以根据针对数据记录的元数据判断读取到的数据是否为待舍弃数据。
71.本公开实施例在数据转存过程中对数据进行整理,能够通过一个线程的运行同时实现数据的转存和整理,无需元数据服务器的处理器为步骤s120和步骤s130的执行分配额外的线程,因而对元数据服务器的处理器资源占用较少。
72.进一步,整理后的数据包括多个子数据,步骤s120中将整理后的内存数据转存到文件系统的磁盘中,包括:转存多个子数据以使多个子数据在文件系统的磁盘中按预设顺序存储,从而实现多个子数据在磁盘中的排序。具体地,预设顺序为多个子数据的排列顺序,可以按预设顺序依次从内存中读取各子数据,然后按读取的先后顺序将读取到的子数据依次存储到磁盘中。这里多个子数据的排列顺序可以是多个子数据在常见应用中被一并读取时的先后排列的顺序。由于用户从磁盘中读取数据时,一般是给出磁盘初始扇区位置以及给出需要从这个初始扇区往后读取的连续扇区个数,因而在转存的多个子数据需要一并读取的情景中,多个子数据在磁盘中按序连续存储,有利于高效地从磁盘中读取出这多个子数据。
73.进一步,整理后的数据包括至少一个子数据,将整理后的内存数据转存到文件系统的磁盘中,还包括:对子数据设置索引信息,索引信息用于指示子数据在文件系统磁盘中的位置且存储在元数据服务器中。需要说明的是,元数据服务器内存储的元数据是用于指示用户文件中待写区域要写入的数据在磁盘文件中的位置,但不是指示用户文件中待写区域要写入的数据在磁盘中的位置,而索引信息则用于指示用户文件中要写入的子数据在文件系统磁盘中的位置。现有技术的文件系统的元数据服务器中会存储各数据在文件系统磁盘中的位置,因而索引信息可以从文件系统将子数据存储后的反馈信息中获取到的。索引信息的设置能够有效帮助后续高效地读取到子数据。
74.当前时段内写入内存的数据一般为基于多个写请求而写入的多组数据,图4所示的一个内存数据文件(memdatafile)即为基于一个写请求写入的一组数据。在上一次预设条件满足而向文件系统的磁盘中转存数据之后,内存中不断增加内存数据文件,直到内存中已用空间的大小不小于预设数值或者距离上次向文件系统磁盘中转存数据的时长不小于预设时长,则进行当前次的向文件系统的磁盘中转存数据,即将整理后的内存数据转存
到文件系统。图4所示的数据文件(datafile)即为文件系统中磁盘上存储的一个磁盘文件,该磁盘文件中存储有整理后的内存数据,可以位于一个磁盘上,也可以依分布式存储技术位于多个磁盘上。这里内存中已用空间的大小不小于预设数值为一种可选的预设条件,即通过实时监测内存的使用情况来确定是否要向文件系统的磁盘中转存数据,该预设条件在实践中通过合理设置预设数值能够确保元数据服务器自身的运行不受内存数据文件存储的影响。而距离上次向文件系统磁盘中转存数据的时长不小于预设时长为另一种可选的预设条件,即从第一时刻开始计时,在计时的时长达到预设时长则向文件系统的磁盘中转存数据,该预设条件是否满足在实践中较易判断。
75.上述先将用户文件中待写区域要写入的数据缓存在内存中,后续转存到文件系统中的数据为整理后的内存数据,即用户文件中待写区域要写入的小块数据在存储到磁盘前先进行了一次垃圾回收,且不涉及磁盘读写,所以比较高效,减轻了之后磁盘上垃圾回收的压力。另外,内存中的内存数据文件在一定时间内起到读缓存的作用,有效降低了数据读取对文件系统的压力。
76.然而,一些情景中用户会发起持续的小块写,例如用户不断修改用户文件中一小块区域。对于这种情况,上述数据存储过程虽然能解决小块写带来的数据碎片,但持续的小块写总会造成资源的大量占用,因而对任何一个文件系统来说都是不友好的,尤其是以append-only存储方式实现的文件系统。对于持续小块写的用户,可以采取限流的方式(即限制用户发送的写请求的数量)来减少该用户小块写的数量,从而解决用户使用很深的读写队列深度(io depth)甚至于恶意的大规模并行访问的问题。此外,还可以对数据存储过程加以改进来减少用户小块写的数量,即以图5所示的流程执行上述步骤s110。
77.参照图5,步骤s110,基于接收到的写请求,将用户文件中待写区域要写入的小块数据存储在内存中,包括:
78.步骤s111,判断当前接收到的写请求是否满足反压条件,反压条件为用户持续进行小块写的次数不小于次数阈值。
79.例如,次数阈值为20,若当前接收到的写请求为持续进行小块写的第20次,则当前接收到的写请求满足反压条件;若当前接收到的写请求为持续进行小块写的第21次,则当前接收到的写请求也满足反压条件;若当前接收到的写请求为持续进行小块写的第19次,则当前接收到的写请求不满足反压条件。
80.步骤s112,在当前接收到的写请求没有满足反压条件的情况下,只将用户文件中待写区域要写入的小块数据存储在内存中。
81.步骤s113,在当前接收到的写请求满足反压条件的情况下,将用户文件中在待写区域周围区域中的数据读出并将读出的数据和待写区域中要写入的小块数据一同存储在内存中。
82.具体地,当前接收到的写请求可以是对用户文件中待写区域进行首次写数据或是进行修改。
83.若当前接收到的写请求是对用户文件中待写区域进行首次写数据,则在从前到后写用户文件的情况下,内存或文件系统的磁盘中没有存储用户文件中在当前区域之后区域的数据,待写区域的周围区域只有用户文件中位于待写区域之前的区域。此情况下步骤s113是要从内存或文件系统磁盘中读取出待写区域之前区域中的数据,并将读取出的数据
和待写区域要写入的小块数据按在用户文件中的排序一同存储在内存。
84.若当前接收到的写请求是对用户文件中待写区域进行修改,在从前到后写用户文件的情况下,内存或文件系统的磁盘中存储有用户文件中在当前区域之前以及之后区域的数据,待写区域的周围区域可以是用户文件中位于待写区域之前和/或之后的区域。此情况下步骤s113是要从内存或文件系统磁盘中读取出待写区域之前和/或之后区域中的数据并将读取出的数据和待写区域要写入的小块数据按在用户文件中的排序一同存储在内存。
85.上述执行步骤s113的过程,是要执行“读-修改-写”这样一个过程,其中,修改即从待写区域修改为待写区域和待写区域的周围区域。步骤s113的该过程导致整个写流程时延增加,在读写队列深度相同的情况下相当于反压用户,减小了写速率。与只写待写区域相比,“读-修改-写”虽然当时增加了系统消耗,但带来的好处是能够消除用户的小块写。某些情况下,还可以将多个相邻的碎片连接成一个大数据片,这相当于一个局部的微小版本的垃圾回收,降低了文件系统中碎片的风险。
86.需要说明的是,对于步骤s113执行的过程,用户文件中读的区域可能有同时进行的用户写,这可能由同一用户运行的两个进程执行,即待写区域的周围区域需要被一个进程读出数据后和待写区域中的数据一同存储,但待写区域的周围区域同时进行另一进程的用户写,该情况下需要协调两个进程,以使待写区域的周围区域先进行一个进程的用户写然后再进行另一个进程执行的读取,从而防止待写区域的周围区域中新写入数据被老数据覆盖。
87.本公开的商业价值
88.本公开实施例应用在数据写入路径上,通过改进数据存储方案优化了小块数据在文件系统中的呈现方式和磁盘布局,减轻了磁盘上垃圾回收的压力,并在一定程度上起到了读缓存的作用,有效降低了数据读取对文件系统的压力。针对用户小块写来说,还能够减少用户持续小块写的数量,保护文件系统运行的稳定性。整个数据存储方案因其突出的优势具有极高的商业价值。
89.根据本公开的一个实施例的数据存储方法可以由图6的计算机设备800实现。当实现根据本公开一实施例的数据存储方法时,计算机设备800是nas架构中的元数据服务器。下面参照图6来描述根据本公开实施例的计算机设备800。图6显示的计算机设备800仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
90.如图6所示,计算机设备800以通用计算设备的形式表现。计算机设备800的组件可以包括但不限于:上述至少一个处理单元810、上述至少一个存储单元820、连接不同系统组件(包括存储单元820和处理单元810)的总线830。
91.其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元810执行,使得所述处理单元810执行本说明书上述示例性方法的描述部分中描述的本公开各种示例性实施方式的步骤。例如,所述处理单元810可以执行如图3乃至图5中所示的各个步骤。
92.存储单元820可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)8201和/或高速缓存存储单元8202,还可以进一步包括只读存储单元(rom)8203。
93.存储单元820还可以包括具有一组(至少一个)程序模块8205的程序/实用工具8204,这样的程序模块8205包括但不限于:操作系统、一个或者多个应用程序、其它程序模
块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
94.总线830可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
95.计算机设备800也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该计算机设备800交互的终端设备通信,和/或与使得该计算机设备800能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口850进行。并且,计算机设备800还可以通过网络适配器860与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与平台服务器800的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备800使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
96.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读的可读存储介质中,并由处理器进行加载和执行。为此,本公开实施例还提供了一种计算机可读介质,该计算机可读介质上存储有计算机可执行代码,该计算机可执行代码被处理器执行时实现上述数据存储方法中各实施例的各个过程。其中,计算机可读介质,如u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储计算机可执行代码的介质。
97.由于该可读介质中所存储的代码,可以执行本公开实施例所提供的任一种数据存储方法中的步骤,因此,可以实现本公开实施例所提供的任一种数据存储方法所能实现的有益效果,详见前面的实施例,在此不再赘述。以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
98.需要领会,以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本说明书的实施例存在许多变型。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
99.应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
100.应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
101.应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
102.还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述
(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献