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

数据写入方法、存储设备、分布式存储系统和存储介质与流程

2022-10-29 01:58:44 来源:中国专利 TAG:


1.本发明涉及存储领域,尤其涉及一种数据写入方法、存储设备、分布式存储系统和存储介质。


背景技术:

2.常见的存储系统可以包括数据库系统和文件存储系统。在不同的存储系统中均存在数据写入情况。比如在执行事务过程中产生的数据或者用户对文件进行修改后产生的数据可以分别被写入数据库系统或者文件存储系统中。
3.在实际的数据写入过程中,还存在写入数据量被放大的情况,即在将执行一项事务或者进行一次文件修改后产生的一份数据写入存储系统时,写入数据的总量总是远大于前述一份数据的数据量,比如可以是前述一份数据的至少两倍,这种写入数据量的放大会影响存储系统的数据写入性能。因此,在数据写入过程中,如何改善写入数据量被放大,从而提高数据写入性能就成为一个亟待解决的问题。


技术实现要素:

4.有鉴于此,本发明实施例提供一种数据写入方法、存储设备、分布式存储系统和存储介质,用于提高数据写性能。
5.第一方面,本发明实施例提供一种数据写入方法,包括:
6.响应于数据写请求,将所述数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据;
7.将所述待写入数据中的元数据和所述待写入数据对应的来源信息写入重做日志;
8.响应于所述元数据和所述来源信息的写入成功,将所述待写入数据写入数据文件。
9.第二方面,本发明实施例提供一种存储设备,包括:处理器、易失性存储器和非易失性存储器,所述易失性存储器中设置有缓存区,所述非易失性存储器中存储有重做日志和数据文件;
10.所述处理器,用于响应于数据写请求,将所述数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据;
11.将所述待写入数据中的元数据和所述待写入数据对应的来源信息写入所述重做日志;
12.响应于所述元数据和所述来源信息的写入成功,将所述待写入数据写入所述数据文件。
13.第三方面,本发明实施例提供一种分布式存储系统,包括:多个存储设备,所述多个存储设备中的任一存储设备包括存储处理器、易失性存储器和非易失性存储器,所述易失性存储器中设置有缓存区,所述非易失性存储器中存储有重做日志和数据文件;
14.所述存储处理器,用于响应于数据写请求,将所述数据写请求对应的目标数据和
缓存区中的已缓存数据确定为待写入数据;
15.将所述待写入数据中的元数据和所述待写入数据对应的来源信息写入所述重做日志;
16.响应于所述元数据和所述来源信息的写入成功,将所述待写入数据写入所述数据文件。
17.第四方面,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器至少可以实现如第一方面所述的数据写入方法。
18.本发明实施例提供的数据写入方法,存储设备响应于数据写请求,获取数据写请求对应的目标数据,并将此目标数据和缓存区内的已缓存数据确定为待写入数据。可见,待写入数据一部分来源于数据写请求,另一部分来源于缓存区,并且目标数据和已缓存数据各自均包括数据和用于描述此数据的元数据。接着,存储设备将待写入数据中的元数据和待写入数据对应的来源信息写入自身配置的重做日志。响应于重做日志的写入成功,再将待写入数据写入存储设备自身配置的数据文件中。
19.可见,在待写入数据的写入过程中,写入数据的总量为待写入数据、待写入数据中的元数据和待写入数据对应的来源信息之和,此时,待写入数据的数据量的放大程度很小。并且由于元数据和来源信息通常较小,因此,写入数据的总量实际上可以近似为待写入数据的数据量,待写入数据的数据量的放大甚至可以忽略不计,也即是从降低数据写入量的角度提高数据写性能,也能够更有效地利用存储设备的存储资源。同时上述的写入方式中,缓存区的引入也能够从降低写请求数量的角度提高数据写性能,也能够保证写入成功率。
附图说明
20.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1为本发明实施例提供的一种数据写入方式的示意图;
22.图2为本发明实施例提供的另一种数据写入方式示意图;
23.图3为本发明实施例提供的一种数据写入方法的流程图;
24.图4为与图3提供的数据写入方法对应的数据写入方式的示意图;
25.图5为本发明实施例提供的另一种数据写入方法的流程图;
26.图6为与图5提供的数据写入方法对应的数据写入方式的示意图;
27.图7为本发明实施例提供的又一种数据写入方法的流程图;
28.图8为本发明实施例提供的一种存储设备的结构示意图;
29.图9为本发明实施例提供的一种分布式存储系统的结构示意图。
具体实施方式
30.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
31.在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
32.应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
33.取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于识别”。类似地,取决于语境,短语“如果确定”或“如果识别(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当识别(陈述的条件或事件)时”或“响应于识别(陈述的条件或事件)”。
34.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
35.下面结合附图对本发明的一些实施方式作详细说明。在各实施例之间不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
36.在对本发明提供的各实施例进行详细描述之前,还可以对发明人的发明过程进行说明:
37.结合背景技术中的相关描述可知,常见的存储系统可以包括数据库系统和文件存储系统。对于存储系统中的任一存储设备,当其在执行一项事务或者响应于用户触发的一个编辑操作后即可产生一份更新数据以及该更新数据对应的元数据。更具体来说,执行事务产生的更新数据具体为事务数据,响应编辑操作产生的更新数据具体为编辑数据。
38.则一种可选地写入方式可以为:对于一份更新数据及其对应的元数据,可以产生两次写请求,并分别对两次写请求进行响应,以将更新数据和元数据先后写入存储设备磁盘中的数据文件(data file)。并且两次写请求需要串行执行,即响应一次写请求并写成功后,再响应另一写请求。其中,更新数据和元数据可以被写入到数据文件中的不同位置写。上述写入过程可以结合图1理解。
39.可见,在使用图1所示的写入方式时,对于产生的一份数据,需要写入两次才能完成写入,写入次数的增加会影响写数据速度,即导致数据写性能欠佳。并且当产生数据的份数越多,写入的次数也会更多,数据写性能欠佳的问题也会更为突出。
40.则为了改善上述因写次数多而导致的写性能欠佳问题,发明人想到了在存储设备的内存中设置缓存区,更新数据及其元数据可以先写入重做日志(redo log)。在重做日志写入成功后,再将更新数据及其元数据写入缓存区,并最终将缓存区中的数据写入存储系统中的数据文件。
41.按照上述的写入方式,对于执行一次事务或者响应于一个编辑操作后得到的一份数据(更新数据 元数据),会先进行一次数据写入,即响应写请求将这一份数据分别写入重做日志和缓存区中,在缓存区中的数据量达到缓存区的存储上限时,再将缓存区中的数据刷新到数据文件中,即再进行一次写操作。上述写入过程也可以结合图2理解。相比于图1所示的方式,图2所示的方式数据此写入次数会大大减少,从而提高数据写性能。与此同时,在图2所示的写入方式中,由于重做日志中存储有元数据,因此,即使在将缓存区中的待写入数据写入数据文件过程中出现写入失败时,也可以借助重做日志中的元数据进行数据恢复,从而继续完成待写入数据的写入,从而提高写数据的成功率。其中,将缓存区的待写入数据写入数据文件的过程也即是将待写入数据刷新至数据文件中的过程。
42.虽然使用图2所示的写入方式已经能够从降低写请求数量的角度保证数据写性能,同时还能够提高写入成功率。但在图2所示的写入方式中,对于产生的每一份数据,最终都会被分别写入存储设备磁盘中重做日志和数据文件,即一份数据会重复写两遍,从而增大了数据的写入量。此时,考虑到存储系统的存储资源有限,又会产生由于数据写入量的增大而导致数据写性能降低的问题。
43.则为了解决上述问题,发明人又对图2所示的写入方式进行了改进,以提出了一种新的数据写入方法,以改善上述因数据写入量增大而导致的写性能低下的问题。下面结合附图各实施例进行详细说明。并且在各实施例之间不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
44.图3为本发明实施例提供的一种数据写入方法的流程图。该方法可以由存储系统中的存储设备执行。如图3所示,该方法可以包括如下步骤:
45.s101,响应于数据写请求,将数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据。
46.响应于数据写操作,存储设备可以获取写操作对应的目标数据。在不同的存储系统中,目标数据的具体内容可以不同。举例来说,当存储系统为数据库储系统时,目标数据可以是存储设备执行一项事务后产生的事务数据以及该事务数据的元数据。当存储系统为文件存储系统时,目标数据可以是存储设备响应于用户对文件的一次编辑操作而产生的编辑数据以及此编辑数据的元数据。可选地,文件可以是文本文档、图片、视频等等。上述的事务数据和编辑数据可以统称为更新数据。
47.正如上述描述可知的,为了从减少数据写入次数的角度保证写性能,可以采用图2所示的写入方式,即得到更新数据以及更新数据的元数据后,不直接将其写入数据文件,而是先写入缓存区中,从而进行目标数据和已缓存数据的聚合。此时,缓存区中的聚合数据可以包括新写入的目标数据和之前已有的已缓存数据两部分,这两部分数据可以共同构成待写入数据。当待写入数据的数据量达到缓存区的存储容量上限时,存储设备可以执行下述步骤进行待写入操作的写入。
48.s102,将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。
49.存储设备可以先将待写入数据中的元数据和待写入数据的来源信息写入重做日志。其中,待写入数据的来源信息可以用于描述包括待写入数据中哪部分数据是目标数据,哪部分数据是已缓存数据。待写入数据中的元数据起到索引作用,用于通过元数据确定更
新数据在数据文件中的存储位置。
50.s103,响应于元数据和来源信息的写入成功,将待写入数据写入数据文件。
51.在元数据和来源信息被成功写入重做日志后,存储设备再将待写入数据写入数据文件中。可选地,本实施例中的缓存区设置于存储设备的易失性存储器中,比如内存中。本实施例中的重做日志和数据文件设置于存储设备的非易失性存储器中,比如磁盘中。
52.需要说明的有,与图2所示的写入方式类似的,也正是由于重做日志和数据文件设置于磁盘中,缓存区设置于内存中,因此,步骤s102和s103这种先写重做日志再写数据文件的方式也能够提高数据写入的成功率。
53.具体来说,在将缓存区中的待写入数据写入数据文件的过程中,假设存储设备出现故障,则在设备故障恢复后,故障前存储于缓存区中的待写入数据已经丢失,此时就会造成待写入数据的写失败。
54.而在按照步骤s102和s103的写入方式,由于在进行待写入数据写入数据文件之前,待写入数据的元数据和来源信息已经成功写入位于磁盘中的重做日志中,而磁盘内重做日志中的数据并不会因为设备故障而丢失,因此,当缓存区中的待写入数据因设备故障丢失时,在设备故障恢复后,仍然可以通过读取磁盘内重做日志中的元数据和来源信息恢复出缓存区中丢失的待写入数据,并重新将待写入数据写入数据文件中。也即是使用先写重做日志再写数据文件的方式,即使缓存区中数据丢失也不会影响待写入数据的成功写入。同时,当存储系统为数据库系统时,利用上述步骤s102和步骤s103的写入方式也能够保证事务的原子性。
55.本实施例提供的数据写入方法可以结合图4理解。
56.本实施例中,存储设备响应于数据写请求,获取该数据写请求对应的目标数据,并将此目标数据和缓存区内的已缓存数据确定为待写入数据。接着,将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。并响应于重做日志的写入成功,再将待写入数据写入数据文件。
57.可见,在待写入数据的写入过程中,写入数据的总量为待写入数据、待写入数据中的元数据和待写入数据对应的来源信息之和,此时,待写入数据的数据量的放大程度很小。并且由于元数据和来源信息通常较小,因此,写入数据的总量实际上可以近似为待写入数据的数据量,此时,待写入数据的数据量的放大甚至可以忽略不计,也即是从降低数据写入量的角度提高数据写性能,也能够更有效地利用存储设备的存储资源。同时,上述的写入方式中,缓存区的引入也能够从降低写请求数量的角度提高数据写性能,也能够保证写入成功率。
58.根据上述描述可知,使用图2所示的写入方式会出现由于写数据量增大而导致的写性能降低。在实际中,数据写请求对应的目标数据的数据量可大可小,并且当目标数据的数据量较大,则因数据写入量增大而导致数据写性能降低的问题会更为突出,这也会降低存储系统中存储资源的使用合理性。
59.此时,还可以根据目标数据的数据量大小执行不同的数据写入方式。则图5为本发明实施例提供的另一种数据写入方法的流程图。该方法可以包括:
60.s201,响应于数据写请求,将数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据。
61.步骤s201的执行过程可以参见图3所示实施例中的相关描述,在此不再赘述。
62.s202,若目标数据的数据量超过预设阈值,则将待写入数据中的元数据和来源信息写入重做日志。
63.s203,响应于元数据和来源信息的写入成功,将待写入数据写入数据文件。
64.若目标数据的数据量超过预设阈值,表明此数据写请求是一个大数据量的写请求,此时,可以先写重做日志,再将缓存区中包含目标数据的待写入数据写入数据文件中。具体写入过程可以参见图3所示实施例中的相关描述,在此不再赘述。
65.可选地,对于预设阈值的设置,可选地,可以参考历史数据写请求对应的历史目标数据的数据量。举例来说,在历史时段内,若大于预设百分比的历史目标数据的数据量为200kib以上,则可以将此200kib设置为预设阈值。可选地,也可以根据对数据写性能的要求高低对阈值进行设置。具体的,对写性能要求越高,预设阈值可以设置得越大。
66.s204,若目标数据的数据量未超过预设阈值,则将目标数据的写入重做日志。
67.s205,响应于目标数据的写入成功,将待写入数据写入数据文件。
68.若目标数据的数据量未超过预设阈值,表明此数据写请求是一个小数据量的写请求,此时,可以将待写入数据中的目标数据写入重做日志。响应于目标数据成功写入重做日志,进一步,当待写入数据的数据量达到缓存区的存储容量上限时,再将缓存区中的待写入数据写入数据文件。
69.上述写入方式还可以结合图6理解。
70.本实施例中,可以根据预设阈值对目标数据进行分类。当目标数据为大数据量的数据时,可以先将聚合有目标数据和已缓存数据的待写入数据的元数据以及该待写入数据的来源信息写入重做日志,再将缓存区中的待写入数据写入数据文件。当目标数据为小数据量的数据时,可以直接将目标数据写入重做日志,再将缓存区中的待写入数据写入数据文件。
71.综合上述各实施例,在响应于数据写请求得到目标数据后,可以根据目标数据的数据量大小对目标数据进行分类,并按照分类结果进行数据分流处理。
72.即当目标数据为大数据量的数据时,可以先将目标数据和已缓存数据聚合成待写入数据,并从待写入数据中筛选出元数据和来源信息,将筛选出的内容写入重做日志,再将待写入数据一次性写入数据文件中。此种情况下,相比于图2所示的写入方法能够大大改善写入数据量被放大的问题,从而能够改善因写入数据量增大而导致的写性能降低下。
73.当目标数据为小数据量的数据时,一种方式,与上述大数据量的目标数据相同的,也可以先聚合再筛选,再将不同的内容分别写入重做日志和数据文件,从而保证写性能。而在实际中,由于目标数据的数据量较小,因此,即使使用图2所示方式对此小数据量的目标数据进行写入,写入数据量的放大不明显,写性能的下降也不明显。则另一种方式,对于小数据量的目标数据,也可以不进行筛选元数据和来源信息的步骤,而是继续使用图2所示的写入方式即直接将小数据量的目标数据写入重做日志,同时将小数据量的目标数据写入缓存,当缓存区中的数据到达缓存区的存储容量上限时,再将缓存区中包括目标数据和已缓存数据的待写入数据写入数据文件。
74.由于目标数据中也包括元数据,因此,无论使用上述的任一种写入方式都能够保证重做日志中记录有缓存区域中所有数据的元数据。则当缓存区中数据丢失时,能够借助
重做日志实现数据恢复,从而实现数据的成功写入。
75.另外,在图5所示的实施例中,对于包括大数据量的目标数据的待写入数据,当待写入数据的数据量达到缓存区的存储容量上限时,存储设备可以先将待写入数据中的元数据和来源信息写入重做日志。在重做日志写入成功后,再将待写入数据一次性写入数据文件中。而上述方式适用于数据文件对写入数据的数据量没有要求的情况。
76.在实际中,数据文件对写入数据的数据量也可以有一定的要求,此数据量要求比如用于要求在一次写入过程中写入预设数据量的数据,数据量要求又比如用于要求在一次写入过程中,写入数据的数据量为预设数量的整数倍等等。其中,数据文件对写入数据的数据量要求可以与数据文件的类型有关。
77.则针对数据文件对写入数据的数据量有要求的情况,图7为本发明实施例提供的又一种数据写入方法的流程图。该方法可以包括:
78.s301,响应于数据写请求,将数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据。
79.步骤s301的执行过程可以参见图3所示实施例中的相关描述,在此不再赘述。
80.s302,获取数据文件对写入数据的数据量要求。
81.数据文件对写入数据的数据量要求可以预先设置,并且可选地,存储设备在第一次响应数据写请求或者每一次响应写请求时都可以得到此数据量要求。
82.s303,判断待写入数据的数据量是否满足数据量要求,若满足数据量要求则执行步骤s304~步骤s305;否则执行步骤s306~步骤s309。
83.s304,将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。
84.s305,响应于元数据和来源信息的写入成功,将待写入数据写入数据文件。
85.步骤s304~步骤305的执行过程可以参见图3所示实施例中的相关描述,在此不再赘述。
86.举例来说,假设数据文件对应的数据量要求是一次写入数据的数据量需要为1mib或1mib的整数倍。当待写入数据的数据量为3mib时,此时待写入数据的数据量满足数据文件对应的数据量要求,则可以将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志,在重做日志写入成功后,直接将3mib的待写入数据写入数据文件。
87.s306,根据数据量要求,将待写入数据划分为第一数据和第二数据,第一数据的数据量满足数据量要求,第一数据包括目标数据和/或已缓存数据。
88.s307,将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。
89.s308,响应于待写入数据中的元数据和待写入数据对应的来源信息的成功写入,将第一数据写入数据文件。
90.s309,第二数据缓存于缓存区。
91.若待写入数据的数据量不满足数据文件对应的数据量要求,则存储设备可以根据数据量要求对待写入数据进行划分,即将待写入数据中数据量满足数据量要求的一部分数据划分为第一数据,将待写入数据中的剩余数据划分为第二数据。其中,存储设备优先将待写入数据中的已缓存数据划分为第一数据,进一步地,若前述已缓存数据的数据量还未到达数据文件对应的数据量要求,则再待写入数据中目标数据的部分数据划分为第一数据,部分数据的数据量即为已缓存数据的数据量和数据量要求之间的差值。并且划分得到的第
一数据和第二数据各自都包括更新数据和元数据。
92.接着,存储设备将待写入数据中的元数据、待写入数据对应的来源信息写入重做日志。响应于重做日志的写入成功,再将第一数据写入数据文件。此时,待写入数据中一部分数据存储于数据文件中,另一部分数据缓存于缓存区中。当响应于下一次数据写入请求,当下一次数据写请求对应的目标数据和缓存区缓存的第二数据达到缓存区的存储容量上限时,按照上述各实施例的方式进行下一次的数据写入。
93.继续承接上述举例中的数据量要求,则当待写入数据的数据量为3.5mib时,其中,0.5mib为已缓存数据,3mib为数据写请求对应的目标数据,则存储设备可以将待写入数据划分为3mib的第一数据和0.5mib的第二数据,并且第一数据中包含0.5mib的已缓存数据以及2.5mib的目标数据。之后,再将3.5mib数据中的元数据和3.5mib数据对应的来源信息写入重做日志。在重做日志写入成功后,再将3mib的第一数据写入数据文件。此时,0.5mib的第二数据缓存于缓存区中,在下一次待写入数据到达缓存区的存储容量上限时,此第二数据会作为新的已缓存数据写入数据文件。
94.本实施例中,当数据文件没有数据量要求时,可以按照先写重做日志,再写数据文件的方式将待写入数据一次性写入数据文件中。这种方式即为图3~图6所示实施例中提供的方式。当数据文件有数据量要求时,可以按照数据量要求将待写入数据中满足数据量写入要求的数据划分为第一数据,将待写入数据中的剩余数据划分第二数据。然后,先将待写入数据的元数据和来源信息写入重做日志,再将第一数据写入数据文件。第二数据缓存于缓存区,并等待下一次数据写入。
95.可见,无论数据文件对写入数据量是否有要求时,按照图7所示实施例提供的方式,对于执行一次事务或者响应于用户的一次编辑操作而产生的一份数据,写入数据的总量总是小于图2所示的写入方式,因此,依旧能够改善因写入数据量增大而导致写性能低下的问题。
96.可选地,在图7所示实施例提供的写入方式中,响应于待写入数据中元数据、来源信息向重做日志的写入,可以生成反映数据是否写成功的第一状态信息;类似的,响应于第一数据向数据文件的写入,也可以生成第二状态信息。并且,在实际中,为了保证重做日志能够具有恢复缓存区中数据的能力,步骤s307和步骤s308需要串行执行,即当第一状态信息表明数据写成功时,才会进一步将第一数据写入数据文件,从而生成第二状态信息。并且当第一状态信息和第二状态信息中的任一状态信息表明数据写入失败时,存储设备都可以产生并向用户展示表明写入失败的提示信息。
97.则当存储设备向用户展示表明数据写入失败的提示信息时,用户还可以根据需求向存储设备触发检查操作。存储设备响应于此检查操作,查询数据文件中是否存在响应于数据写请求得到的待写入数据。由于数据文件中也存储有更新数据的元数据,因此,可以将元数据作为索引实现数据写入状态的查询。
98.另外,在实际中,无论是重做日志的写入还是数据文件的写入,都可能存在写超时的情况。而当出现写入超时时,有可能会进一步导致生成的第一状态信息和/或第二状态信息所反映的数据写入状态与数据的真实写入状态是不同的。此状态的不同具体来说是:第一状态信息和/或第二状态信息反应数据写入失败,而数据真实的写入状态是写入成功。因此,即使存储设备向用户展示了提示信息,也不一定代表数据写入失败,此时,用户同样也
触发检查操作,以确认待写入数据的是否写入成功。
99.为了简便描述,可以将数据写入重做日志的真实写入状态称为第一真实状态,其可以与第一状态信息不同,将数据写入数据文件的真实写入状态称为第二真实状态,其可以第二状态信息不同。则在实际中,存储设备生成的第一状态信息和第二状态信息以及上述的第一真实状态和第二真实状态之间的关系可以包括下表中的几种情况。
100.表:
[0101][0102]
本实施例中,在串行的将数据写入重做日志和数据文件的过程中,若出现数据写入失败,则可以生成并向用户展示提示信息,以使用户可以根据提示信息选择查询数据的真实写入状态。
[0103]
根据上述描述可知,当存储设备按照图2所示的方式进行数据写入时,会出现因写入数据量被放大而导致数据写性能低下的问题。并且当多台存储设备部署在一个具有容灾能力的分布式存储系统中时,由于分布式存储系统容灾能力的实现是通过将一个存储设备上的数据备份到分布式存储系统中其他的n个存储设备上实现的,因此,若依旧按照图2所示的写入方式进行写入时,对于执行一个事务或者响应于用户的一次编辑操作而产生的一份数据就需要重复2n遍,从整个分布式存储系统的角度来说,写入数据量的放大程度会更高。
[0104]
此时,分布式存储系统中的各存储设备则可以使用上述各实施例提供的方式实现数据写入,从而能够改善整个分布式存储系统的写性能低下的问题。
[0105]
上述各实施例是从方法的角度描述了存储设备实现数据写入的过程,并且上述各实施例也可以由存储设备执行。则图8为本发明实施例提供的一种存储设备的结构示意图。该存储设备可以包括:处理器、易失性存储器和非易失性存储器,其中,易失性存储器中设置有缓存区,非易失性存储器中存储有重做日志和数据文件。
[0106]
处理器,用于响应于数据写请求,将数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据。将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。响应于元数据和来源信息的写入成功,将待写入数据写入数据文件。
[0107]
本实施例中未详细描述的内容可以参见图3所示实施例中的详细描述,在此不再赘述。
[0108]
本实施例中,存储设备响应于数据写请求,获取该数据写请求对应的目标数据,并将此目标数据和缓存区内的已缓存数据确定为待写入数据。接着,将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。并响应于重做日志的写入成功,再将待写入数据写入数据文件。
[0109]
可见,在待写入数据的写入过程中,写入数据的总量为待写入数据、待写入数据中的元数据和待写入数据对应的来源信息之和,其中,元数据和来源信息通常较小,因此,写入数据的总量可以近似为待写入数据的数据量。此时并不会出现背景技术中提到的写入数据量被放大的情况,也即是能够从降低数据写入量的角度提高数据写性能,也能够更有效地利用存储设备的存储资源。同时,上述的写入方式中,缓存区的引入也能够从降低写请求数量的角度提高数据写性能,也能够保证写入成功率。
[0110]
正如图7所示实施例中所述的,在实际中,数据文件对写入数据的数量可以有要求,此时,存储设备中的处理器在得到待写入数据后,可以判断待写入数据的数据量是否满足数据文件对写入数据的数据量要求,并根据判断结果采用相应的数据写入方式。
[0111]
具体地,一种情况,若待写入数据的数据量满足数据文件对应的数据量要求,则在将待写入数据中的元数据和待写入数据对应的来源信息成功写入重做日志后,处理器可以进一步控制待写入数据写入数据文件中。
[0112]
另一种情况,若待写入数据的数据量不满足数据文件对应的数据量要求,则处理器可以根据数据量要求,将待写入数据划分为第一数据和第二数据,其中,第一数据和第二数据的具体内容和划分方式可以参见上述各实施例中的相关描述,在此不再赘述。然后,存储设备中的处理器控制待写入数据中的元数据和待写入数据对应的来源信息写入重做日志,在重做日志写入成功后,再控制待写入数据中的第一数据写入数据文件,控制第二数据缓存于缓存区。
[0113]
本实施例中,当数据文件对写入数据的数据量有要求时,按照上述写入方式仍然能够改善因写入数据量增大而导致写性能低下的问题。
[0114]
图9为本发明实施例提供的一种分布式存储系统的结构示意图。该分布式存储系统可以包括:多个存储设备,多个存储设备中的任一存储设备具体又可以包括存储处理器、易失性存储器和非易失性存储器,易失性存储器中设置有缓存区,非易失性存储器中存储有重做日志和数据文件。
[0115]
存储处理器,用于响应于数据写请求,将数据写请求对应的目标数据和缓存区中的已缓存数据确定为待写入数据。将待写入数据中的元数据和待写入数据对应的来源信息写入重做日志。响应于元数据和来源信息的写入成功,将待写入数据写入数据文件。
[0116]
本实施例中未详细描述的内容以及所能实现的技术效果可以参见上述图1~图8所示实施例中的相关描述在此不再赘述。
[0117]
为了方便理解,下面可以以数据库系统为例对上述各实施例提供的数据写入方法的工作过程进行描述。
[0118]
假设存储设备内存中缓存区的存储容量上限为2.5mib,并且判断目标数据的数据量是大数据量还是小数据量的阈值为1mib。
[0119]
则基于上述假设,对于执行一项数据库事务后产生的1.5mib事务数据(即上述各实施例中的目标数据),此1.5mib的事务数据属于大数据量的目标数据,此时存储设备中的处理器可以将数据写请求对应的1.5mib的事务数据和缓存区中的1mib的已经缓存数据聚合成2.5mib的待写入数据。
[0120]
当存储设备磁盘中的数据文件对数据写入量没有要求时,存储设备可以将2.5mib待写入数据中的元数据和2.5mib待写入数据对应的来源信息写入存储设备的重做日志中。
并在数据成功写入重做日志后,再将2.5mib的待写入数据直接刷新到数据文件中。
[0121]
当存储设备磁盘中的数据文件对数据写入量有要求,并且要求具体为每次写入数据的数据量为1mib的整数倍。则存储设备可以将2.5mib的待写入数据划分为2mib的第一数据和0.5mib的第二数据,其中,第一数据中包括缓存区中的1mi数据和事务数据中的1mib数据,事务数据剩余的0.5mib为第二数据。然后,将2.5mib的待写入数据中的元数据和来源信息写入存储设备中的重做日志。在重做日志写入成功后,在将第一数据刷新到存储设备的数据文件中。此时,0.5mib的第二数据缓存于缓存区中,等待下一次缓存区中的数据到达缓存区的存储上限时再被写入数据文件中。
[0122]
同样基于上述假设,在执行另一项数据库事务后,还可以产生0.2mib的事务数据(即上述各实施例中的目标数据),此0.2mib的事务数据属于小数据量的目标数据,则与上述大数据量的目标数据相同的,可以0.2mib的事务数据也可以写入缓存区中,从而和缓存区中的1mib的已经缓存数据聚合成1.2mib的待写入数据,再根据数据文件对写入数据量是否要求,来确定此1.2mib的待写入的具体写入方式。
[0123]
然而在实际中,对于小数据量的目标数据,即使出现写入数据量的放大,数据量的放大对写性能的影响也不大,因此,另一种方式,0.2mib的事务数据可以写入缓存区中,从而和缓存区中的1mib的已经缓存数据聚合成1.2mib的待写入数据。在此之后,1.2mib的事务数据也可以直接写入重做日志中,重做日志中的事务数据用于在缓存区中数据出现丢失时进行数据恢复。在缓存区被写满后可以将缓存区中的数据写入数据文件,从而实现数据写入。
[0124]
另外,本发明实施例提供了一种计算机存储介质,用于储存上述电子设备所用的计算机软件指令,其包含用于执行上述图1至图7所示数据写入方法实施例所涉及的程序。
[0125]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

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

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

相关文献