掌桥专利:专业的专利平台
掌桥专利
首页

基于共享存储架构的数据处理方法、装置和计算设备

文献发布时间:2024-04-18 20:00:50


基于共享存储架构的数据处理方法、装置和计算设备

技术领域

本公开的实施方式涉及数据处理领域,更具体地,本公开的实施方式涉及一种基于共享存储架构的数据处理方法、装置和计算设备。

背景技术

本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

目前,在数据处理领域中,常用的数据库架构中通常包括多个设备,以及多个设备可共享访问的共享存储设备。其中,多个设备中,可用于对共享存储设备中的数据进行读写操作的设备可称为主设备;仅能进行读操作的设备称为从设备。

相关技术中,当主设备在进行数据更新操作时,由于更新后的数据会先写入主设备对应的内存中,之后再将内存中的更新后的数据持久化存储到共享存储设备中,即,主设备在进行数据更新时,并非实时将数据更新至共享存储中。

因此,在主设备将更新后的数据写入内存中,但并未写入共享存储设备中时,如何确保从设备在上述阶段中可以获取到主设备更新后的数据,确保设备间的数据同步是一个亟需解决的问题。

发明内容

本公开提供一种基于共享存储架构的数据处理方法、装置和计算设备,以便从节点可以准确查询到相应的数据。

在本公开实施方式的第一方面中,提供了一种基于共享存储架构的数据处理方法,所述方法应用于从节点,所述方法包括:

接收主节点发送的第一日志信息;其中,所述第一日志信息为所述主节点对第二日志信息进行切分处理所得到的;所述第二日志信息用于记录第一数据和第一数据页标识;所述第一数据为所述主节点将原始数据页更新为第一数据页所作出更改的数据;所述第一数据页标识为所述第一数据页的标识;所述第一日志信息用于记录所述第一数据页标识和所述第一数据的第一位置信息;所述第一位置信息表征所述第一数据在共享存储节点中的位置;

若根据所述第一日志信息,确定第一缓存池中存在第二数据页,则为所述第二数据页添加第一标识;所述第一标识表征所述第一数据页中的数据和所述第二数据页中的数据不相同;所述第二数据页和所述第一数据页具有相同的数据页标识;所述第一缓存池用于存储所述从节点缓存的数据页;

响应于数据查询指令,根据所述第一缓存池,确定目标数据。

一个示例中,响应于数据查询指令,根据所述第一缓存池,确定目标数据,包括:

响应于数据查询指令,若确定所述第一缓存池中包括第三数据页,且所述第三数据页不具备第二标识,则确定所述第三数据页中的数据为目标数据;其中,所述第三数据页和所述数据查询指令请求查询的目标数据页具有相同的数据页标识;所述第二标识表征所述第三数据页中的数据和所述主节点更新生成的目标数据页中的数据不相同。

一个示例中,响应于数据查询指令,根据所述第一缓存池,确定目标数据,包括:

响应于数据查询指令,若确定所述第一缓存池中包括第四数据页,且所述第四数据页具备第三标识,则确定所述第四数据页对应的第三日志信息;其中,所述第四数据页和所述数据查询指令请求查询的目标数据页具有相同的数据页标识;所述第三标识表征所述第四数据页中的数据和所述主节点更新生成的目标数据页中的数据不相同;所述第三日志信息用于记录所述第四数据页的第二数据页标识和第二位置信息;所述第二位置信息为第二数据在所述共享存储节点中的位置;所述第二数据为所述主节点将所述第四数据页更新为所述目标数据页所作出更改的数据;

根据所述第二位置信息,获取所述第二数据;并根据所述第二数据对所述第四数据页中数据进行更新,得到目标数据。

一个示例中,响应于数据查询指令,根据所述第一缓存池,确定目标数据,包括:

响应于数据查询指令,若确定所述第一缓存池中不包括第五数据页,则确定第四日志信息,其中,所述第四日志信息用于记录目标数据页的第三数据页标识和第三位置信息;所述第三位置信息为第三数据在所述共享存储节点中的位置;所述第三数据为所述主节点将第六数据页更新为所述目标数据页所作出更改的数据;所述第六数据页和所述目标数据页用于指示具有相同的数据页标识;所述目标数据页为所述数据查询指令请求查询的数据页;

根据所述第三数据页标识和所述第三位置信息,在所述共享存储节点中获取所述第三数据和所述第六数据页;

根据所述第三数据对所述第六数据页中的数据进行更新,得到目标数据。

一个示例中,还包括:

响应于日志回放请求,若确定所述第一缓存池中包括具有第四标识的第七数据页,则获取所述第七数据页对应的第五日志信息;其中,所述第四标识表征所述第七数据页中的数据和所述主节点更新生成的第八数据页中的数据不相同;所述第八数据页和所述第七数据页具有相同的数据页标识;所述第五日志信息用于记录所述第七数据页的第四数据页标识和第四位置信息;所述第四位置信息为第四数据在所述共享存储节点中的位置;所述第四数据为所述主节点将所述第七数据页中更新为所述八数据页所作出更改的数据;

根据所述第四位置信息,在所述共享存储节点中获取所述第四数据;

根据所述第四数据对所述第七数据页中的数据进行更新,得到更新后的第七数据页。

一个示例中,还包括:

接收主设备发送的通知信息;所述通知信息用于指示具有第一日志序列号的第九数据页已由所述主设备转存至所述共享存储节点;

根据所述通知信息,对所述从节点接收到的第六日志信息进行删除处理;所述第六日志信息用于记录所述第九数据页的数据页标识和第五位置信息;所述第五位置信息为第五数据在所述共享存储节点中的位置;所述第五数据为所述主节点更新生成所述第九数据页时所更改的数据页中的数据,且所述第六日志信息具有的第二日志序列号小于等于所述第一日志序列号。

一个示例中,所述共享存储节点中包括第一存储区和至少一个第二存储区;所述第一存储区用于所述主节点生成的第一日志信息;所述第二存储区用于存储第十数据页所对应的第六数据;所述第十数据页为具有与所述第二存储区对应的数据页标识的数据页;所述第六数据为所述主节点更新生成所述第十数据页时所对应更新的数据。

一个示例中,所述第一位置信息包括:所述第一数据的数据量和起始位置信息;所述起始位置信息用于指示所述第一数据在共享存储节点中的起始存储位置;所述第一数据的数据量用于指示所述第一数据所占用的存储空间大小。

一个示例中,所述方法还包括:

将所述第一日志信息中的第一数据页标识作为关键字;并基于哈希算法和所述第一数据页标识,确定所述第一日志信息的指示信息;所述指示信息用于指示所述第一日志信息的存储空间;

将所述第一日志信息存储至所述指示信息所指示的存储空间。

在本公开实施方式的第二方面中,提供了一种基于共享存储架构的数据处理方法,所述方法应用于主节点,所述方法包括:

响应于数据更新请求,对至少一个原始数据页中的数据进行更新处理,得到所述原始数据页对应更新后的第一数据页;并生成至少一个第二日志信息;所述第二日志信息用于记录第一数据和第一数据页标识;所述第一数据为所述主节点将原始数据页更新为第一数据页所作出更改的数据;所述第一数据页标识为所述第一数据页的标识;

对所述第二日志信息进行切分处理,得到第一日志信息;其中,所述第一日志信息用于记录所述第一数据页标识和所述第一数据的第一位置信息;所述第一位置信息表征所述第一数据在共享存储节点中的位置;

向从节点发送所述第一日志信息。

一个示例中,还包括:

将所述第一数据页缓存至所述主节点对应的第二缓存池中;其中,所述第二缓存池用于缓存主节点生成的数据页;

将所述第二日志信息对应的第一日志信息和所述第二日志信息包括的第一数据,写入所述第二缓存池中。

一个示例中,所述第二缓存池包括第一缓存区和至少一个第二缓存区;所述第一缓存区用于存储各个第二日志信息各自对应的第一日志信息;所述第二缓存区用于存储第十一数据页所对应的第七数据;所述第十一数据页为具有与所述第二缓存区对应的数据页标识的数据页;所述第七数据为所述主节点更新生成所述第十一数据页时所对应更新的数据。

一个示例中,还包括:

基于多个第一线程,将所述第二缓存池中所述第一缓存区和所述第二缓存区中所存储的数据并行写入所述共享存储节点。

一个示例中,所述共享存储节点中包括第一存储区和第二存储区;所述第一存储区用于存储所述主节点生成的第一日志信息;所述第二存储区用于存储第十数据页所对应的第六数据;所述第十数据页为具有与所述第二存储区对应的数据页标识的数据页;所述第六数据为所述主节点更新生成所述第十数据页时所对应更新的数据。

一个示例中,所述第一存储区和所述第一缓存区对应;所述第二缓存区和所述第二存储区一一对应。

一个示例中,所述方法还包括:

确定第一写入信息和第二写入信息;其中,所述第一写入信息用于指示所述第一缓存区中已写入所述共享存储节点的第一日志信息对应的第一序列号;所述第一序列号为触发所述主节点生成第四日志信息的数据更新请求具有的全局日志序列号;所述第四日志信息为所述第一日志信息对应的第二日志信息;所述第二写入信息用于指示所述第二缓存区中已写入所述共享存储节点的第七数据所对应的第二序列号;所述第二序列号为触发所述主节点生成第五日志信息的数据更新请求具有的全局日志序列号;所述第五日志信息包括所述第七数据;

根据所述第一写入信息和所述第二写入信息,确定全局持久化日志序列号;其中,所述全局持久化日志序列号表征第一请求所对应的全部第六日志信息已转存至所述共享存储节点中;所述第一请求为具有第二全局日志序列号的数据更新请求;所述第二全局日志序列号小于等于所述全局持久化日志序列号;所述第六日志信息用于记录所述第一请求触发更新的数据页的数据页标识和调整的数据;

根据所述全局持久化日志序列号,在第二缓存池中确定待写入数据页;其中,所述待写入数据页对应的第三日志序列号小于所述全局持久化日志序列号;

将所述待写入数据页更新至所述共享存储节点中。

一个示例中,所述数据更新请求具有第一全局日志序列号;所述共享存储节点中还包括:第三存储区和第四存储区;所述第三存储区包括N个第一子区域;所述第四存储区包括N个第二子区域;所述第一子区域与所述第二子区域一一对应;N为正整数;

所述方法还包括:

确定所述数据更新请求对应的至少一个第四位置信息和至少一个第五位置信息;其中,所述第四位置信息为所述第一日志信息在第二缓存池中的位置;所述第五位置信息为所述第一数据在所述第二缓存池中的位置;

将所述第一全局日志序列号写入第一子区域;并将所述数据更新请求对应第四位置信息和所述第五位置信息,写入所述第一子区域对应的第二子区域。

在本公开实施方式的第三方面中,提供了一种基于共享存储架构的数据处理装置,所述装置应用于从节点,所述装置包括:

第一接收单元,用于接收主节点发送的第一日志信息;其中,所述第一日志信息为所述主节点对第二日志信息进行切分处理所得到的;所述第二日志信息用于记录第一数据和第一数据页标识;所述第一数据为所述主节点将原始数据页更新为第一数据页所作出更改的数据;所述第一数据页标识为所述第一数据页的标识;所述第一日志信息用于记录所述第一数据页标识和所述第一数据的第一位置信息;所述第一位置信息表征所述第一数据在共享存储节点中的位置;

第一确定单元,用于若根据所述第一日志信息,确定第一缓存池中存在第二数据页,则为所述第二数据页添加第一标识;所述第一标识表征所述第一数据页中的数据和所述第二数据页中的数据不相同;所述第二数据页和所述第一数据页具有相同的数据页标识;所述第一缓存池用于存储所述从节点缓存的数据页;

