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

与键-值式数据库系统相关联的锁管理

文献发布时间:2023-06-19 11:52:33


与键-值式数据库系统相关联的锁管理

技术领域

本公开大体上涉及存储器子系统,且更具体地,涉及与键-值式数据库系统相关联的锁管理。

背景技术

存储器子系统可包含一或多个存储数据的存储器装置。存储器装置例如可以是非易失性存储器装置和易失性存储器装置。通常,主机系统可利用存储器子系统来将数据存储在存储器装置处且从存储器装置检索数据。

发明内容

在一个方面,本申请涉及一种方法,其包括:获取第一数据结构锁以访问第一组数据结构中的第一数据结构,以执行与事务相关联的操作;执行与事务相关联的操作,其中所述操作是以下之一:将事务插入到第一数据结构中或从第一数据结构移除事务;标识第一数据结构的最旧活动事务;根据最旧活动事务,确定第一组数据结构的全局最旧活动事务;访问包含与已完成事务相关联的信息的第二组数据结构,以标识与已完成事务相关联的一组数据锁,每个已完成事务具有当与全局最旧活动事务相关联的事务开始标识符相比较时满足条件的事务完成标识符;以及通过处理装置释放一组数据锁。

在另一方面,本申请涉及一种系统,其包括:多个存储器组件;以及处理装置,所述处理装置可操作地耦合到存储器组件以执行包括以下的操作:由主机系统执行的事务线程将具有事务开始标识符的活动事务标识为与第一组数据结构相关联的全局最旧活动事务;将第二组数据结构中的第一数据结构的第一标记值与事务开始标识符进行比较,以确定是否满足第一条件;访问第一数据结构,以标识与一或多个事务相关联的第一组数据锁,每个事务具有当与事务开始标识符相比较时满足第二条件的事务完成标识符;以及释放第一组数据锁。

在另一方面,本申请涉及一种包括指令的非暂时性计算机可读介质,所述指令在由处理器执行时使处理器执行包括以下的操作:获取第一数据结构锁以访问第一组数据结构中的第一数据结构,以执行与事务相关联的操作;执行与事务相关联的操作,其中所述操作是以下之一:将事务插入到第一数据结构中或从第一数据结构移除事务;标识第一数据结构的最旧活动事务;根据最旧活动事务,确定第一组数据结构的全局最旧活动事务;访问包含与已完成事务相关联的信息的第二组数据结构,以标识与已完成事务相关联的一组数据锁,每个已完成事务具有当与全局最旧活动事务相关联的事务开始标识符相比较时满足条件的事务完成标识符;以及通过处理装置释放一组数据锁。

附图说明

从以下给出的详细描述以及从本公开的各种实施方案的附图将更全面地理解本公开。

图1示出示例性计算系统,其包含与根据本公开的一些实施例的存储器子系统耦合的主机系统。

图2示出根据本公开的一些实施例的管理多个数据结构以标识与数据库系统相关联的全局最旧活动事务。

图3是根据本公开的一些实施例的管理活动事务组以标识全局最旧活动事务的示例性方法300的流程图。

图4示出由事务管理系统126用来标识和释放与数据库系统相关联的合格锁组的示例性的一组锁数据结构。

图5是根据本公开的一些实施例的管理一组锁数据结构以标识要释放的一组数据锁的示例性方法500的流程图。

图6示出根据本公开的一些实施例的由事务管理系统执行的锁继承处理的实例。

图7是本公开的各实施方案可在其中操作的示例性计算机系统的框图。

具体实施方式

本公开的各方面涉及基于诸如键-值式数据库(KVDB)等非关系数据库类型来管理存储体系结构中的锁。KVDB是耦合到存储器子系统的主机系统中的键-值组(也称为键-值存储(KVS))的合集的例子。每个KVS可以是键和值的合集。KVS可以是节点树,其中每个节点含有键/值对的树的列表。存储器子系统可以是存储装置、存储器模块或者存储装置和存储器模块的混合。下面结合图1描述存储装置和存储器模块的实例。一般来说,主机系统可利用包含一或多个存储器组件(例如存储数据的存储器装置)的存储器子系统。主机系统可提供将存储在存储器子系统处的数据且可请求将从存储器子系统检索的数据。

键-值式数据结构接受键-值对(即,包含键和值),并被配置为由主机系统线程访问以在事务(T)的上下文中执行特定键(K)的改变或变更。用于管理键-值对的数据结构可以包含字典(例如,映射,散列映射等)和其中存储有链接(或含有)相应值的键的列表。这些数据库系统向应用软件提供一组操作以存储、检索、查询和转换数据对象。应用软件将这些操作分组为称为“事务”的逻辑单元。

KVDB中的每个键与客户机线程试图获取以便对其进行变更(例如,作为事务的一部分)的锁相关联。在KVDB中,存储器位置(例如,易失性和/或非易失性存储器)可以含有每个键-值对的一或多个版本。如果锁被另一事务持有,则变更操作失败并且事务被中止。如果锁当前未被持有,则事务获取所述锁,执行改变,并且当所述事务提交时,访问KVDB的其它客户机线程可以看到相应的改变。

在获取并持有与事务有关的锁之后,所述锁将被释放。然而,如果特定事务提交,则所述锁不能被释放,直到具有与所述特定事务重叠的历史的每个其它事务提交或中止(例如,如果T1在T0开始之后开始;并且T1在T0提交或中止之前开始,则事务T0和T1彼此重叠)。这对响应于提交或中止重叠事务来管理和释放代表先前提交的事务持有的锁的系统造成了显著的负担。为此,常规系统采用各种技术来管理一或多个可搜索数据结构,所述可搜索数据结构包含标识当前结合正由一或多个主机系统线程执行的事务而持有的锁的信息。可搜索数据结构本身由锁(在此称为“数据结构锁”)保护,所述锁需要由线程独占地获取和持有以便访问包含数据锁信息的数据结构。然而,保护锁管理器的可搜索数据结构的数据结构锁是在给定时间只能由单个线程持有的高度竞争的系统资源,从而阻止并发执行线程。

