数据访问方法及装置与流程

文档序号:33510573发布日期:2023-03-21 22:52阅读:21来源:国知局
数据访问方法及装置与流程

1.本技术涉及数据存储领域,尤其涉及一种数据访问方法及装置。


背景技术:

2.目前,在计算侧主机利用存储系统来存储数据的场景下,为了降低访问数据的时延,可以在计算侧主机的缓存中记录下存储系统中数据的元数据(例如数据在存储系统中的地址等)。这样一来,当计算侧主机访问数据时,计算侧主机可以不用先从存储系统的元数据节点中获取数据的元数据,而是可以直接从缓存中获取到待访问数据的元数据,并利用该元数据完成数据访问,从而降低访问时延。
3.但当存储系统中数据的元数据发生改变,而计算侧主机的缓存中的元数据未同步改变的情况下,就可能出现访问错误的问题。


技术实现要素:

4.本技术提供一种数据访问方法及装置,解决了由于缓存中记录的元数据与存储系统中数据实际的元数据不一致导致的访问错误的问题。
5.为达到上述目的,本技术采用如下技术方案:
6.第一方面,提供一种数据访问方法,该方法包括:获取第一读请求。该第一读请求用于读取第一用户数据。确定第一用户数据对应的第一访问参数。第一访问参数用于指示第一访问参数对应的一个或多个用户数据在缓存中的元数据是否可用。根据第一访问参数,从缓存中或者从缓存外的其他存储位置中,获取第一用户数据对应的元数据。利用第一用户数据对应的元数据,读取第一用户数据。本技术上述方法中通过设置一种访问参数(即第一访问参数),该访问参数能够指示缓存中的元数据是否可用。例如,当用户数据发生改变并且未针对缓存中该用户数据的元数据执行失效缓存(此时缓存中元数据与实际元数据不一致)时,则该访问参数标记为不可用;反之,当缓存中元数据与实际元数据一致时,则该访问参数标识为可用。然后在访问过程中,可以先获取本次访问对应的访问参数,以确定缓存中的元数据是否可用。若可用,则优先从缓存中查找元数据,若不可用则直接跳过缓存从元数据节点获取元数据。这样一来,便可以避免由于缓存中元数据与实际元数据不一致而导致访问失败的问题。
7.在一种实现方式中,该方法还包括:在第一用户数据发生改变的情况下,对第一访问参数进行预设处理,以使第一访问参数指示一个或多个用户数据在缓存中的元数据不可用。上述实现方式中,在第一用户数据发生改变时,可以避免因缓存中元数据与实际元数据不一致而导致访问失败的问题。
8.在一种实现方式中,该方法还包括:对缓存中第一用户数据对应的元数据完成缓存失效后,对第一访问参数进行预设处理的逆处理。上述实现方式中,在对缓存中第一用户数据对应的元数据完成缓存失效后,通过对第一访问参数进行预设处理的逆处理,从而使第一访问参数可以恢复到预设处理之前的状态,其中当第一访问参数恢复到指示缓存中元
数据可用的状态后,在后续访问过程中便可以从缓存中获取第一用户数据的元数据。
9.在一种实现方式中,对第一访问参数进行预设处理,包括:对第一访问参数进行第一运算,其中第一运算包括增加或减小第一预设值。对第一访问参数进行预设处理的逆处理,包括:对第一访问参数进行第一运算的逆运算。通过上述实现方式,可以在第一用户数据发生改变时,通过对第一访问参数进行第一运算,从而改变第一访问参数的值,以便使第一访问参数的值指示缓存中的元数据不可用。并在对缓存中第一用户数据对应的元数据完成缓存失效后通过对第一访问参数进行逆运算,以使第一访问参数可以恢复到预设处理之前的状态,其中当第一访问参数恢复到指示缓存中元数据可用的状态后,在后续访问过程中便可以从缓存中获取第一用户数据的元数据。
10.在一种实现方式中,该方法还包括:确定第一用户数据对应的第二访问参数。第二访问参数用于指示第一访问参数对应的用户数据中,在缓存中记录有元数据的用户数据的个数。根据第一访问参数,从缓存中或者从缓存外的其他存储位置中,获取第一用户数据对应的元数据,包括:根据第一访问参数和第二访问参数,从缓存中或者从缓存外的其他存储位置中,获取第一用户数据对应的元数据。通过上述实现方式,在读取第一用户数据的过程中,可以先根据第二访问参数确定缓存中是否可能记录有第一用户数据的元数据(具体的,当第二访问参数所指示的“个数”为零时,即说明缓存中没有第一用户数据的元数据;当第二访问参数所指示的“个数”不为零时,即说明缓存中可能记录有第一用户数据的元数据)。在根据第二访问参数确定缓存中可能记录有第一用户数据的元数据后,再根据第一访问参数确定从缓存或从缓存外的存储空间获取元数据。从而可以提高访问速度。
11.在一种实现方式中,第一读请求中携带有第一用户数据的标识。确定第一用户数据对应的第一访问参数,包括:根据预设哈希函数,计算第一用户数据的标识的哈希值。根据哈希值中的第一部分数值,从多个访问参数集合中,确定第一访问参数集合;其中,多个访问参数集合中分别包括一个或多个用户数据对应的第一访问参数;根据哈希值中除第一部分数值外的第二部分数值,从第一访问参数集合中,获取第二部分数值所对应的第一访问参数。上述实现方式中,通过达到利用第一用户数据的标识的一种哈希值,完成两次查找步骤(即利用哈希值的第一部分数值从多个访问参数集合中确定第一访问参数集合,以及根据哈希值的第二部分数值从第一访问参数集合中获取第二部分数值所对应的第一访问参数),从而提高访问速度。
12.第二方面,提供一种数据访问装置,包括:访问单元,用于获取第一读请求。第一读请求用于读取第一用户数据。过滤单元,用于确定第一用户数据对应的第一访问参数。第一访问参数用于指示第一访问参数对应的一个或多个用户数据在缓存中的元数据是否可用。访问单元,还用于根据第一访问参数,从缓存中或者从缓存外的其他存储位置中,获取第一用户数据对应的元数据。访问单元,用于利用第一用户数据对应的元数据,读取第一用户数据。
13.在一种实现方式中,过滤单元,还用于在第一用户数据发生改变的情况下,对第一访问参数进行预设处理,以使第一访问参数指示一个或多个用户数据在缓存中的元数据不可用。
14.在一种实现方式中,过滤单元,还用于对缓存中第一用户数据对应的元数据完成缓存失效后,对第一访问参数进行预设处理的逆处理。
15.在一种实现方式中,对第一访问参数进行预设处理,包括:对第一访问参数进行第一运算;第一运算包括增加或减小第一预设值。对第一访问参数进行预设处理的逆处理,包括:对第一访问参数进行第一运算的逆运算。
16.在一种实现方式中,过滤单元,还用于确定第一用户数据对应的第二访问参数;第二访问参数用于指示第一访问参数对应的用户数据中,在缓存中记录有元数据的用户数据的个数。访问单元,还用于根据第一访问参数,从缓存中或者从缓存外的其他存储位置中,获取第一用户数据对应的元数据,包括:访问单元,还用于根据第一访问参数和第二访问参数,从缓存中或者从缓存外的其他存储位置中,获取第一用户数据对应的元数据。
17.在一种实现方式中,第一读请求中携带有第一用户数据的标识。过滤单元,用于确定第一用户数据对应的第一访问参数,包括:过滤单元,用于根据预设哈希函数,计算第一用户数据的标识的哈希值;过滤单元,还用于根据哈希值中的第一部分数值,从多个访问参数集合中,确定第一访问参数集合;其中,多个访问参数集合中分别包括一个或多个用户数据对应的第一访问参数;过滤单元,还用于根据哈希值中除第一部分数值外的第二部分数值,从第一访问参数集合中,获取第二部分数值所对应的第一访问参数。
18.第三方面,提供一种数据访问装置,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行计算机指令,以实现如上述第一方面或第一方面中任一实现方式提供的方法。
19.第四方面,提供一种存储系统,包括客户端和存储节点,存储节点用于存储数据,客户端用于执行如上述第一方面或第一方面中任一实现方式提供的方法。
20.第五方面,提供一种计算机可读存储介质,存储介质中存储有计算机程序,当计算机程序被处理器执行时,实现如上述第一方面或第一方面中任一实现方式提供的方法。
21.第六方面,提供一种计算机程序产品,计算机程序产品包括指令,当指令在处理器上运行时,实现如上述第一方面或第一方面中任一实现方式提供的方法。
22.上述第二方面至第六方面的有益效果可以参加第一方面和第一方面中各设计的有益效果,在此不再赘述。
附图说明
23.图1为本技术提供的一种业务系统的结构示意图;
24.图2为本技术提供的一种数据读取的流程示意图;
25.图3为本技术提供的一种数据写入的流程示意图;
26.图4为本技术提供的一种获取第一访问参数的流程示意图之一;
27.图5为本技术提供的一种获取第一访问参数的流程示意图之二;
28.图6为本技术提供的一种获取第一访问参数的流程示意图之三;
29.图7为本技术提供的一种获取第一访问参数的流程示意图之四;
30.图8为本技术提供的一种数据访问方法的流程示意图之一;
31.图9为本技术提供的一种数据访问方法的流程示意图之二;
32.图10为本技术提供的一种数据访问方法的流程示意图之三;
33.图11为本技术提供的一种数据访问装置的结构示意图之一;
34.图12为本技术提供的一种数据访问装置的结构示意图之二。
具体实施方式
35.下面将结合本实施例中的附图,对本实施例中的技术方案进行描述。其中,为了便于清楚描述本实施例的技术方案,在本技术的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。同时,在本实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
36.为了便于理解本实施例,首先对本实施例的应用场景进行举例介绍:
37.示例性的,如图1所示为本实施例提供的一种业务系统的架构示意图。在图1所示的业务系统100中,根据所实现的功能不同,将业务系统100划分为计算侧和存储侧。
38.其中,计算侧可以通过运行应用程序来实现相应业务的功能。其中,运行应用程序的计算机可以称为“应用服务器”。应用服务器110可以是物理机,也可以是虚拟机或容器。应用服务器110包括但不限于桌面电脑、服务器、笔记本电脑以及移动设备。应用服务器110可以通过交换机访问存储侧的存储系统120以存取数据。其中,交换机只是一个可选设备,应用服务器110也可以直接通过网络与存储系统120通信。或者,交换机也可以替换成以太网交换机、infiniband交换机、roce(rdma over converged ethernet)交换机等。
39.其中,存储系统120用于存储实现业务过程中需要读取或存储的数据。
40.在一种实现过程中,存储系统120中可以包括一个或多个存储服务器(图1中未示出),各存储服务器之间可以相互通信。其中,各服务器可以分别包括处理器、内存、网卡和硬盘等硬件部件。其中,处理器与内存用于提供计算资源;处理器用于处理来自服务器外的数据访问请求;内存用于与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,可以作为操作系统或其他正在运行中的程序的临时数据存储器。硬盘用于提供存储资源,例如存储数据,它可以是磁盘或其他类型的存储介质,例如固态硬盘或叠瓦式磁记录硬盘等。网卡用于与应用服务器通信。
41.在另一种实现过程中,存储系统120可以是由一台或多台主设备组成的一种中心节点,数据集中存储于该中心节点中,并且整个系统的数据处理业务集中部署在该中心节点上。
42.具体的,存储系统120可以包括用于存储用户数据的存储节点121和用于存储元数据的元数据节点122,存储节点121和元数据节点122的功能可以由存储系统120中的相应的硬件设备来实现。具体的,存储节点121和元数据节点122可以是独立物理机组成的物理节点,也可以是由虚拟机来实现的逻辑节点。示例性的,在实际应用中,存储节点121的功能可以由对象存储设备(object storage device,osd)实现,元数据节点122的功能可以由epggw分发服务器(epggw distributing server,eds)实现。
43.需要说明的是,本实施例中,为了区别元数据和被元数据描述的数据,将被元数据描述的并且用于应用服务器实现业务功能的数据称为“用户数据”,下文中若无特殊说明,对于用户数据可做上述理解,对此本实施例下文中不再赘述。
44.其中,计算侧的应用服务器110可以采用输入输出(input/output,i/o)直通的方
式,实现对存储系统120中存储节点121中用户数据的访问。其中,i/o直通是一种常用的数据访问方式,被广泛使用在分式超融合基础设施(disaggregated hyper-converged infrastructure,dhci)等应用场景下。i/o直通可以理解为存储系统中计算侧主机(如应用服务器110)先在元数据节点122中获取待访问数据的元数据(例如数据在存储系统中的存储地址、数据的属性等),再利用获取到的元数据向存储节点121发起直通访问的一种访问方式。
45.相比于传统的访问方式,i/o直通可以减少从计算侧到存储侧的软件栈开销和网络条数,能够提高存储侧的硬件资源的利用率。
46.其中,为了降低访问时延,相关技术中可以采用在应用服务器110缓存元数据的方式,从而在应用服务器110访问数据的过程中,可以省略从元数据节点122获取元数据的过程,而是直接从缓存中获取待访问数据的元数据,从而完成数据访问。
47.示例性的,如图2所示,应用服务器110中包括用于与存储系统120进行通信的客户端111以及用于存储元数据的缓存112。
48.一方面,在应用服务器110读取存储节点121中的用户数据的场景下,客户端111在获取到io读请求后,一种方式中,可以从缓存112中获取待读取的用户数据的元数据(即图2中s201a);然后利用获取到的元数据,通过数据访问接口访问存储节点121,完成用户数据的读取(即图2中s202)。另一种方式中,若缓存112中没有存储待读取数据的元数据,则可以通过访问元数据节点122获取待读取数据的元数据(即图2中s201b);然后在利用获取到的元数据通过数据访问接口访问存储节点121(即图2中s202)之后,还可以将从元数据节点122获取到的元数据存储在缓存112中,以便下次访问时使用(即s203)。
49.另一方面,在应用服务器110向存储节点121中写入数据的场景下,为了在用户数据发生改变(可以理解为将已有用户数据更新为新的数据内容)时,避免读取数据时仍按照缓存中旧的元数据访问存储节点,需要在用户数据发生改变后,删除缓存112中的旧的元数据。具体的,如图3所示,客户端111在获取到io写请求后(其中,该io写请求可以是将已有用户数据更新为新的数据内容的写请求),客户端111访问元数据节点122获取待写入的用户数据的元数据(即s301),然后按照获取到的元数据将新的数据内容写入存储节点121中(即s302),并执行失效缓存指令(即s303)以删除缓存112中该用户数据的旧的元数据。
50.在上述相关技术中,当用户数据发生改变时,在将新的数据内容写入存储节点121(即s302)后,若未能及时执行针对旧的元数据的失效缓存指令或者执行失效缓存指令失败(即未能及时执行s303,或执行s303失败),则此时会出现缓存中的元数据与实际元数据不一致的问题。进一步的,若此时接收到访问该用户数据的读请求时,则客户端111会从缓存中读取到旧的元数据,进而导致访问失败。
51.相关技术中,在上述访问失败问题发生时,通常采用重试机制,即在上述访问失败的情况下,客户端111会将执行失败的命令加入重试队列重复执行,直至重试成功。例如,客户端111会反复从缓存中读取元数据,直至缓存中旧的元数据执行失效缓存成功,之后客户端111再执行s201b从元数据节点122获取元数据。可以看出,上述这种情况会导致访问时延较长,影响系统性能。
52.为了解决上述问题,本实施例中提出一种信息处理方法。该信息处理方法中,通过设置一种访问参数。该访问参数能够指示缓存中的元数据是否可用。例如,当用户数据发生
改变并且未针对缓存中该用户数据的元数据执行失效缓存(此时缓存中元数据与实际元数据不一致)时,则该访问参数标记为不可用;反之,当缓存中元数据与实际元数据一致时,则该访问参数标识为可用。然后应用服务器110在访问过程中,可以先获取本次访问对应的访问参数,以确定缓存中的元数据是否可用。若可用,则优先从缓存中查找元数据,若不可用则直接跳过缓存从元数据节点获取元数据。这样一来,便可以避免由于缓存中元数据与实际元数据不一致而导致访问失败的问题。
53.其中,在实际应用过程中,根据应用需求的不同,可以采用不同的形式来记录上述访问参数。下面结合实例,对四种访问参数的形式的实现方式进行介绍:
54.在第一种实现方式中,在应用服务器110中可以存储一种访问参数集合,该访问参数集合中针对各个用户数据分别记录一个访问参数(下文称为第一访问参数)。进而,在数据访问中,应用服务器110可以先从该访问参数集合中,查找待访问用户数据对应的第一访问参数,然后根据该第一访问参数确定缓存中的元数据是否可用,以便执行后续过程。
55.示例性的,该访问参数集合如下表1所示:
56.表1
57.用户数据的标识第一访问参数文件路径a1(不可用)文件路径b0(可用)文件路径c1文件路径d0
……
58.其中,表1中记录有各用户数据的标识(表1中以用户数据的文件路径为例进行说明)与所对应的第一访问参数。其中,第一访问参数的形式可以根据需要设置,表1中以0和1作为第一访问参数的内容进行举例说明,其中第一访问参数为“0”指示所对应的用户数据在缓存中的元数据为“可用”,第一访问参数为“1”指示所对应的用户数据在缓存中的元数据为“不可用”。
59.基于上表1,一方面,在数据读取过程中,应用服务器110可以先根据读请求中携带的用户数据的标识(可以是文件路径),在表1中查找该用户数据对应的第一访问参数。进而根据第一访问参数确定缓存中的元数据是否可用,以便执行后续过程。
60.另一方面,在数据写入过程中,应用服务器110在将某个用户数据对应的新数据内容写入存储系统120中后,可以先将表1中该用户数据对应的第一访问参数置为“1”,并将相应的失效请求(即用于对缓存中该用户数据的元数据进行缓存失效的失效请求)推入执行队列等待执行。之后,当上述失效请求执行成功后,再将表1中该用户数据对应的第一访问参数置为“0”。这样一来,就可以避免由于缓存中的元数据与实际元数据不一致而导致访问失败的问题。
61.在第二种实现方式中,可以采用哈希表的形式来记录各用户数据对应的第一访问参数。例如,图4所示,哈希表1中记录有第一访问参数a-第一访问参数i。其中,各第一访问参数分别对应不同的用户数据。此处,与表1类似,以0和1作为第一访问参数的内容进行举例说明,第一访问参数为“0”指示“可用”,第一访问参数为“1”指示“不可用”。
62.基于上述哈希表,对于不同的用户数据,应用服务器110可以利用预设的哈希函
数,计算该用户数据的标识的哈希值,然后在哈希表中查找该哈希值对应的项,进而确定该项中记录的第一访问参数,即该用户数据对应的第一访问参数。
63.具体的,在数据读取过程中,应用服务器110可以先根据读请求中携带的用户数据的标识(可以是文件路径、逻辑地址等),在如图4所示的哈希表中查找该用户数据对应的第一访问参数。进而根据第一访问参数确定缓存中的元数据是否可用,以便执行后续过程。
64.在数据写入过程中,当某个第一访问参数对应的某个用户数据,有新数据内容写入存储系统120时,可以将图4中该第一访问参数置为“1”(即缓存中的元数据“不可用”),并将相应的用于执行缓存失效的失效请求推入执行队列等待执行。之后,当上述失效请求执行成功后,再将图4中,该第一访问参数置为“0”(即缓存中的元数据“可用”)。
65.另外,可以理解的是,在采用哈希表记录访问参数的情况下,由于不同用户数据的标识可能对应同一哈希值,也就是说同一第一访问参数可以对应多个用户数据。
66.因此,在一种可能的设计中,只要某个第一访问参数对应的多个用户数据中,有一个用户数据在缓存中的元数据不可用,则将第一访问参数置为“1”,否则置为“0”。
67.例如,在数据写入过程中,当同一第一访问参数对应的n个用户数据,同时有新数据内容写入存储系统120时,则在第一次有数据写入存储系统120时,将该第一访问参数置为“1”,直至针对上述n个用户数据的缓存失效请求均执行成功后,再将该第一访问参数置为“0”。
68.在另一种可能的设计中,当同一第一访问参数对应的用户数据中,每出现一个用户数据在缓存中的元数据不可用,则将该第一访问参数进行一次预设处理(例如,加1或减1),之后当有用户数据在缓存中的元数据恢复可用状态时,则将该第一访问参数进行一次预设处理的逆处理。
69.其中,第一访问参数对应一个初始值,用于指示缓存中相应的元数据可用。另外,第一访问参数在进行一次或多个预设处理后的值,指示缓存中相应的元数据不可用。
70.例如,可以用第一访问参数为“0”,来指示缓存中相应的元数据可用。在数据写入过程中,当某个第一访问参数(称为第一访问参数x)对应的一个用户数据(称为用户数据a)有新数据内容写入时,则将该第一访问参数x加1(即预设处理),并将用于对缓存中用户数据y的元数据进行缓存失效的失效请求(称为失效请求y)推入执行队列。之后,在该失效请求y执行成功后,再将该第一访问参数x减1。另外,在上述过程中,若在失效请求y执行成功之前,有第一访问参数x对应的另一用户数据(称为用户数据b)有新数据内容写入,则再将第一访问参数x加1,直至用户数据b对应的失效请求执行成功后,再将第一访问参数x减1。
71.可以看出,上述示例中,当第一访问参数对应的用户数据中有一个或多个用户数据处于有新数据内容写入存储系统并且未对缓存中的元数据执行失效请求的状态(下文将该状态简称为“不可用状态”)时,第一访问参数不为“0”(即说明第一访问参数所对应的一个或多个用户数据处于“不可用状态”),并且此时第一访问参数的数值表示处于“不可用状态”的用户数据个数。示例性的,如图5所示,哈希表1中第一访问参数a为1,即说明第一访问参数a对应的用户数据中有一个用户数据处于上述“不可用状态”;第一访问参数b为0,即说明第一访问参数a对应的用户数据中没有用户数据处于上述“不可用状态”,即缓存中的元数据可用;第一访问参数c为3,即说明第一访问参数a对应的用户数据中有三个用户数据处于上述“不可用状态”,以此类推。
72.这样一来,在数据读取过程中,应用服务器110只要先确定待读取数据对应的第一访问参数是否为“0”,即可确定该待读取数据在缓存中的元数据是否可用,以便执行后续步骤。
73.在第三种实现方式中,本实施例中还可以将存储在存储系统120中的用户数据划分为多个用户数据域。其中,每个用户数据域分别按照上述第二种实现方式构建一个哈希表。
74.具体的,在数据读取过程中,应用服务器110可以先确定读请求所对应的用户数据对应的用户数据域,进而确定该用户数据域对应的哈希表。然后再按照上述第二种实现方式中的方法在该哈希表中查找对应的第一访问参数,以确定是优先从缓存中获取元数据或者跳过缓存直接从元数据节点获取元数据。
75.类似的,在数据写入过程中,应用服务器110先确定写请求所对应的用户数据对应的用户数据域,进而确定该用户数据域对应的哈希表。然后再按照上述第二种实现方式中的方法在该哈希表中查找对应的第一访问参数,并在将数据内容写入存储系统120后将该第一访问参数进行预设处理,在相应的失效请求执行成功后对该第一访问参数进行逆处理。
76.上述将用户数据划分为多个用户数据域并且针对每个用户数据域构建哈希表的这种实现方式,能够降低哈希表的哈希冲突概率,即在哈希表的项数有限的情况下,可以减少哈希表中各项对应的用户数据个数(即减少同一第一访问参数对应的用户数据的个数)。
77.例如,以项数为256项的哈希表为例,若存储系统120中存储的用户数据有10000个,那么哈希表中的一个第一访问参数大约对应39(即round(10000/256))个用户数据。若将用户数据分为4个用户数据域,则平均每个用户数据域可以包括2500个用户数据。那么对于一个用户数据域对应的哈希表而言,一个第一访问参数大约对应10(即round(2500/256))个用户数据。可以看出,在将用户数据划分多个用户数据域后,可以减少同一第一访问参数对应的用户数据的个数。
78.在一种可能的设计中,在数据读/写过程中,如图6所示,应用服务器110可以利用预设的哈希函数,计算用户数据的标识的哈希值。然后利用哈希值中的一部分数值(如图6中的h1)查找本次待访问用户数据所属的用户数据域(即确定了本次待访问用户数据对应的哈希表)。然后再从该用户数据域对应的哈希表(例如图6中的用户数据域d对应的哈希表1)中,利用哈希值中的另一部分数值(例如图6中哈希值中的h2),查找对应的第一访问参数,以便完成后续步骤。
79.在第四种实现方式中,对应于上述用于指示用户数据在缓存中的元数据是否可用的第一访问参数,本实施例中还可以设置另外一种访问参数(下文称为第二访问参数),该第二访问参数用于指示所对应第一访问参数对应的用户数据中,在缓存中记录有元数据的用户数据的个数。
80.示例性的,如图7所示,各用户数据域对应的哈希表中,以用户数据域d对应的哈希表1为例,其中哈希表1中每项中记录有第一访问参数以及第二访问参数。其中,第一访问参数的内容及作用如上文所述,在此不再赘述。第二访问参数中记录有第一访问参数对应的一个或多个用户数据(也可以理解为哈希表中当前项对应的一个或多个用户数据)中在缓存中记录有元数据的用户数据个数。例如,图7中,第二访问参数j为“2”,则表示在哈希表1
中第一项所对应的一个或多个用户数据中,当前在缓存中记录有元数据的用户数据个数。
81.具体的,在应用服务器110访问存储系统120的过程中,每次有用户数据的元数据写入缓存中时,则将该用户数据对应的第二访问参数加1;当有用户数据的元数据从缓存中删除时,则将该用户数据对应的第二访问参数减1。
82.这样一来,在数据读取过程中,应用服务器110可以根据读请求中携带的待读取用户数据的标识,查找该待读取用户数据对应的第二访问参数。若第二访问参数为“0”,则说明缓存中没有该待读取用户数据的元数据,进而直接跳到缓存,从元数据节点122中获取元数据,以便进行后续步骤。若第二访问参数不为“0”,则说明缓存中有包含待读取用户数据的一个或多个用户数据(即待读取用户数据对应的第一访问参数对应的一个或多个用户数据)的元数据,也就说明缓存中有可能记录有该待读取用户数据的元数据。进而,可以按照上述第二种实现方式的方法,根据所对应的第一访问参数确定从缓存中或从元数据节点120中获取元数据。
83.下面以图1所示业务系统100的运行过程为例,对上述方法进行介绍。
84.具体的,如图8所示,本实施例中应用服务器110上,除与存储系统120进行通信的客户端111以及存储元数据的缓存112之外,还包括用于记录访问参数的过滤器113。其中,在实际应用过程中,客户端111、缓存112和过滤器113的功能可以由应用服务器110中相应的硬件结构和/或软件模块来实现,对于上述功能是以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的应用场景,对此本实施例可以不做限制。
85.如图8所示,本实施例所提供信息处理方法,在应用服务器110从存储系统120中读取数据的场景下,可以包括以下步骤:
86.s401、应用服务器110获取第一读请求。
87.其中,该第一读请求用于读取第一用户数据。
88.示例性的,该第一读请求可以是客户端111接收的来自应用服务器110上层应用的读请求。在一种示例中,客户端111具体可以为分布式并行客户端(distributed parallel client,dpc)。其中客户端111中包括用于执行在存储节点121中读/写数据的数据访问接口,例如数据访问接口具体可以为持久层日志客户端(persistence layer log client,plog client)。
89.具体的,第一读请求中可以携带有第一用户数据的标识,以便利用该标识实现第一用户数据的读取。其中,该第一用户数据的标识,具体可以为第一用户数据在文件系统中的文件路径、第一用户数据在应用服务器110中的逻辑地址等等。
90.s402、应用服务器110确定第一用户数据对应的第一访问参数。
91.其中,第一访问参数用于指示该第一访问参数对应的一个或多个用户数据在缓存中的元数据是否可用。下文中为简化描述,将第一访问参数指示该第一访问参数对应的一个或多个用户数据在缓存中的元数据不可用,称为第一访问参数指示“不可用”;将第一访问参数指示该第一访问参数对应的一个或多个用户数据在缓存中的元数据可用,称为第一访问参数指示“可用”,除有特殊说明外,下文中类似描述可做上述理解。
92.例如,应用服务器110中客户端111在获取到第一读请求后,可以利用第一用户数据的标识,访问过滤器113。过滤器113根据第一用户数据的标识,确定第一用户数据对应的第一访问参数,并反馈给客户端111。
93.在一种实现方式中,过滤器113可以根据第一用户数据的标识(例如文件路径),从上文表1中查找该文件路径对应的第一访问参数。其中,若第一访问参数为“0”指示所对应的用户数据在缓存中的元数据为“可用”,第一访问参数为“1”指示所对应的用户数据在缓存中的元数据为“不可用”。
94.在另一种实现方式中,过滤器113可以按照上文中图4或图5对应的方法,根据第一用户数据的标识,利用预设的哈希函数计算该标识的哈希值,并从哈希表中确定该哈希值对应的第一访问参数。其中,若第一访问参数为“0”指示所对应的用户数据在缓存中的元数据为“可用”;第一访问参数为非“0”的数值时,则指示所对应的用户数据在缓存中的元数据为“不可用”。
95.在又一种实现方式中,过滤器113可以按照上文中图6对应的方法,根据第一用户数据的标识,利用预设的哈希函数计算该标识的哈希值。并根据该哈希值中的一部分数值(如图6中哈希值中的h1部分),从多个用户数据域中确定第一用户数据所属的用户数据域。然后再从该用户数据域对应的哈希表中,根据上述哈希值中的另一部分数值(如图6中哈希值中的h2部分),确定对应的第一访问参数。其中,若第一访问参数为“0”指示所对应的用户数据在缓存中的元数据为“可用”;第一访问参数为非“0”的数值时,则指示所对应的用户数据在缓存中的元数据为“不可用”。
96.上述实现方式,也可以理解为过滤器113先根据第一用户数据的哈希值中的一部分数据,从多个访问参数集合(其中,一个访问参数集合可以为一个用户数据域对应的哈希表)中确定第一用户数据对应的访问参数集合(即第一用户数据所属的用户数据域对应的哈希表)。然后再根据第一用户数据的哈希值中的另一部分数据,从上述访问参数集合中,获取对应的第一访问参数。
97.s403、应用服务器110根据上述第一访问参数,确定从缓存中或从缓存外其他存储空间中获取第一用户数据的元数据。
98.具体的,当第一访问参数指示“可用”时,如图8中s403a,客户端111可以优先从缓存112中查找第一用户数据的元数据。
99.当第一访问参数指示不可用时,如图8中s403b,客户端111可以直接跳过缓存112而从缓存外的其他存储空间(如元数据节点122)中获取第一用户数据的元数据。
100.s404、应用服务器110根据第一用户数据的元数据,读取第一用户数据。
101.如图8中,客户端111在从缓存112或元数据节点122中获取到第一用户数据的元数据后,可以根据元数据中的存储地址等信息,访问存储系统120中对应的存储节点121,以完成第一用户数据的读取。
102.本实施例上述s401-s404所提供的方法中,通过设置一种能够指示缓存中的元数据是否可用的访问参数(即上文第一访问参数)。进而在应用服务器110访问存储系统时,可以先获取本次访问对应的访问参数,以确定缓存中的元数据是否可用。以避免在缓存中的元数据不可用的情况下,应用服务器110依然执行从缓存中获取元数据的操作从而导致访问时延较长的问题。
103.另外,在写数据的过程中,本实施例所提供方法,还可以包括:
104.s405、应用服务器110在第一用户数据发生改变的情况下,对该第一用户数据对应的第一访问参数进行预设处理,以使得该第一访问参数指示该一个或多个用户数据在缓存
中的元数据不可用。直至在对缓存112中第一用户数据对应的元数据完成缓存失效后,对该第一访问参数进行上述预设处理的逆处理。
105.示例性的,如图9所示,s405具体可以通过以下s4051-s4055的步骤来实现:
106.s4051、客户端111获取第一写请求。
107.示例性的,该第一读请求可以是客户端111接收的来自应用服务器110上层应用的写请求。
108.其中,第一写请求中可以携带有第一用户数据的标识以及待写入的数据内容。该标识可以为文件路径、逻辑地址等等。
109.s4052、客户端111将第一写请求中携带的数据内容写入存储系统120。
110.例如,客户端111可以通过访问元数据节点122,获取第一用户数据的元数据,其中该元数据中携带有分配给第一用户数据的新的存储地址。然后客户端111可以通过与存储节点121通信的数据访问接口(例如该数据访问接口可以为:持久层日志客户端(persistence layer log client,plog client)),将待写入的数据内容写入上述存储地址中,以完成数据内容写入。
111.s4053、客户端111指示过滤器113对第一用户数据对应的第一访问参数进行预设处理。
112.具体的,客户端111可以向过滤器113发送携带第一用户数据的标识的指令,过滤器113在获取该指令后,可以按照上文表1或图4-图6相关的实现方式,根据第一用户数据的标识确定第一访问参数,并对第一访问参数进行预设处理,以使得预设处理后的第一访问参数指示“不可用”。
113.具体的,预设处理可以为增加或减小第一预设值。
114.例如,第一访问参数对应一个初始值,用于指示缓存中相应的元数据可用。第一访问参数在进行一次或多个预设处理(例如加1)后的值,指示缓存中相应的元数据不可用。
115.s4054、客户端111执行失效请求。
116.其中,该失效请求用于对缓存中第一用户数据的元数据进行缓存失效处理。
117.例如,应用服务器110中维护有一个异步执行队列。当客户端111将第一写请求中携带的数据内容写入存储系统120后,客户端111通过将上述失效请求推入该异步执行队列,以等待执行。
118.s4055、客户端111在失效请求执行成功后,指示过滤器113对第一用户数据对应的第一访问参数进行预设处理的逆处理。
119.其中,过滤器113对第一访问参数的预设处理和逆处理的过程,具体可以参照上文“第二种实现方式”中的相应内容,在此不再追逐。
120.通过上述s405,可以在用户数据发生改变并且未针对缓存中该用户数据的元数据执行失效缓存(此时缓存中元数据与实际元数据不一致)时,使该访问参数指示“不可用”;反之,当缓存中元数据与实际元数据一致时,使该访问参数指示“可用”。从而避免因缓存中元数据与实际元数据不一致,而导致访问时延长的问题。
121.在一种实现方式中,基于上述访问参数的“第四种实现方式”,如图10所示,该方法还包括:
122.s406、应用服务器110确定第一用户数据对应的第二访问参数。
123.其中,第二访问参数用于指示第一访问参数对应的用户数据中,在缓存中记录有元数据的用户数据的个数。
124.示例性的,如图10中,客户端111在缓存中新增用户数据的元数据或者有用户数据的元数据被删除时,可以指示过滤器113对相应的第二访问参数进行修改。
125.其中,过滤器113对第二访问参数的获取方法和修改方法可以参照上文中“第四种实现方式”以及图7所示示例的相应描述,在此不再赘述。
126.进而,上述根据第一访问参数,确定从缓存或缓存之外的存储空间获取第一用户数据的元数据(即s403),具体可以理解为:根据第一访问参数和第二访问参数,确定从缓存或缓存之外的存储空间获取第一用户数据的元数据。
127.示例性的,一方面,如图10所示,若第二访问参数指示第一访问参数对应的用户数据中,在缓存122中记录有元数据的用户数据的个数为0个(即缓存112中没有第一访问参数对应的用户数据的元数据),则客户端111从元数据节点122中获取第一用户数据的元数据,即s4031。
128.另一方面,若第二访问参数指示的个数不为0(即缓存中包括第一访问参数对应的用户数据的元数据),则客户端111可以根据第一访问参数,确定从缓存112或者从元数据节点122中获取第一用户数据的元数据。具体的:
129.其中,当第一访问参数指示所对应的用户数据在缓存中的元数据为“可用”,则从缓存112获取元数据(即s4032);当第一访问参数指示所对应的用户数据在缓存中的元数据为“不可用”,则从元数据节点122获取元数据(即s4033)。
130.可以理解的是,在本技术的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本技术的实施例的范围。上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。
131.另外,本实施例还提供一种数据访问装置,该装置可以用于实现上述数据访问方法中的部分或全部效果。具体的,该装置可以用于执行上述数据访问方法中客户端111、缓存112和过滤器113所执行步骤中的部分或全部步骤。
132.可以理解的是,为了实现上述数据访问方法中功能,数据访问装置包括了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本实施例中描述的各示例的单元及方法步骤,本实施例所提供技术方案能够以硬件或硬件和计算机软件相结合的形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用场景和设计约束条件。
133.在本实施例中,在一种实现方式中,该数据访问装置可以位于应用服务器110中;在另一种实现方式中,该数据访问装置的功能也可以由独立于应用服务器110的硬件结构和/或软件模块来实现。
134.图11为本技术提供的一种数据访问装置的结构示意图。该数据访问装置50包括访问单元501、过滤单元502,另外该数据访问装置还可以包括缓存503。
135.其中,访问单元501可以用于实现上述图8-图10所示的方法中客户端111的部分或全部功能,过滤单元502可以用于实现上述图8-图10所示的方法中过滤器113的部分或全部功能,缓存503可以用于实现上述图8-图10所示的方法中缓存112的部分或全部功能。
136.可以理解的是,当该数据访问装置50可以调用数据访问装置50外其他装置或设备
area networks,wlan)等。
147.另外,通信线路608用于将数据访问装置60中各部件连接。具体的,通信线路608可以包括数据总线、电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为通信线路408。
148.在具体实现中,作为一种实施例,数据访问装置60还可以包括输出设备605和输入设备606。输出设备605可以和处理器601通信,可以以多种方式来显示信息。例如,输出设备605可以是液晶显示器(liquid crystal display,lcd),发光二级管(light emitting diode,led)显示设备,阴极射线管(cathode ray tube,crt)显示设备,或投影仪(projector)等。输入设备606可以和处理器601通信,可以以多种方式接收用户的输入。例如,输入设备406可以是鼠标、键盘、触摸屏设备或传感设备等。
149.另外,数据访问装置60还可以包括存储介质604。存储介质604用于存储计算机指令以及实现本实施例技术方案的各种数据。以便数据访问装置60在执行本实施例上述数据访问方法时,将存储介质604中存储的计算机指令和各种数据加载至内存603中,以使得处理器601可以通过执行内存603中存储的计算机指令,用于执行本实施例所提供的数据访问方法。
150.应理解,根据本实施例的数据访问装置60可对应于本实施例中的数据访问装置50,并可以对应于执行根据本实施例的数据访问方法的相应主体,并且数据访问装置60中的各个模块的上述和其它操作和/或功能分别为了实现图8-图10中的各个方法的相应流程,为了简洁,在此不再赘述。
151.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序或指令。在计算机上加载和执行所述计算机程序或指令时,全部或部分地执行本实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备或者其它可编程装置。所述计算机程序或指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序或指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是集成一个或多个可用介质的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,例如,软盘、硬盘、磁带;也可以是光介质,例如,数字视频光盘(digital video disc,dvd);还可以是半导体介质,例如,ssd。
152.在本实施例中,如果没有特殊说明以及逻辑冲突,不同的实现方式之间的术语和/或描述具有一致性、且可以相互引用,不同的实施例中的技术特征根据其内在的逻辑关系可以组合形成新的实施例。
153.本实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上,其它量词与之类似。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。此外,对于单数形式“a”,“an”和“the”出现的元素(element),除非上下文另有明确规定,否则其不意味着“一个或仅一个”,而是意味着“一个或多于一个”。例如,“a device”意味着对一个或多个这样的device。再
者,至少一个(at least one of).......”意味着后续关联对象中的一个或任意组合,例如“a、b和c中的至少一个”包括a,b,c,ab,ac,bc,或abc。在本实施例的文字描述中,字符“/”,一般表示前后关联对象是一种“或”的关系;在本实施例的公式中,字符“/”,表示前后关联对象是一种“相除”的关系。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1