第二确定单元,用于响应于数据查询指令,根据所述第一缓存池,确定目标数据。

一个示例中,第二确定单元,具体用于:响应于数据查询指令,若确定所述第一缓存池中包括第三数据页,且所述第三数据页不具备第二标识,则确定所述第三数据页中的数据为目标数据;其中,所述第三数据页和所述数据查询指令请求查询的目标数据页具有相同的数据页标识;所述第二标识表征所述第三数据页中的数据和所述主节点更新生成的目标数据页中的数据不相同。

一个示例中,第二确定单元,具体用于:响应于数据查询指令,若确定所述第一缓存池中包括第四数据页,且所述第四数据页具备第三标识,则确定所述第四数据页对应的第三日志信息;其中,所述第四数据页和所述数据查询指令请求查询的目标数据页具有相同的数据页标识;所述第三标识表征所述第四数据页中的数据和所述主节点更新生成的目标数据页中的数据不相同;所述第三日志信息用于记录所述第四数据页的第二数据页标识和第二位置信息;所述第二位置信息为第二数据在所述共享存储节点中的位置;所述第二数据为所述主节点将所述第四数据页更新为所述目标数据页所作出更改的数据;

根据所述第二位置信息,获取所述第二数据;并根据所述第二数据对所述第四数据页中数据进行更新,得到目标数据。

一个示例中,第二确定单元,具体用于:响应于数据查询指令,若确定所述第一缓存池中不包括第五数据页,则确定第四日志信息,其中,所述第四日志信息用于记录目标数据页的第三数据页标识和第三位置信息;所述第三位置信息为第三数据在所述共享存储节点中的位置;所述第三数据为所述主节点将第六数据页更新为所述目标数据页所作出更改的数据;所述第六数据页和所述目标数据页用于指示具有相同的数据页标识;所述目标数据页为所述数据查询指令请求查询的数据页;

根据所述第三数据页标识和所述第三位置信息,在所述共享存储节点中获取所述第三数据和所述第六数据页;

根据所述第三数据对所述第六数据页中的数据进行更新,得到目标数据。

一个示例中,还包括:

第一获取单元,用于响应于日志回放请求,若确定所述第一缓存池中包括具有第四标识的第七数据页,则获取所述第七数据页对应的第五日志信息;其中,所述第四标识表征所述第七数据页中的数据和所述主节点更新生成的第八数据页中的数据不相同;所述第八数据页和所述第七数据页具有相同的数据页标识;所述第五日志信息用于记录所述第七数据页的第四数据页标识和第四位置信息;所述第四位置信息为第四数据在所述共享存储节点中的位置;所述第四数据为所述主节点将所述第七数据页中更新为所述八数据页所作出更改的数据;

第二获取单元,用于根据所述第四位置信息,在所述共享存储节点中获取所述第四数据;

第一更新单元,用于根据所述第四数据对所述第七数据页中的数据进行更新,得到更新后的第七数据页。

一个示例中,还包括:

第二接收单元,用于接收主设备发送的通知信息;所述通知信息用于指示具有第一日志序列号的第九数据页已由所述主设备转存至所述共享存储节点;

删除单元,用于根据所述通知信息,对所述从节点接收到的第六日志信息进行删除处理;所述第六日志信息用于记录所述第九数据页的数据页标识和第五位置信息;所述第五位置信息为第五数据在所述共享存储节点中的位置;所述第五数据为所述主节点更新生成所述第九数据页时所更改的数据页中的数据,且所述第六日志信息具有的第二日志序列号小于等于所述第一日志序列号。

一个示例中,所述共享存储节点中包括第一存储区和至少一个第二存储区;所述第一存储区用于所述主节点生成的第一日志信息;所述第二存储区用于存储第十数据页所对应的第六数据;所述第十数据页为具有与所述第二存储区对应的数据页标识的数据页;所述第六数据为所述主节点更新生成所述第十数据页时所对应更新的数据。

一个示例中,所述第一位置信息包括:所述第一数据的数据量和起始位置信息;所述起始位置信息用于指示所述第一数据在共享存储节点中的起始存储位置;所述第一数据的数据量用于指示所述第一数据所占用的存储空间大小。

一个示例中,所述装置还包括:

第三确定单元,用于将所述第一日志信息中的第一数据页标识作为关键字;

第四确定单元,用于基于哈希算法和所述第一数据页标识,确定所述第一日志信息的指示信息;所述指示信息用于指示所述第一日志信息的存储空间;

存储单元,用于将所述第一日志信息存储至所述指示信息所指示的存储空间。

在本公开实施方式的第四方面中,提供了一种基于共享存储架构的数据处理装置,所述装置应用于主节点,所述装置包括:

第二更新单元,用于响应于数据更新请求,对至少一个原始数据页中的数据进行更新处理,得到所述原始数据页对应更新后的第一数据页;并生成至少一个第二日志信息;所述第二日志信息用于记录第一数据和第一数据页标识;所述第一数据为所述主节点将原始数据页更新为第一数据页所作出更改的数据;所述第一数据页标识为所述第一数据页的标识;

切分单元,用于对所述第二日志信息进行切分处理,得到第一日志信息;其中,所述第一日志信息用于记录所述第一数据页标识和所述第一数据的第一位置信息;所述第一位置信息表征所述第一数据在共享存储节点中的位置;

发送单元,用于向从节点发送所述第一日志信息。

一个示例中,还包括:

第一缓存单元,用于将所述第一数据页缓存至所述主节点对应的第二缓存池中;其中,所述第二缓存池用于缓存主节点生成的数据页;

第二缓存单元,用于将所述第二日志信息对应的第一日志信息和所述第二日志信息包括的第一数据,写入所述第二缓存池中。

一个示例中,其中,所述第二缓存池包括第一缓存区和至少一个第二缓存区;所述第一缓存区用于存储各个第二日志信息各自对应的第一日志信息;所述第二缓存区用于存储第十一数据页所对应的第七数据;所述第十一数据页为具有与所述第二缓存区对应的数据页标识的数据页;所述第七数据为所述主节点更新生成所述第十一数据页时所对应更新的数据。

一个示例中,还包括:

第一写入单元,用于基于多个第一线程,将所述第二缓存池中所述第一缓存区和所述第二缓存区中所存储的数据并行写入所述共享存储节点。

一个示例中,所述共享存储节点中包括第一存储区和第二存储区;所述第一存储区用于存储所述主节点生成的第一日志信息;所述第二存储区用于存储第十数据页所对应的第六数据;所述第十数据页为具有与所述第二存储区对应的数据页标识的数据页;所述第六数据为所述主节点更新生成所述第十数据页时所对应更新的数据。

一个示例中,所述第一存储区和所述第一缓存区对应;所述第二缓存区和所述第二存储区一一对应。

一个示例中,所述数据更新请求具有第一全局日志序列号;所述装置还包括:

第五确定单元,用于确定第一写入信息和第二写入信息;其中,所述第一写入信息用于指示所述第一缓存区中已写入所述共享存储节点的第一日志信息对应的第一序列号;所述第一序列号为触发所述主节点生成第四日志信息的数据更新请求具有的全局日志序列号;所述第四日志信息为所述第一日志信息对应的第二日志信息;所述第二写入信息用于指示所述第二缓存区中已写入所述共享存储节点的第七数据所对应的第二序列号;所述第二序列号为触发所述主节点生成第五日志信息的数据更新请求具有的全局日志序列号;所述第五日志信息包括所述第七数据;

第六确定单元,用于根据所述第一写入信息和所述第二写入信息,确定全局持久化日志序列号;其中,所述全局持久化日志序列号表征第一请求所对应的全部第六日志信息已转存至所述共享存储节点中;所述第一请求为具有第二全局日志序列号的数据更新请求;所述第二全局日志序列号小于等于所述全局持久化日志序列号;所述第六日志信息用于记录所述第一请求触发更新的数据页的数据页标识和调整的数据;

第七确定单元,用于根据所述全局持久化日志序列号,在第二缓存池中确定待写入数据页;其中,所述待写入数据页对应的第三日志序列号小于所述全局持久化日志序列号;

第二写入单元,用于将所述待写入数据页更新至所述共享存储节点中。

一个示例中,所述数据更新请求具有第一全局日志序列号;所述共享存储节点中还包括:第三存储区和第四存储区;所述第三存储区包括N个第一子区域;所述第四存储区包括N个第二子区域;所述第一子区域与所述第二子区域一一对应;N为正整数;

所述装置还包括:

第八确定单元,用于确定所述数据更新请求对应的至少一个第四位置信息和至少一个第五位置信息;其中,所述第四位置信息为所述第一日志信息在第二缓存池中的位置;所述第五位置信息为所述第一数据在所述第二缓存池中的位置;

第三写入单元,用于将所述第一全局日志序列号写入第一子区域;

第四写入单元,用于将所述数据更新请求对应第四位置信息和所述第五位置信息,写入所述第一子区域对应的第二子区域。

在本公开实施方式的第五方面中,提供了一种计算机可读存储介质,包括:所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面或第二方面中任一项所述的方法。

在本公开实施方式的第六方面中,提供了一种计算设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述计算设备执行如第一方面或第二方面中任一项所述的方法。

根据本公开实施方式的基于共享存储架构的数据处理方法、装置和计算设备。该方法应用于从节点,通过上述方法,可以确保从节点获取到数据的准确性,并且减少了主节点和从节点之间的数据传输量,降低从节点的存储空间的占用量。

附图说明

通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:

图1为本公开提供的一种主从节点日志复制的框架示意图;

图2为本公开实施例提供的一种数据同步示意图;

图3为本公开实施例提供的一种数据变化示意图;

图4为本公开提供的一种数据库架构示意图;

图5为本公开实施例提供的一种基于共享存储架构的数据处理方法的流程示意图;

图6为本公开实施例提供的第二种基于共享存储架构的数据处理方法的流程示意图;

图7为本公开实施例提供的一种从节点数据查询示意图;

图8为本公开实施例提供的第三种基于共享存储架构的数据处理方法的流程示意图;

图9为本公开实施例提供的又一种从节点数据查询的示意图;

图10为本公开实施例提供的第四种基于共享存储架构的数据处理方法的流程示意图;

图11为本公开实施例提供的第五种基于共享存储架构的数据处理方法的流程示意图;

图12为本公开实施例提供的一种数据存储的场景示意图;

图13为本公开实施例提供的一种共享存储节点的架构示意图;

图14为本公开实施例提供的一种数据处理流程示意图;

图15为本公开实施例提供的一种程序产品的示意图;

图16为本公开实施例提供的一种基于共享存储架构的数据处理装置的装置结构示意图;

图17为本公开实施例提供的又一种基于共享存储架构的数据处理装置的结构示意图;

图18为本公开实施例提供的一种计算设备的结构示意图。

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本公开的实施方式,提出了一种基于共享存储架构的数据处理方法、装置和计算设备。

在本文中,需要理解的是,所涉及的术语,包括:

Shared-Storage架构:一种采用多个计算节点共同访问同一个存储节点(共享存储)的架构,可高效得进行计算节点扩展和存储节点扩容。

Buffer Pool内存池:是InnoDB的内存Buffer,作为写缓冲和读缓存,其中,InnoDB是MySQL数据库的存储引擎,实现了事务系统。

Redo日志:是关系型数据库用来实现事务数据持久性的一种方式,为了性能考虑,事务提交时,事务产生的新数据不会立刻刷到存储上,而是先将Redo日志持久化,然后再异步的将新数据刷新到存储上。其中,Redo日志记录了事务所做的每次修改。

LSN:log sequence number,即日志序列号,Redo日志一般采用LSN来标识,LSN单调增大。每个数据页也有相应的LSN,表示事务最后一次对该页所做修改时对应的Redo日志,因此页的新旧程度也可以通过LSN来判断。当某个LSN之前的Redo对应的数据页都已经刷到存储上,那么该LSN之前的Redo日志所占空间即可被回收。