例如,事务可以涉及从银行帐户A向银行帐户B转移M美元。在此实例中,与此事务相关联的各个操作可以包含:操作1.)开始事务;操作2.)将帐户A的余额读作N美元;操作3.)将帐户B的余额读作P美元;操作4.)将帐户A的余额更新为N-M美元;操作5.)将帐户B的余额更新为P+M美元;操作6.)提交事务。

上述示例性操作可以如同同时地执行。因此,每个事务与任何其它事务在时间上隔离执行,即,存在事务发生的单个串行顺序,也称为“完全可串行化”。这可以通过防止重叠事务来实现,极大地限制了并发性和性能。还可以通过根据复杂的协议在概念上锁定和解锁数据对象来实现完全可串行化,但是这种机制的复杂性仍然基本上限制了性能。

然而,应用软件通常不需要完全可串行化来用于正确操作。可采用“较弱”或较不严格的模型,例如“快照隔离”模型。快照隔离是通过获取和释放与数据对象相关联的概念锁来实现的,但是它具有比完全可串行化更有效的实施方案。给定的事务T为它更新的每个数据对象获取锁,导致到时间T提交时有一组锁L(T)。L(T)中的锁必须保持锁定,直到其执行与T的执行重叠的每个事务提交或中止。此时,可以解锁L(T)中的所有锁。

本公开的各方面通过采用事务管理系统来采用数据结构和锁管理过程以实现高级别的事务并发性和吞吐量来解决上述和其它缺陷。事务管理系统标识并寄存对应于开始执行事务的主机系统线程的每个例子的唯一序列号(例如,开始序列号)。事务管理系统还标识和寄存对应于每个事务的完成(例如提交或中止)的唯一序列号(例如完成序列号)。

事务管理系统可以维护多个数据结构(例如,多个单独的事务列表),以跟踪和记录系统中每个事务的序列号(例如,开始序列号和完成序列号)。对于相应的列表(也称为“活动事务组”)中的每一个,事务管理系统标识最旧活动事务。

基于所标识的活动事务组中的每一个的最旧活动事务,事务管理系统可以标识与所有列表(例如,所有不同的活动事务组)相关联的总体或全局最旧活动事务。全局最旧活动事务信息可用于遍历一组数据结构(例如,一组存储桶)以标识已完成(例如,提交或中止)的事务以及在事务执行期间由相应事务持有的锁的任何子组。延迟释放与已完成事务相关联的一组数据锁,直到确定在已完成事务提交(或中止)之后开始全局最旧活动事务为止。

事务管理系统还通过事务管理一或多个锁的继承。在实施例中,事务管理系统跟踪所有事务(以及由那些事务持有的相应锁)的完成时间(例如提交时间或中止时间)。事务管理系统基于事务的开始时间(例如,开始序列号)与要从其继承锁的任何子组的另一事务的完成时间(例如,完成序列号)的比较来使事务能够继承一或多个锁。例如,如果事务(T1)在另一事务(T0)提交之后开始,则T1不与T0重叠,并且T1可以获取由T0持有的锁的任何子组。

本公开的优点在于,所描述的事务管理系统能够更有效地搜索、标识和释放数据锁,以促进高级别的事务并发性。本公开的事务管理系统采用数据结构的可扩展配置,所述数据结构的可扩展配置避免锁管理器具有由单个数据结构锁保护的单个数据结构。有利地,使用在此描述的锁保留、释放和继承协议来实现并发执行事务的高吞吐量。

根据本公开的各方面,管理数据库系统以根据快照隔离模型向应用软件提供一致性保证。根据实施例,锁本质上可以是概念上的,使得锁是提供一致性保证的数据库系统实施方案的人工产物。在实施例中,系统跟踪最旧的当前执行的事务,以使系统能够确定何时释放由先前提交的事务持有的锁,同时仍然维护快照隔离的保证。

图1示出示例性计算系统100,其包含根据本公开的一些实施例的存储器子系统110。存储器子系统110可包含介质,例如一或多个易失性存储器装置(例如,存储器装置140)、一或多个非易失性存储器装置(例如,存储器装置130)或其组合。

存储器子系统110可以是存储装置、存储器模块或者存储装置和存储器模块的混合。存储装置的实例包含固态驱动器(SSD)、闪存驱动器、通用串行总线(USB)闪存驱动器、嵌入式多媒体控制器(eMMC)驱动器、通用闪存存储(UFS)驱动器、安全数字(SD)卡和硬盘驱动器(HDD)。存储器模块的实例包含双列直插存储器模块(DIMM)、小外形DIMM(SO-DIMM)和各种类型的非易失性双列直插存储器模块(NVDIMM)。

计算系统100可以是计算装置,诸如台式计算机、膝上型计算机、网络服务器、移动装置、交通工具(例如,飞机、无人驾驶飞机、火车、汽车或其它运输工具)、物联网(IoT)使能装置、嵌入式计算机(例如,包含在交通工具、工业装备或联网商业装置中的计算机),或包含存储器和处理装置的此类计算装置。

计算系统100可包含主机系统120,所述主机系统120耦合到一或多个存储器子系统110。在一些实施例中,主机系统120耦合到不同类型的存储器子系统110。图1示出主机系统120耦合到一个存储器子系统110的一个实例。如这里所使用的,“耦合到”或“与......耦合”通常指的是组件之间的连接,此类连接可以是间接通信连接或直接通信连接(例如,没有介入组件),无论是有线的还是无线的,包含诸如电的、光的、磁的等连接。

主机系统120可以包含处理器芯片组和由处理器芯片组执行的软件栈。处理器芯片组可包含一或多个核、一或多个高速缓存、存储器控制器(例如,NVDIMM控制器)和存储协议控制器(例如,PCIe控制器、SATA控制器)。例如,主机系统120使用存储器子系统110来将数据写入存储器子系统110并从存储器子系统110读取数据。

