基于MVCC的数据库系统的异步缓存一致性的制作方法

文档序号:23980771发布日期:2021-02-20 09:32阅读:145来源:国知局
基于MVCC的数据库系统的异步缓存一致性的制作方法
基于mvcc的数据库系统的异步缓存一致性
[0001]
相关申请案的交叉引用
[0002]
本申请要求于2018年7月27日提交的、申请号为16/047,458、发明名称为“基于mvcc的数据库系统的异步缓存一致性(asynchronous cache coherency for mvcc based database systems)”的美国非临时专利申请的优先权和利益,其通过引用结合在本申请中。
技术领域
[0003]
本公开涉及多个数据库实例访问共享存储器的分布式数据库系统,尤其涉及在多个数据库实例之间维护数据的正确性。


背景技术:

[0004]
分布式数据库是指由计算系统中的多个实体访问的数据库(例如,云数据库)。在分布式数据库系统中,该数据库的多个实例或版本由单独的实体或主机维护。允许多个数据库实例访问共享数据。这样,当任何一个数据库实例发生故障时,其它实例仍然可以使用该数据库。当允许多个数据库实例访问所述共享数据时,这些实例需要维护缓存(或缓冲池)一致性,否则可能读取过时的数据,并导致多个数据库版本之间的数据不一致。
[0005]
在传统的分布式数据库系统中,数据库实例之间传递消息以同步数据库并维护数据库一致性。当页面加载到一个数据库实例的本地缓冲池中时,与缓存相关的信息广播到全局通信中的所有其它数据库实例。当修改页面时,将广播另一全局通信,以使该页面在其它数据库实例中的副本失效。广播一致性信息会带来相当大的网络开销,从而导致对数据库访问的瓶颈。这种网络开销会降低访问所述数据库的带宽。


技术实现要素:

[0006]
现在描述各种示例,简单地介绍一些概念,在具体实施方式中会进一步描述这些概念。发明内容部分并非旨在确定请求保护的主题的关键或必要特征,也并非旨在用于限制请求保护的主题的范围。
[0007]
根据本公开的一个方面,提供了一种数据库系统,所述数据库系统包括持久性存储设备、日志节点和多个数据库节点,所述日志节点包括存储器和处理器。所述数据库节点包括用于存储数据库实例的缓存存储器和用于通过向所述日志节点发送快照请求来启动数据库事务的处理器,所述快照请求包括所述缓存存储器中被替换或新加载的页面的列表。所述日志节点处理器用于向所述数据库节点发送快照响应,所述快照响应包括所述数据库的快照和所述数据库实例的已更改页面的列表。所述数据库节点处理器用于根据所述快照响应更新缓存存储器中的所述页面的状态并执行所述数据库事务。
[0008]
可选地,在前述方面中,所述方面的另一实现方式提供了一种数据库节点处理器,所述数据库节点处理器用于:当从所述持久性存储设备加载所述页面时,将页面状态更改为半有效并为所述页面分配有效日志快照号(log snapshot number,lsn);将具有所述半
有效页面状态和所述页面的有效lsn的页面的列表包括在所述快照请求中;所述实现方式还可选地包括日志节点处理器,所述日志节点处理器用于:通过将所述页面有效lsn与所述页面的最新lsn进行比较,识别对所述数据库节点无效的页面;将所识别的无效页面包括在所述快照响应中。
[0009]
可选地,在前述方面中,所述方面的另一实现方式提供了一种日志节点处理器,所述日志节点处理器用于发送所述快照响应中的所述有效lsn。
[0010]
可选地,在任一前述方面中,所述方面的另一实现方式提供了一种数据库节点处理器,所述数据库节点处理器用于:当从所述持久性存储设备加载所述页面时,将页面状态更改为半有效;如果所述页面在所述已更改页面的列表中被指示为已更改,则将页面状态从半有效更改为无效;如果所述页面为新加载的页面,并且所述页面在所述已更改页面列表中未被指示为已更改,则将所述页面状态从半有效更改为有效。
[0011]
可选地,在任一前述方面中,所述方面的另一实现方式提供了一种数据库节点处理器,所述数据库节点处理器用于:如果所述页面在所述已更改页面的列表中被指示为已更改,则将页面状态从有效或半有效更改为无效;当从所述持久性存储设备加载所述页面时,将页面状态从无效更改为半有效;
[0012]
可选地,在任一前述方面中,所述方面的另一实现方式提供了一种日志节点处理器,所述日志节点处理器用于:将已执行数据库事务的记录从所述日志节点发送至持久性存储设备;当所述日志节点将在所述启动的数据库事务之前执行的数据库事务的记录发送至所述持久性存储设备时,发送所述快照响应。
[0013]
可选地,在前述方面中,所述方面的另一实现方式提供了一种持久性存储设备,所述持久性存储设备用于使用所述已执行的数据库事务的所述记录生成所述数据库快照。
[0014]
可选地,在任一前述方面中,所述方面的另一实现方式提供了一种日志节点存储器,所述日志节点存储器用于存储所述数据库节点的缓存页面的哈希表并响应所述快照请求更新所述哈希表。
[0015]
根据本公开的另一方面,提供了一种在包含多个数据库实例的系统中实现数据库一致性的计算机实现的方法。所述方法包括:通过从数据库节点向日志节点发送快照请求来启动数据库事务,所述快照请求包括所述数据库节点的缓存存储器中被替换或新加载的页面的列表;从所述日志节点接收所述数据库节点处的快照响应,所述快照响应包括所述数据库的快照和所述数据库实例的已更改页面的列表;根据所述快照响应更新所述数据库节点的缓存存储器中的所述页面的状态并执行所述数据库事务。
[0016]
可选地,在前述方面中,所述方面的另一实现方式规定:当所述页面是从持久性存储加载时,在所述数据库节点中将页面状态更改为半有效并为所述页面分配有效日志快照号(log snapshot number,lsn);将具有所述半有效页面状态和所述页面的所述有效lsn的页面的列表包含在所述快照请求中;在所述数据库节点处接收所述快照响应中识别的无效页面和所述有效lsn。
[0017]
可选地,在前述方面中,所述方面的另一实现方式规定:所述日志节点通过将所述页面有效lsn与所述页面的最新lsn进行比较,识别对所述数据库节点无效的页面。
[0018]
可选地,在任一前述方面中,所述方面的另一实现方式规定:当所述页面从所述持久性存储加载时,将页面状态更改为半有效;如果所述页面在所述已更改页面的列表中被
指示为已更改,则将页面状态从半有效更改为无效;如果所述页面为所述数据库节点中新加载的页面,并且所述页面在所述已更改页面列表中未被指示为已更改,则将所述页面状态从半有效更改为有效。
[0019]
可选地,在任一前述方面中,所述方面的另一实现方式规定:如果所述页面在所述已更改页面的列表中被指示为已更改,则将页面状态从有效或半有效更改为无效;当所述页面从持久性存储加载时,将页面状态从无效更改为半有效。
[0020]
可选地,在任一前述方面中,所述方面的另一实现方式规定:将所述启动的数据库事务之前提交的数据库事务的记录从所述日志节点发送至持久性存储设备;在所述记录已发送时,发送所述快照响应。
[0021]
可选地,在任一前述方面中,所述方面的另一实现方式规定:所述日志节点响应所述快照请求,更新所述数据库节点的缓存页面的哈希表。
[0022]
可选地,在任一前述方面中,所述方面的另一实现方式规定:将所述多个数据库实例中的数据库实例存储在所述数据库节点的所述缓存存储器中,启动所述数据库事务包括所述数据库节点的处理器启动所述数据库事务。
[0023]
根据本公开的另一方面,提供了一种数据库系统的日志节点。所述日志节点包括存储器和一个或多个处理器,所述存储器包括指令,所述一个或多个处理器与所述存储器通信。所述一个或多个处理器执行所述指令以:从所述数据库系统的数据库节点接收快照请求,所述快照请求包括所述数据库节点的缓存存储器中被替换或新加载的页面的列表;将快照响应发送至所述数据库节点,所述快照响应包括所述数据库的快照和所述数据库实例的已更改页面的列表。
[0024]
可选地,在前述方面中,所述方面的另一实现方式提供一个或多个处理器,所述一个或多个处理器执行指令以:为所述数据库事务分配有效日志快照号(log snapshot number,lsn);通过将所述页面有效lsn与所述页面的最新lsn进行比较,识别对所述数据库节点无效的页面;将所识别的无效页面包括在所述快照响应中。
[0025]
可选地,在任一前述方面中,所述方面的另一实现方式提供一个或多个处理器,所述一个或多个处理器执行指令以:将已执行数据库事务的记录从所述日志节点发送至持久性存储设备;当所述日志节点将在所述启动的数据库事务之前执行的数据库事务的记录发送至所述持久性存储设备时,发送所述快照响应。
[0026]
可选地,在任一前述方面中,所述方面的另一实现方式提供一个或多个处理器,所述一个或多个处理器执行指令以存储所述数据库节点的缓存页面的哈希表并响应所述快照请求更新所述哈希表。
附图说明
[0027]
图1为一个示例实施例提供的一种分布式数据库系统的框图。
[0028]
图2为一个示例实施例提供的另一分布式数据库系统的框图。
[0029]
图3为一个示例实施例提供的异步缓存一致性协议的状态图。
[0030]
图4示出了一个示例实施例提供的分布式数据库系统的数据库事务的时间线和半有效页面列表。
[0031]
图5为一个示例实施例提供的分布式数据库系统的数据库节点缓存的页面的状态
的状态图。
[0032]
图6示出了一个示例实施例提供的为分布式数据库系统的数据库节点生成无效地图的示例。
[0033]
图7为一个示例实施例提供的分布式数据库系统处理数据库事务的流程图。
[0034]
图8为一个示例实施例提供的用于实现算法和执行方法的客户端、服务器、和基于云的资源的电路的框图。
具体实施方式
[0035]
以下结合附图进行详细描述,所述附图是描述的一部分,并通过图解说明的方式示出可以实施本发明的具体实施例。这些实施例进行了足够详细的描述以使本领域技术人员能够实践本发明,应理解,可以利用其它实施例,并且在不脱离本发明范围的情况下可以进行结构、逻辑和电更改。因此,以下描述的示例实施例并不当作限定,本发明的范围由所附权利要求书限定。
[0036]
在一个实施例中,本文描述的功能或算法可以在软件中实现。所述软件可包括存储于计算机可读介质或计算机可读存储设备(例如一个或多个非瞬时性存储器或其它类型的基于硬件的本地或网络存储设备)上的计算机可执行指令。此外,这些功能对应于模块,所述模块可以是软件、硬件、固件或其任意组合。可根据需要在一个或多个模块中执行多个功能,所描述的实施例仅仅是示例。所述软件可在数字信号处理器、asic、微处理器或运行在计算机系统上的其它类型的处理器上执行,如个人计算机、服务器或其它计算机系统,从而将这种计算机系统转换成专门编程的机器。
[0037]
在传统的分布式数据库系统中,多个数据库实例之间的消息传递用于同步数据库并维护数据库一致性。集中管理数据库一致性。使用全局缓冲池全局维护跨多个数据库节点的一致性。例如,中央数据库管理可以包括执行全局锁定操作的全局消息传递和全局失效操作。
[0038]
图1为分布式数据库系统100的框图。所述系统包括数据库实例1和数据库实例2。每个数据库实例可以驻留在数据库节点103或数据库主节点上。每个数据库节点可以访问持久性存储107中的共享数据,所述持久性存储107可以包括一个或多个服务器。为简单起见,图1中仅示出了两个数据库实例。一个分布式数据库系统可以包括几十个或上百个数据库实例。每个数据库实例包括缓冲池105,所述缓冲池105可以是保存所述共享数据的副本或实例的缓存存储器。当多个数据库实例访问共享数据时,它们需要维护缓存(或缓冲池)的一致性,否则它们可能读取过时的数据,导致数据不一致。
[0039]
图1示出了用于维护数据库实例之间的缓存一致性的三个跨网络操作。所述操作在所有数据库实例之间同步,并影响所有数据库实例。同步操作1(sync1)109是注册页面操作。当将页面加载到本地缓冲池中时,信息将广播到所有其它数据库实例。对于sync1,图1示出了将页面注册放置在数据库实例1的本地缓冲池中并广播到数据库实例2。或者,加载在集中式数据库组件(例如全局缓冲池)中注册。所述缓冲池的副本中的一个副本可以指定为所述全局缓冲池。当数据库节点读取页面时,所述页面注册到全局缓冲池中。
[0040]
同步操作2(sync2)111是失效页面操作。当数据库事务修改页面时,所述数据库事务需要在提交之前使所述页面在其它数据库节点的缓冲池中的数据库副本失效。“提交”是
指更新持久性存储中的数据的事务中的点,其中数据对其它数据库节点可见。对于sync2,图1示出了在数据库实例2中已更改的页面和在数据库实例1中失效的页面。在全局池示例中,如果另一节点对在所述全局池中注册的同一页面感兴趣,则将为此页面获取全局锁。所述页面从持久性存储加载,并缓存在本地缓冲池中。当另一成员访问所述页面时,两个成员需要协商全局锁的状态。如果一个成员更新所述页面,在提交更新事务之前,所述成员将使其它成员的本地缓冲池中的副本失效。
[0041]
同步操作3(sync3)113是重新加载页面操作。当数据库节点试图读取无效页面时,从其它数据库节点或所述持久性存储中加载所述页面的有效版本。对于sync3,图1示出了加载到数据库实例1中的页面。
[0042]
所有三个sync操作都涉及网络通信,并在执行数据库事务时都可能引入大量网络开销。例如,通过直接阻塞提交进程,同步操作2可以是数据库事务的关键路径。这些开销事务会成为增加多主数据库系统吞吐量的主要障碍。发明人已经认识到在分布式数据库系统中改进通信的必要性。
[0043]
实现跨数据库节点的数据库一致性的一种改进的方法是异步执行页面注册和页面失效等操作,而不是在数据库的所有节点之间同步操作。异步传送并延迟缓存一致性信息,直到读取一致性和缓存一致性需要它。替代sync1页面注册操作,缓存页面是逐步按需注册的,不需要使用会阻碍更高系统吞吐量的全局操作。替代sync2失效操作,延迟缓存失效操作,直到需要才执行。结果是,移除了与页面注册相关的开销,并从数据库事务的关键路径移除了页面失效。对于sync3页面重新加载操作,按需从持久性存储中检索页面的最新版本。
[0044]
图2是另一种分布式数据库系统200的框图。所述系统支持计算存储分离。所述数据库系统200包括一个或多个持久性存储设备207(例如,服务器)、多个数据库节点210和日志节点212。数据库节点或日志节点可以包括一个或多个处理器和存储器。所述数据库节点210的存储器包括缓存存储器214,用于存储数据库实例。数据库节点从用户接收查询(例如,结构化查询语言或sql查询),或更新操作、插入操作、删除操作和创建操作中的一个或多个操作。操作所需的数据通过所述数据库节点的缓存存储器提供,如果所述缓存存储器的数据丢失,则通过所述持久性存储提供。缓存一致性所需的信息在所述数据库节点210和所述日志节点212之间异步传送。
[0045]
图3为异步缓存一致性协议的状态图300。在325中,所述数据库节点310的处理器通过向所述日志节点312发送快照请求来启动数据库事务。所述快照请求包括所述数据库节点的缓存存储器中已经被替换或新加载的页面的列表。
[0046]
在330中,所述日志节点312将日志记录(xlog)发送到持久性存储307。日志记录包括当前新数据库事务之前提交的所有数据库节点的数据库事务。当数据库事务修改页面时,它将创建一个日志记录。当所述数据库事务提交时,将所述日志记录发送到所述日志节点312。所述日志节点312获取所述日志记录并将其发送到创建所述数据的新版本的所述持久性存储307。所述持久性存储307从所述日志节点312接收并存储所述日志记录。所述持久性存储307通过重放所述日志记录和从所述数据库节点向所述持久性存储发出的读取页面请求来生成数据库的数据。
[0047]
在335中,所述日志节点312向所述数据库节点310发送快照响应。所述快照响应包
括所述数据库的快照。所述快照由刷新到所述持久性存储的日志记录确定。例如,如果将总计1,024,000(1024k)的日志记录刷新到所述持久性存储中,则所述快照响应包括1024k的快照。所述快照响应还包括所述数据库实例的已更改页面的列表。在340中,所述数据库节点310的处理器根据所述快照响应更新所述数据库节点310的缓存存储器中的所述页面的状态,并执行数据库事务。所述数据库事务的操作只在这个返回的快照上执行。其它数据库节点的任何并发更改对此事务都不可见。
[0048]
在345中,当所述数据库节点310的处理器需要访问所述快照响应中被指示为无效的页面的数据时,所述数据库节点310在持久性存储307中检索所述页面的版本。所述持久性存储307应用接收到的日志记录并返回所述页面的最新版本。
[0049]
返回图2,所述数据库节点可以包括缓存跟踪器组件224。所述缓存跟踪器组件224可以包括数据库节点处理器216执行的软件或固件。数据库节点可以使用所述缓存跟踪器组件224来跟踪或追踪从持久性存储服务器加载的最新页面和所述缓存存储器214中的替换页面。对于每个数据库事务,所述缓存跟踪器准备两个列表。一个是新加载的页面的列表,另一个是自获取最后一个快照以来替换的页面的列表。
[0050]
所述日志节点212可以包括全局事务管理(global transaction management,gtm)组件。所述gtm组件222可以包括日志节点处理器220执行的软件或固件。所述gtm组件生成递增的日志快照号(log snapshot number,lsn)。所述lsn用于维护所述快照。当所述数据库事务启动时,所述数据库节点可以从所述日志节点获取快照作为活动事务的列表。所述日志节点212还可以使用所述lsn来维护哈希表,以追踪所述数据库节点中的每一个中缓存的页面。
[0051]
图4示出了数据库事务或读取器事务(t1、t2
……
tx)的时间线405。所述日志节点为事务中的每一个分配读取器lsn(读取器lsn1、读取器lsn2
……
读取器lsnx)。在某些实施例中,所述读取器lsn包括时间戳。
[0052]
所述日志节点212可以包括无效地图组件226。所述日志节点可以使用所述无效地图组件226来生成无效地图作为特定数据库节点的无效页面的列表。所述无效页面是由其它数据库节点更改的由数据库节点缓存的页面。在提交这些更改并将这些更改的日志记录发送到所述持久性存储207之后,将无效地图返回给特定数据库节点。所述数据库节点可以包括页面失效组件228。数据库节点可以使用所述页面失效组件228来根据所述无效地图使缓存页面失效。当所述数据库节点210想要访问无效页面时,加载所述持久性存储207中的相应页面。
[0053]
缓存在数据库节点中的页面可以是有效的、半有效的或无效的。如果页面是数据库从持久性存储中加载的,并且所述页面没有在随后从所述日志节点接收的无效地图中列出,则所述页面是有效的。如果页面包括在无效地图中,则所述页面标记为无效。当页面第一次加载到缓存存储器时,所述页面标记为半有效。
[0054]
图5为数据库系统的数据库节点缓存的页面的状态的状态图500。在505中,当另一数据库节点修改所述页面并且所述修改提交到所述日志节点时,有效页面550变为无效。从所述日志节点接收到的所述无效图包括已更改的页面的信息。在510中,当所述数据库节点试图访问无效页面,并且所述数据库节点由于无效状态而从持久性存储加载相应页面时,无效页面555变为半有效。在515中,半有效页面560可以变为有效,在520中,半有效页面可
以变为无效。
[0055]
所述数据库节点使用从所述日志节点接收的已更改页面的列表(无效地图)来追踪所述半有效页面是变为有效还是无效。当数据库节点从所述日志节点接收到快照响应时,所述数据库节点包括无效地图或已更改页面的列表。如果所述列表中包括半有效页面,则最近对页面进行了更改,并且所述页面状态更改为无效。如果所述半有效页面包括在所述数据库节点的新加载的页面的列表中,并且不在返回的已更改的页面列表中,则所述页面状态更改为有效。将变为有效或无效的页面从半有效列表移除。
[0056]
所述数据库节点的缓存跟踪器组件224维护半有效页面列表。图4示出了半有效页面列表410的示例。所述半有效页面列表由包括页面号和有效lsn的列表对(px:有效lsn)组成。这个有效lsn对于列表对可以是相同的或不同的,并且在所述数据库节点开始加载相应页面时是最新读取器lsn。这意味着加载的页面对于lsn小于这个有效lsn的所有快照都是有效的。这在异步缓存一致性协议中通过如下方式来保证:让所述日志节点检查当任何快照(及其读取器lsn)返回到数据库节点时所有提交的日志记录已经发送或刷新到持久性存储。
[0057]
当数据库节点启动数据库事务时,其使用半有效页面列表来构建新加载的页面的列表,以包括在所述快照请求中。所述列表中只包括那些新加载的页面。从新加载的页面的列表中排除之前的事务所选择的任何页面。
[0058]
在网络故障的情况下,快照请求消息或快照响应消息可能会丢失并重新发送,或者即将变为有效的页面可能会重新加载并标记为半有效。所述数据库节点可以将所述半有效页面列表中的页面的有效lsn与活动数据库事务的读取器lsn进行比较。如果所述半有效列表的有效lsn大于或等于读取器lsn,则所述页面保持半有效。如果有效lsn小于读取器lsn,则所述列表中的页面无效。
[0059]
为了生成无效地图,所述日志节点212的无效地图组件226维护每个数据库节点的缓存页面的哈希表。所述无效地图组件226还可以维护自每个数据库节点的最后一个读取器lsn以来针对每个数据库节点更改的页面的单独列表。将其它数据库节点更新的页面附加到这个单独页面列表。应注意,由于在不同的时间发生多个更新,因此,一个页面在列表中可以有多个条目。
[0060]
当数据库节点发送具有新加载的页面的快照请求时,所述新加载的页面的列表包括这些页面的有效lsn。当所述日志节点接收到所述列表时,所述日志节点首先将这些页面插入到所述数据库节点的哈希表中,然后为所述数据库事务生成读取器lsn。所述无效地图组件226确定有效lsn比所述读取器lsn小的页面,并将所述页面添加到所述无效地图中。有效lsn大于或等于所述读取器lsn的页面变为有效。
[0061]
图6示出了为数据库节点生成无效地图的示例。针对数据库(database,db)节点1,示出了数据库事务(t1、t2、t3、t4)的时间线605。对于数据库事务t3,读取器lsn为lsn3,t3的db1的新加载的页面的列表为{(p1,lsn2),(p2,lsn2)}。图6还示出了db节点1的半有效页面列表610。所述半有效页面列表610的元素包括页面标识符(页面id p1、p2、p3
……
p5)和相应页面的最小有效lsn。
[0062]
图6中还示出了日志节点为所述db节点1和db节点2维护的无效页面列表。所述db节点1的无效页面列表615是所述db节点1缓存的最近更改的页面的列表。所述列表的元素
包括页面id和提交lsn。所述无效地图组件226将所述半有效列表与所述无效页面列表进行比较,以识别所述有效lsn和所述读取器lsn之间更改了哪些半有效页面。
[0063]
对于页面p2,由于所述半有效页面列表的有效lsn大于或等于所述无效页面列表中的提交lsn,因此所述db节点1中缓存的p2版本是有效的。其它db节点中的其它p2版本对db节点1不可见。对于页面p1,由于所述半有效页面列表610的有效lsn小于所述无效页面列表615的提交lsn,因此所述db节点1中缓存的p1版本可能比较旧,并且所述db节点1中的p1的版本无效。
[0064]
所述日志节点212使用所述读取器lsn来确定应该检查所述无效页面列表中的哪些列表元素。例如,由于t3的读取器lsn为lsn3,因此只检查所述无效页面列表的前三个元素p2、p1和p5。不检查有效lsn大于lsn3的元素(例如lsn4和lsn5),因为页面更改对事务t3不可见。
[0065]
当数据库节点通过所述快照请求将新加载的页面的列表发送给所述日志节点时,所述数据库节点可以使所述新加载的页面包括一个最小的有效lsn。所述日志节点可以使用这个有效lsn来移除所述无效页面列表中的项。如果数据库节点发现其最后一个读取器lsn太旧(例如,因为所述数据库节点中没有发送数据库事务),所述数据库节点可以发送具有不切实际的大有效lsn的新加载页面的列表。这样,所述数据库节点可以主动截断所述日志节点中维护的所述数据库节点的已更改页面的列表。可以定期发出这种请求,以避免丢失一些真实的快照请求并且不处理相应的新加载的页面列表情况,从而确定无效页面地图。如果未截断已更改页面的列表,则新加载的页面列表的丢失将导致假的无效页面,从而触发将来的访问,所述访问将始终导致从持久性存储加载数据。
[0066]
图7为图2的分布式数据库系统处理数据库事务的流程图700。在705中,向所述日志节点发送快照请求的数据库节点启动数据库事务。所述快照请求是为了获取数据库快照和读取器lsn。所述请求可以包括两个列表:请求数据库节点新添加的页面的列表和所述请求数据库节点替换的页面的列表。
[0067]
在710,所述日志节点为每个数据库节点的缓存页面更新哈希表。在715中,所述日志节点将在所述数据库快照请求之前发生的数据库事务的记录发送到持久性存储。在将所述快照和所述无效页面列表返回给所述请求数据库节点之前,所述日志节点检查之前提交的事务的日志记录是否已刷新或已发送到持久性存储服务器。
[0068]
在720中,所述日志节点生成无效地图(无效页面列表),并将无效地图和所述快照返回给所述数据库节点。在725中,当所述数据库节点读取所述无效地图中被指示为无效的页面时,所述数据库节点从持久性存储中检索所述页面。在730中,所述数据库节点提交所述数据库事务。提交时,将日志记录发送到所述日志节点。
[0069]
在多版本数据库系统中,事务获取数据库的快照,所述事务的操作只作用于所述获取的快照。所述系统中发生的任何并发更改对此事务都不可见。所述事务访问数据库节点中的缓存数据或持久性存储中的数据。异步缓存一致性协议保证访问的数据在所述事务的快照或较新的快照中。
[0070]
缓存中的所有页面都是最新版本或快照版本。在所述事务获取所述快照之前,所述缓存页面不会发生已提交的更改。某些缓存页面变为无效,但在获取所述快照之前,其它事务不会加载所述缓存中的页面。所述事务或具有旧快照的另一事务将缓存中的那些页面
标记为无效。如果所述事务访问这些页面,则从持久性存储中获取所述缓存页面的新版本。
[0071]
如果在第一数据库节点的事务之前,其它数据库节点加载了所述第一数据库节点的缓存存储器中的页面,则这些加载的页面在所述其它数据库节点的新加载的列表中。返回的已更改的页面的无效地图可以验证所述页面是有效的还是无效的。如果无效,则所述第一数据库节点从持久性存储中检索所述页面。所述持久性存储总是返回页面的最新版本,因为在将所述快照返回给所述数据库节点之前,所述日志节点会刷新或发送之前提交的事务的日志记录。
[0072]
第一数据库节点的事务期间,其它数据库节点可以加载所述第一数据库节点的缓存中的一些页面。如果这些页面是在所述数据库节点发送所述快照请求和所述日志节点返回快照响应之间的时间内加载的,则这些页面是半有效的,如果所述页面的有效lsn小于(早于)所述快照的读取器lsn,则从持久性存储中检索这些页面。
[0073]
如果这些页面是在发送所述快照响应(包括所述快照和所述读取器lsn)的时间之后加载的,则这些页面是半有效的,但所述页面的有效lsn大于或等于(不早于)所述快照的所述读取器lsn,所述事物中可以使用所述页面。因此,所述异步缓存一致性协议可以保证在数据库事务中访问正确的数据。
[0074]
可见,缓存一致性是跨多主数据库节点维护的。所述异步缓存一致性协议将缓存无效操作延迟到需要时,在没有全局锁定的情况下按需逐步注册缓存的页面,并按需从持久性存储中检索页面的最新版本。与传统的同步一致性方法相比,异步缓存一致性方法减少了事务提交和数据访问所需的网络交互。这样可以较少网络障碍,提高吞吐量。
[0075]
图8为示例实施例提供的用于执行方法的数据库节点和日志节点中的一种或两种的电路的框图。不需要在各个实施例中使用所有组件。例如,数据库节点和日志节点可以各自使用不同的组件集。
[0076]
计算机800形式的一个示例计算设备可以包括处理单元802、存储器803、可移动存储器810和不可移动存储器812。尽管所述示例计算设备图示和描述为所述计算机800,但是所述计算设备在不同的实施例中可以有不同的形式。例如,所述计算设备可以是智能手机、平板电脑、智能手表或其它计算设备,其包括结合图8所示和描述的相同或类似元件。智能手机、平板电脑和智能手表等设备通常统称为移动设备或用户设备。此外,尽管各种数据存储元件作为计算机800的一部分进行说明,但是所述存储器还可以包括或者可选地包括可通过网络(例如互联网或基于服务器的存储器)访问的基于云的存储器。
[0077]
所述存储器803可以包括易失性存储器814和非易失性存储器808。缓存存储器可以使用所述易失性存储器814和所述非易失性存储器808中的一种或两种来实现。所述计算机800可以包括或可以访问包括各种计算机可读介质的计算环境,例如包括所述易失性存储器814,所述非易失性存储器808、所述可移动存储器810和所述不可移动存储器812的计算环境。计算机存储包括随机存取存储器(random access memory,ram)、只读存储器(read only memory,rom)、可擦除可编程只读存储器(erasable programmable read-only memory,eprom)和电可擦除可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、闪存或其它存储器技术,只读光碟(compact disc read-only memory,cd rom)、数码通用光碟(digital versatile disk,dvd)或其它光盘存储器、磁带盒、磁带、磁盘存储器或其它磁存储装置,或任何其它能存储计算机可读指令的介质。
[0078]
所述计算机800可以包括或可以访问包括输入806、输出804和通信连接816的计算环境。所述输出804可以包括显示设备(例如触摸屏),所述显示设备也可以用作输入设备。所述输入806可以包括以下中的一个或多个:触摸屏、触摸板、鼠标、键盘、摄像头、一个或多个设备专用按钮、集成在所述计算机800内或通过有线或无线数据连接耦合到所述计算机800的一个或多个传感器以及其它输入设备。计算机可以使用通信连接在网络环境中运行,以连接到一个或多个远程计算机,例如数据库服务器。所述远程计算机可以包括个人计算机(personal computer,pc)、服务器、路由器、网络pc、对端设备或其它公共网络节点等。所述通信连接可以包括局域网(local area network,lan)、广域网(wide area network,wan)、蜂窝网、wi-fi、蓝牙或其它网络。根据一个实施例,所述计算机800的各种组件与系统总线820连接。
[0079]
存储在计算机可读介质上的计算机可读指令(例如程序818)可由所述计算机800的处理单元802执行。在一些实施例中,所述程序818包括软件,当所述处理单元802执行所述程序时,所述软件执行根据本文包括的任一实施例的一致性操作。硬盘驱动器、cd-rom和ram是包括非瞬时性计算机可读介质(例如存储设备)的制品的一些示例。术语计算机可读介质和存储设备不包括载波,因为载波太短暂。存储还可以包括联网存储器,例如存储区域网络(storage area network,san)。所述计算机程序818可以用于使所述处理单元802执行本文描述的算法中的一个或多个。
[0080]
在示例实施例中,所述计算机800包括:启动模块,所述启动模块通过将快照请求从数据库节点发送到日志节点来启动数据库事务,所述快照请求包括所述数据库节点的缓存存储器中已被替换或新加载的页面的列表;接收模块,所述接收模块在所述数据库节点处从所述日志节点接收快照响应,所述快照响应包括所述数据库的快照和所述数据库实例的已更改页面的列表;更新模块,所述更新模块根据所述快照响应更新所述数据库节点的缓存存储器中的所述页面的状态并执行所述数据库事务。在一些实施例中,所述计算机800可以包括其它模块或附加模块,以用于执行实施例中所描述的步骤中的任一步骤或步骤的组合。此外,如任一附图中所示出的或任一权利要求中所叙述的方法的任何附加或替代实施例或方面也可以预期包括类似的模块。
[0081]
尽管上文详细地描述了几个实施例,但其它修改也是可能的。例如,在图中描述的逻辑流程不需要所示特定顺序或连续顺序来达到期望的结果。可以向所描述的流程提供其它步骤或去除所描述的流程中的步骤,并可以向所描述的系统添加其它组件或移除所描述的系统的组件。其它实施例可在所附权利要求书的范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1