此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

另外,本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据,对数据的采集、传播、使用等,均符合国家相关法律法规要求,本公开实施方式/实施例可以互相组合。

下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。

发明概述

相关技术中,在共享存储架构所对应的数据库架构中,通常设置有一个主节点、多个从节点以及共享存储节点。其中,共享存储节点可以作为公共的数据存储空间,上述主节点以及从节点可以访问共享数据节点进行数据读取。并且,只有主节点能够修改共享存储节点中的数据。

图1为本公开提供的一种主从节点日志复制的框架示意图。如图1所示,相关技术中,主节点侧当需要对共享存储节点中数据进行修改、添加删除等操作时,主节点通过日志持久化线程将Redo日志写入共享存储节点中用于存储日志的区域。其中,Redo日志中记录有本次操作所进行的数据变更内容;并且,主节点通过消息发送线程告知从节点共享存储节点中存在新增的Redo日志。从节点通过消息接收线程确定共享存储节点中存在新增的Redo日志,从节点中的消息接收线程通知日志回放线程读取共享存储上的Redo日志并进行回放(具体回放内容可以包括事务状态同步、数据定义语言操作、数据操纵语言操作、用户和权限等操作);之后再由从节点通过消息通知线程告知主节点已完成Redo日志回放。主节点通过消息接收线程接收从节点的发送的日志已回放消息。此外,图1中主节点和从节点各自对应有各自的缓存、共享存储节点中还包括有用于存储数据页的数据区域。

当采用图1中所示的方式进行主从节点的日志回放操作之后,可以确保从节点可以读取到准确的数据。

举例来说,图2为本公开提供的一种数据同步示意图,如图2所示,相关技术中,主节点将数据页P11进行更新之后,数据页中本身所记录的日志序列号从100变为200(如图中的数据页P12),并且对应生成的用于记录上述数据变更内容的Redo日志所对应的日志序列号为200,其中,数据页中记录的日志序列号为用于记录该数据页中数据变化的Redo日志所对应的日志序列号。之后,主节点会将上述日志序列号为200的日志存储至共享存储节点中。当主节点还未对共享存储节点中数据页P11中的数据进行变更、且主节点已将上述日志存储在共享存储节点中时,若从节点需要读取数据页P12中的数据,从节点会根据共享存储节点中提取出上述日志和数据页P11,并根据所获取到的日志对数据页P11中的数据进行更新(即图中的回放),进而得到了更新后的数据页P12’。

然而,在上述图2所对应的示例中,若主节点更新生成的数据页长时间未同步至共享存储节点中时,若在此阶段中,从节点由于缓存空间受限将之前回放得到的最新的数据页P12’删除时,若从节点需要再次读取数据页P12的数据内容,由于从节点的缓存空间中已经将最新的数据页P12’删除,从节点从共享存储中获取到的数据页P11则为未更新后的数据页。具体地,图3为本公开实施例提供的一种数据变化示意图。其中,数据页P1可以理解为数据页标识为P1的数据页。

如图3所示,在T1时刻,主节点在T1时刻写入日志序列号为200的日志,并将数据页P11中记录的日志序列号从100更新到200(此处日志序列号从100更新至200仅为举例说明,实际应用中,只要满足每次更新生成的日志序列号为递增的数值即可),之后主节点会将日志序列号为200的日志写入共享存储节点;并且,在T1时刻时,从节点中缓存的数据页P11’所记录的日志序列号为100,其中,数据页P11和数据页P11’具有相同的数据页标识。T2时刻,主节点通知从节点有新的Redo日志(即,用于记录上述数据页P1数据变化的日志)产生,从节点得知存在新的日志;T3时刻,当从节点上需要读取数据页P12时,从节点可以在共享存储节点中读取日志序列号为200的日志,并结合其缓存的数据页P11’以及获取到的日志序列号为200的日志,进行日志回放处理(即,对数据页P11’中的数据进行更新),得到数据页P12’(即,主节点更新生成的日志序列号为200的数据页P12)。T4时刻,从节点上由于缓存空间不足,会将其缓存空间中回放出来的数据页P12’删除;但主节点没有将主节点侧更新生成的数据页P12刷新至共享存储节点上。T5时刻,从节点再次发起读取数据页P12操作时,由于从节点已经将其缓存空间中从节点之前回放的数据页P12’淘汰掉了,因此从节点在共享存储节点上读取到了数据页P11,也就是读取到了“过去数据页”的内容。在实际应用中,当主节点更新生成一个数据页,且更新生成的数据页并未刷新至共享存储节点中时,此时,可以将主节点更新生成的数据页称为“脏页”。

相关技术中,为了避免主节点一直未将数据更新至共享存储节点所导致的从节点获取到的数据不准确(例如,获取到的数据为未更新的旧数据)的问题,一种可能的实现方式中,可以通过限制从节点对从节点缓存空间中缓存的数据页进行删除的方式以避免上述问题。即只有主节点将数据页的数据更新至共享存储节点中时,从节点中的缓存空间所包含的对应更新的数据页才可以被删除。举例来说,主节点将具有日志序列号100的数据页A所对应的数据更新至共享存储节点之后,在从节点的缓存空间中,可以将具有指定日志序列号的数据页B删除,其中,指定日志序列号为取值小于等于100的序列号。而从节点的缓存空间中,针对于具有未刷新日志序列号的数据页C,则不允许被删除。其中,数据页A、数据页B以及数据页C具有相同的数据页标识,未刷新日志序列号为取值大于100的日志序列号。然而,上述方式容易造成从节点中缓存较多的数据页,进而导致缓存空间占用较多的问题。

相关技术中的另一种可能的实现方式下,从节点中需要缓存具有未刷新日志序列号的日志,其中,未刷新日志序列号即取值大于主节点已更新至共享存储节点中的数据页所对应的日志序列号的数值。并且,从节点中缓存的日志中包括日志类型、Meta信息(包括Space ID以及Page Number,二者结合起来作为数据页标识)以及Body信息(表示这条日志记录对应记录的更改数据)。然而,上述缓存日志的方式也容易导致从节点缓存空间占用较多的问题。

本方案中,为了避免上述技术问题,在主节点向从节点同步日志时,主节点会对日志中所包含的内容进行切分,即仅提取日志中的第一数据页标识,并确定日志中所包含的第一数据的位置信息,并将上述第一数据页标识和位置信息作为向从节点同步的日志,以便从节点将接收到内容缓存至自身所对应的缓存空间(即,内存池)中,减少从节点需要缓存的日志所占用的存储空间,也可以进一步确保从节点可以获取到准确的数据。

在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。

应用场景总览

首先参考图4为本公开提供的一种数据库架构示意图。如图4所示,图中,包括一个主节点以及两个从节点。其中,主节点可以以读写模式访问网络远端的共享存储节点,从节点可以以只读模式访问网络远端的共线存储节点。在上述数据库架构中,可以通过提高主节点所对应的处理能力来扩展数据库架构的写能力,也可以通过部署更多的从节点以提高数据库架构的读能力。

示例性方法

下面结合图4的应用场景,参考下列实施例来描述根据本公开示例性实施方式的基于共享存储架构的数据处理方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。

图5为本公开实施例提供的一种基于共享存储架构的数据处理方法的流程示意图。如图5所示,该方法包括以下步骤:

S501、接收主节点发送的第一日志信息;其中,第一日志信息为主节点对第二日志信息进行切分处理所得到的;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识;第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置。

示例性地,本实施例中的执行主体可以为共享存储架构中的从节点,其中,从节点可以为计算设备,具体地,计算设备可以为服务器(如云端服务器,或者,本地服务器),也可以为计算机,也可以为终端设备,也可以为处理器,也可以为芯片等,本实施例不做限定。

本实施例中,当主节点需要对共享存储节点中的数据进行更改时,首先会在主节点所对应的内存池中对需要修改的原始数据页进行修改,得到更改后的第一数据页。并且,主节点会对应生成第二日志信息,第二日志信息用于记录主节点将原始数据页修改为第一数据页时所对应更改的数据(即,第一数据),并且第二日志信息中还记录有第一数据页对应的第一数据页标识。之后,主节点会基于生成的第二日志信息,进一步确定第二日志信息中的第一数据在共享存储节点中的位置信息(即,第一位置信息)。

需要说明的是,主节点可以根据前一次数据更改操作所对应生成的日志信息在共享存储节点中的结束位置以及本次生成的第二日志信息,确定第二日志信息所包括的第一数据在共享存储节点中对应存储时的位置。此处,第一位置信息的确定方式仅为举例说明,不做具体限制。

之后,主节点会将第二日志信息所包括的第一数据页标识,以及所确定第一数据对应的第一位置信息作为第一日志信息发送至从节点。

需要说明的是,此处主节点向从节点发送第一日志信息,可以为主节点直接向从节点发送的,也可以为基于其余设备转发至从节点的,也可以为主节点将第一日志信息存储至某一设备之后,通知从节点去上述设备中获取的,本实施例中不做具体限制。

S502、若根据第一日志信息,确定第一缓存池中存在第二数据页,则为第二数据页添加第一标识;第一标识表征第一数据页中的数据和第二数据页中的数据不相同;第二数据页和第一数据页具有相同的数据页标识;第一缓存池用于存储从节点缓存的数据页。

示例性地,由于主节点在进行上述数据更改操作时,通常是优先修改主节点自身所对应的缓存中的数据页,之后主节点才会异步的修改共享存储节点中所存储的数据页。在从节点接收到主节点生成的第一日志信息之后,可以根据接收到的第一日志信息,在从节点所对应的第一缓存池中查找是否存在具有第一数据页标识的数据页(即,第二数据页)。若从节点所对应的第一缓存池中存在第二数据页时,则表明主节点侧已经对具有上述具有第一数据页标识的数据页进行过更改操作,第一缓存池中具有第一数据页标识的第二数据页中数据为旧数据,因此,可以为上述第一缓存池中的第二数据页添加第一标识,以表征第二数据页还未更新,其所包含的数据为旧数据,即,第二数据页还未与主节点侧更新生成的第一数据页中的数据同步,两个数据页中的数据不同。

需要说明的是,具有相同数据页标识的数据页所包含的数据可以理解为同一数据对象所对应的数据。例如,上述第一数据页和第二数据页均具备第一数据页标识,当第一数据页中存储的数据为数据表A中的字段B所对应的数据时,第二数据页中存储的数据也为数据表A中的字段B所对应的数据,只不过第一数据页中的数据为更新后的最新数据,而第二数据页中的数据为上述第一数据页更新前的任一时刻下的数据。

S503、响应于数据查询指令,根据第一缓存池,确定目标数据。

示例性地,本实施例中,当从节点接收到数据查询指令之后,首先可以根据从节点所对应的第一缓存池,进一步确定数据查询指令所指示查询的目标数据。需要说明的是,在从节点根据第一缓存池确定目标数据时,若数据查询过程中命中了第一缓存池中的某一缓存的数据页,还可以进一步的数据页是否具有第一标识进行判断,以确定上述数据页中的数据是否为最新状态,从而确保获取到的数据为最新数据。若不是最新数据,则可以基于从节点接收到的第一日志信息中所指示的第一数据的位置信息,在共享存储节点中查找到相应的数据对第一缓存池中的数据进行更新修改,进而得到目标数据。