主机系统120可经由物理主机接口耦合到存储器子系统110。物理主机接口的实例包含但不限于串行高级技术附接(SATA)接口、高速外围组件互连(PCIe)接口、通用串行总线(USB)接口、光纤通道、串行附接SCSI(SAS)、双数据速率(DDR)存储器总线、小型计算机系统接口(SCSI)、双列直插存储器模块(DIMM)接口(例如,支持双数据速率(DDR)的DIMM插槽接口)等。物理主机接口可用于在主机系统120与存储器子系统110之间传输数据。当存储器子系统110通过PCIe接口与主机系统120耦合时,主机系统120还可以利用NVM Express(NVMe)接口来访问组件(例如,存储器装置130)。物理主机接口可提供用于在存储器子系统110与主机系统120之间传递控制、地址、数据和其它信号的接口。图1示出作为实例的存储器子系统110。一般来说,主机系统120可经由同一通信连接、多个单独通信连接和/或通信连接的组合来访问多个存储器子系统。

存储装置130、140可以包含不同类型的非易失性存储装置和/或易失性存储装置的任何组合。易失性存储器装置(例如,存储器装置140)可以是但不限于随机存取存储器(RAM),诸如动态随机存取存储器(DRAM)和同步动态随机存取存储器(SDRAM)。

非易失性存储器装置(例如,存储器装置130)的一些实例包含负与(NAND)型闪存存储器及就地写入存储器,例如三维交叉点(“3D交叉点”)存储器。非易失性存储器的交叉点阵列可结合可堆叠的交叉网格数据存取阵列来基于体电阻的改变执行位存储。另外,与许多基于闪存的存储器相比,交叉点非易失性存储器可执行就地写入操作,其中可在先前不擦除非易失性存储器单元的情况下对非易失性存储器单元进行编程。NAND型闪存存储器包含例如二维NAND(2D NAND)和三维NAND(3D NAND)。

存储器装置130中的每一个可包含一或多个存储器单元阵列。一种类型的存储器单元例如单级单元(SLC)可每一单元存储一个位。其它类型的存储器单元例如多级单元(MLC)、三级单元(TLC)和四级单元(QLC)可每一单元存储多个位。在一些实施例中,存储器装置130中的每一个可包含一或多个存储器单元阵列,例如SLC、MLC、TLC、QLC或其任何组合。在一些实施例中,特定存储器装置可包含存储器单元的SLC部分、MLC部分、TLC部分或QLC部分。存储器装置130的存储器单元可分组为页,这些页可以指用于存储数据的存储器装置的逻辑单元。对于某些类型的存储器(例如,NAND),可将页分组以形成块。

虽然描述了例如非易失性存储器单元的3D交叉点阵列和NAND型闪存存储器(例如,2D NAND、3D NAND)的非易失性存储器组件,但存储器装置130可基于任何其它类型的非易失性存储器,例如只读存储器(ROM)、相变存储器(PCM)、自选择存储器、其它基于硫族化物的存储器、铁电晶体管随机存取存储器(FeTRAM)、铁电随机存取存储器(FeRAM)、磁随机存取存储器(MRAM)、自旋转移力矩(STT)-MRAM、导电桥接RAM(CBRAM)、电阻式随机存取存储器(RRAM)、基于氧化物的RRAM(OxRAM),负或(NOR)闪存存储器、电可擦除可编程只读存储器(EEPROM)以及非易失性存储器单元的交叉点阵列。

存储器子系统控制器115(或为简单起见,控制器115)可与存储器装置130通信以执行例如在存储器装置130处读取数据、写入数据或擦除数据的操作和其它此类操作。存储器子系统控制器115可以包含诸如一或多个集成电路和/或分立组件、缓冲存储器或其组合的硬件。硬件可以包含具有专用(即硬编码)逻辑的数字电路,以执行这里描述的操作。存储器子系统控制器115可以是微控制器、专用逻辑电路(例如,现场可编程门阵列(FPGA)、专用集成电路(ASIC)等)或其它合适的处理器。

存储器子系统控制器115可以包含处理器117(例如,处理装置),所述处理器117经配置以执行存储在本地存储器119中的指令。在所示出的实例中,存储器子系统控制器115的本地存储器119包含嵌入式存储器,所述嵌入式存储器经配置以存储用于执行各种过程、操作、逻辑流程和例程的指令,所述各种过程、操作、逻辑流程和例程控制存储器子系统110的操作,其中包含处理存储器子系统110与主机系统120之间的通信。

在一些实施例中,本地存储器119可以包含存储存储器指针、获取数据等的存储器寄存器。本地存储器119还可以包含用于存储微代码的只读存储器(ROM)。虽然在图1中示出示例性存储器子系统110包含存储器子系统控制器115,但是在本公开的另一实施例中,存储器子系统110不包含存储器子系统控制器115,并且替代地可以依赖于(例如,由外部主机提供,或者由与存储器子系统分离的处理器或控制器提供的)外部控制。

一般来说,存储器子系统控制器115可从主机系统120接收命令或操作,并且可将所述命令或操作变换成指令或适当命令以实现对存储器装置130的所需访问。存储器子系统控制器115可负责其它操作,例如损耗均衡操作,无用单元收集操作、错误检测和错误校正码(ECC)操作、加密操作、高速缓存操作以及与存储器装置130相关联的逻辑地址(例如逻辑块地址(LBA)命名空间)与物理地址(例如物理块地址)之间的地址转换。存储器子系统控制器115还可以包含主机接口电路,以经由物理主机接口与主机系统120通信。主机接口电路可将从主机系统接收的命令变换成用以访问存储器装置130的命令指令,以及将与存储器装置130相关联的响应变换成主机系统120的信息。

存储器子系统110还可以包含未示出的附加电路或组件。在一些实施例中,存储器子系统110可以包含高速缓存或缓冲器(例如,DRAM)和地址电路(例如,行解码器和列解码器),所述地址电路可从存储器子系统控制器115接收地址并对所述地址进行解码以访问存储器装置130。

在一些实施例中,存储器装置130包含本地介质控制器135,所述本地介质控制器135与存储器子系统控制器115一起操作以对存储器装置130的一或多个存储器单元执行操作。外部控制器(例如,存储器子系统控制器115)可在外部管理存储器装置130(例如,对存储器装置130执行介质管理操作)。在一些实施例中,存储器装置130是受管存储器装置,所述受管存储器装置为与同一存储器装置封装内用于介质管理的本地控制器(例如,本地控制器135)组合的原始存储器装置。受管存储器装置的实例是受管NAND(MNAND)装置。

