CN109408519A - 一种数据页的访问方法、装置、服务器及存储介质 - Google Patents
一种数据页的访问方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN109408519A CN109408519A CN201811326038.2A CN201811326038A CN109408519A CN 109408519 A CN109408519 A CN 109408519A CN 201811326038 A CN201811326038 A CN 201811326038A CN 109408519 A CN109408519 A CN 109408519A
- Authority
- CN
- China
- Prior art keywords
- data page
- database node
- access
- access request
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种数据页的访问方法、装置、服务器及存储介质,该方法包括:获取数据页的访问请求,所述访问请求包括当前数据库节点的标识,根据所述访问请求确定所述数据页的封锁权限,根据所述数据页的封锁权限响应所述访问请求,通过上述技术方案,解决了共享存储数据库集群中由于数据页在访问过程中被修改而导致用户不能访问到最新的数据页的问题,使得用户登录任意数据库节点,都可以访问到最新的数据页内容。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据页的访问方法、装置、服务器及存储介质。
背景技术
数据页作为数据库管理系统中数据存储的基本单位,是数据访问、修改以及输入/输出的基本单位。数据库一般会分配一片连续的内存用于数据页缓存,所有数据的访问、修改都是针对缓存中的数据页进行的。
共享存储数据库集群以共享存储为基础,共享存储数据库集群的每个数据库节点都允许访问、修改数据页,并且数据库节点各自维护一套数据页缓存,这就意味着同一个数据页可能分布在不同数据库节点的缓存中,并且不能保证各数据库节点缓存的数据页内容是完全相同的,最新数据只保存在某些数据库节点缓存中,其他数据库节点缓存中保存的是数据页的一个历史版本,当用户登录任意数据库节点访问数据时,不能保证访问的是最新的数据页内容。
发明内容
本发明实施例提供一种数据页的访问方法、装置、服务器及存储介质,以保证用户登录任意数据库节点时,都可以访问到最新的数据页内容。
第一方面,本发明实施例提供一种数据页的访问方法,包括:
获取数据页的访问请求,所述访问请求包括当前数据库节点的标识;
根据所述访问请求确定所述数据页的封锁权限;
根据所述数据页的封锁权限响应所述访问请求。
进一步的,所述根据所述访问请求确定所述数据页的封锁权限,包括:
根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
进一步的,所述根据所述数据页的封锁权限响应所述访问请求,包括:
允许所述当前数据库节点访问所述数据页,禁止其他数据库节点访问所述数据页。
进一步的,所述根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限,包括:
根据所述访问请求查找本地缓存管理系统;
所述当前数据库节点获取所述数据页的封锁权限,则查找结束;
所述当前数据库节点未获取所述数据页的封锁权限,则根据所述访问请求查找所述全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
进一步的,所述根据所述访问请求查找所述全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限,包括:
如果所述数据页的封锁权限被其他数据库节点获取,则收回该数据库节点的封锁权限,并将所述封锁权限给予所述当前数据库节点。
第二方面,本发明实施例还提供一种数据页的访问装置,包括:
获取模块,用于获取数据页的访问请求,所述访问请求包括当前数据库节点的标识;
确定模块,用于根据所述访问请求确定所述数据页的封锁权限;
响应模块,用于根据所述数据页的封锁权限响应所述访问请求。
进一步的,所述确定模块,包括:
查找单元,用于根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
进一步的,所述响应模块,包括:
允许单元,用于允许所述当前数据库节点访问所述数据页,禁止其他数据库节点访问所述数据页。
第三方面,本发明实施例还提供一种服务器,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的数据页的访问方法。
第四方面,本发明实施例还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的数据页的访问方法。
本发明实施例提供一种数据页的访问方法、装置、服务器及存储介质,通过获取数据页的访问请求,根据所述访问请求确定所述数据页的封锁权限,根据所述数据页的封锁权限响应所述访问请求,解决了共享存储数据库集群中由于数据页在访问过程中被修改而导致用户不能访问到最新的数据页的问题,使得用户登录任意数据库节点,都可以访问到最新的数据页内容。
附图说明
图1为本发明实施例一提供的一种数据页的访问方法的流程图;
图2为本发明实施例二提供的一种数据页的访问方法的流程图;
图3为本发明实施例二提供的另一种数据页的访问方法的流程图;
图4为读取数据的示意图;
图5为并发读取数据的示意图;
图6为读取并发写数据的示意图;
图7为写并发写数据的示意图;
图8为本发明实施例四提供的一种数据页的访问装置的结构图;
图9为本发明实施例五提供的一种服务器的结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种数据页的访问方法的流程图,本实施例可适用于数据页的访问,该方法可以由数据页的访问装置来执行,该装置可通过硬件和/或软件的方式实现,并集成在服务器中,参考图1,该方法包括如下步骤:
S110、获取数据页的访问请求,所述访问请求包括当前数据库节点的标识。
数据页作为数据库管理系统中数据存储的基本单位,是数据访问以及输入/输出的基本单位,例如,当用户需要访问某数据时,最终会定位到包含该数据的数据页。数据库节点可以理解为是安装有数据库软件的服务器,实际应用中,数据库软件安装在一台服务器上,称为单节点数据库,数据库软件安装在多台服务器上,称为多节点数据库,用户访问数据时,可以通过数据库节点访问指定数据页。数据库节点的标识可以是人为设定的数据库节点号,如EP_1和EP_2,不同的数据库节点对应的标识不同,根据当前数据库节点的标识即可确定发送访问请求的数据库节点,以便在后续过程中将数据页的封锁权限发送给对应的数据库节点。访问请求除了包括当前数据库节点的标识,还可以包括要访问的数据页的页号和数据页所属的文件号,可以理解的是,数据库中存在多个数据库文件,而每一个数据库文件又包含多个数据页,根据数据页所属的文件号和数据页的页号可以很便捷的定位到该数据页,节省了时间。
S120、根据所述访问请求确定所述数据页的封锁权限。
封锁是用于防止数据页在被当前数据库节点访问的过程中,由于其他数据库节点也访问该数据页,导致用户不能访问到最新的数据页的情况。具体的,封锁的模式一般包括S封锁和X封锁,其中,S封锁用于在读取数据的过程中,阻止其他数据库节点对该数据页的修改,X封锁用于在修改数据的过程中,阻止其他数据库节点对该数据页的修改和读取。相应的,访问请求可以是封锁请求,如S封锁请求或X封锁请求。
需要说明的是,多个数据库节点可以同时拥有S封锁,只能有一个数据库节点拥有X封锁,若多个数据库节点对同一个数据页进行X封锁,会产生冲突,此时,需要先收回先发起X封锁请求的数据库节点的权限,然后再授予后发起X封锁请求的数据库节点的权限,例如,数据库节点EP1拥有X封锁权限,而数据库节点EP_3再请求X封锁权限,需要先收回数据库节点EP_1的X封锁权限,再授予数据库节点EP_3X封锁权限。具体的,在获取数据页的访问请求后,根据当前数据库节点的标识以及数据页的页号确定该数据页的封锁权限。
S130、根据所述数据页的封锁权限响应所述访问请求。
具体的,如果数据库节点获取了指定数据页的封锁权限,则可以执行对应的访问请求。示例性的,数据库节点EP_1需要读取某数据,在获取了指定数据页的S封锁权限后即可读取数据,并且在读取过程中,不允许其他数据库节点修改该数据页。
本发明实施例一提供一种数据页的访问方法,通过获取数据页的访问请求,根据所述访问请求确定所述数据页的封锁权限,根据所述数据页的封锁权限响应所述访问请求,解决了共享存储数据库集群中由于数据页在访问过程中被修改而导致用户不能访问到最新的数据页的问题,使得用户登录任意数据库节点,都可以访问到最新的数据页内容。
实施例二
图2为本发明实施例二提供的一种数据页的访问方法的流程图,本实施例在上述实施例的基础上进行优化,具体的,该方法包括如下步骤:
S210、获取数据页的访问请求,所述访问请求包括当前数据库节点的标识。
S220、根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
本地缓存管理系统(Local Buffer System,LBS)包含了数据页的本地控制信息,以LBS_CTL表示,每个数据页对应一个LBS_CTL对象,每个LBS_CTL对象包含了对应的数据页的基本信息、封锁信息和最新数据分布信息。数据页的基本信息可以是数据页所在的表空间号、数据页所属的文件号和数据页的页号。封锁信息用于记录当前数据库节点已经获得的封锁权限,如S封锁权限、X封锁权限或没有权限。最新数据分布信息可以是最后修改数据页的数据库节点的标识、拥有数据页最新版本的数据库节点标识的数组和数据页最新版本的日志序号。
为了便于后续的描述,将最后修改数据页的数据库节点的标识表示为FRESH_EP,拥有数据页最新版本的数据库节点标识的数组表示为ACCESS_MAP,数据页最新版本的日志序号表示为FRESH_LSN,需要说明的是,数据页最新版本的日志序号FRESH_LSN的初始值为0,最后修改数据页的数据库节点的标识FRESH_EP的初始值为UNKNOWN,表示该数据页没有被数据库节点修改过。
全局缓存管理系统(Global Buffer System,GBS)包含了数据页的全局控制信息,以GBS_CTL表示,每个数据页对应一个GBS_CTL对象,每个GBS_CTL对象包含对应的数据页的基本信息、封锁信息和最新数据分布信息,其中数据页的基本信息和最新数据分布信息与LBS_CTL对象包含的数据页的基本信息和最新数据分布信息一致,此处不再赘述。GBS_CTL对象的封锁信息记录了各个数据库节点拥有封锁的信息,例如拥有授权的数据库节点的标识以及封锁的模式,封锁信息可以以数组的方式表示,如[EP_NO,MODE],其中,EP_NO表示拥有授权的数据库节点的标识,如EP_1,MODE表示封锁的模式,如S封锁和X封锁。需要注意的是,每个数据页都可以有对应的GBS_CTL对象或LBS_CTL对象,对一个数据页来说,所有数据库节点都可以拥有LBS_CTL对象,但是只有一个数据库节点拥有GBS_CTL对象。
具体的,可以根据访问请求和设定的封锁逻辑查找LBS和GBS,以确定当前数据库节点获取指定数据页的封锁权限。封锁逻辑是查找LBS和GBS的依据,根据封锁逻辑可以确定当前数据库节点是否已经获得指定数据页的全局授权,具体的,封锁逻辑可以包括以下几点:
(1)数据库节点EP_1的LBS已经拥有S封锁权限,如果数据库节点EP_1节点再申请S封锁权限,则不需要再请求GBS;如果数据库节点EP_1再申请X封锁权限,则需要再请求GBS以获取GBS授予的X封锁权限;
(2)数据库节点EP_1请求X封锁权限时,GBS会将S封锁权限和X封锁权限都授予给数据库节点EP_1;
(3)数据库节点EP_1的LBS已经拥有X封锁权限,如果数据库节点EP_1再申请S封锁权限或X封锁权限,不需要再请求GBS授予相应的封锁权限;
(4)GBS登记了数据库节点EP_1拥有S封锁权限,如果数据库节点EP_2再请求S封锁权限,则GBS可以授予数据库节点EP_2S封锁权限,如果数据库节点EP_2请求X封锁权限,则需要回收数据库节点EP_1的S封锁权限后,再授予数据库节点EP_2X封锁权限和S封锁权限;
(5)GBS登记了数据库节点EP_1拥有X封锁权限,如果数据库节点EP_2再请求S封锁权限或者X封锁权限,需要先回收数据库节点EP_1的X封锁权限和S封锁权限,之后再授予数据库节点EP_2相应的封锁权限。
进一步的,为了更清楚地描述如何根据访问请求查找LBS和GBS,以确定当前数据库节点获取指定数据页的封锁权限,下面对S220进行具体化,即S220包括S2201-S2203,具体参考图3。
S2201、根据所述访问请求查找本地缓存管理系统。
具体的,对于确定的数据页来说,所有数据库节点都可以拥有LBS_CTL对象,但只有一个数据库节点拥有GBS_CTL对象,而LBS_CTL对象也包含相应的数据页的基本信息、最新数据分部信息和封锁信息,如果数据库节点每次需要申请访问数据页时都向GBS申请封锁权限,由GBS再响应相应的数据库节点,使得每次访问都会涉及网络交互,降低了系统的性能,为此,在获取数据页的访问请求后,先查找LBS,即查找是否存在LBS_CTL对象。
S2202、所述当前数据库节点获取所述数据页的封锁权限,则查找结束。
如果存在LBS_CTL对象,且拥有对应的封锁权限,则无需再查找GBS,由LBS即可确定当前数据库节点获取指定数据页的封锁权限,减少了一次网络交互。
S2203、所述当前数据库节点未获取所述数据页的封锁权限,则根据所述访问请求查找所述全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
如果LBS_CTL对象不存在,需要先构造LBS_CTL对象,然后向GBS申请授予相应的封锁权限,或者LBS_CTL对象存在,但没有对应的封锁权限,向GBS申请授予相应的封锁权限。
具体的,GBS在收到指定数据页的封锁权限的请求时,查看GBS_CTL对象是否已经存在,如果GBS_CTL对象不存在,表明没有任何数据库节点拥有该数据页的封锁权限,创建并初始化GBS_CTL对象,即FRESH_EP=UNKNOWN,ACCESS_MAP=NA,FRESH_LSN=0,同时LATCH信息增加[(EP_NO,LOCK_MODE)],ACCESS_MAP增加[EP_NO]信息,并授予相应的数据库节点指定的封锁权限,如果GBS_CTL对象存在,根据封锁逻辑查看已有的LATCH信息是否和当前数据库节点EP_1请求的封锁权限冲突,其中,LATCH是一种封锁机制,是数据库管理系统中一种轻量级资源锁,用于存储数据库节点以及拥有的封锁权限的信息,例如LATCH信息为[(EP_1,X)],表示数据库节点EP_1拥有X封锁权限。
以数据库节点EP_1为例,如果封锁权限不冲突,则LATCH信息增加[EP_1,LOCK_MODE],ACCES_MAP增加[EP_1]信息,授予数据库节点EP_1指定的数据页的封锁权限,响应数据库节点EP_1,授权结束,其中,响应消息包含最新的GBS_CTL对象信息,即FRESH_EP、ACCESS_MAP和FRESH_LSN的最新值。如果封锁权限冲突,假设冲突的为数据库节点EP_2,则需要向数据库节点EP_2发起回收封锁权限的请求,在收到封锁权限回收的响应消息时,根据响应消息,授予数据库节点EP_1相应的封锁权限,并响应数据库节点EP_1,授权结束。
示例性的,封锁权限回收的响应消息中FRESH_LSN的值大于GBS_CTL对象中FRESH_LSN的值,如果回收的封锁权限是S封锁权限,则以封锁权限回收的响应消息中FRESH_LSN的值代替GBS_CTL对象中FRESH_LSN的值;如果回收的封锁权限是X封锁权限,则修改GBS_CTL对象中的FRESH_EP=EP_2,ACCESS_MAP=[EP_2],GBS_CTL对象中FRESH_LSN的值等于封锁权限回收的响应消息中FRESH_LSN的值,然后再修改ACCESS_MAP增加数据库节点EP_1,授予数据库节点EP_1相应的封锁权限,响应数据库节点EP_1,授权结束。
进一步的,数据库节点EP_2在收到回收封锁权限的请求后,修改LBS_CTL,LOCK_MODE=UNKONWN,并将FRESH_EP、ACCESS_MAP和FRESH_LSN的信息返回GBS,以更新GBS_CTL对象中的FRESH_EP、ACCESS_MAP、FRESH_LSN的信息,保证数据库节点EP_1获取的数据为最新数据。
进一步的,数据库节点EP_1在获取GBS授予的封锁权限的信息时,将GBS_CTL对象中的FRESH_EP、ACCESS_MAP以及FRESH_LSN的信息设置到LBS_CTL对象中,并设置LOCK_MODE,然后根据数据页的PAGE_LSN和FRESH_LSN的关系,以及FRESH_EP和ACCESS_MAP的信息,确定最新数据的位置。其中,数据页的PAGE_LSN为物理数据中记录的该数据页的LSN值,当一个数据页被读取至相应的数据库节点时,数据页中的PAGE_LSN值不变,当该数据页在相应的数据库节点被修改时,PAGE_LSN值会增加。需要说明的是,当一个数据页在多个数据库节点中存在时,某个数据库节点中缓存的数据页的PAGE_LSN值可能会小于其他数据库节点缓存的该数据页的PAGE_LSN值。
数据库节点EP_1在获取数据页的最新数据后,设置LBS_CTL对象的FRESH_LSN=PAGE_LSN,之后如果数据库节点EP_1修改数据页,在修改PAGE_LSN的同时,同步修改LBS_CTL对象的FRESH_EP、ACCESS_MAP和FRESH_LSN的信息,使得FRESH_EP=EP_1,ACCESS_MAP=EP_1,FRESH_LSN=PAGE_LSN,以保证数据的一致性。
其中,确定最新数据的存储位置的判断逻辑如下:
(1)FRESH_LSN==0且FRESH_EP==UNKNOWN且ACCESS_MAP为NA,表明数据页没有被任何数据库节点读入缓冲区,最新数据存储在磁盘中,可以从磁盘加载数据页至当前数据库节点的缓冲区;
(2)FRESH_LSN==0且FRESH_EP==UNKNOWN且ACCESS_MAP不为NA,表明数据页被其他数据库节点读入过缓冲区,但没有进行过修改,可以从ACCESS_MAP中挑选一个数据库节点,发送获取指定数据页的请求;
(3)PAGE_LSN==FRESH_LSN,表明本地缓存中的数据页是最新的,不需要重新加载数据;
(4)FRESH_LSN>PAGE_LSN且FRESH_EP!=UNKNOWN,表明数据页被其他数据库节点修改过,需要从ACCESS_MAP中挑选对应的数据库节点,发送获取指定数据页的请求;
(5)并发场景下,由于缓存淘汰等原因,请求加载的数据页可能已经不在对应的数据库节点的缓存中,这种场景下返回空页,由请求数据库节点重新从磁盘加载数据,其中,并发场景是在一段时间内有多个数据库节点发送访问请求,进行读取和/或修改的场景。
进一步的,S2203还可以具体化为:如果所述数据页的封锁权限被其他数据库节点获取,则收回该数据库节点的封锁权限,并将所述封锁权限给予所述当前数据库节点。具体的过程前面已经描述,此处不再赘述。
S230、允许所述当前数据库节点访问所述数据页,禁止其他数据库节点访问所述数据页。
具体的,访问可以是读取,也可以是修改,当访问为读取时,除了允许当前数据库节点读取该数据页,还可以允许其他数据库节点读取该数据页,即可以允许多个数据库节点同时读取该数据页,当访问为修改时,只允许当前数据库节点修改该数据页,禁止其他数据库节点修改该数据页。以访问为修改为例,以数据库节点EP_1和数据库节点EP_2为例,GBS登记了数据库节点EP_2拥有X封锁权限,如果此时数据库节点EP_1想要修改数据页A,即需要请求X封锁权限,根据封锁逻辑可以确定两者有封锁权限冲突,此时需要先收回数据库节点EP_2的X封锁权限和S封锁权限,再授予数据库节点EP_1X封锁权限,由于收回了数据库节点EP_2的封锁权限,则禁止数据库节点EP_2再修改该数据页,只允许数据库节点EP_1修改,这样设置的好处是:避免了数据页在被当前数据库节点修改的过程中,同时被其他数据库节点修改而导致的用户不能获取最新的数据的情况。
本发明实施例二提供一种数据页的访问方法,在上述实施例的基础上进行优化,根据访问请求先查找LBS,当确定当前数据库节点没有获取指定数据页的授权时,再通过LBS向GBS获取指定数据页的封锁权限,减少了网络交互的次数,提高了系统性能,同时,根据封锁逻辑,确定了最新数据存储的位置,保证用户在登录任意数据库节点时,都可以获取最新的数据。
实施例三
本发明实施例三在上述实施例的基础上,通过几个具体的场景对数据页的访问进行描述,具体的,参考图4-图7,其中,图4为读取数据的示意图,图5为并发读取数据的示意图,图6为读取并发写数据的示意图,图7为写并发写数据的示意图。
场景1:并发读取操作
参考图4,初始时数据页还没有被任何一个数据库节点访问,磁盘上的PAGE_LSN值为1000,设定数据页A的GBS_CTL对象位于数据库节点EP_2。当数据库节点EP_1想要读取数据页A时,先查找LBS,若未找到LBS_CTL对象,构造LBS_CTL对象,并向数据库节点EP_2发出S封锁权限的请求,数据库节点EP_2在收到该请求后,查找GBS,若未找到GBS_CTL对象,说明此数据页没有被任何数据库节点访问过,此时构造GBS_CTL,并初始化为FRESH_EP=UNKNOWN,ACCESS_MAP=NA,FRESH_LSN=0,之后修改ACCESS_MAP为[EP_1],LATCH信息为[(EP_1,S)],授予数据库节点EP_1S封锁权限,并响应数据库节点EP_1,最终GBS_CTL对象为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1],FRESH_LSN=0),LATCH信息为[(EP_1,S)]。
数据库节点EP_1获得授权后,修改LOCK_MODE=S,修改LBS_CTL对象的信息为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1],FRESH_LSN=0),根据FRESH_EP、ACCESS_MAP和FRESH_LSN的信息确认最新数据在磁盘中,并从磁盘读取数据页到数据库节点EP_1的缓存中。由于磁盘中数据页PAGE_LSN=1000,因此修改LBS_CTL对象中的FRESH_LSN=1000,最终LBS_CTL对象的信息为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1],FRESH_LSN=1000。
此时,如果有其他数据库节点,如EP_4也要读取数据页A,则参考图5,同样的,数据库节点EP_4也是先查找LBS,若未找到LBS_CTL对象,向数据库节点EP_2发出S封锁权限的请求,数据库节点EP_2接收请求后,查找GBS,若找到GBS_CTL对象,检查已有的LATCH信息,若可以授权,修改GBS_CTL对象信息,即ACCESS_MAP增加[EP_4],LATCH_INFO增加[(EP_4,S)],同时授予数据库节点EP_4S封锁权限,并响应数据库节点EP_4,最终GBS_CTL对象的信息为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1,EP_4],FRESH_LSN=0,LATCH信息为[(EP_1,S),(EP_4,S)]。数据库节点EP_4获得授权后,修改LOCK_MODE=S,LBS_CTL对象的信息为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1,EP_4],FRESH_LSN=0)。根据FRESH_EP、ACCESS_MAP和FRESH_LSN的信息确认最新数据在数据库节点EP_1,此时通过网络向数据库节点EP_1获取数据页,取得数据页后修改LBS_CTL对象中的FRESH_LSN为PAGE_LSN=1000。
场景2:读取并发写操作
在场景1的基础上,参考图6,数据库节点EP_3想要修改数据页A,同样的,先查找LBS,未找到LBS_CTL对象,构造LBS_CTL对象并向数据库节点EP_2发出X封锁权限的请求,数据库节点EP_2在接收请求后,查找GBS,若找到GBS_CTL对象,检查已有的LATCH信息,若发现封锁冲突,给数据库节点EP_1和数据库节点EP_4发出回收权限请求,数据库节点EP_1收到回收权限请求后,修改LOCK_MODE=NA,修改LBS_CTL对象信息为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1],FRESH_LSN=1000,并将(UNKNOWN,[EP_1],1000)信息发回给GBS。
数据库节点EP_4在收到回收权限请求后,修改LOCK_MODE=NA,修改LBS_CTL对象信息为FRESH_EP=UNKNOWN,ACCESS_MAP=[EP_1,EP_4],FRESH_LSN=1000,并将(UNKNOWN,[EP_1,EP_4],1000)信息发回给GBS。数据库节点EP_2在收到回收权限响应消息后,若响应消息FRESH_LSN的值大于GBS_CTL对象中FRESH_LSN的值,由于回收的封锁权限为S封锁权限,修改GBS_CTL对象的FRESH_LSN=1000,同时ACCESS_MAP增加[EP_3],修改LATCH信息为[(EP_3,X)],并授予数据库节点EP_3X封锁权限。最终GBS_CTL对象的信息为FRESH_EP=UNKONWN,ACCESS_MAP=[EP_1,EP_3,EP_4],FRESH_LSN=1000,LATCH信息为[(EP_3,X)]。
数据库节点EP_3在获取授权后,修改LBS_CTL对象的信息为FRESH_EP=UNKONWN,ACCESS_MAP=[EP_1,EP_3,EP_4],FRESH_LSN=1000,同时修改LOCK_MODE=X,根据FRESH_EP,ACCESS_MAP和FRESH_LSN的信息确认最新数据在数据库节点EP_1,通过网络从数据库节点EP_1获取最新数据页,并修改数据页的PAGE_LSN值,假定修改后PAGE_LSN=1500,同时修改FRESH_EP=EP_3,ACCESS_MAP=[EP_3],FRESH_LSN=1500,最终LBS_CTL对象的信息为FRESH_EP=EP_3,ACCESS_MAP=[EP_3],FRESH_LSN=1500。
场景3:写并发写操作
在场景2的基础上,参考图7,假定数据库节点EP_4想要修改数据页A,同样的,查找本地LBS,找到LBS_CTL对象,但是LBS_CTL对象不拥有X封锁权限,需向GBS请求X封锁权限。此时,数据库节点EP_2查找GBS,若找到GBS_CTL对象,检查已有的LATCH信息,若发现有冲突,则给数据库节点EP_3发出回收权限请求。数据库节点EP_3收到回收权限请求,将LBS_CTL对象的信息FRESH_EP=EP_3,ACCESS_MAP=[EP_3],FRESH_LSN=1500信息返回GBS,并修改FRESH_EP=UNKNOWN,LOCK_MODE=NA,最终LBS_CTL对象的信息为FRESH_EP=UNKONWN,ACCESS_MAP=[EP_3],FRESH_LSN=1500,LOCK_MODE=NA。
数据库节点EP_2收到回收权限响应消息后,由于响应消息FRESH_LSN大于GBS_CTL对象中的FRESH_LSN,且回收的权限为X封锁权限,则修改FRESH_EP=EP_3,ACCESS_MAP=[EP_3],FRESH_LSN=1500,使ACCESS_MAP增加[EP_4],修改LATCH信息为[(EP_4,X)],最终GBS_CTL对象的信息为FRESH_EP=EP_3,ACCESS_MAP=[EP_3,EP_4],FRESH_LSN=1500,授予EP_4X封锁权限,并响应数据库节点EP_4。
数据库节点EP_4获得授权后,修改LBS_CTL对象的信息为FRESH_EP=EP_3,ACCESS_MAP=[EP_3,EP_4],FRESH_LSN=1500,修改LOCK_MODE=X,并根据FRESH_EP、FRESH_LSN和ACCESS_MAP的值判断最新数据在数据库节点EP_3,通过网络从数据库节点EP_3获取最新数据页。获取以后,修改数据页的PAGE_LSN=2000,最终LBS_CTL对象的信息为FRESH_EP=EP_4,ACCESS_MAP=[EP_4],FRESH_LSN=2000。需要说明的是,每修改一次数据页,PAGE_LSN都会增加,实施例中的1500、2000只是一个示例值。
本发明实施例三在上述实施例的基础上,通过几个场景对数据页的访问进行了进一步的描述,既确定了最新数据的位置,保证用户在登录任意数据库节点时均可以访问到最新的数据,同时通过先查找LBS,再查找GBS的方式,减少了网络交互的次数,提高了系统性能。
实施例四
图8为本发明实施例四提供的一种数据页的访问装置的结构图,该装置可以执行上述任意实施例所述的数据页的访问方法,具体的,该装置包括:
获取模块410,用于获取数据页的访问请求,所述访问请求包括当前数据库节点的标识;
确定模块420,用于根据所述访问请求确定所述数据页的封锁权限;
响应模块430,用于根据所述数据页的封锁权限响应所述访问请求。
本发明实施例四提供一种数据页的访问装置,通过获取数据页的访问请求,根据所述访问请求确定所述数据页的封锁权限,根据所述数据页的封锁权限响应所述访问请求,解决了共享存储数据库集群中由于数据页在访问过程中被修改而导致用户不能访问到最新的数据页的问题,使得用户登录任意数据库节点,都可以访问到最新的数据页内容。
在上述实施例的基础上,确定模块420,包括:
查找单元,用于根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
在上述实施例的基础上,响应模块430,包括:
允许单元,用于允许所述当前数据库节点访问所述数据页,禁止其他数据库节点访问所述数据页。
在上述实施例的基础上,查找单元,包括:
第一查找子单元,用于根据所述访问请求查找本地缓存管理系统;
第一获取子单元,用于所述当前数据库节点获取所述数据页的封锁权限,则查找结束;
第一确定子单元,用于所述当前数据库节点未获取所述数据页的封锁权限,则根据所述访问请求查找所述全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
在上述实施例的基础上,第一确定子单元,包括:
收回子单元,用于如果所述数据页的封锁权限被其他数据库节点获取,则收回该数据库节点的封锁权限,并将所述封锁权限给予所述当前数据库节点。
本发明实施例四提供的一种数据页的访问装置可以用于执行上述任意实施例提供的数据页的访问方法,具备相应的功能和有益效果。
实施例五
图9为本发明实施例五提供的一种服务器的结构图,参考图9,该服务器包括:处理器510、存储器520、输入装置530和输出装置540。该服务器中处理器510的数量可以是一个或多个,图9以一个处理器510为例。该服务器中的处理器510、存储器520、输入装置530和输出装置540可以通过总线或其他方式连接,图9中以通过总线连接为例。
存储器520作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中数据页的访问方法对应的程序指令/模块。处理器510通过运行存储在存储器中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述实施例的数据页的访问方法。
存储器520主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器520可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置530可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备、扬声器以及蜂鸣器等音频设备。
本发明实施例五提供的服务器与上述实施例提供的数据页的访问方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行数据页的访问方法相同的有益效果。
实施例六
本发明实施例六还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的数据页的访问方法。
当然,本发明实施例所提供的一种存储介质,其计算机可执行指令不限于如上所述的数据页的访问方法的操作,还可以执行本发明任意实施例所提供的数据页的访问方法中的相关操作,且具备相应的功能和有益效果。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是机器人,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的数据页的访问方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数据页的访问方法,其特征在于,包括:
获取数据页的访问请求,所述访问请求包括当前数据库节点的标识;
根据所述访问请求确定所述数据页的封锁权限;
根据所述数据页的封锁权限响应所述访问请求。
2.根据权利要求1所述的方法,其特征在于,所述根据所述访问请求确定所述数据页的封锁权限,包括:
根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
3.根据权利要求2所述的方法,其特征在于,所述根据所述数据页的封锁权限响应所述访问请求,包括:
允许所述当前数据库节点访问所述数据页,禁止其他数据库节点访问所述数据页。
4.根据权利要求2所述的方法,其特征在于,所述根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限,包括:
根据所述访问请求查找本地缓存管理系统;
所述当前数据库节点获取所述数据页的封锁权限,则查找结束;
所述当前数据库节点未获取所述数据页的封锁权限,则根据所述访问请求查找所述全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
5.根据权利要求4所述的方法,其特征在于,所述根据所述访问请求查找所述全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限,包括:
如果所述数据页的封锁权限被其他数据库节点获取,则收回该数据库节点的封锁权限,并将所述封锁权限给予所述当前数据库节点。
6.一种数据页的访问装置,其特征在于,包括:
获取模块,用于获取数据页的访问请求,所述访问请求包括当前数据库节点的标识;
确定模块,用于根据所述访问请求确定所述数据页的封锁权限;
响应模块,用于根据所述数据页的封锁权限响应所述访问请求。
7.根据权利要求6所述的装置,其特征在于,所述确定模块,包括:
查找单元,用于根据所述访问请求查找本地缓存管理系统和全局缓存管理系统,确定所述当前数据库节点获取所述数据页的封锁权限。
8.根据权利要求7所述的装置,其特征在于,所述响应模块,包括:
允许单元,用于允许所述当前数据库节点访问所述数据页,禁止其他数据库节点访问所述数据页。
9.一种服务器,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的数据页的访问方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的数据页的访问方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811326038.2A CN109408519A (zh) | 2018-11-08 | 2018-11-08 | 一种数据页的访问方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811326038.2A CN109408519A (zh) | 2018-11-08 | 2018-11-08 | 一种数据页的访问方法、装置、服务器及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109408519A true CN109408519A (zh) | 2019-03-01 |
Family
ID=65472583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811326038.2A Pending CN109408519A (zh) | 2018-11-08 | 2018-11-08 | 一种数据页的访问方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109408519A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444147A (zh) * | 2020-03-30 | 2020-07-24 | 上海达梦数据库有限公司 | 一种数据页创建方法、装置、终端设备及存储介质 |
CN113420012A (zh) * | 2021-07-14 | 2021-09-21 | 上海达梦数据库有限公司 | 数据库节点管理方法、装置、数据库节点及存储介质 |
CN114328500A (zh) * | 2020-09-29 | 2022-04-12 | 北京金山云网络技术有限公司 | 一种数据访问方法、装置、设备及计算机可读存储介质 |
WO2023236629A1 (zh) * | 2022-06-07 | 2023-12-14 | 华为技术有限公司 | 数据访问方法、装置、存储系统及存储介质 |
-
2018
- 2018-11-08 CN CN201811326038.2A patent/CN109408519A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444147A (zh) * | 2020-03-30 | 2020-07-24 | 上海达梦数据库有限公司 | 一种数据页创建方法、装置、终端设备及存储介质 |
CN111444147B (zh) * | 2020-03-30 | 2023-05-12 | 上海达梦数据库有限公司 | 一种数据页创建方法、装置、终端设备及存储介质 |
CN114328500A (zh) * | 2020-09-29 | 2022-04-12 | 北京金山云网络技术有限公司 | 一种数据访问方法、装置、设备及计算机可读存储介质 |
CN113420012A (zh) * | 2021-07-14 | 2021-09-21 | 上海达梦数据库有限公司 | 数据库节点管理方法、装置、数据库节点及存储介质 |
CN113420012B (zh) * | 2021-07-14 | 2024-04-09 | 上海达梦数据库有限公司 | 数据库节点管理方法、装置、数据库节点及存储介质 |
WO2023236629A1 (zh) * | 2022-06-07 | 2023-12-14 | 华为技术有限公司 | 数据访问方法、装置、存储系统及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109408519A (zh) | 一种数据页的访问方法、装置、服务器及存储介质 | |
CN1307559C (zh) | 以高速缓存连贯性为基础的高速缓存线的预加载和预控制 | |
US20180173521A1 (en) | Method, apparatus, and system for reading and writing files | |
CN108363641B (zh) | 一种主备机数据传递方法、控制节点以及数据库系统 | |
CN102779132B (zh) | 数据更新方法、系统及数据库服务器 | |
US20160267132A1 (en) | Abstraction layer between a database query engine and a distributed file system | |
JP4746838B2 (ja) | データベースへのアクセスを制御するための異なったデータベースサーバ間のデータベースのオーナーシップのパーティション化 | |
CN111444147B (zh) | 一种数据页创建方法、装置、终端设备及存储介质 | |
CN104951240A (zh) | 一种数据处理方法及处理器 | |
CN104573112A (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN106354732A (zh) | 一种支持并发协同的离线数据版本冲突解决方法 | |
US7822933B1 (en) | Enabling off-host data migration using volume translation mappings, snappoint maps and linked volume technologies | |
US7970787B2 (en) | Access concurrency for cached authorization information in relational database systems | |
US20180121487A1 (en) | Method and system for committing transactions in a semi-distributed manner | |
US11366594B2 (en) | In-band extent locking | |
EP4407461A1 (en) | Cache state recording method and apparatus, data access method and apparatus, and device | |
US20010014932A1 (en) | Multi-processor system | |
CN116303661B (zh) | 一种分布式数据库中针对序列的处理方法、装置及系统 | |
CN115794820A (zh) | 一种etl文件权限控制的方法和装置 | |
KR100507782B1 (ko) | 데이터베이스 관리시스템 및 그 시스템에서 시스템테이블에 대한 동시성 제어 방법 | |
US7185029B1 (en) | Method and apparatus for maintaining, and updating in-memory copies of the first and second pointers to reference the new versions of the first and second control structures that indicate available and allocated portions of usable space in the data file | |
JP3107094B2 (ja) | 共用バッファのロック期間短縮処理方法及び装置 | |
CN109542631A (zh) | 一种备机的重演方法、装置、服务器及存储介质 | |
KR100314879B1 (ko) | 주기억장치데이터베이스관리시스템을위한락관리방법 | |
CN115374301B (zh) | 缓存装置、基于缓存装置实现图查询的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190301 |
|
RJ01 | Rejection of invention patent application after publication |