可以理解的是,本实施例中,为了确保从节点可以准确获取到数据,主节点可以通过向从节点反馈第一日志信息的方式,以便从节点可以根据第一日志信息确定自身所缓存的数据页中的数据是否为最新的数据。同时,第一日志信息还可以指示出主节点对数据页进行更改时所作出更改的数据在共享存储中的存储位置,以便从节点后续也可以基于上述第一日志信息获取到作出更改的数据,进而获取到准确的数据。相比于相关技术中主节点直接将第二日志信息(即,记录有第一数据、第一数据页标识的日志)发送至从节点的方式,本实施例中主节点向从节点发送的第一日志信息中仅记录有第一数据页标识以及第一数据对应的第一位置信息,本实施例所提供的方法还可以有效的减少对从节点的存储空间的占用,并且有利于减少数据传输量。

图6为本公开实施例提供的又一种基于共享存储架构的数据处理方法的流程示意图。如图6所示,该方法包括以下步骤:

S601、接收主节点发送的第一日志信息;其中,第一日志信息为主节点对第二日志信息进行切分处理所得到的;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识;第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置。

示例性地,本实施例中的执行主体可以为共享存储架构中的从节点,其中,从节点可以为计算设备,具体地,计算设备可以为服务器(如云端服务器,或者,本地服务器),也可以为计算机,也可以为终端设备,也可以为处理器,也可以为芯片等,本实施例不做限定。

S602、若根据第一日志信息,确定第一缓存池中存在第二数据页,则为第二数据页添加第一标识;第一标识表征第一数据页中的数据和第二数据页中的数据不相同;第二数据页和第一数据页具有相同的数据页标识;第一缓存池用于存储从节点缓存的数据页。

示例性地,步骤S601和步骤S602的具体原理可以参见上述步骤S501-S502,此处不再赘述。

S603、响应于数据查询指令,若确定第一缓存池中包括第三数据页,且第三数据页不具备第二标识,则确定第三数据页中的数据为目标数据;其中,第三数据页和数据查询指令请求查询的目标数据页具有相同的数据页标识;第二标识表征第三数据页中的数据和主节点更新生成的中的数据不相同。

示例性地,本实施例中,从节点所接收的数据查询指令中包括指示需要查询的目标数据页的数据页标识。当从节点接收到上述数据查询指令之后,首先会在自身所对应的第一缓存池中查找是否存在和目标数据页具有相同数据页标识的数据页。

若从节点确定第一缓存池中包括存在与目标数据页具有相同数据页标识的数据页时,则进一步的还会判断上述在第一缓存池中查找的数据页是否具有第二标识。

当查找到的数据页不具有第二标识时,则表征主节点对需要查询的数据页进行过更新,并且,当前第三数据页中的数据为主节点最新更新过的数据。即,主节点更新后生成的目标数据页中的数据与第三数据页中的数据相同,则从节点可以直接将在第一缓存池中所查找的第三数据页中所包含的数据作为需要查询的目标数据。

可以理解的是,本实施例中,在从节点进行数据查询时,首先从节点可以在其所对应的第一缓存池中查找是否存在与需要查询的数据页具有相同数据页标识的数据页,相比于通过直接访问共享存储节点进行数据查询的方式,可以提高数据获取效率。并且,在数据查询过程中,还可以根据第一缓存池中数据页的标识确定数据页中的数据是否为最新的数据,进而,以便提高数据查询的准确度。

S604、响应于数据查询指令,若确定第一缓存池中包括第四数据页,且第四数据页具备第三标识,则确定第四数据页对应的第三日志信息;其中,第四数据页和数据查询指令请求查询的目标数据页具有相同的数据页标识;第三标识表征第四数据页中的数据和主节点更新生成的目标数据页中的数据不相同;第三日志信息用于记录第四数据页的第二数据页标识和第二位置信息;第二位置信息为第二数据在共享存储节点中的位置;第二数据为主节点将第四数据页更新为目标数据页所作出更改的数据。

示例性地,本实施例中,从节点所接收的数据查询指令中包括有需要查询的目标数据页的数据页标识。当从节点接收到上述数据查询指令之后,首先会在自身所对应的第一缓存池中查找是否存在和目标数据页具有相同数据页标识的第四数据页。

当第四数据页具有第三标识时,则表征主节点对需要查询的数据页进行过更新,并且,当前第四数据页中的数据并非是最新的数据。即,主节点更新后生成的目标数据页中的数据与第四数据页中的数据不同。需要说明的是,上述第三标识可以为从节点根据主节点发送的日志信息所确定的。具体原理和上述图5中的步骤S501和步骤S502一致,此处不再赘述。

进一步的,当从节点确定当前获取到的第四数据页中的数据并非最新的数据时,则从节点可以在主节点所发送的日志信息中,查找第四数据页对应的第三日志信息。具体地,在确定第三日志信息时,可以将第四数据页所对应的第二数据页标识和从节点所缓存的日志信息中所包含的数据页标识进行匹配,进而将具有上述第二数据页标识的日志信息作为第三日志信息。其中,此处的第三日志信息和主节点向从节点反馈的第一日志信息类似,都是主节点针对数据页进行更改时,通过对生成的日志信息进行切分处理后发送至从节点的。具体地,假设主节点将第四数据页更新生成目标数据页时所对应生成的日志为初始日志信息,其中,初始日志信息中包括:第二数据、第二数据页标识;对初始日志信息进行切分处理,可以理解为提取初始日志信息中的第二数据页标识,并确定第二数据在共享存储节点中的位置信息,以得到第三日志信息。第三日志信息中具体记录有上述第二数据页标识以及第二位置信息。其中,第二位置信息可以理解为主节点将第四数据页更新生成目标数据页时,所对应作出更改的数据(即,第二数据)在共享存储节点中的位置。

需要说明的是,在实际应用中,若主节点更新生成目标数据页包括以下两个阶段:第一阶段:主节点将第四数据页更新至中间数据页;第二阶段:主节点将中间数据页更新至目标数据页;则从节点在进行日志获取时,可以分别获取到上述两个阶段各自对应的日志信息。其中,一个日志信息中记录主节点将第四数据页更新至中间数据页时所作出更改的数据的位置信息,另一个日志信息中记录主节点将中间数据页更新至目标数据页所作出更改的数据的位置信息,且上述两个数据页中都记录有第四数据页所对应的第二数据页标识。

S605、根据第二位置信息,获取第二数据;并根据第二数据对第四数据页中数据进行更新,得到目标数据。

示例性地,当从节点获取到上述第二位置信息之后,可以基于第二位置信息所指示的位置,在共享存储节点中获取到相应的第二数据。之后,根据上述第二数据,对从节点所获取到的第四数据页中的数据进行修改更新,之后,可以将修改更新后所得到的数据作为目标数据。

可以理解的是,本实施例中,当从节点在数据查询过程中在第一缓存池中所获取到的数据页为具有第四标识时,则可以基于从节点之前所接收到的主节点发送的日志信息对第四数据页中的数据进行更新,以确保查询到的目标数据的准确性。

一个示例中,当从节点对第四数据页中的数据页进行更新之后,进一步的可以将原本第四数据页所设置的第三标识进行删除,以表征该数据页中的数据为最新的数据。

S606、响应于数据查询指令,若确定第一缓存池中不包括第五数据页,则确定第四日志信息,其中,第四日志信息用于记录目标数据页的第三数据页标识和第三位置信息;第三位置信息为第三数据在共享存储节点中的位置;第三数据为主节点将第六数据页更新为目标数据页所作出更改的数据;第六数据页和目标数据页用于指示具有相同的数据页标识;目标数据页为数据查询指令请求查询的数据页。

示例性地,本实施例中,从节点所接收的数据查询指令中包括有需要查询的目标数据页的数据页标识。当从节点接收到上述数据查询指令之后,首先会在自身所对应的第一缓存池中查找是否存在和目标数据页具有相同数据页标识的第五数据页。进一步地,从节点若确定其所对应的第一缓存池中不存在上述第五数据页,则从节点可以在其所存储的日志信息中,匹配具有与上述目标数据页的数据页标识的第四日志信息。需要说明的是,第四日志信息为主节点发送至从节点,用于记录具有上述数据页标识的第六数据页更新至目标数据页所对应的作出更改的数据(即,第三数据)所对应的在共享存储节点中的位置信息(即,第三位置信息)

S607、根据第三数据页标识和第三位置信息,在共享存储节点中获取第三数据和第六数据页。

示例性地,当从节点确定出第三位置信息时,进一步可以根据目标数据页所对应的第三数据页标识,在共享存储节点中查找具有上述第三数据页标识的第六数据页。之后,从节点还可以根据第三位置信息在共享存储节点中查找对应的第三数据。

S608、根据第三数据对第六数据页中的数据进行更新,得到目标数据。

示例性地,当从节点从共享存储节点中获取到上述第三数据和第六数据页,可以进一步的根据第三数据对第六数据页中的数据进行更新,进而将更新后得到的数据页中包含的数据作为目标数据。

可以理解的是,本实施例中,当从节点所对应的第一缓存池中不存在与需要查询的数据页所对应的数据页标识相同的数据页时,进一步的可以去共享存储节点中查找相应的第六数据页,并且,从节点还可以根据目标数据页的数据页标识在其所对应存储的日志信息中先确定出第三日志信息之后,在根据第三日志信息获取相应的第三数据,以便实现对第六数据页中的数据的更新,进而确保得到的目标数据的准确性。需要说明的是,从节点对第六数据页中的数据更新仅发生在第一缓存池中,当从节点对第六数据页更新之后,可以将更新后的数据页存储在第一缓存池中,以便后续从节点进行数据查找时,可以优先在第一缓存池中查找到需要查找的目标数据,而无需频繁的访问共享存储节点,有利于提高数据查询效率。此外,在共享存储的数据架构下,从节点无权限更改共享存储节点中的第六数据页。

图7为本公开实施例提供的一种从节点数据查询示意图。如图7所示,当用户需要查找数据时,首先会在从节点对应的第一缓存池中确定是否存在有具有与需要查询的目标数据页的数据页标识(本文后续将目标数据页的数据页标识称为目标数据页标识)相同的数据页。在第一缓存池中存在具有目标数据页标识的数据页(本文后续第一缓存池中具有目标数据页标识的数据页称为命中的数据页)的场景下,进一步的从节点还需要判断当前命中的数据页中的数据是否为最新的(可以参照上述实施例中数据页所对应的标识进行判断),即,命中的数据页是否过期。若命中的数据页过期或者第一缓存池中不存在命中的数据页时,则需要在从节点缓存的日志信息中匹配当前需要查询的数据页标识所对应的日志信息,并基于上述日志信息中的位置信息,由图7中的日志读取模块在共享存储节点中查找具有目标数据页标识的数据页在数据更新过程中所作出更改的数据。在第一缓存池中存在具有目标数据页标识的数据页,但上述数据页过期的场景下,可以基于命中的数据页和上述查询到的作出更改的数据进行回放,得到最终需要查询的数据。若未命中数据页时,进一步的还可以在共享存储节点所存储的数据页中查找具有相应的数据页标识的数据页,并在该数据页上基于日志读取所查找到的作出更改的数据进行回放,得到最终需要查询的数据。

图8为本公开实施例提供的第三种基于共享存储架构的数据处理方法的流程示意图。如图8所示,该方法包括以下步骤:

S801、接收主节点发送的第一日志信息;其中,第一日志信息为主节点对第二日志信息进行切分处理所得到的;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识;第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置。

示例性地,本实施例中的执行主体可以为共享存储架构中的从节点,其中,从节点可以为计算设备,具体地,计算设备可以为服务器(如云端服务器,或者,本地服务器),也可以为计算机,也可以为终端设备,也可以为处理器,也可以为芯片等,本实施例不做限定。