主机系统120包含KVDB 125A到125N的一或多个例子。主机系统120还包含事务管理系统126,所述事务管理系统126能够管理与KVDB中存储的数据相关联的事务相关的数据结构。控制器115可以包含处理器117(处理装置),所述处理器117经配置以执行存储在本地存储器119中的指令,用于执行这里描述的一些操作。

事务管理系统126向由主机系统120的执行线程执行的每个事务分配对应于事务的开始的唯一序列号。事务和对应的唯一序列号(也称为“事务开始标识符”、“开始序列号”或“视图序列号”)被寄存(例如,插入)在数据结构(例如,活动事务组)中。事务管理系统126维护多个不同的数据结构(多个活动事务集),每个数据结构与相应的数据结构锁相关联。为了向活动事务组插入(或移除)事务,执行线程获取对应于所述活动事务组的数据结构锁(也称为“互斥体”)。在实施例中,通过采用多个不同的活动事务组来分配锁竞争,每个活动事务组需要由线程获取相应的数据结构锁以访问所述活动事务组。

事务管理系统126标识并寄存对应于活动事务组的事务完成(例如提交或中止)的唯一序列号(称为“事务完成序列号”)。事务开始标识符和事务完成标识符是唯一的序列号,并且用于以时序顺序对开始(例如,视图序列号)和提交(例如,提交序列号)进行排序。

事务管理系统126标识最旧活动事务(例如,具有在活动事务组中列出的活动事务的最低价值事务开始标识符的活动事务)。在实施例中,当要从活动事务组中添加或移除事务时,对应的线程获取所述活动事务组的数据结构锁,以访问列表来执行添加或移除操作。

一旦标识出特定活动事务组的最旧活动事务,事务管理系统126就标识与所有列表(例如,所有不同的活动事务组)相关联的总体或全局最旧活动事务。在实施例中,事务管理系统126可以获取全局锁(也称为“全局视图锁”或“最小视图锁”)以访问其它活动事务组,从而标识每个组中对应的最旧活动事务。然后,可以比较来自多个活动事务组中的每一个的相应最旧活动事务,以标识全局最旧活动事务(例如,具有最低或最旧活动事务开始序列号的活动(例如,未提交和未中止)事务)。

事务管理系统126可以使用全局最旧活动事务信息来与存储在与已完成事务相关的单独的一组数据结构(例如,一组存储桶)中的信息(这里称为“锁数据结构”或“存储桶”)进行比较,所述信息包含与已完成(例如,提交或中止)的事务相关的信息以及在这些事务执行期间由相应已完成事务持有的对应的一或多个锁。事务管理系统126可以遍历锁数据结构以标识已完成事务,所述已完成事务具有当与全局最旧活动事务相关联的事务开始标识符(例如,视图序列号)相比较时满足条件的事务完成标识符(例如,提交序列号)。在实施例中,如果已完成事务的事务完成标识符的值低于全局最旧活动事务的事务开始标识符的值,则满足条件,指示已完成事务在全局最旧活动事务开始之前提交或中止。当满足所述条件时,与已完成事务相关联的一组数据锁被安全地释放。在实施例中,延迟释放与已完成事务相关联的一组数据锁,直到确定在已完成事务提交(或中止)之后开始全局最旧活动事务为止。

在实施例中,锁数据结构在逻辑上被布置成循环配置,使得事务管理系统126可以在任何单个锁数据结构处开始遍历,并且移动到循环配置中的下一个锁数据结构(例如,沿顺时针方向移动)。锁数据结构中的每一个由对应的数据结构锁或互斥体保护,所述数据结构锁或互斥体由线程获取以便访问和遍历锁数据结构从而标识要释放的锁组。

事务管理系统126通过事务管理一或多个锁的继承。在实施例中,事务管理系统跟踪所有事务(以及由那些事务持有的相应锁)的完成时间(例如提交时间或中止时间)。事务管理系统基于事务的开始时间(例如,开始序列号)与要从其继承锁的任何子组的另一事务的完成时间(例如,完成序列号)的比较来使事务能够继承一或多个锁。例如,如果事务(T1)在另一事务(T0)提交之后开始,则T1不与T0重叠,并且T1可以获取由T0持有的锁的任何子组。

图2示出对多个数据结构(活动事务组(“ATS”))的管理,以标识与KVDB(也称为“数据库系统”)相关联的全局最旧活动事务。图2示出活动事务组(例如,数据结构1、数据结构2和数据结构N)的三个特定例子,但是本公开的范围不限于可由本公开的事务管理系统(例如,图1的事务管理系统126)管理的任何特定数量的活动事务组。活动事务组中的每一个包含数据库系统中的活动事务(例如,尚未被标识为已提交或已中止的事务)的列表。事务管理系统126可以使用活动事务组来跟踪和标识单独的活动事务组(例如,每个列表的最旧活动事务)中的每一个的最旧活动事务(在图2中称为“最小视图”)和整体或全局最旧活动事务(在图2中称为“全局最小视图”)。

在实施例中,ATS(例如,ATS 1,ATS 2…ATS N)可以包含按照从最低(例如,最旧)到最高的对应的事务开始标识符(例如,视图序列号)排序的活动事务的列表。在实施例中,事务开始标识符由事务获得,以在发生任何变更或获取锁之前建立其视图序列号。在实施例中,事务开始标识符由事务获得,以在事务的上下文中开始任何操作(放入、获取或删除)之前建立其KVDB的快照视图。在实施例中,即使在事务的上下文中没有发生变更,也可以建立视图序列号。

在实施例中,主机系统120的执行线程(例如,线程ABC)被指定执行与事务相关联的操作。在实施例中,操作可以是向ATS插入事务(例如,响应于新事务的开始)或者从ATS移除事务(例如,响应于先前活动事务的完成,例如提交或中止)。为了执行操作,线程获取数据结构锁以获得对对应的ATS的访问。在实施例中,被选择用于插入新事务的数据结构是从当前CPU导出的,以使得能够在保护各个ATS的多个数据结构锁之间分配锁竞争。