一个示例中,第一位置信息包括:第一数据的数据量和起始位置信息;起始位置信息用于指示第一数据在共享存储节点中的起始存储位置;第一数据的数据量用于指示第一数据所占用的存储空间大小。具体地,本实施例中,当主节点生成的第一日志信息中的第一位置信息中具体可以包括第一数据的数据量以及第一数据所对应的起始位置信息。其中,第一数据的数据量可以用于表征第一数据存储至共享存储节点中时需要占用的存储空间的大小。起始位置信息可以用于表征第一数据在共享存储节点中存储时的起始位置。进而,通过上述第一位置信息的设置,可以确保后续从节点可以根据第一位置信息获取到完整的第一数据。

S802、若根据第一日志信息,确定第一缓存池中存在第二数据页,则为第二数据页添加第一标识;第一标识表征第一数据页中的数据和第二数据页中的数据不相同;第二数据页和第一数据页具有相同的数据页标识;第一缓存池用于存储从节点缓存的数据页。

S803、响应于数据查询指令,根据第一缓存池,确定目标数据。

示例性地,步骤S801-S803的具体原理可以参见步骤S501-步骤S503,此处不再赘述。

S804、响应于日志回放请求,若确定第一缓存池中包括具有第四标识的第七数据页,则获取第七数据页对应的第五日志信息;其中,第四标识表征第七数据页中的数据和主节点更新生成的第八数据页中的数据不相同;第八数据页和第七数据页具有相同的数据页标识;第五日志信息用于记录第七数据页的第四数据页标识和第四位置信息;第四位置信息为第四数据在共享存储节点中的位置;第四数据为主节点将第七数据页中更新为八数据页所作出更改的数据。

示例性地,本实施例中,日志回放可以理解为从节点根据主节点所发送的日志信息进行数据页中数据更新的操作,具体地可以为更新其所对应的缓存中的存储有旧数据的数据页。

当从节点接收到主节点发送的日志信息时,则表征主节点侧进行了数据页更新操作。当从节点接收到上述日志信息之后,从节点并非立即基于所接收到日志信息,进行日志回放操作。一种可能的日志回放操作,可以参照上述步骤S604和S605,当从节点需要读取到上述数据页时才进行相应的数据页的回放,进而可以减少不必要的日志回放操作,减少从节点的处理资源的消耗。另一种可能的实现方式中,即,本实施例中的步骤S804,也可以在从节点接收到日志回放请求时,在对从节点中的第一缓存池中的数据页进行更新。

在实际应用中,上述日志回放请求可以为从节点定时触发的,进而有利于从节点可以直接从其所对应的第一缓存池中获取到包括最新数据的数据页,提高数据查询效率。举例来说,当从节点确定到达预设的日志回放时间时,则可以唤醒或者建立相应的一个或者多个日志回放线程,进行日志回放处理。

具体地。当从节点接收到日志回放请求之后,首先从节点会在其所对应的第一缓存池中确定是否存在有具有第四标识的第七数据页。

其中,第四标识用于表征主节点侧在第七数据页的基础上更新生成了第八数据页,也就是说,从节点中的第七数据页中的数据为未更新过的旧数据,第七数据页中的数据和第八数据页中的数据二者不同。其中,第七数据页和第八数据页具有相同的数据页标识。

当从节点确定其所对应的缓存池中存在上述具有第四标识的第七数据页时,进一步的可以在从节点所存储的日志信息中,确定与该第七数据页相关联的第五日志信息。其中,第五日志信息中具体用于记录主节点将第七数据页更新至第八数据页时所对应修改的数据(即,上述第四数据)在共享存储节点中所对应的位置信息(即,第四位置信息)。此外,第五日志信息中还记录有第七数据页所对应的第四数据页标识。以便从节点可以在多个日志信息中尽快的匹配出第七数据页所对应的日志信息。

S805、根据第四位置信息,在共享存储节点中获取第四数据。

示例性地,本实施例中,当从节点获取到上述第四位置信息之后,进一步的,从节点可以在共享存储中获取第四位置信息处的第四数据。

S806、根据第四数据对第七数据页中的数据进行更新,得到更新后的第七数据页。

示例性地,本实施例中,当从节点获取到第四数据时,会对其所对应的缓存池中的第七数据页进行数据更新处理,以便从节点中的缓存池中的数据页中的数据可以和主节点侧最新更新的与上述数据页具有同一数据页标识的数据页中的数据相同。

可以理解的是,本实施例中,从节点并非接收到主节点发送的日志信息之后立刻的进行日志回放操作,而是在接收到日志回放请求之后,再进行日志回放,进而,通过上述日志回放方式,相比于在从节点的缓存中读取到数据页时才进行日志回放的处理方式,本实施例中当日志回放请求为定期触发时,第一缓存池中的数据页也会定期的进行日志回放;进而当从节点需要读取数据页时,可以降低仍需要进一步对第一缓存池中的数据页进行日志回放操作的概率,以提高从节点的数据查询效率。并且,相比于从节点接收到日志信息后实时回放的处理方式,本实施例中所提供的定期回放的方式,对于从节点设备的实时响应要求较低,可以避免从节点接收到大量的日志信息时,从节点设备难以及时响应所导致的回放失败的现象。

S807、接收主设备发送的通知信息;通知信息用于指示具有第一日志序列号的第九数据页已由主设备转存至共享存储节点。

示例性地,本实施例中的数据页具有日志序列号。可以根据数据页所对应的日志序列号,对应查找更新生成该数据页时所对应的日志信息。

当主节点将其所更新生成的第九数据页转存至共享存储节点,可以向从节点发送通知信息,以便告知其已转存的第九数据页的第一日志序列号。

S808、根据通知信息,对从节点接收到的第六日志信息进行删除处理;第六日志信息用于记录第九数据页的数据页标识和第五位置信息;第五位置信息为第五数据在共享存储节点中的位置;第五数据为主节点更新生成第九数据页时所更改的数据页中的数据,且第六日志信息具有的第二日志序列号小于等于第一日志序列号。

示例性地,在实际应用中由于日志序列号为单调增大的,因此,当从节点根据上述通知信息确定出第一日志序列号之后,由于第一日志序列号对应的第九数据页已经存储在共享存储节点中,则对应的用于记录更新生成第九数据页的数据内容(即,第九数据页的数据页标识以及更新至第九数据页时所对应更改的数据的第五位置信息)的日志信息则无需在存储在从节点中,以避免占用较多的存储空间。

一个示例中,在从节点中确定需要删除的第六日志信息时,可以根据所接收到的通知信息,在从节点所对应存储的日志信息中,首先确定出具有与通知信息中的第九数据页的数据页标识相同的日志信息,并将确定出的日志信息作为候选日志信息。之后,再根据通知信息中的第一日志序列号,将候选日志信息中,具有第二日志序列号的候选日志信息作为此处的第六日志信息,其中,第二日志序列号小于等于第一日志序列号。

可以理解的是,本实施例中主节点可以通过向从节点发送通知信息的方式,以便从节点可以在其所存储的日志信息中确定出无需继续存储的日志信息,进而,有利于减少从节点处的存储空间。

一种可能的实现方式中,共享存储节点中包括第一存储区和至少一个第二存储区;第一存储区用于主节点生成的第一日志信息;第二存储区用于存储第十数据页所对应的第六数据;第十数据页为具有与第二存储区对应的数据页标识的数据页;第六数据为主节点更新生成第十数据页时所对应更新的数据。

示例性地,通常,主节点需要对共享存储节点中的数据进行数据变更时,通常会先修改自身所对应的缓存中的数据,并将用于记录上述修改内容的日志信息同步先存储到共享存储节点中,之后,才会将在其缓存中修改的数据同步转存至共享节点中。本实施例中,在主节点向共享存储节点中存储日志信息时为分区存储的。在主节点生成日志信息用于记录其所修改的数据内容时,通常还会对日志信息进行切分处理,例如,如步骤S501中将第二日志信息切分为了第一日志信息和第一数据。

因此,在共享存储节点中,可以对主节点需要存储的日志信息进行分区存储。本实施例中,在共享存储节点中包括有第一存储区,以及至少一个第二存储区。其中,主节点生成的第一日志信息可以存储在第一存储区中。此外,主节点每次向从节点发送的切分后得到的日志信息也可以存储在第一存储区中。此外,针对于共享存储中的第二存储区,第二存储区具有与其对应的数据页标识,第二存储区用于存储具有与其对应的数据页标识的数据页所对应的数据更新内容。举例来说,当主节点更新生成第十数据页,且,更新生成第十数据页所对应作出更改的数据为第六数据,则主节点可以将上述第六数据存储至第十数据页的数据页标识所对应的第二存储区中。同样地,第二日志信息中的第一数据也可以存储在第一数据页标识所对应的第二存储区中。在实际应用中,第二存储区和数据页标识之间也可以一一对应,本实施例中不做具体限制。

可以理解的是,本实施例中,通过对主节点切分后得到的日志和数据进行分区存储,有利于后续进行更改数据查找时,可以根据需要查找的数据页的数据页标识,去与其对应的第二存储区中进行数据查找,提高数据查找效率。

一种可能的实现方式中,在上述任一实施例所提供的方法的基础上,本实施例中,当从节点接收到主节点发送的第一日志信息之后,还会将第一日志信息存储下来,具体地,可以采用如下方法进行日志信息存储:将第一日志信息中的第一数据页标识作为关键字;并基于哈希算法和第一数据页标识,确定第一日志信息的指示信息;指示信息用于指示第一日志信息的存储空间;将第一日志信息存储至指示信息所指示的存储空间。

示例性地,本实施例中,在从节点存储第一日志信息时,可以采用哈希存储的方式进行第一日志信息的存储。具体地,可以将第一日志信息中所包含地第一数据页标识作为哈希存储时的关键字,并将第一日志信息中的第一数据所对应的第一位置信息作为上述关键字对应的值,之后,再根据哈希算法,对第一数据页标识进行哈希处理,进而得到指示信息,其中,指示信息可以用于指示出第一日志信息的存储空间,之后,再将第一日志信息采存储指示信息所对应的存储空间中。

可以理解的是,本实施例中从节点在存储主设备发送的第一日志信息时,可以采用关键字和值这种键值对的哈希存储方式进行存储,以便后续可以根据数据页标识匹配到对应的位置信息,进而有利于提高后续从节点中的日志匹配效率。

举例来说,图9为本公开实施例提供的又一种从节点数据查询的示意图。如图9所示,从节点可以从共享存储节点中查找到具有当前需要查找的数据页的数据页标识的一个数据页P1,之后,若主节点在更新生成最终需要查找的目标数据页时,是在数据页P1的基础上进行多次更改所得到的,因此,可以在上述数据页标识所对应的第二存储区(即,图中的Partition 1中)获取上述多次更改时,每一次更改所对应的作出更改的数据(例如,图中以数据集合1、数据集合2以及数据集合3为例进行说明)。之后,在数据页P1的基础上,依次根据每一更改的数据进行数据页的更新,进而得到最终需要查询的目标数据页P2,并反馈给用户。需要说明的是,从节点在获取上述数据集合时可以根据从节点所缓存的日志信息中,与目标数据页的数据页标识对应的日志信息中所包含的位置信息确定。

图10为本公开实施例提供的第四种基于共享存储架构的数据处理方法的流程示意图。如图10所示,该方法包括以下步骤:

S1001、响应于数据更新请求,对至少一个原始数据页中的数据进行更新处理,得到原始数据页对应更新后的第一数据页;并生成至少一个第二日志信息;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识。

示例性地,本实施例中的执行主体可以为共享存储架构中的主节点,其中,主节点可以为计算设备,具体地,计算设备可以为服务器(如云端服务器,或者,本地服务器),也可以为计算机,也可以为终端设备,也可以为处理器,也可以为芯片等,本实施例不做限定。

具体地,本实施例中的数据更新请求,可以用于指示主节点对一个原始数据页进行修改,也可以用于指示对多个数据页进行修改,本实施例中不做具体限制。

S1002、对第二日志信息进行切分处理,得到第一日志信息;其中,第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置。

S1003、向从节点发送第一日志信息。

需要说明的是,本实施例中的步骤S1001-S1003的技术原理可以参照上述图5中的实施例进行描述,此处不再赘述。

图11为本公开实施例提供的第五种基于共享存储架构的数据处理方法的流程示意图。如图11所示,该方法包括以下步骤:

S1101、响应于数据更新请求,对至少一个原始数据页中的数据进行更新处理,得到原始数据页对应更新后的第一数据页;并生成至少一个第二日志信息;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识。

S1102、对第二日志信息进行切分处理,得到第一日志信息;其中,第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置;并向从节点发送第一日志信息。

示例性地,步骤S1101和步骤S1102的具体原理可以参见上述图5中的实施例中的描述,此处不再赘述。

S1103、将第一数据页缓存至主节点对应的第二缓存池中;其中,第二缓存池用于缓存主节点生成的数据页;将第二日志信息对应的第一日志信息和第二日志信息包括的第一数据,写入第二缓存池中。将第一数据页缓存至主节点对应的第二缓存池中。

示例性地,当主节点更新生成第一数据页之后,并非直接将第一数据页更新至共享存储节点中,而是首先将第一数据页缓存至主节点所对应地第二缓存池中,以避免主节点频繁访问共享存储节点时所导致的处理资源浪费的现象。此外,主节点为了将上述准确记录上述原始数据页到第一数据页的更改,会及时的将主节点生成的第一数据以及第一日志信息对应的写入第二缓存池中。

需要说明的是,步骤S1103可以执行在步骤S1102中的“向从节点发送第一日志信息”步骤之后,也可以同时执行,还可以执行在上述步骤“向从节点发送第一日志信息”之前,本实施例中不做具体限制。

一个示例中,第二缓存池用于缓存主节点生成的数据页;并将第二日志信息对应的第一日志信息和第二日志信息包括的第一数据,写入第二缓存池中。其中,第二缓存池包括第一缓存区和至少一个第二缓存区;第一缓存区用于存储各个第二日志信息各自对应的第一日志信息;第二缓存区用于存储第十一数据页所对应的第七数据;第十一数据页为具有与第二缓存区对应的数据页标识的数据页;第七数据为主节点更新生成第十一数据页时所对应更新的数据。

示例性地,本实施例中,主节点在向其所对应的第二缓存池中缓存日志信息和更新数据时,也是分区存储的。具体地,在第二缓存池中包括有第一缓存区和至少一个第二缓存区。其中,当主节点根据数据更新请求对原始数据页进行更改的场景下,主节点对应生成的至少一个第一日志信息,都存储在第一缓存区中。即,第一缓存区用于存储记录数据更改过程中所对应作出更改的数据在共享存储节点中的位置信息以及相应更改的数据页的数据页标识。而,第二缓存区中具有对应的数据页标识。当主节点需要存储对数据页所作出的更改的数据,则可以将所作出更改的数据存储到上述数据页所对应的第二缓存区中。例如,在实际应用中,第二缓存区和数据页标识一一对应。在一个第二缓存区中,仅用于存储针对具有第二缓存区所对应数据页标识的数据页所作出更改的数据。

可以理解的是,通过上述分区存储的方式,可以便于主节点进行相应的数据查询。

S1104、基于多个第一线程,将第二缓存池中第一缓存区和第二缓存区中所存储的数据并行写入共享存储节点。

示例性地,本实施例中,当第二缓存池中包括第一缓存区和至少一个第二缓存区,当主节点需要将上述第一缓存区和第二缓存区中的数据转存至共享存储节点时,主节点可以同时创建多个第一线程,并行的将上述第一缓存区和至少一个第二缓存区中相应存储的数据,写入至共享存储节点中,以提高数据写入共享存储节点的写入效率。

一个示例中,在主节点基于第一线程将上述缓存区中的数据写入共享存储节点中时,当共享存储节点的磁盘中扇区的大小为4K(即,4096个字节),在向共享存储节点中写入数据时,可以按照4K对齐的方式向共享存储节点的磁盘中写入数据,并且,由于一个数据页中通常可以存储16K的数据,因此,可以第一线程每次可以提取16K的数据,并且之后,将16K的数据以4K对齐的方式写入磁盘中,进而通过上述方式提高硬盘后续的数据读写能力。

一个示例中,共享存储节点中包括第一存储区和第二存储区;第一存储区用于存储主节点生成的第一日志信息;第二存储区用于存储第十数据页所对应的第六数据;第十数据页为具有与第二存储区对应的数据页标识的数据页;第六数据为主节点更新生成第十数据页时所对应更新的数据。

示例性地,本实施例中,共享存储节点中也可以划分有第一存储区和第二存储区。具体地本示例中的内容可以参照图8所示的实施例中有关共享存储节点分区的描述,此处不再赘述。

一个示例中,第一存储区和第一缓存区对应;第二缓存区和第二存储区一一对应。

示例性地,本实施例中,共享存储节点中的第二存储区的数量为至少一个。并且,当主节点所对应的第二缓存池被划分为第一缓存区和至少一个第二缓存区,可以共享存储节点中的第一存储区和主节点的第一缓存区所对应,即,主节点缓存至第一缓存区中的数据后续可以写入共享存储节点中的第一存储区中。同样地,主节点缓存至第二缓存区中的数据后续可以写入共享存储节点中与上述第二缓存区一一对应的第二存储区中。

S1105、确定第一写入信息和第二写入信息;其中,第一写入信息用于指示第一缓存区中已写入共享存储节点的第一日志信息对应的第一序列号;第一序列号为触发主节点生成第四日志信息的数据更新请求具有的全局日志序列号;第四日志信息为第一日志信息对应的第二日志信息;第二写入信息用于指示第二缓存区中已写入共享存储节点的第七数据所对应的第二序列号;第二序列号为触发主节点生成第五日志信息的数据更新请求具有的全局日志序列号;第五日志信息包括第七数据;数据更新请求具有第一全局日志序列号。

示例性地,主节点在将其所更新生成的数据页持久化存储到共享存储节点之前,首先需要确保主节点已经将更新生成上述数据页所对应的日志信息已写入至共享存储节点。本实施例中,当主节点为基于多个第一线程将主节点对应生成的日志信息写入共享存储节点(即,上述步骤S1105的内容),在主节点向共享存储节点中持久化存储更新生成的数据页时,还需要判断对应的日志信息是否已经完成写入共享存储节点的操作。

具体地,在进行上述判断时,首先需要判断第一缓存区和第二缓存区中当前各自已经写入共享存储节点的日志的序列号。

其中,第一缓存区为用于存储主节点每次切分处理后所生成的第一日志信息,且每一第一日志信息都具有自身所对应的第一序列号。在设置第一日志信息所对应的第一日志序列号时,由于主节点生成第一日志信息,是经过数据更新请求的触发,数据更新、生成第二日志信息、切分第二日志信息生成第一日志信息,上述一系列操作过程所得到的,因此,第一日志信息可以通过上述操作直接回溯至触发主节点的数据更新请求,并将上述数据更新请求所对应的全局日志序列号作为此处的第一日志序列号。需要说明地是,当数据更新请求表征需要进行多个数据页的数据更改时,则会对应的生成多个第一日志信息,则多个第一日志信息各自所对应的第一日志序列号均为上述数据更新请求所对应的全局日志序列号。

同样地,第二缓存区中所存储的数据为主节点在数据更新请求的触发下进行数据页更新时所作出修改的数据。因此,在确定第二缓存区中已写入共享存储节点的第七数据所对应的第二序列号时,可以将触发主节点生成用于记录上述第七数据的第五日志信息的数据更新请求所对应的全局日志序列号作为第二缓存区所对应的第二写入信息。

S1106、根据第一写入信息和第二写入信息,确定全局持久化日志序列号;其中,全局持久化日志序列号表征第一请求所对应的全部第六日志信息已转存至共享存储节点中;第一请求为具有第二全局日志序列号的数据更新请求;第二全局日志序列号小于等于全局持久化日志序列号;第六日志信息用于记录第一请求触发更新的数据页的数据页标识和调整的数据。

示例性地,由于不同数据更新请求所对应的全局日志序列号不同,因此,在主节点确定出第一缓存区所对应的第一写入信息以及每一第二缓存区所对应的第二写入信息之后,可以根据上述写入信息所指示的序列号,确定当前已经将哪些数据更新请求所对应生成并存储在上述第一缓存区和第二缓存区中的全部内容完全持久化存储至共享存储节点中。即,需要确定哪些数据更新请求所触发生成的更新后的数据页可以写入共享存储节点中完成持久化存储。

此处的全局持久化日志序列号表征具有第二全局日志序列号的数据更新请求(即,第一请求)所对应生成并存储至第一缓存区和第二缓存区的全部内容已完成持久化存储,其中,第二全局日志序列号小于等于全局持久化日志序列号。上述第六日志信息可以理解为主节点在第一请求的触发下所对应生成的日志信息,具体可以包括,第一请求指示修改的数据页的数据页标识、本次修改时所作出更改的数据和更改的数据的位置信息。

举例来说,若第一写入信息表征当前已经持久化存储的数据所对应的第一日志序列号为10,第二写入信息表征当前已持久化存储的数据所对应的第二日志序列号为11,则通过第一写入信息和第二写入信息可以确定出当前全局日志序列号小于等于10的数据更新请求触发下生成并存储至第一缓存区的内容已完成持久化存储,且当前全局日志序列号小于等于11的数据更新请求触发下生成并存储至第二缓存区的内容已完成持久化存储,进而,通过比对第一写入信息中的第一日志序列号和第二写入信息中的第二日志序列号,可以确定出当前全局日志序列号小于等于10(即,可以看作是全局持久化日志序列号)的数据更新请求触发下生成并存储至第一缓存区和第二缓存区的全部内容已完成持久化存储,则可以进一步进行相应的数据页的持久化存储。

S1107、根据全局持久化日志序列号,在第二缓存池中确定待写入数据页;其中,待写入数据页对应的第三日志序列号小于全局持久化日志序列号。

示例性地,在主节点确定出全局持久化日志序列号之后,在第二缓存池中根据全局持久化日志序列号,查找出具有第三日志序列号的待写入数据页,其中,待写入数据页为主节点在数据更新请求下所更新生成并缓存在第二缓存池中的,并且,待写入数据页所对应的第三日志序列号小于全局持久化日志序列号。此处需要说明的是,待写入数据页所对应的第三日志序列号为触发主节点更新生成待写入数据页的数据更新请求所具有的全局日志序列号。

S1108、将待写入数据页更新至共享存储节点中。

示例性地,主节点在确定出待写入数据页之后,进一步的可以将待写入数据页更新至共享存储节点中。需要说明的是,当主节点将待写入数据页更新至共享存储节点中之后,可以向从节点发送通知信息,以便告知上述待写入数据页已完成数据页持久化存储,以便从节点可以对其缓存的日志信息进行删除处理。此处,从节点根据通知信息进行日志删除的操作可以参见步骤S807-S808处的描述,此处不再赘述。

可以理解的是,本实施例中,在主节点并行向共享存储节点写入日志信息时,通过确定主节点的第二缓存池中的第一缓存区的第一写入信息和第二缓存区的第二写入信息,可以确定出哪些数据更新请求所触发生成的全部日志信息已转存至共享存储节点。并且,在数据更新请求所触发生成的全部日志信息已转存至共享存储节点之后,主节点才会将上述数据更新请求所生成的更新后的数据页转存至共享存储节点中。即,主节点先确保了日志信息全部写入之后,再异步的向共享存储节点中写入更新的数据页,进而当主节点因设备故障而导致的第二缓存池中数据页丢失时,还可以根据共享存储节点中存储的日志信息进行数据页的恢复。