在实施例中,事务线程可以访问ATS以执行以下操作之一:事务线程可以将新事务插入空ATS,这导致更改或改变所述ATS的最小视图;事务线程可以将新事务插入非空ATS中,这可以更改或改变所述ATS的最小视图;或者事务线程可以从非空ATS中移除事务,这可以更改或改变所述ATS的最小视图。在实施例中,如果这些操作中的任何一个更改全局最小视图,则将执行进一步的处理。

在实施例中,事务线程可以访问ATS以将事务插入到非空ATS中,这不会更改所述ATS的最小视图。在这种情况下,可以结束事务管理过程。例如,执行将事务T74插入到ATS 2上的操作的线程可以确定ATS包含较旧的事务(例如,T3)。这样,线程在将T74插入到ATS 2上之后不需要执行进一步的处理。类似地,执行从ATS N移除事务T290的操作的线程可以确定ATS N包含较旧的活动事务(例如,T72)。因此,线程在从ATS N中移除T290之后不需要执行进一步的处理。

在实施例中,如果要由线程执行的操作是将新事务插入到空ATS(例如,不包含活动事务的列表)上,或者如果要由线程执行的操作是从非空ATS移除活动事务,或者如果要由线程执行的操作是将新事务插入到空ATS上,线程可以执行进一步的事务管理处理,以确定特定事务是否是ATS的最旧活动事务(例如,ATS的最小视图),并且如果是,则确定对应于所有ATS的全局最小视图是否已经被更改或更新。

在将新事务插入到空ATS的实例中,线程将所插入的事务标识为所述ATS的最旧活动事务(例如,所述ATS的最小视图)。然后线程可以继续确定跨所有ATS的全局最旧活动事务。在实施例中,线程可以获取允许访问其它ATS的锁(这里称为“全局最小视图锁”)。使用全局最小视图锁,线程可以访问其它ATS、标识各个ATS中的每一个的最小视图(例如,每个ATS的最旧活动事务),并将这些事务彼此比较以标识全局最小视图(例如,全局最旧活动事务)。

在从ATS中移除最旧活动事务的实例中(如图2所示),线程获取对应于其中列出事务的ATS的数据结构锁(作为随后的活动事务)。线程使用数据结构锁访问对应的ATS,并确定正被移除的事务是否是所述ATS的最旧活动事务。如果是,则线程确定更新的或新的最旧活动事务(例如,在移除先前被指定为最旧活动事务的事务之后,ATS上具有最低或最旧活动事务开始标识符的事务)。在实施例中,如果要移除的事务不是ATS中的最旧活动事务,则可以结束事务管理处理。

在图2所示的实例中,线程ABC获取ATS 1的数据结构锁,以访问数据结构来执行与事务T2相关联的移除操作。在此实例中,操作是鉴于事务T2的完成(例如提交)而从ATS 1移除T2。如图所示,由于T2是先前最旧活动事务,因此线程ABC确定ATS 1的更新的最旧活动事务。当从ATS 1移除T2时,线程ABC将T90标识为ATS 1的更新的最旧活动事务。然后线程ABC获取最小视图锁以访问其它ATS(例如,ATS 2…ATS N)以将T90与这些其它ATS的当前最小视图(例如,ATS 2的T3、ATS N的T72)进行比较。在此实例中,线程ABC将T3标识并指定为系统的全局最小视图。然后线程ABC可使用全局最小视图(例如,T3)来标识与有资格释放的已完成事务相关联的一组数据锁,如参考图4和5更详细地描述的。

图3是根据本公开的一些实施例的管理活动事务组以标识全局最旧活动事务的示例性方法300的流程图。方法300可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件,集成电路等)、软件(例如,在处理装置上运行或执行的指令)或其组合。在一些实施例中,方法300可以由图1的主机系统120的事务管理系统126执行。尽管以特定的顺序或次序示出,但是除非另外指定,否则可以修改过程的次序。因此,所示出的实施例应仅被理解为实例,且所示出的过程可以不同次序执行,且某些过程可并行执行。另外,可在各种实施例中省略一或多个过程。因此,并非在每个实施例中都需要所有的过程。其它过程流程也是可能的。

在操作310,处理逻辑获取第一数据结构锁以访问第一组数据结构中的第一数据结构,以执行与数据库系统相关联的事务相关联的操作。在实施例中,第一组数据结构或活动事务组(例如,图2的ATS 1、ATS 2…ATS N)包含数据库系统中活动事务的多个不同列表。在实施例中,每次只有单个执行线程可以获取第一数据结构锁。

在操作320,处理逻辑执行与事务相关联的操作,其中所述操作是以下之一:将事务插入到第一数据结构中或从第一数据结构移除事务(即,当事务是ATS上的最旧活动事务时)。在实施例中,处理逻辑在使用所获取的锁获得对第一数据结构的访问之后执行操作(例如,插入或移除事务)。在实施例中,如果操作包含在第一数据结构中已有的较旧的活动事务之外或之后插入事务,则处理逻辑终止方法300。

在操作330,处理逻辑标识第一数据结构的最旧活动事务。在实施例中,如果事务被插入到空的第一数据结构中,则处理逻辑将事务标识为最旧活动事务(例如,对应ATS的最小视图)。在实施例中,如果操作涉及事务的移除并且事务是第一数据结构中的当前最旧活动事务,则处理逻辑识别更新的或下一个最旧活动事务(例如,在事务移除之后)并将此事务指定为最旧活动事务。例如,如图2所示,对于涉及从ATS 1移除T2的操作,处理逻辑将T90标识为ATS 1中列出的下一个最旧活动事务,并将T90指定为最旧活动事务(例如,对应ATS的最小视图)。

在操作340,处理逻辑根据最旧活动事务确定多组数据结构中的全局最旧活动事务。在实施例中,处理逻辑在标识了第一数据结构的最旧活动事务之后、可以获取锁(例如最小视图锁)以访问第一组数据结构中的其它数据结构。在图2所示的实例中,处理逻辑使用最小视图锁来访问ATS 2…ATS N,以标识在这些数据结构的每一个中列出的相应的最旧活动事务。使用对应于每个相应事务的视图序列号和提交序列号,事务管理系统可以跟踪系统中的最旧活动事务,并使用此信息来遍历数据结构,所述数据结构包含代表已完成(例如,已提交或已中止)事务的数据锁信息(即,锁管理器),以标识有资格释放的数据锁。事务管理系统还执行继承协议以使得数据锁能够被事务从另一非重叠事务继承或获取。