在一种可能的实现方式中,数据更新请求具有第一全局日志序列号;共享存储节点中还包括:第三存储区和第四存储区;第三存储区包括N个第一子区域;第四存储区包括N个第二子区域;第一子区域与第二子区域一一对应;N为正整数;

在上述实施例的基础上,还包括以下步骤:

确定数据更新请求对应的至少一个第四位置信息和至少一个第五位置信息;其中,第四位置信息为第一日志信息在第二缓存池中的位置;第五位置信息为第一数据在第二缓存池中的位置;将第一全局日志序列号写入第一子区域;并将数据更新请求对应第四位置信息和第五位置信息,写入第一子区域对应的第二子区域。

示例性地,本实施例中,当主节点将数据更新请求下所触发生成的第一日志信息以及第一数据写入主节点所对应的第二缓存区中时,对应的还会进一步的确定第一日志信息在第二缓存池中的位置(即第四位置信息)以及第一数据(即,第五位置信息)在第二缓存池中的位置对应存储至共享存储节点中。需要说明的是,由于数据更新请求有可能触发对多个数据页的修改,则会产生多个第四位置信息和多个第五位置信息。

具体地,在存储上述信息时,共享存储节点中可以设置第三存储区和第四存储区。其中,第三存储区中可以被划分为N个第一子区域。且,第四存储区被划分为N个第二子区域。

在主节点存储数据更新请求所对应的第一全局日志序列号,和对应确定出第四位置信息和第五位置信息时,可以将第一全局日志序列号存储在第三存储区中的一个第一子区域中。并且,同时,将第一全局日志序列号所对应的第四位置信息和第五位置信息均存储至第二子区域中,且上述第二子区域为与用于存储第一全局日志序列号的第一子区域所对应的第二子区域。

本实施例中,通过将数据更新请求所对应的日志序列号和数据更新请求触发下所生成的第一日志信息的第四位置信息和第五位置信息对应存储下来,以便后续主节点故障修复之后,仍可以通过共享存储节点中所对应存储的位置信息,确定出主节点所对应的第二缓存池中所对应的存储的内容的含义,并且,确定出下一个数据更新请求所触发的生成的日志中所包含的内容从哪里开始存储。

举例来说,图12为本公开实施例提供的一种数据存储的场景示意图。如图12所示,图中,日志信息1中包括主节点在数据更新请求1触发下对于数据页P2所作出更改的数据(即,图中的数据段1)以及在数据更新请求1触发下对于数据页P1所作出更改的数据(即,图中的数据段2)。日志信息2中包括主节点在数据更新请求2触发下对于数据页P1所作出更改的数据(即,图中的数据段3)、在数据更新请求2触发下对于数据页P2所作出更改的数据(即,图中的数据段4)以及在数据更新请求2触发下对于数据页P3所作出更改的数据(即,图中的数据段5)。其中,主节点响应数据更新请求1的时间位于主节点响应数据更新请求2所对应的时间之前。其中,数据页P1可以理解为具有数据页标识A的数据页;数据页P2可以理解为具有数据页标识B的数据页;数据页P3可以理解为具有数据页标识C的数据页。

并且,主节点在其所对应的第二缓存池中可以设置多个第二缓存区。第二缓存区和数据页标识之间一一对应。如图12所示,当第二缓存区和数据页标识之间一一对应时,假设第二缓存区1对应的数据页标识为数据页标识A;第二缓存区2对应的数据页标识为数据页标识B;第二缓存区2对应的数据页标识为数据页标识C;进而主节点可以将数据段2和数据段4对应存储至第二缓存区1中;将数据段1、数据段3对应存储至第二缓存区3中;将数据段5对应存储至第二缓存区3中。通过上述分区存储的方式,有利于后续主节点可以设置多个线程将上述多个缓存区中的存储的内容并行写入共享存储节点中,以提高写入效率。

并且,在主节点所对应的第二缓存池中还包括有第一缓存区,其中,第一缓存区主要用于存储主节点在数据更新请求触发下,对初始生成的日志信息进行切分处理后得到的日志信息(例如,上述实施例中的第一日志信息)。具体地,以第一日志信息为例,第一日志信息中所包含的数据页标识具体地可以用该数据页所对应的space id(表空间标识)以及page number(页号)。其中,可以通过对数据页标识中的page number取模处理的方式,建立数据页标识和第二缓存区之间的关联关系。此外,第一日志信息中的第一位置信息可以仅包括第一数据所对应的数据量。具体地,该示例中,第一缓存区中分别用于存储日志信息3-日志信息7,其中,日志信息3用于记录数据段1在共享存储节点中的位置信息,以及数据页P2的数据页标识。日志信息4用于记录数据段2在共享存储节点中的位置信息,以及数据页P1的数据页标识。其余日志信息5-7与上述日志类似,此处不再赘述。

其中,上述第一缓存区和第二缓存区中的方形阴影部分表征各个缓存区中已经持久化存储至共享存储节点的数据;并且,斜线形阴影表征已缓存的数据。之后,可以根据上述各个缓存区中所对应的已持久化内容,确定上述第一写入信息以及每一第二缓存区所对应的第二写入信息。通过确定第一写入信息和第二写入信息,可以及时确定出主节点接收到的哪些数据更新请求所触发生成的日志信息已完全写入共享存储节点中,有利于确定主节点中的哪些数据页可以写入至共享存储节点中。

此外,当主节点向共享存储中写入上述各个缓存区中的数据,可以采用多进程并行写入的方式以提高写入速度。并且,如图12所示,图12中共享存储节点中,包括第一存储区和与第二缓存区一一对应的第二存储区。

此外,图13为本公开实施例提供的一种共享存储节点的架构示意图。如图13所示,图13中,包括有第三存储区以及第四存储区。其中,第三缓存区中包括多个第一子区域,第一子区域用于存储主节点接收到的数据更新请求所对应的第一全局日志序列号。第四缓存区中包括多个第二子区域。其中,第二子区域和第一子区域之间一一对应(如图中虚线箭头所示)。当主节点采用如图12所示的第一缓存区和第二缓存区所示的方式进行数据存储时,具体地,在第二子区域中还包括有多个分区,其中,分区的数量等于第一缓存区的数量和第二缓存区数量的二者的和。举例来说,若如图12所示,第一缓存区的数量为1,第二缓存区的数量为3,则第二子区域中的分区数量为4。则在第二子区域的第一分区中,用于存储与第二子区域对应的数据更新请求所对应生成并存储在第一缓存区中的数据的位置;第二子区域的第二分区中,用于存储与第二子区域对应的数据更新请求所对应生成并存储在第二缓存区中数据的位置,以此类推,其余分区不再赘述。若数据更新请求并未在对应的缓存区中存储数据时,则对应的第二子区域中,与上述缓存区对应的子区域中则无需填充数据或者写入预设的字符,以通过上述不填充数据或者写入预设的字符的方式表征数据更新请求在上述缓存区中未对应进行数据存储。其中,第二子区域所对应的数据更新请求,可以理解为,与第二子区域对应的第一子区域中存储的第一全局序列号所对应的数据更新请求。进而通过上述对第二子区域分区的方式记录在各个缓存区中的位置信息来表征上述实施例中的第四位置信息和第五位置信息。本实施例中,在主节点记录数据更新请求触发生成的日志信息在第二缓存区中的位置信息时,当第二缓存区中采用如图12所示的分区存储方式存储日志信息时,此时,在共享存储节点中的第二子区域也可以进一步进行区域划分,以便在第二子区域中分区记录数据更新请求触发生成并存储在第二缓存池中的各个缓存区中数据的位置信息。有利于后续可以根据第一子区域和第二子区域的对应关系,以及第二子区域中各个分区的所存储的位置信息,快速确定出数据更新请求所对应触发生成的日志中的内容在第二缓存池中的位置。例如,在图13中,第三存储区中的首个第一子区域和第四存储区中的首个第二子区域对应,第三存储区中的第二个第一子区域和第四存储区中的第二个第二子区域对应。当第一子区域所占用空间为固定值、第二子区域所占用空间为固定值,且第二子区域中每一分区所占用的空间也为固定值时,此时,假设确定出数据更新请求所对应的全局日志序列号存储在第一存储区中的第3个第一子区域中时,对应的,则可以直接在第四存储区的第三个第二子区域中确定上述数据更新请求所对应生成的日志内容分区存储在第二缓存池中的各个缓存区的位置信息。

图14为本公开实施例提供的一种数据处理流程示意图。如图14所示,当主节点进行数据页更新(例如,对数据页中的数据进行修改、删除或者新增数据页时)之后,会对应生成第二日志信息,其中,第二日志信息用于记录本次更新所作出更改的第一数据,并且还用于记录本次更新的数据页的数据页标识。并且,主节点还会将上述第二日志信息进行切分处理,即,将第二日志信息中的第一数据的存储位置以及第二日志信息中的数据页标识提取出来,作为第一日志信息。并且,主节点将对应生成的第一日志信息和第一数据分区存储至主节点所对应的第一缓存池所对应的第一缓存区和至少一个第二缓存区中,即对主节点更新生成的日志中的内容进行分区存储。之后,主节点会将上述第一缓存区和第二缓存区中的内容存储至共享存储节点中,例如可以参照图12中,将一个数据更新请求所对应触发生成的日志信息划分为多个数据段后,存储至对应缓存区。并且在上述将缓存区的内容写入共享存储节点的过程中,还通过多个线程并行的将第一缓存池中的缓存区中的内容写入至共享存储节点中,相比于相关技术中未进行分区存储的日志存储方式,本实施例中的方式可以提高数据写入效率。并且,主节点还可以通过日志发送线程将第一缓存区中所存储的第一日志信息发送至从节点,并由从节点中的日志接收线程进行第一日志信息的接收,即,主节点向从节点发送的第一日志信息为不包括第一数据的日志信息,相比于直接向从节点发送包括第一数据的第二日志信息的方式,本实施例中的方式可以节省主节点和从节点之间的数据传输量,并且也可以减少从节点存储空间的占用。

在主节点获取切分生成的第一日志信息、第一数据,并将第一日志信息和第一数据分区写入主节点的第二缓存池之后,进一步的,还会确定第二缓存池所包含的各个缓存区中所对应的写入信息,即,确定各个缓存区中的数据中已经持久化写入至共享存储节点中的数据,以确定出全局持久化日志序列号。之后,再根据全局持久化日志序列号,确定当前可写入共享存储节点中的数据页,并将确定出的数据页写入至共享存储节点中。可以理解的是,主节点侧通过对日志信息的切分处理,可以降低主从节点之间的数据传输量;在向第二缓存池中分区写入上述第一数据和第一日志信息之后,主节点还会根据确定出全局持久化日志序列号,确定可写入共享存储节点的数据页,以确保日志信息写入共享存储节点之后,再异步地向共享存储节点中写入更新后的数据页。当后续主节点缓存池中的存储的数据丢失时,还可以根据共享存储节点中的日志信息回放生成之前丢失的数据页。