在实施例中,如果处理逻辑确定全局最小视图序列号(当前最旧活动事务)大于正被移除的事务的事务开始标识符(这可由于线程调度而发生),则处理逻辑可不执行操作340(例如,处理逻辑不获取最小视图锁)。

在操作350,处理逻辑访问包含与已完成事务相关联的信息的第二组数据结构,以标识与已完成事务相关联的一组数据锁,每个已完成事务具有相较于与全局最旧活动事务相关联的事务开始标识符时满足条件的事务完成标识符。在实施例中,第二组数据结构(也称为“锁数据结构”,如参考图4和5详细示出和描述的)列出了过期或已完成的事务,这些事务持有有资格释放的一组数据锁。在实施例中,响应于确定由于从ATS中移除事务而改变的全局最小视图序列号,遍历第二组数据结构。在实施例中,如果全局最小视图序列号改变,则遍历第二组数据结构以潜在地腾出或释放锁组。

在实施例中,在第二组数据结构的锁数据结构中的每一个中列出的事务与事务完成标识符(例如,提交序列号)相关联。在实施例中,如果与在锁数据结构中列出的事务相关联的提交序列号低于全局最旧活动事务的视图序列号,则处理逻辑确定满足条件。在实施例中,满足条件指示在全局最旧活动事务开始之前提交(或中止)已完成事务,并且作为结果,两个事务不重叠,并且可以释放与已完成事务相关联的一组数据锁。在实施例中,锁组表示在事务执行期间由事务持有的所有锁的列表。当事务完成(中止或提交)时,锁集被放置或插入到第二组数据结构的锁数据结构中。在实施例中,可以通过提交序列号(最低到最高)对事务和锁数据结构的对应的锁组进行排序。

在实施例中,处理逻辑获取对应于第二组数据结构中的每一个的锁(即,数据结构锁或互斥体),以便访问这些数据结构中含有的信息,从而确定可哪些锁组可以被释放。在实施例中,第二组数据结构被布置成循环配置(如图4所示),使得处理逻辑可在第二组数据结构的任何锁数据结构处启动操作350,以改善与对应于相应锁数据结构的数据结构锁相关联的锁竞争。在实施例中,在操作350中,处理逻辑可以从第二组数据结构中的一个锁数据结构移动到另一锁数据结构(例如,以顺时针方式)并获取每一个的对应的数据结构锁以在操作350中执行对第二组数据结构的遍历。在实施例中,处理逻辑可搜索并遍历第二组数据结构的锁数据结构的一部分,如下文更详细地描述。

在操作360,处理逻辑释放一组数据锁。在实施例中,在操作350中标识的一组数据锁可由处理逻辑收集并在完成对第二组数据结构的遍历时释放。

图4示出示例性的一组400多个锁数据结构401至405(例如,上面结合图3描述的第二组数据结构),所述示例性的一组400多个锁数据结构401至405由事务管理系统126用来标识和释放与KVDB相关联的合格锁组。如图4所示,锁数据结构401至405可被布置成圆形配置,使得执行锁释放过程(例如,图5所示的方法500)的线程可通过开始于任何相应的锁数据结构并顺时针移动到下一锁数据结构(例如,从402移动到403)来启动对多个锁数据结构的遍历,如图4所示的箭头所示。在实施例中,为了访问相应的锁数据结构,线程获取对应的数据结构锁(例如,锁1由线程获取以访问锁数据结构1)。

一组锁数据结构400中的每个锁数据结构401至405包含标识已完成事务(例如,已提交或已中止的事务)的信息以及由每个事务持有的相关联的锁组信息。在实施例中,锁数据结构可以按照对应的提交序列号的次序(从最低到最高)列出已完成事务。例如,锁数据结构2的内容包含已完成事务(例如,T1、T2和T16)、对应的提交序列号,以及由每个事务持有的关联锁组的列表。如图所示,T1具有最低的提交序列号(00047),其后是T2(00063)和T16(00119)。

在实施例中,在访问相应的锁数据结构时,线程遍历事务列表(以最低提交序列号开始),并使用全局最旧活动事务(例如,如图3所标识的)来确定是否可以释放一组数据锁(例如,LS A、LS B和LS C)。在实施例中,线程将与全局最旧活动事务相关联的事务开始标识符(即,全局最小视图序列号)和与在锁数据结构中列出的事务相关联的提交序列号(例如,T1)进行比较,以确定是否满足条件。在实施例中,如果提交序列号低于全局最小视图序列号,则满足条件,指示在全局最旧活动事务开始之前提交已完成事务(例如,T1)。如果满足条件,则线程确定可以释放对应的锁组(例如LS A)。

在实施例中,线程可以不遍历锁数据结构中事务的整个列表。例如,一旦线程标识了不包含可被释放的锁组的锁数据结构,线程就可终止搜索。在另一实例中,线程可在标识不满足条件(例如,具有高于全局最小视图序列号的提交序列号)的事务时终止对特定锁数据结构的遍历。

在实施例中,每个锁数据结构与一个标记(例如,标记1、标记2、标记3、标记4…标记N)相关联。标记表示用于遍历此特定锁数据结构(例如,由另一线程进行的锁释放过程的先前迭代期间)的最后或最近使用的“全局最小视图序列号”。在实施例中,在遍历锁数据结构之前,线程可将当前全局最小视图序列(例如,线程计划用来遍历锁数据结构的最小视图序列号)与标记进行比较。在实施例中,如果标记值高于线程计划应用的最小视图序列号,则线程可以终止对一组锁数据结构400的遍历。在实施例中,具有比由线程持有的全局最小视图序列号高的值的标记值的锁数据结构指示先前已遍历此锁数据结构且已使用较新的最小视图序列号释放相关联的锁组。

例如,如果要由线程应用的全局最小视图序列号是00058并且用于锁数据结构2的对应标记(标记2)是00009,则线程访问锁数据结构以确定是否可以释放任何的锁组。在此实例中,在遍历锁数据结构2中的已完成事务的列表期间,线程将全局最小视图序列号(00058)与T1的提交序列号(00047)进行比较,并确定T1满足条件(例如,在全局最旧活动事务开始之前提交T1)。因此,线程继续释放LS A。继续此列表,线程将全局最小视图序列号(00058)与T2的提交序列号(00063)进行比较,并确定T2不满足条件,并终止对锁数据结构2的遍历。

在一个实例中,如果线程继续遍历一组锁数据结构并遇到标记值为00061的锁数据结构4,则线程可终止处理,因为已使用较高(例如,较新)的最小视图序列号遍历了锁数据结构4。

图5是根据本公开的一些实施例的管理一组锁数据结构以标识要释放的一组数据锁的示例性方法500的流程图。方法500可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件,集成电路等)、软件(例如,在处理装置上运行或执行的指令)或其组合。在一些实施例中,方法500可以由图1的主机系统120的事务管理系统126执行。尽管以特定的顺序或次序示出,但是除非另外指定,否则可以修改过程的次序。因此,所示出的实施例应仅被理解为实例,且所示出的过程可以不同次序执行,且某些过程可并行执行。另外,可在各种实施例中省略一或多个过程。因此,并非在每个实施例中都需要所有的过程。其它过程流程也是可能的。

在操作510,处理逻辑将具有事务开始标识符的活动事务标识为第一组数据结构的全局最旧活动事务。在实施例中,全局最旧活动事务(例如,具有全局最小视图序列号的事务)可由线程根据以上结合图2和3描述的过程来标识。在实施例中,第一组多个数据结构是指活动事务组,如图2所示。

在操作520,处理逻辑将第二组数据结构中的第一数据结构的第一标记值与事务开始标识符进行比较,以确定是否满足第一条件。在实施例中,第二组数据结构是指锁数据结构,如图4所示。如上所述,与第一数据结构相关联的标记值表示在另一线程的锁释放过程的先前迭代期间用于遍历第一数据结构的先前“全局最小视图序列号”。在实施例中,如果标记值小于全局最旧活动事务的事务开始标识符,则满足第一条件。如果满足第一条件,则方法500继续至操作530。

在操作530,处理逻辑访问第一数据结构,以标识与一或多个事务相关联的第一组数据锁,每个事务具有当与事务开始标识符相比较时满足第二条件的事务完成标识符。在实施例中,线程获取与第一数据结构相关联的锁以获得对锁数据结构的访问。在实施例中,线程将事务开始标识符(全局最小视图序列号)与第一数据结构中列出的事务的事务完成标识符(提交序列号)进行比较,并确定是否满足第二条件。如果事务完成标识符小于事务开始标识符,则满足第二条件。如果满足第二条件,则线程标识与已完成事务相关联的第一组数据锁并确定那些锁可被释放。在实施例中,处理逻辑更新第二组数据结构中的第一数据结构的标记值以反映或标识事务开始标识符。

在操作540,处理逻辑将第二组数据结构中的第二数据结构的第二标记值与事务开始标识符进行比较,以确定是否满足第一条件。在实施例中,当线程在多个锁数据结构之间沿顺时针方向移动时,第二数据结构是循环配置中的下一个锁数据结构,如图4所示。在实施例中,线程移动到数据结构的循环布置的第二数据结构(例如,以顺时针方式移动)并重复操作520的步骤和功能。

在操作550,处理逻辑访问第二数据结构,以标识与一或多个事务相关联的第二组数据锁,每个事务具有当与事务开始标识符相比较时满足第二条件的事务完成标识符。在实施例中,为了访问第二数据结构,线程获取经配置以使得能够访问第二数据结构的锁。注意,当线程在第二组数据结构(例如,图4的锁数据结构1到N)内的多个锁数据结构之间移动时,可以迭代地重复操作540和550。

在操作560,处理逻辑确定多个数据结构组中的另一数据结构的标记值不满足第二条件。在实施例中,如果与另一数据结构相关联的标记值高于全局最旧活动事务的事务开始标识符,则不满足第二条件。在这种情况下,线程使用较新的最小视图序列号作为锁释放过程的先前迭代的一部分来确定另一数据结构已经被另一线程遍历。在实施例中,如果不满足第一条件,则方法500进行至操作570。

在操作570,处理逻辑释放(在操作530中标识的)第一组数据锁和(在操作550中标识的)第二组数据锁。在实施例中,处理逻辑释放在对一组锁数据结构中的多个锁数据结构的遍历期间标识的所有锁组。

图6示出根据本公开的实施例的由事务管理系统执行的锁继承处理的实例。所示实例涉及图4的锁数据结构2。如图所示,线程可遍历锁数据结构2以标识具有升序的提交序列号(例如,分别为00047、00063和00119)的事务T1、T2和T16。这些事务与锁组相关联(T1与锁组A相关联,T2与锁组B相关联,T19与锁组C相关联),这些锁组包含由相应事务持有的锁。

在实施例中,事务管理系统执行锁继承过程以使事务能够从另一事务继承一或多个锁。在实施例中,示出了时间线,所述时间线示出锁结构2的T1。各个锁与成功获取锁的事务的提交序列号相关联。当事务Tx试图获取当前由另一事务(T1)持有的锁时,将Tx的视图序列号与T1的提交序列号进行比较。如果T1的提交序列号大于Tx的视图序列号(或者T1尚未提交),则检测到重叠,并且Tx不能继承来自T1的任何子组。在实施例中,如果T1的提交序列号小于Tx的视图序列号(即,在T1提交之后Tx开始),则Tx继承来自T1的任何子组。

如图6所示,在执行继承操作之前,T1持有锁K1、K6和K8并且具有提交序列号00047。事务Tx开始并获取视图序列号[00061],并在执行期间尝试获取锁K1、K6和K8。在实施例中,执行Tx的线程将T1的提交序列号(00047)与Tx的视图序列号(000061)进行比较。基于此比较,线程确定提交序列号T1(00047)小于视图序列号Tx(000061)。因此,线程确定Tx可从T1继承锁。执行继承操作,并且Tx从T1继承K1、K6和K8,如图6所示。