在从节点侧,当从节点中的日志线程接收到第一日志信息之后,会发送至从节点中的回放协调线程,以便回放协调线程可以基于接收到的第一日志信息,在从节点的第一缓存池中查找是否存在具有与第一日志信息中的数据页标识的数据页,若存在则为上述数据页打上第一标识,以标识该数据页中的数据需要更新,即数据页中的数据为旧数据。并由回放协调线程将接收到的第一日志信息存储到对应的存储区域中。之后,当从节点中的用户线程接收数据查询请求时,用户线程可以根据从节点所对应的第一缓存池中缓存的数据页、从节点所接收到的主节点发送的日志信息、以及共享存储节点中的数据,确定出需要查询的目标数据,具体查询过程可以参见图6、图7所示的实施例中的描述;即,本实施例中,从节点中的用户线程用于在数据查询请求的触发下,执行数据查询的操作,并确定出需要查询的目标数据。本实施例中,从节点通过主节点发送的日志信息进行数据查询,可以避免从节点在数据查询请求的触发下最终所获取到的数据页中的数据为未进行更新的数据的现象,即避免从节点获取到“过去数据页”。并且,一种可能的实现方式中,从节点侧只有接收到数据查询请求,且确定从节点在其缓存池中初始查询到的数据页为“过去数据页”时,才会执行日志回放操作,以确保最终获取到的数据页中的数据为更新后的数据,进而可以避免从节点侧的无效日志回放操作。其中,无效日志回放操作即回放出从节点无需查询的数据页的操作。

此外,从节点中也可以设置有后台回放线程。后台回放线程可以定期的对第一缓存池标识有表征数据页中的数据为旧数据的数据页进行回放处理,以便将第一缓存池中的数据页中的数据更新至最新的数据。进而,通过上述定期回放的处理方式,可以降低从节点数据查询过程中仍需要进行日志回放操作的概率,提高从节点从第一缓存池中获取到的数据页中的数据为最新数据的概率,以便提高数据查询效率。具体实现原理可以参照上述实施例中的步骤S804处的描述,此处不再赘述。

示例性介质

在介绍了本公开示例性实施方式的方法之后,接下来,参考图15对本公开示例性实施方式的存储介质进行说明。

参考图15所示,存储介质150中存储着根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括计算机执行指令,该计算机执行指令用于使计算设备执行本公开所提供的基于共享存储架构的数据处理方法。然而,本公开的程序产品不限于此。

程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机执行指令。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。

可以以一种或多种程序设计语言的任意组合来编写用于执行本公开公开操作的计算机执行指令,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。计算机执行指令可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备。

示例性装置

在介绍了本公开示例性实施方式的介质之后,接下来,参考图16对本公开示例性实施方式的基于共享存储架构的数据处理装置1600进行说明,用于实现上述任一方法实施例中的方法,其实现原理和技术效果类似,在此不再赘述。

图16为本公开实施例提供的一种基于共享存储架构的数据处理装置的装置结构示意图,该装置应用于从节点,该装置包括:

第一接收单元1601,用于接收主节点发送的第一日志信息;其中,第一日志信息为主节点对第二日志信息进行切分处理所得到的;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识;第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置。

第一确定单元1602,用于若根据第一日志信息,确定第一缓存池中存在第二数据页,则为第二数据页添加第一标识;第一标识表征第一数据页中的数据和第二数据页中的数据不相同;第二数据页和第一数据页具有相同的数据页标识;第一缓存池用于存储从节点缓存的数据页。

第二确定单元1603,用于响应于数据查询指令,根据第一缓存池,确定目标数据。

一个示例中,第二确定单元,具体用于:响应于数据查询指令,若确定第一缓存池中包括第三数据页,且第三数据页不具备第二标识,则确定第三数据页中的数据为目标数据;其中,第三数据页和数据查询指令请求查询的目标数据页具有相同的数据页标识;第二标识表征第三数据页中的数据和主节点更新生成的目标数据页中的数据不相同。

一个示例中,第二确定单元,具体用于:响应于数据查询指令,若确定第一缓存池中包括第四数据页,且第四数据页具备第三标识,则确定第四数据页对应的第三日志信息;其中,第四数据页和数据查询指令请求查询的目标数据页具有相同的数据页标识;第三标识表征第四数据页中的数据和主节点更新生成的目标数据页中的数据不相同;第三日志信息用于记录第四数据页的第二数据页标识和第二位置信息;第二位置信息为第二数据在共享存储节点中的位置;第二数据为主节点将第四数据页更新为目标数据页所作出更改的数据;

根据第二位置信息,获取第二数据;并根据第二数据对第四数据页中数据进行更新,得到目标数据。

一个示例中,第二确定单元,具体用于:响应于数据查询指令,若确定第一缓存池中不包括第五数据页,则确定第四日志信息,其中,第四日志信息用于记录目标数据页的第三数据页标识和第三位置信息;第三位置信息为第三数据在共享存储节点中的位置;第三数据为主节点将第六数据页更新为目标数据页所作出更改的数据;第六数据页和目标数据页用于指示具有相同的数据页标识;目标数据页为数据查询指令请求查询的数据页;

根据第三数据页标识和第三位置信息,在共享存储节点中获取第三数据和第六数据页。

根据第三数据对第六数据页中的数据进行更新,得到目标数据。

一个示例中,装置还包括:

第一获取单元,用于响应于日志回放请求,若确定第一缓存池中包括具有第四标识的第七数据页,则获取第七数据页对应的第五日志信息;其中,第四标识表征第七数据页中的数据和主节点更新生成的第八数据页中的数据不相同;第八数据页和第七数据页具有相同的数据页标识;第五日志信息用于记录第七数据页的第四数据页标识和第四位置信息;第四位置信息为第四数据在共享存储节点中的位置;第四数据为主节点将第七数据页中更新为八数据页所作出更改的数据。

第二获取单元,用于根据第四位置信息,在共享存储节点中获取第四数据。

第一更新单元,用于根据第四数据对第七数据页中的数据进行更新,得到更新后的第七数据页。

一个示例中,装置还包括:

第二接收单元,用于接收主设备发送的通知信息;通知信息用于指示具有第一日志序列号的第九数据页已由主设备转存至共享存储节点。

删除单元,用于根据通知信息,对从节点接收到的第六日志信息进行删除处理;第六日志信息用于记录第九数据页的数据页标识和第五位置信息;第五位置信息为第五数据在共享存储节点中的位置;第五数据为主节点更新生成第九数据页时所更改的数据页中的数据,且第六日志信息具有的第二日志序列号小于等于第一日志序列号。

一个示例中,共享存储节点中包括第一存储区和至少一个第二存储区;第一存储区用于主节点生成的第一日志信息;第二存储区用于存储第十数据页所对应的第六数据;第十数据页为具有与第二存储区对应的数据页标识的数据页;第六数据为主节点更新生成第十数据页时所对应更新的数据。

一个示例中,第一位置信息包括:第一数据的数据量和起始位置信息;起始位置信息用于指示第一数据在共享存储节点中的起始存储位置;第一数据的数据量用于指示第一数据所占用的存储空间大小。

一个示例中,装置还包括:

第三确定单元,用于将第一日志信息中的第一数据页标识作为关键字。

第四确定单元,用于基于哈希算法和第一数据页标识,确定第一日志信息的指示信息;指示信息用于指示第一日志信息的存储空间。

存储单元,用于将第一日志信息存储至指示信息所指示的存储空间。

图17为本公开实施例提供的又一种基于共享存储架构的数据处理装置的结构示意图,装置1700应用于主节点,装置包括:

第二更新单元1701,用于响应于数据更新请求,对至少一个原始数据页中的数据进行更新处理,得到原始数据页对应更新后的第一数据页;并生成至少一个第二日志信息;第二日志信息用于记录第一数据和第一数据页标识;第一数据为主节点将原始数据页更新为第一数据页所作出更改的数据;第一数据页标识为第一数据页的标识。

切分单元1702,用于对第二日志信息进行切分处理,得到第一日志信息;其中,第一日志信息用于记录第一数据页标识和第一数据的第一位置信息;第一位置信息表征第一数据在共享存储节点中的位置。

发送单元1703,用于向从节点发送第一日志信息。

一个示例中,装置还包括:

第一缓存单元,用于将第一数据页缓存至主节点对应的第二缓存池中;其中,第二缓存池用于缓存主节点生成的数据页。

第二缓存单元,用于将第二日志信息对应的第一日志信息和第二日志信息包括的第一数据,写入第二缓存池中。

一个示例中,其中,第二缓存池包括第一缓存区和至少一个第二缓存区;第一缓存区用于存储各个第二日志信息各自对应的第一日志信息;第二缓存区用于存储第十一数据页所对应的第七数据;第十一数据页为具有与第二缓存区对应的数据页标识的数据页;第七数据为主节点更新生成第十一数据页时所对应更新的数据。

一个示例中,还包括:

第一写入单元,用于基于多个第一线程,将第二缓存池中第一缓存区和第二缓存区中所存储的数据并行写入共享存储节点。

一个示例中,共享存储节点中包括第一存储区和第二存储区;第一存储区用于存储主节点生成的第一日志信息;第二存储区用于存储第十数据页所对应的第六数据;第十数据页为具有与第二存储区对应的数据页标识的数据页;第六数据为主节点更新生成第十数据页时所对应更新的数据。

一个示例中,第一存储区和第一缓存区对应;第二缓存区和第二存储区一一对应。

一个示例中,数据更新请求具有第一全局日志序列号;装置还包括:

第五确定单元,用于确定第一写入信息和第二写入信息;其中,第一写入信息用于指示第一缓存区中已写入共享存储节点的第一日志信息对应的第一序列号;第一序列号为触发主节点生成第四日志信息的数据更新请求具有的全局日志序列号;第四日志信息为第一日志信息对应的第二日志信息;第二写入信息用于指示第二缓存区中已写入共享存储节点的第七数据所对应的第二序列号;第二序列号为触发主节点生成第五日志信息的数据更新请求具有的全局日志序列号;第五日志信息包括第七数据。

第六确定单元,用于根据第一写入信息和第二写入信息,确定全局持久化日志序列号;其中,全局持久化日志序列号表征第一请求所对应的全部第六日志信息已转存至共享存储节点中;第一请求为具有第二全局日志序列号的数据更新请求;第二全局日志序列号小于等于全局持久化日志序列号;第六日志信息用于记录第一请求触发更新的数据页的数据页标识和调整的数据。

第七确定单元,用于根据全局持久化日志序列号,在第二缓存池中确定待写入数据页;其中,待写入数据页对应的第三日志序列号小于全局持久化日志序列号。

第二写入单元,用于将待写入数据页更新至共享存储节点中。

一个示例中,数据更新请求具有第一全局日志序列号;共享存储节点中还包括:第三存储区和第四存储区;第三存储区包括N个第一子区域;第四存储区包括N个第二子区域;第一子区域与第二子区域一一对应;N为正整数。

装置还包括:

第八确定单元,用于确定数据更新请求对应的至少一个第四位置信息和至少一个第五位置信息;其中,第四位置信息为第一日志信息在第二缓存池中的位置;第五位置信息为第一数据在第二缓存池中的位置。

第三写入单元,用于将第一全局日志序列号写入第一子区域。

第四写入单元,用于将数据更新请求对应第四位置信息和第五位置信息,写入第一子区域对应的第二子区域。

示例性计算设备

在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图18对本公开示例性实施方式的计算设备进行说明。

图18显示的计算设备180仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图18所示,计算设备180以通用计算设备的形式表现。计算设备180的组件可以包括但不限于:至少一个处理单元1801、至少一个存储单元1802,连接不同系统组件(包括处理单元1801和存储单元1802)的总线1803。其中,至少一个存储单元1802中存储有计算机执行指令;至少一个处理单元1801包括处理器,处理器执行该计算机执行指令,以实现上文描述的方法。

总线1803包括数据总线、控制总线和地址总线。

存储单元1802可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)18021和/或高速缓存存储器18022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)18023。

存储单元1802还可以包括具有一组(至少一个)程序模块18024的程序/实用工具18025,这样的程序模块18024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

计算设备180也可以与一个或多个外部设备1804(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口1805进行。并且,计算设备180还可以通过网络适配器1806与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图7所示,网络适配器1806通过总线1803与计算设备180的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备180使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

应当注意,尽管在上文详细描述中提及了基于共享存储架构的数据处理装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。

此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

技术分类

06120116541309