在实施例中,在继承操作之后,事务管理系统可以确定Tx中止。由于Tx继承了来自另一事务的锁,当Tx中止时,继承的锁被返回到从其继承锁的事务(T1)。在实施例中,标识继承的锁的源(例如,从其继承一或多个锁的事务)的指示相对于继承锁的任何子组的事务被跟踪。在图6所示的实例中,Tx存储标识T1的指示,因为Tx从T1继承了锁。如果Tx后来中止,则此指示被用来标识T1,并且继承的锁(K1、K6和K8)被返回到源事务T1。在实施例中,管理由Tx继承的任何锁,就好像那些锁已由Tx通过正常获取过程获取(例如,就好像那些锁不是从T1继承)。例如,如果Tx获取锁(例如,K7),则第二组数据结构(锁数据结构2)上的条目可以包含开始和结束序列号与Tx相关联的K1、K6、K7和K8。

图7示出计算机系统700的示例性机器,在所述示例性机器内可以执行用于使机器执行这里所讨论的任何一或多个方法的一组指令。例如,计算机系统700可以对应于主机系统(例如,图1的主机系统120),所述主机系统包含、耦合到或利用存储器子系统(例如,图1的主机系统110),或者可以用于执行控制器的操作(例如,执行操作系统以执行对应于图1的事务管理系统126的操作)。在备选实施方案中,机器可连接(例如联网)到LAN、内联网、外联网和/或因特网中的其它机器。机器可作为对等(或分布式)网络环境中的对等机器,或作为云计算基础设施或环境中的服务器或客户机,在客户机-服务器网络环境中作为服务器或客户机来操作。

机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web设备、服务器、网络路由器、交换机或网桥,或者能够执行指定此机器要采取的动作的一组指令(按顺序或其它)的任何机器。此外,虽然示出了单个机器,但是术语“机器”还应当被理解为包含单独地或共同地执行一组(或多组)指令以执行本文所讨论的任何一或多个方法的任何机器合集。

示例性计算机系统700包含处理装置702、主存储器704(例如,只读存储器(ROM)、闪存、诸如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)等的动态随机存取存储器(DRAM))、静态存储器706(例如,闪存、静态随机存取存储器(SRAM)等),以及数据存储装置718,它们经由总线730彼此通信。

处理装置702表示一或多个通用处理装置,例如微处理器、中央处理单元等。更具体地,处理装置可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器,或者实现其它指令集的处理器,或者实现指令集组合的处理器。处理装置702也可以是一或多个专用处理装置,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。处理装置702经配置以执行用于执行本文所论述的操作和步骤的指令726。计算机系统700还可以包含网络接口装置708以通过网络720进行通信。数据存储装置718可以包含机器可读存储介质724(也被称为计算机可读介质),在所述机器可读存储介质724上存储了呈现这里描述的任何一或多个方法或功能的一或多组指令或软件726。指令726还可以完全或至少部分地驻留在主存储器704内和/或处理装置702内,在所述指令726由计算机系统700执行期间,主存储器704和处理装置702也构成机器可读存储介质。机器可读存储介质724、数据存储装置718和/或主存储器704可以对应于图1的存储器子系统110。

在一个实施方案中,指令726包含实现对应于特定组件(例如图1的事务管理系统126)的功能的指令。虽然在示例性实施方案中示出机器可读存储介质724为单个介质,但是术语“机器可读存储介质”应当被理解为包含存储一或多组指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的高速缓存和服务器)。术语“机器可读存储介质”还应当被理解为包含能够存储用于由机器执行并且使得机器执行本公开的任何一或多个方法的的一组指令或对所述一组指令进行编码的任何介质。因此,术语“机器可读存储介质”应当被理解为包含但不限于固态存储器、光学介质和磁介质。

根据对计算机存储器内的数据位的操作的算法和符号表示,已经给出了前述详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用来最有效地向本领域的其它技术人员传达其工作实质的方式。这里的算法通常被认为是导致期望结果的自相容操作序列。这些操作是需要对物理量进行物理操纵的操作。通常,尽管不是必须的,这些量采取能够被存储、组合、比较和以其它方式操纵的电或磁信号的形式。主要出于共同使用的原因,将这些信号称为位、值、元素、符号、字符、项、数字等有时被证明是方便的。

然而,应当记住,所有这些和类似的术语要与适当的物理量相关联,并且仅仅是应用于这些量的方便的标签。除非特别说明,否则如从以上讨论显而易见的,应当理解,在整个说明书中,利用诸如“接收”或“服务”或“发布”等术语的讨论指的是计算机系统或类似电子计算装置的动作和过程,所述计算机系统或类似电子计算装置将表示为计算机系统的寄存器和存储器内的物理(电子)量的数据处理和转换成类似地表示为计算机系统存储器或寄存器或其它这种信息存储装置内的物理量的其它数据。

本公开还涉及一种用于执行这里的操作的设备。此设备可以为预期目的专门构造,或者它可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。此类计算机程序可以存储在计算机可读存储介质中,例如但不限于任何类型的盘,包含软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡,或者适合于存储电子指令的任何类型的介质,每个都耦合到计算机系统总线。

这里提出的算法和显示并不固有地与任何特定的计算机或其它设备相关。根据这里的教导,各种通用系统可以与程序一起使用,或者可以证明构造更专用的设备来执行方法是方便的。各种这些系统的结构将在下面的描述中阐明。另外,没有参照任何特定编程语言来描述本公开。将了解,可使用各种编程语言来实施如本文所描述的本发明的教示。

本发明可提供为计算机程序产品或软件,所述计算机程序产品或软件可包含其上存储有指令的机器可读介质,所述指令可用于编程计算机系统(或其它电子装置)以执行根据本公开的过程。机器可读介质包含用于以机器(例如计算机)可读形式存储信息的任何机制。例如,机器可读(例如,计算机可读)介质包含例如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光存储介质、闪存装置等的机器(例如,计算机)可读存储介质。

在前述说明书中,已参考本公开的特定示例性实施方案来描述本公开的实施方案。显然,在不脱离所附权利要求中阐述的本公开的实施方案的更宽精神和范围的情况下,可以对其进行各种修改。因此,说明书和附图被认为是说明性的而不是限制性的。

相关技术
  • 与键-值式数据库系统相关联的锁管理
  • 管理请求数据库系统中不存在的索引键的事务
技术分类

06120113084290