CN109871386A - 非易失性存储器中的多版本并发控制(mvcc) - Google Patents
非易失性存储器中的多版本并发控制(mvcc) Download PDFInfo
- Publication number
- CN109871386A CN109871386A CN201811009677.6A CN201811009677A CN109871386A CN 109871386 A CN109871386 A CN 109871386A CN 201811009677 A CN201811009677 A CN 201811009677A CN 109871386 A CN109871386 A CN 109871386A
- Authority
- CN
- China
- Prior art keywords
- affairs
- version
- write
- record
- sentence
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1474—Saving, restoring, recovering or retrying in transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0808—Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文公开了用于在非易失性存储器中执行多版本并发控制(MVCC)的实施例。实施例通过确定事件的发生来操作,其中在事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交。基于在事件之前存储在非易失性存储器中的提交值来识别一个或多个写入事务。选择所识别的未提交的写入事务中的特定一个写入事务。从多版本数据库中识别对应于未提交的所选未提交写入事务的记录的第一版本以及在事件之前提交的记录的早期版本。设置记录的可见性以指示记录的早期版本是可见的,并且记录的第一版本是不可见的。
Description
相关申请的交叉引用
本申请要求Oukid等人于2017年12月4日提交的名称为“Multi-VersioningConcurrency Control(MVCC)In Non-Volatile Memory”的美国临时专利申请No.62/594,270的权益,并且涉及Oukid等人于2017年6月13日提交的名称为“Big Block Allocationof Persistent Main Memory”的共同未决的美国专利申请No.15/621,640号、Oukid等人于2017年6月13日提交的名称为“Defragmentation of Persistent Main Memory”的美国专利申请No.15/621,736号以及Booss等人提交的名称为“Hybrid SCM_DRAM TransactionalStorage Engine for Fast Recovery”的美国专利申请No.2015/0355981。所有这些相关文献通过引用整体并入本文。
技术领域
本发明涉及非易失性存储器中的多版本并发控制(MVCC)。
背景技术
通常,存储级存储器(storage class memory,SCM)将动态随机存取存储器(dynamic random access memory,DRAM)的低延迟和字节可寻址性与传统存储介质的非易失性、区域密度(area density)和经济特性相结合。此外,考虑到SCM技术的字节可寻址性和低延迟,中央处理单元(central processing unit,CPU)可以访问存储在SCM中的数据而无需缓冲DRAM中的数据。因此,SCM技术模糊了计算机存储器和传统存储介质之间的区别。但是,SCM可以与DRAM结合使用。
发明内容
本发明提供一种计算机实施的方法,包括:确定事件发生,其中在所述事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交,并且其中所述多版本数据库被存储在非易失性存储器中;基于在所述事件之前存储在非易失性存储器中的提交值来识别所述一个或多个写入事务,其中所述一个或多个写入事务中的每一个写入事务包括提交值;选择所识别的未提交的写入事务中的特定一个写入事务;从所述多版本数据库中识别对应于所选择的未提交的写入事务的记录的第一版本,其中所述第一版本未提交;识别在所述事件之前提交的所述记录的早期版本;设置记录的可见性,以指示所述记录的早期版本可见并且所述记录的第一版本不可见。
本发明提供一种系统,包括:存储器和至少一个处理器,处理器耦合到所述存储器并被配置为:确定事件发生,其中在所述事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交,并且其中所述多版本数据库被存储在非易失性存储器中;基于在所述事件之前存储在非易失性存储器中的提交值来识别所述一个或多个写入事务,其中所述一个或多个写入事务中的每一个写入事务包括提交值;选择所识别的未提交的写入事务中的特定一个写入事务;从所述多版本数据库中识别对应于所选择的未提交的写入事务的记录的第一版本,其中所述第一版本未提交;识别在所述事件之前提交的所述记录的早期版本;设置所述记录的可见性,以指示所述记录的早期版本可见并且所述记录的第一版本不可见。
本发明提供一种非暂时性计算机可读设备,其上存储有指令,当由至少一个计算设备执行时,使得至少一个计算设备执行以下操作,包括:确定事件发生,其中在所述事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交,并且其中所述多版本数据库被存储在非易失性存储器中;基于在所述事件之前存储在非易失性存储器中的提交值来识别一个或多个写入事务,其中所述一个或多个写入事务中的每一个写入事务包括提交值;选择所识别的未提交的写入事务中的特定一个写入事务;从所述多版本数据库中识别对应于所选择的未提交的写入事务的记录的第一版本,其中所述第一版本未提交;识别在所述事件之前提交的所述记录的早期版本;设置所述记录的可见性,以指示所述记录的早期版本可见并且所述记录的第一版本不可见。
附图说明
附图结合于此并形成说明书的一部分。
图1是示出根据一些实施例的非易失性存储器中的多版本并发控制(MVCC)的示例的框图。
图2是根据示例实施例的用于执行与多版本并发控制(MVCC)系统相关联的恢复过程的流程图。
图3是用于实施各种实施例的示例计算机系统。
图4是根据另一示例实施例的用于执行与多版本并发控制(MVCC)系统相关联的恢复过程的流程图。
在附图中,相同的附图标记通常表示相同或相似的元件。另外,通常附图标记最左边的数字标识首次出现该附图标记的附图。
具体实施方式
本文提供了用于非易失性存储器中的多版本并发控制(MVCC)的系统、方法和/或计算机程序产品实施例,和/或其组合和子组合。
图1是示出根据一些实施例的非易失性存储器中的多版本并发控制(MVCC)的示例的框图100。事务存储系统(transactional storage system,TSS)102可以管理针对多版本数据库(multi-version database,MDB)104执行的事务106。
当事务对数据库进行改变时,可以在将改变写入可以存储或存留数据的磁盘之前,首先将改变写入预写日志(以下称为“日志”)。日志通常包括足以在事务失败的情况下撤消事务的信息。日志还可以包括重做或重放信息,这些信息在数据存留到磁盘之前发生崩溃时能够重放事务。日志本身可以存储在磁盘存储器上。
日志通常包含数据库数据的多个副本。例如,如果事务更新了行,则日志可能既包括更新前所有行数据的副本,也包括更新后所有行数据的副本,即使更新仅更改了单个属性。这样,日志可以包括消耗额外存储器的冗余信息,以及写入磁盘存储器的额外计算周期。
在一些实施例中,TSS 102访问非易失性存储器(non-volatile memory,NVM)108,而不是将某些数据(例如,日期或日志信息)写入磁盘存储器。NVM 108可以包括可由处理器或其他计算设备直接访问的字节可寻址存储器。在实施例中,NVM 108可以包括存储级存储器(SCM),其将动态随机存取存储器(DRAM)的低延迟和字节可寻址性与传统存储介质的非易失性、区域密度和经济特性相结合。如本文关于一些实施例所使用的,存储级存储器(SCM)、字节可寻址、非易失性存储器(NVM)和NVRAM(随机存取存储器)可互换使用。
在通用磁盘存储系统中,数据可能只能由处理器从DRAM访问。例如,首先将要写入磁盘的数据写入DRAM。然后可以将来自DRAM的数据写入或以其他方式存留在磁盘上。类似地,从磁盘存储器读取的数据首先被传送到DRAM,然后可以由处理器访问。
相反,NVM 108不使用DRAM作为中介。易失性存储器(volatile memory,VM)110和NVM 108都可以是字节可寻址的(以字节粒度),而不是页面(块)可寻址的(以页面粒度)(与一般磁盘存储一样),因此可以直接访问而无需首先将数据移入/移出DRAM。然而,与断电后可能丢失数据的VM 110不同,NVM 108可以在断电周期、崩溃或系统重启期间保存其状态。
在实施例中,NVM 108虽然可能比磁盘存储更快或者需要更少的计算周期、时间或其他资源来进行读/写访问,但是可能比DRAM或其他VM 110访问更慢。例如,虽然DRAM访问可能比磁盘访问快一百万倍或更便宜,但访问VM 110可能比访问NVM 108快五倍(或消耗少5倍的计算周期或处理资源)。
代替将重复事务信息写入可能浪费存储器和计算周期的日志,TSS 102可以利用直接访问NVM 108和VM 110,并且将它们彼此结合使用以存储信息而不浪费保存日志所需的资源。TSS 102可以利用NVM 110存储在普通磁盘存储上的效率来管理关于或针对MDB104的数据进行操作的事务106。
MDB 104可以是存储或保存多个版本的数据的多版本数据库。MDB 104可以基于数据和事务的时间戳使不同的事务106能够访问和/或修改不同版本的数据。
在实施例中,可以不覆盖或删除MDB 104中的数据。例如,当向MDB 104添加新数据时(例如,通过事务106),可以插入新行116。当从MDB 104删除数据时,可以更新删除时间戳(DTS 112)以指示该行不再可见(MDB 104可以将原始“所删除的”数据保存到垃圾收集时间)。当要更新MDB 104中的数据时,可以更新行的原始版本的DTS 112以指示原始行数据不再可见,可以插入具有更新后数据的新行,并且可以提供指示(诸如指针122)以指示所删除的行和新添加的行是相同记录或数据的不同版本。
MDB 104可以将关于记录或行116的信息保存为行元数据114。在实施例中,行元数据114可以包括时间戳信息,诸如创建或提交时间戳(CTS 120)、删除时间戳(DTS 112)和读取时间戳(RTS)134。
由于MDB 104的多版本化操作,由事务106执行的删除操作本质上可以是逻辑的,使得所删除的行的版本可以保留在存储器中或作为MDB 104的一部分,直到删除的行被垃圾收集。如果在崩溃或其他故障的情况下需要撤消或回滚事务106,则保存原始(所删除的)行数据使得能够访问所需的信息。如上所述,可以通过更新DTS 112来执行删除操作,以指示何时该行对事务106不再可见。然后,例如,在DTS 112之后开始(例如,具有开始时间戳(STS)118)的任何事务106可能无法查看或访问删除的数据。
CTS 120可以指示行(或行的版本)何时创建、提交或以其他方式对事务106可见。例如,在行116的CTS 120之前具有STS 118的事务106将不能够查看或访问行数据(因为在事务开始时没有创建行116)。在实施例中,记录或行116可以包括CTS 120和指示该行何时可见的DTS 112。TSS 102可以使用CTS 120、DTS 112和STS 118来确定哪些数据或记录116在其执行或操作期间对哪些事务106可见。
在实施例中,DTS 112可以用于指示行的当前版本是否是记录或行的最新版本。例如,DTS 112可以设置为无穷大值、负数或某个其他指定值,这些值可以指示它是行、列或记录的最新版本(如果存在行的多个版本)。如果行被事务106删除,则DTS 112可以指示关于何时发生删除或提交的时间戳。本文所使用的记录、行、元组和列都可以互换使用。
在实施例中,MDB 104作为仅附加存储操作,其中可以通过附加或添加完整行元组或行值来更新行,即使该行仅一个属性被更新。例如,事务106可以创建或附加行的新副本(行的新版本)到MDB 104的表,更新行的新版本的属性,并将新版本链接或指向以前版本的记录或元组。行的新版本或最新版本可以是行的版本链的头部或尾部。在实施例中,TSS或MDB 104可以仅使用附加将属性连续地存储在存储器(例如,NVM 108)中,这可以最小化CPU高速缓存丢失(cache miss)并提高性能。
删除操作可以是完全停止删除,也可以是更新操作的一部分。在完全停止删除行的情况下,可以将DTS 112更新为删除该行的事务106的STS 118或CTS 120A,并且可以完成删除。在实施例中,STS 118可以指示事务106何时开始,并且CTS 120A可以指示事务被提交或保存的时间。
在更新操作的情况下,数据的新版本可以包括与记录(被删除)的先前版本的DTS112相同的CTS 120。在实施例中,数据的旧版本和/或新版本可以包括指示它们相关的指针122。
在实施例中,TSS 102可以使用CTS 120和DTS 112和/或反向索引来跟踪行的不同版本。在实施例中,反向索引可以使用行识别符作为对元组的引用。根据反向索引,可以确定哪些行是彼此不同的版本。
MDB 104可以保存单个元组或数据库记录的多个版本,并且每个版本可以表示特定时间间隔中的元组的状态。在图1所示的示例中,MDB 104包括行1的2个版本、行2的单个版本和行3的三个版本。虽然在所示的示例中指示了数据行,但是在其他实施例中,列或其他记录可以用于存储或表示除行之外或代替行的数据。在实施例中,此处所使用的术语“行”可以指逻辑行或元组。
只要MDB 104保存元组或记录的旧版本,数据或数据库的状态就可以在先前的时间段期间确定(并在必要时回滚)。如上所述,MDB 104可以保存元数据,其指示数据在各个时间段的状态(如CTS 120和DTS 112所示)。因此,在任何时间点,TSS 102可以基于STS 118确定哪些数据(版本)对特定事务106可见。
因而,MDB 104可以使得读取查询能够读取数据的一致版本,而不管数据是否已被更新。例如,当接收或开始事务106时,TSS 102可以创建(或重用先前创建的)事务对象124,事务对象124包括关于事务106的信息或元数据。事务对象124信息可以用于确定事务106在不同时间点的状态,特别是在一个或多个正在进行的或空中事务(inflight transaction)未完成这种崩溃或失败的情况下。
事务对象124可以包括读取集126。读取集126可以指示事务106访问或读取数据的哪些行(版本)。读取集126的每行或每个记录可以包括小于或等于事务106的STS 118的CTS120。然后,例如,在事务106的生命期内,事务可以在该事务仍在进行时访问相同的数据(即使它随后被后来的事务106删除)。
在实施例中,TSS 102可以包括全局计数器128。全局计数器128可以跟踪或指示将用于本文描述的行/记录和事务的各种时间戳的值。在实施例中,当接收或开始事务106时,可以将其STS 118设置为等于全局计数器128的当前值(或者可以递增全局计数器128的时间并将其设置为STS 118)。
在实施例中,全局计数器128可以是针对开始和/或提交的每个写入事务递增的逻辑时间。例如,第一写入事务可以在时间戳1处发生,而第二后续写入事务可以分配时间戳2。在另一个实施例中,时间戳可以涉及时钟时间而不是整数或数字计数。在实施例中,时间戳可以是8个字节长并且包括由全局计数器128(当前时间)生成的无符号整数,其随着每个提交或新写入的事务自动递增。
当事务106开始时,可以为其分配唯一的TXID 130和等于来自全局计数器128的当前逻辑时间的STS 118。在实施例中,分配给特定事务的时间戳可以用作该事务106的事务识别符(TXID)130。在另一个实施例中,不同的值可以被用于TXID 130和STS 118。例如,TXID 130可以包括在1到2^63范围内的值,而时间戳可以在2^63-2^64的范围内。在其他实施例中,可以使用不同的值。
如下面更详细讨论的,如果将CTS 120或DTS 112设置为特定事务106的TXID 130,则TXID 103A值可以向尝试访问数据的其他事务106指示数据被锁定(并且可能被所指示的事务修改)。然后,例如,请求事务可以从锁定事务请求数据的可见性状态。
当读取行时,如果该行未被另一事务锁定,则事务106可能能够读取行的最新版本,并且该事务的STS 118落在该行的CTS 120和DTS 112之间。在实施例中,TSS 102可以在遇到锁定的元组时中止事务。如果满足这些条件,则如果现有RTS 134低于新事务的TXID130,则事务可以将行的读时间戳(RTS)134设置为其TXID 130。RTS 134可以指示访问特定行116的最旧的事务106。如果不满足这些条件,则事务将读取该行的旧版本,并且不更新该行的RTS 134。在另一实施例中,TSS 102可以不使用或保存RTS 134。
TSS 102使得事务106能够在不获取锁的情况下读取行116。TSS 102保存读取集126,其指示查询或事务106在读取或开始时间118读取了哪些行的哪些版本。在实施例中,在提交时(当写入集132的数据将要写入或保存到NVM 108时),读取集126可以被重新读取并与原始读取集相交。如果没有数据发生改变,则事务进入写入阶段,该阶段开始于获取提交时间戳(CTS 120A),然后更新修改的行或元组的元数据(将创建元组的CTS 120和删除元组的DTS 112设置为CTS 120A)。下面将更详细地描述这个过程。否则,如果数据在STS 118和CTS 120A之间改变,则该事务可能中止。
空中事务106可以是正在进行的事务,其可能已经访问和修改了一些数据,但尚未完成。如上所述,如果系统崩溃或出现其他故障,磁盘系统可以使用预写日志来撤消可能尚未完成的空中事务。TSS 102可以使用由MDB 104存储或保存的先前版本的数据来确定否则要写入日志的撤销信息(因此不需要使用计算资源来写入和保存日志),而不是保存预写日志。
在实施例中,通过避免将重复信息写入日志,TSS 102使用较少的存储器资源(否则将由冗余日志信息消耗)并且通过避免执行日志写入事务来提高吞吐量。结果可能是更快的系统,其比日志写入系统消耗更少的计算机资源。在实施例中,TSS 102可以创建或使用日志来将事务数据运送或提供给另一系统,该系统可以用于复制或其他目的。例如,复制可能需要将日志从第一系统运送到第二系统。
TSS 102可以从MDB 104所存储的行的先前版本和事务对象124的信息(可以存储在NVM 108中)中者获得“日志信息”。如上所述,事务对象124可以包括读取集126,其包括由事务106读取的识别符或行。事务对象124还可以包括写入集132,其标识由事务106插入、更新(删除和插入)或删除的行。在实施例中,读取集126和写入集132可以包括指示哪些行被访问或修改的行识别符或引用的阵列(不包括通常要写入日志的行的所有原始信息)。
TSS 102可以将事务对象124的一部分存储在VM 110中,并且在NVM 108中事务对象124的另一部分是可以存留的,而不是像在通用基于磁盘的存储系统中那样,将事务对象124存储在DRAM或其他易失性存储器中,这可能会在电源周期中丢失,并在磁盘上保存单独的日志。在实施例中,读取集126可以存储在VM 110中,并且写入集132可以存储在NVM 108中。在一些实施例中,一部分(诸如读取集126)可以存储在NVM 108和VM 110两者中。
写入集132可以包括由事务106添加、更新或删除的那些行116。在实施例中,每次在写入集132中存在新条目(例如,在MDB 104中插入或删除数据)时,条目或写入集132可以存留在NVM 108中。然后,例如,TSS 102可以使用来自NVM 108的存留的写入集132与由MDB104存储的版本信息的组合来考虑存储在通用基于磁盘的存储系统的日志中的信息。使用事务对象124的存留的信息(在NVM 108中),在崩溃、断电或其他系统故障的情况下,TSS102可以识别并回滚未完成的空中事务106。例如,写入集132和其他存留的事务对象124信息可以被用于识别已改变的空中事务106的行,并且可从MDB 104的存储信息中确定那些行的先前版本。
在实施例中,事务对象124可以包括提交标志136,其指示事务是否已被提交。提交标志136可以存储在NVM 108中。然后,例如,在系统崩溃并重启或重新开始时,TSS 102可以识别未设置提交标志136的任何事务106,以识别要回滚的空中事务。在实施例中,写入集132可以包括两个子集,诸如引用由事务创建的行的创建子集以及引用由事务删除的行的删除子集。
在实施例中,存储在VM 110中的事务对象124的瞬态部分可以包括回滚未完成的事务106所不需要的信息。可以存储在VM 110中的示例事务对象124信息可以包括状态变量,该状态变量可以指示事务是否是无效的、活动的、提交的或中止的,TXID 130、STS 118、扫描集、引用事务在其生命周期中读取的可见行的读取集126,不包括创建和删除集中引用的行、由使用相同事务对象的先前事务(在事务对象124重用的情况下)注册的垃圾条目列表,以及指示事务由于与另一事务冲突而必须中止的中止标志。在实施例中,扫描集可以包含用于搜索数据的谓词(predicate)。例如,可以在提交时使用扫描集来重做所有搜索并构造与旧搜索集相交的新读取集。
在其他实施例中,该信息中的一些或全部可以存留在NVM 108中,也可以存储在VM110和NVM 108两者中。例如,CTS 120A可以保存在NVM 108中的事务对象124的持久部分和VM 110中的事务对象124的瞬态部分两者中。
在实施例中,可以将事务对象124的任何信息存储在NVM 108中,这些信息可能是提供持久性和/或原子性(操作或事务操作完成或根本不操作)所需要的或以其他方式使用的。例如,如果事务106部分地执行并且MDB 104或另一相关系统或计算设备崩溃,然后回滚或改变或撤消,则可以使用来自NVM 108的信息。如果需要信息或信息要用于提供这种持久性或原子性,则将其存储在NVM 108中,并且其他信息可以存储在VM 110中。
算法1
根据实施例,算法1提供TSS 102如何确定特定行116对于特定事务106是否可见的示例操作。TSS 102可以从全局计数器128读取当前时间,全局计数器128可以被设置为事务118的STS 118。基于STS 118,TSS 102可以确定哪些行对事务106可见。如果行CTS 120大于或在STS 118之后,或者如果行DTS 112在STS 118之前,则该行对于事务106不可见。然而,如果STS 118落在CTS 120和DTS 112内,则该行可以对事务106可见。
在实施例中,CTS 120和DTS 112的值可以是时间戳值或事务识别符(TXID)130A,事务识别符(TXID)130A与访问行或者数据的特定事务106的TXID 130相对应。如果CTS 120或DTS 112是TXID 130A值,那么可以说明该行被所识别的事务锁定。
在实施例中,当行被另一事务锁定时,TSS 102可以查询该事务以确定数据的状态并确定该行是否可见。例如,如果事务尚未提交,并且这是新插入的行,则可能无法读取或访问该行。或者,例如,如果事务已提交,则可以读取该行。
算法2
根据实施例,算法2是可用于执行算法1的示例函数,示出了TSS 102如何检查被另一事务锁定的行的行可见性。TSS 102可以查询锁定事务以确定行状态。
在实施例中,TSS 102可以保存最小STS 118A,这对于垃圾收集的目的是可能有益的。例如,TSS 102可以识别最早运行的事务的STS 118(最小STS 118A),并且如果该事务的STS 118(最小STS 118A)大于特定或所识别的行的DTS 112,则该行可以被垃圾收集。例如,如果最小STS 118A是5,则DTS 112为4或更低的任何行都可以被垃圾收集。然后,垃圾收集行的存储器可以被重新使用或可用于新数据或信息。
在实施例中,无论MDB 104是列存储还是行存储数据库,TSS 102都可以操作。可以以类似的方式操作表的值的逻辑表示。例如,特定行或列的值可以连续地存储在存储器中。在实施例中,当TSS 102检索特定数量或谓词实例的记录ID时,它抽象出数据如何被组织或存储在存储器中。
算法3
算法3是根据实施例的TSS 102如何将新行插入或附加到MDB 104的示例。例如,新行可以附加我们想要插入的值。TSS 102可能不会存留数据,因为如果发生崩溃,则该行直到第4行才可见(CTS 120或DTS 112可能仍然被设置为0)。在实施例中,添加到MDB 104的新行可以包括最初都被设置为零的CTS 120和DTS 112。直到更新CTS 120和/或DTS 112,这些改变才可能有效(可见)(如第6-7行所示)。在第6行中,CTS 120可以被设置为TXID 130A,因此该行被锁定。第7行中的DTS 112可以设置为无穷大,这意味着该行是可见的。
然而,如第5行所示,在更新CTS 120或DTS 112之前,TSS 102可首先更新NVM 108中的写入集132的创建集。在实施例中,可以将表识别符和行识别符或其他(多个)值添加到创建集。其他实施例可以包括其他引用以指示正在附加、创建或添加哪个行或记录。写入集132可以简单地包括对所添加的记录的引用,而不是其副本。在更新CTS 120或DTS 112之前执行更新写入集132的创建集。
在提交事务之前,写入集132的新附加记录可以存留在NVM 108中(在更新特定行或记录116的CTS 120或DTS 112之前)。当提交事务106时,可以在提交时间将CTS 120值从TXID 130A更新为全局计数器128的提交时间戳,并且设置提交标志136。在实施例中,当设置提交标志136时,可以递增全局计数器128并将其用作事务106的提交时间戳120A,其可以用作由事务106更新的(多个)行的CTS 120或DTS 112。
算法4
根据实施例,算法4是当事务删除行时可由TSS 102执行的删除功能的示例。在上面的算法中,TSS可以进行查找以确定哪些行是可见的,并且满足直到第7行的谓词。在9-13行中,TSS 102可以在进行任何附加修改之前,首先将对该行的条目或引用附加到写入集132的删除集,写入集132在NVM 108中是存留的。然后,例如,在已经更新并存留写入集132之后,TSS 102可以将TXID 130A写入DTS 112,DTS 112可以发出锁定记录的信号。然后,任何后续事务将知道该行被锁定了,因为DTS 112是TXID 130A而不是时间戳。
算法5
根据实施例,算法5是可由TSS 102执行的更新操作的示例。如上所述,更新操作可以包括删除行操作,然后是插入行操作(其中删除的行的DTS 112和插入的行的CTS 120是相同的)。9-13行示出了执行删除操作的示例(如上面关于算法4所述)。一旦删除完成,就可以创建该行的新版本(如16-20行所示,并且如上面关于算法3所述)。在另一个实施例中,可以在更新操作中的删除操作之前执行插入操作。
算法6
根据实施例,算法6是可以由TSS 102执行的事务提交的示例。在提交期间,TSS102可以检查并查看要提交的事务106与另一事务之间是否已经发生冲突。例如,在8-11行中,来自读取集126的行可以被重新读取,并且可以与先前的读取值相交或比较,以确定数据是否在中介中被更新(由另一事务)。如果数据尚未更新(在与另一事务没有冲突的情况下),则TSS 102可以通过递增全局时间从全局计数器128获取CTS 120A(线7),该全局时间可以为CTS 120A返回新的时间值。
如果检测到冲突,则可以中止事务106。在实施例中,可以设置事务对象124的中止标志。在确定是提交还是中止事务106时,TSS 102可以确认当事务在STS 118开始时读取的数据与新获取的CTS 120A可见的数据相同。TSS 102确保由事务使用的输入数据未被该事务或另一事务改变。如果读取集126的任何读取行被改变,则中止事务。在实施例中,不同读取集的唯一例外在行13-17中示出,其中事务本身插入、删除或修改数据。
如果未检测到冲突,则可以将事务对象124状态更新为已提交。在行18-21中,CTS120被更新为CTS 120A并且发出存储器屏障以确保以此顺序进行写入,设置提交标志136,并且提交标志136和CTS 120A两者可以存留在NVM 108中。提交标志136和CTS 120A可以使得TSS 102能够撤消由在故障时尚未完成的空中事务所做出的改变。
一旦数据被存留到NVM 108,即使存在崩溃,TSS也可以完成或做完提交协议,而不是重新运行事务。为了完成提交协议,TSS 102可以读取删除集中具有TXID 130A值的行的DTS 112,并将DTS 112的值设置为CTS 120A。TSS 102可以与写入集132的创建集中的行执行类似的操作,除了每行的CTS 120从TXID 130A更新到CTS 120A。当行的时间戳从TXID130A更新到CTS 120A时,则不再需要查询关于行的可见性的事务。
在行28-29中,数据被明确地从NVM 108的易失性CPU高速缓存部分刷新到非易失性部分。在实施例中,刷新的数据可以包括写入集132中插入/删除的行的CTS 120和/或DTS112;在获取CTS 120A(并使用它来更新CTS 102或DTS 112)之前,可以将附加的记录存留到NVM 102。在完成事务之前,保持这些改变。删除的行是要被垃圾收集的候选行。在实施例中,TSS 102可以确定这些行中的哪些可以立即被垃圾收集,并且可以释放该空间供另一事务或数据使用。如果删除的行不可用于垃圾收集,则该行的版本仍然是MDB 104的一部分。通过将事务对象124中的状态设置为无效或完成,可以完成事务。
算法7
根据实施例,算法7是可以由TSS 102执行的示例中止操作。如上所述,当发生冲突时(例如,在执行事务时改变数据的读取集126),可以中止事务。TSS 102可以识别删除集并解锁被锁定的行用于删除。例如,在5-7行中,DTS 112被设置为TXID 130A的行可以被重置为无穷大,从而指示行再次可见。
对于由未提交的中止事务添加的创建集的撤消,行是不可见的(CTS 120被设置为TXID 130A)。因而,TSS 102可以将那些行的CTS 120的值更新为0,并将相应的DTS 112值设置为最小STS 118A或低于最小STS 118A,使得行立即可用于垃圾收集,从而节省存储器和资源,使他们立即可用于更多数据。在12-13行中,可以刷新改变。
算法8A
根据实施例,算法8A是可以由TSS 102执行的示例事务恢复功能。算法8A可以使得TSS 102能够处理和恢复在系统故障、断电或重启期间发生的空中事务。
在系统重启或重新开始时,TSS 102可以确定没有为特定事务设置提交标志136。在2-3行中,TSS 102可以从NVM 108检索写入集132(创建和删除集)。对于删除行的DTS 112和所创建行的CTS 120,确定值是被设置为时间戳还是事务ID 130A。
如上所述,在实施例中,TSS 102可以通过将整数域分成两部分来区分时间戳和TXID 130A。例如,1到2^63的值可以是事务识别符,并且从2^63-2^64的值可以是时间戳值。然后可以确定CTS 120和DTS 112值是否小于或大于中间值以确定该值是时间戳还是TXID130A。这可以针对写入集132的每一行执行。在另一个实施例中,如果CTS 120和DTS 112的值等于可以在NVM 108中存留的TXID 130,则可以检查它们的值。
如果DTS 112小于最小时间戳,则它不是时间戳值,而是TXID 130A。这表示在崩溃期间该行被该事务锁定。如果该值不是时间戳,则TSS 102可以通过检查提交标志136来确定是否提交事务。如果未提交事务,则可以中止并回滚。
在实施例中,如果提交了事务,则TSS 102可以前滚/完成提交,并且事务可以在那里结束或完成。或者例如,如果未提交事务,则TSS 102可以(1)在写入集132,CTS 120和提交标志136被存留的情况下回滚事务;或(2)回滚在失败时执行的语句,并允许用户决定他/她是想继续事务还是中止事务(语句或事务)。
在实施例中,当语句ID 140被存储为读取集126和写入集132两者的一部分时,可以发生回滚语句。这些集126和132两者以及对应的语句ID 140都可以作为事务对象124的一部分存留到NVM 108。语句回滚是可能不包括未存储语句ID 140的其他实施例的附加功能。
算法8B
根据实施例,算法8B可以是由TSS 102执行的一般恢复功能。线6示出TSS 102可以检查提交标志136值是否等于真(true),在这种情况下,可以利用时间戳值CTS 120A来执行算法8A。在9-10行中,如果提交标志136被设置为假(false),则使用无穷大时间戳调用恢复事务(算法8A),该时间戳可以被用于替换TXID 130A值。在实施例中,如果CTS 120被设置为无穷大,则没有事务可以看到该行。
根据提供的时间戳(CTS 120A或无穷大),算法8A将分别继续事务或回滚。一旦提交标志136被设置为真,其他事务可以查询特定事务以查看该值是否可见,并基于此在数据被存留或更新之前做出其他决定,即使事务没有完成持续更新时间戳的提交的最后部分。一旦事务对象124的状态被改为提交,TSS 102可以确保提交的值被存留。在实施例中,前滚提交阶段可以确保保存这种一致性和数据完整性。
TSS 102可以读取删除集中的行的DTS 112并测试该值是时间戳(CTS 120A)还是TXID 130A。如果该值是TXID 130A,则如果正在执行前滚则将该值更新为CTS 120A。如果正在执行后滚,则可以将DTS 112被设置为无穷大。虽然删除操作仅更新DTS 112,但创建操作更新特定行的CTS 120和DTS 112两者。如果提交了事务,则可以将DTS 112设置为无穷大(用于可见),否则如果中止和回滚,则可以将DTS 112设置为最小STS 118A或更低以用于垃圾收集。
通常,当数据库崩溃时,在该时间内运行的任何事务都将中止,并且正在执行的任何空中事务都将回滚并中止。TSS 102使得这些空中事务能够继续,并且使得对未完成的事务(事务具有多个语句)内的语句执行撤消。在实施例中,可以向管理员或其他用户提供继续在系统故障或回滚期间运行的事务的选项。
在实施例中,为了启用语句前滚操作,事务对象124可以包括语句识别符140。如上所述,写入集132可以包括对特定行的表ID和行ID的引用,但是这可能不识别正在执行的语句。这样,TSS 102可以跟踪或保存写入集132中的每个行引用的语句ID 140。
例如,事务106可以包括作为事务的一部分执行的多个语句或动作。TSS 102可以包括为每个语句分配识别符的语句计数器(其可以是每个事务106的专用计数器)。例如,第一语句可以是语句1,第二语句可以是语句2等。然后,例如,TSS 102可以确定事务106的哪些语句修改了哪些行。通过保存此附加信息,管理员或用户可以选择中止事务,或保留已完成的语句并继续事务。
在实施例中,事务对象124可以完整地存留到NVM 108。例如,事务对象124的所有信息可以存留到NVM 108,而不仅仅是它的一部分。这种完全存留可能会产生额外的存留开销,但在出现故障的情况下可能会节省资源,因为可以执行前滚。在实施例中,事务对象124可以存储在NVM 108中,并且可以从VM 110引用事务对象124的一部分(其可以与NVM 108存留部分重复)。
图2是根据示例实施例的用于执行与多版本并发控制(MVCC)系统相关联的恢复过程的流程图。方法200可以由处理逻辑执行,处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理设备上执行的指令)或其组合。应当理解,可能不需要所有步骤来执行本文提供的公开内容。此外,本领域普通技术人员将理解的,一些步骤可以同时执行,或者以与图2中所示不同的顺序执行。将参考图1描述方法200。然而,方法200不限于示例实施例。
在210中,确定发生的事件,其中对事件之前未决的(pending)多版本数据库的一个或多个记录的一个或多个写入事务没有提交。例如,可能存在针对MDB 104的数据执行(并行)的多个事务106。当计算机系统崩溃时、断电或发生一些其他重启事件时,一个或多个事务106可以在进行中、空中或以其他方式不提交。
在220中,基于事件之前存储在非易失性存储器中的提交值来识别一个或多个写入事务。例如,在系统重启时,可以读取写入集132。每个事务106可以具有其自己的写入集132。写入集132可以存储在NVM 108中,并且可以识别在系统崩溃时哪些记录或元组正被写入或由事务修改。存储在NVM 108中的事务对象124可以包括提交标志136,提交标志136指示事务106是否将它的改变提交给记录。基于可以存储在NVM 108中的提交标志136,可以识别正在进行但未提交的事务106。
在230中,选择识别的未提交的写入事务中的特定一个。例如,可以选择识别的未提交事务106之一用于回滚。在实施例中,可以并行地(例如,由不同的处理器或计算线程)选择和处理多个未提交的事务。
在240中,从写入集中识别对应于选择的未提交的写入事务的记录的第一版本。例如,选择的事务可以对应于更新第1行的值。行1B可以对应于由未提交的事务106正在更新的第一版本的数据。
在250中,识别事件之前提交的记录的早期版本。例如,行1A可以是在崩溃或系统重新之前提交的记录的早期版本。
在260中,设置记录的可见性以指示记录的早期版本是可见的并且记录的第一版本是不可见的。例如,可以更新行1A和1B的DTS 112,使得行1A被指示为可见,并且行1B被指示为不可见。在实施例中,DTS 112可以被设置为小于或等于最小STS 118A,指示如果事务106正在回滚,则行1B立即可用于垃圾收集,因此先前正被消耗的资源可以立即可用于重用。在实施例中,无穷大的DTS 112值或另一个设计值可以指示行版本是该行的最新版本。
图3是用于实施各种实施例的示例计算机系统300。例如,可以使用一个或多个众所周知的计算机系统来实施各种实施例,诸如图3中所示的计算机系统300。计算机系统300可以是能够执行此处描述的功能的任何公知计算机。
计算机系统300包括一个或多个处理器(也称为中央处理单元或CPU),例如处理器304。处理器304连接到通信基础设施或总线306。
一个或多个处理器304可以各自是图形处理单元(graphics processing unit,GPU)。在实施例中,GPU是一种处理器,该处理器是被设计成处理数学密集型应用的专用电子电路。GPU可以具有对于大数据块的并行处理有效的并行结构,诸如计算机图形应用、图像、视频等常见的数学密集型数据。或者例如,一个或多个处理器可以是现场可编程门阵列(field-programmable gate array,FPGA),其可以在制造后由用户或设计者配置。
计算机系统300还包括(多个)用户输入/输出设备303,诸如监视器、键盘、指示设备(pointing device)等,其通过(多个)用户输入/输出接口302与通信基础设施306通信。
计算机系统300还包括主存储器或主要存储器308,诸如随机存取存储器(randomaccess memory,RAM)。主存储器308可以包括一个或多个级别的高速缓存。主存储器308中存储有控制逻辑(即,计算机软件)和/或数据。在实施例中,主存储器308可以包括易失性存储器307和非易失性存储器309两者。非易失性存储器309可以对应于本文描述的持久性存储器(persistent memory)110。易失性存储器307可以包括任何存储器或在计算机系统300的电源循环中会重置或不能存留的存储装置。
计算机系统300还可以包括一个或多个辅助存储设备或存储器310。辅助存储器310可以包括例如硬盘驱动器312和/或可移动存储设备或驱动器314。可移动存储驱动器314可以是软盘驱动器、磁带驱动器、光盘驱动器、光学存储设备、磁带备份设备和/或任何其他存储设备/驱动器。
可移动存储驱动器314可以与可移动存储单元318交互。可移动存储单元318包括计算机可用或可读存储设备,其上存储有计算机软件(控制逻辑)和/或数据。可移动存储单元318可以是软盘、磁带、光盘、DVD、光存储盘和/或任何其他计算机数据存储设备。可移动存储驱动器314以众所周知的方式从可移动存储单元318读取和/或向可移动存储单元318写入。
根据示例性实施例,辅助存储器310可以包括用于允许计算机程序和/或其他指令和/或数据被计算机系统300访问的其他装置、工具或其他方法。这样的装置、工具或其他方法可以包括例如可移动存储单元322和接口320。可移动存储单元322和接口320的示例可以包括程序盒(program cartridge)和盒接口(诸如在视频游戏设备中发现的)、可移动存储器芯片(诸如EPROM或PROM)和相关的插座、存储棒和USB端口、存储卡和相关的存储卡插槽、和/或任何其他可移动存储单元和相关接口。
计算机系统300还可以包括通信或网络接口324。通信接口324使得计算机系统300能够与远程设备、远程网络、远程实体等的任何组合进行通信和交互(由参考标号328单独地和共同地引用)。例如,通信接口324可以允许计算机系统300通过通信路径326与远程设备328通信,通信路径326可以是有线和/或无线的,并且可以包括LAN、WAN、互联网等的任何组合。控制逻辑和/或数据可以经由通信路径326发送到计算机系统300以及从计算机系统300发送。
在实施例中,有形设备或制品在本文也被称为计算机程序产品或程序存储设备,有形设备或制品包括有形计算机可用或可读介质,其上存储有控制逻辑(软件)。这包括但不限于计算机系统300、主存储器308、辅助存储器310和可移动存储单元318和322,以及体现前述任意组合的有形制品。当由一个或多个数据处理设备(诸如计算机系统300)执行时,这种控制逻辑使得这样的数据处理设备如本文所述进行操作。
基于本公开所包含的教导,相关领域的技术人员将清楚如何使用除图3所示之外的数据处理设备、计算机系统和/或计算机体系结构来制造和使用本公开的实施例。具体地,实施例可以使用除本文描述的那些之外的软件、硬件和/或操作系统实施方式来操作。
图4是根据另一示例实施例的用于执行与多版本并发控制(MVCC)系统相关联的恢复过程的流程图400。方法200可以由处理逻辑执行,处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理设备上执行的指令)或其组合。应当理解,执行本文所提供的公开内容并不一定需要所有的步骤。此外,本领域普通技术人员将理解,一些步骤可以同时执行,或者以与图4所示不同的顺序执行。方法400应参照图1来描述。然而,方法400不限于示例实施例。
元素410-440与上面参照图2所描述的元素210-240基本相似。
在450中,确定识别的事务包括多个语句。例如,事务106可以包括作为事务的一部分执行的多个不同的语句。在实施例中,每个语句可以具有其自己的语句ID 140。
在460中,接收关于是否回滚或前滚第一语句的指示。例如,TSS 102可以向管理员提供是否继续处理(前滚)或中止(和回滚)特定事务106的每个语句的选项。避免已经执行的语句再被不必要的重复执行,这样可以节省处理资源。
在470中,基于该指示执行识别的事务。例如,如果接收到回滚指示,则将数据的先前状态设置为可见(如上面参考图2所述)。或者,例如,如果接收到前滚指示,则执行可以在事务的最新语句完成执行的地方继续。
应当理解,具体实施部分而不是任何其他部分旨在用于解释权利要求。其他部分可以阐述由发明人构想的一个或多个但不是所有示例性实施例,因此,不旨在以任何方式限制本公开或所附权利要求。
虽然本公开描述了示例性领域和应用的示例性实施例,但是应该理解,本公开不限于此。在不背离本公开的范围和精神的前提下,其他实施例和对其的修改是可能的。例如,在不限制本段落的一般性的情况下,实施例不限于图中所示和/或本文所述的软件、硬件、固件和/或实体。此外,实施例(无论是否在本文明确描述)对除了本文描述的示例之外的领域和应用具有显著的实用性。
这里已经借助于示出特定功能及其关系的实施方式的功能构建块描述了实施例。为了便于描述,本文已经任意定义了这些功能构建块的边界。只要适当地执行指定的功能和关系(或其等同物),就可以定义替代边界。而且,替代实施例可以使用与本文描述的顺序不同的顺序来执行功能块、步骤、操作、方法等。
这里对“一个实施例”、“实施例”、“示例实施例”或类似短语的引用表明所描述的实施例可以包括特定特征、结构或特性,但是每个实施例不一定包括特定特征、结构或特征。而且,这些短语不一定指的是同一个实施例。此外,当结合实施例描述特定特征、结构或特性时,无论本文是否明确提到或描述,可在相关领域的技术人员的知识范围内将这些特征、结构或特性结合到其他实施例中。另外,可以使用“耦合”和“连接”以及它们的派生词这些表达来描述一些实施例。这些术语不一定是彼此的同义词。例如,可以使用术语“连接”和/或“耦合”来描述一些实施例,以指示两个或更多元素彼此直接物理接触或电接触。然而,术语“耦合”还可以表示两个或更多元素彼此不直接接触,但仍然彼此协作或交互。
本公开的广度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
Claims (20)
1.一种计算机实施的方法,包括:
确定事件发生,其中在所述事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交,并且其中所述多版本数据库存储在非易失性存储器中;
基于在所述事件之前存储在非易失性存储器中的提交值来识别所述一个或多个写入事务,其中所述一个或多个写入事务中的每一个写入事务包括提交值;
选择所识别的未提交的写入事务中的特定一个写入事务;
从所述多版本数据库中识别对应于所选择的未提交的写入事务的记录的第一版本,其中所述第一版本未提交;
识别在所述事件之前提交的所述记录的早期版本;和
设置记录的可见性,以指示所述记录的早期版本可见并且所述记录的第一版本不可见。
2.如权利要求1所述的方法,其中,所述可见性的设置包括:
设置对应于所述记录的早期版本的删除时间戳,以指示所述记录的早期版本是可见的,其中记录对事务的可见性基于删除时间戳。
3.如权利要求1所述的方法,其中,可所述见性的设置包括:
将对应于所述记录的第一版本的删除时间戳设置为低于垃圾收集阈值。
4.如权利要求3所述的方法,其中,所述垃圾收集阈值基于与最早的运行事务开始的时间相对应的最小开始时间戳。
5.如权利要求1所述的方法,其中,所述事件对应于计算机系统崩溃或重启。
6.如权利要求1所述的方法,其中,所述选择包括:
确定所识别的事务包括多个语句,其中所述多版本数据库包括所述多个语句中的每个语句的语句识别符;和
识别所述多个语句的第一语句。
7.如权利要求6所述的方法,其中,所述语句识别符基于语句计数器,并且其中与所选择的未提交的写入事务相对应的事务识别符对应于与所述语句计数器不同的事务计数器。
8.一种系统,包括:
存储器;和
至少一个处理器,其耦合到所述存储器并被配置为:
确定事件发生,其中在所述事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交,并且其中所述多版本数据库被存储在非易失性存储器中;
基于在所述事件之前存储在非易失性存储器中的提交值来识别所述一个或多个写入事务,其中所述一个或多个写入事务中的每一个写入事务包括提交值;
选择所识别的未提交的写入事务中的特定一个写入事务;
从所述多版本数据库中识别对应于所选择的未提交的写入事务的记录的第一版本,其中所述第一版本未提交;
识别在所述事件之前提交的所述记录的早期版本;和
设置所述记录的可见性,以指示所述记录的早期版本可见并且所述记录的第一版本不可见。
9.如权利要求8所述的系统,其中,设置可见性的所述处理器被配置为:
设置对应于所述记录的早期版本的删除时间戳,以指示所述记录的早期版本是可见的,其中记录对事务的可见性基于删除时间戳。
10.如权利要求8所述的系统,其中,设置可见性的所述处理器被配置为:
将对应于所述记录的第一版本的删除时间戳设置为低于垃圾收集阈值。
11.如权利要求10所述的系统,其中,所述垃圾收集阈值基于与最早的运行事务开始的时间相对应的最小开始时间戳。
12.如权利要求8所述的系统,其中,所述事件对应于计算机系统崩溃或重启。
13.如权利要求8所述的系统,其中,被配置为进行选择的所述处理器被配置为:
确定所识别的事务包括多个语句,其中所述多版本数据库包括所述多个语句中的每个语句的语句识别符;和
识别所述多个语句的第一语句。
14.如权利要求13所述的系统,其中,所述语句识别符基于语句计数器,并且其中与所选择的未提交的写入事务相对应的事务识别符对应于与所述语句计数器不同的事务计数器。
15.一种非暂时性计算机可读设备,其上存储有指令,当由至少一个计算设备执行时,所述指令使得至少一个计算设备执行以下操作,包括:
确定事件发生,其中在所述事件之前未决的、多版本数据库的一个或多个记录的一个或多个写入事务未提交,并且其中所述多版本数据库被存储在非易失性存储器中;
基于在所述事件之前存储在非易失性存储器中的提交值来识别一个或多个写入事务,其中所述一个或多个写入事务中的每一个写入事务包括提交值;
选择所识别的未提交的写入事务中的特定一个写入事务;
从所述多版本数据库中识别对应于所选择的未提交的写入事务的记录的第一版本,其中所述第一版本未提交;
识别在所述事件之前提交的所述记录的早期版本;和
设置所述记录的可见性,以指示所述记录的早期版本可见并且所述记录的第一版本不可见。
16.根据权利要求15所述的设备,其中,所述可见性的设置包括:
设置对应于所述记录的早期版本的删除时间戳,以指示所述记录的早期版本是可见的,其中记录对事务的可见性基于删除时间戳。
17.根据权利要求15所述的设备,其中,被配置为设置可见性的所述一个计算设备被配置为执行以下操作,包括:
将对应于所述记录的第一版本的删除时间戳设置为低于垃圾收集阈值。
18.如权利要求17所述的设备,其中,所述垃圾收集阈值基于与最早的运行事务开始的时间相对应的最小开始时间戳。
19.如权利要求15所述的设备,其中,所述事件对应于计算机系统崩溃或重启。
20.根据权利要求15所述的设备,其中,被配置为进行选择的所述一个计算设备被配置为执行以下操作,包括:
确定所识别的事务包括多个语句,其中所述多版本数据库包括所述多个语句中的每个语句的语句识别符;和
识别所述多个语句的第一语句,其中所述语句识别符基于语句计数器,并且其中与所选择的未提交的写入事务相对应的事务识别符对应于与所述语句计数器不同的事务计数器。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762594270P | 2017-12-04 | 2017-12-04 | |
US62/594,270 | 2017-12-04 | ||
US15/900,150 US10795877B2 (en) | 2017-12-04 | 2018-02-20 | Multi-version concurrency control (MVCC) in non-volatile memory |
US15/900,150 | 2018-02-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109871386A true CN109871386A (zh) | 2019-06-11 |
CN109871386B CN109871386B (zh) | 2023-02-28 |
Family
ID=63528511
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811009677.6A Active CN109871386B (zh) | 2017-12-04 | 2018-08-31 | 非易失性存储器中的多版本并发控制(mvcc) |
Country Status (6)
Country | Link |
---|---|
US (1) | US10795877B2 (zh) |
EP (1) | EP3493071A1 (zh) |
JP (1) | JP7101566B2 (zh) |
CN (1) | CN109871386B (zh) |
AU (1) | AU2018220055B2 (zh) |
CA (1) | CA3015328A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515705A (zh) * | 2019-08-07 | 2019-11-29 | 上海交通大学 | 可扩展的持久性事务内存及其工作方法 |
WO2021073571A1 (zh) * | 2019-10-16 | 2021-04-22 | 深圳巨杉数据库软件有限公司 | 基于无碎片回收的数据库多版本并发控制系统 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10394468B2 (en) | 2017-02-23 | 2019-08-27 | International Business Machines Corporation | Handling data slice revisions in a dispersed storage network |
US11675738B2 (en) * | 2017-08-29 | 2023-06-13 | Neustar, Inc. | Database locking using logical lock mechanism |
US11593026B2 (en) * | 2020-03-06 | 2023-02-28 | International Business Machines Corporation | Zone storage optimization using predictive protocol patterns |
US11422970B2 (en) * | 2020-05-11 | 2022-08-23 | Sap Se | Handling of data archiving events in a replication system |
US11436212B2 (en) * | 2020-09-22 | 2022-09-06 | Snowflake Inc. | Concurrent transaction processing in a database system |
US11468032B2 (en) | 2020-09-22 | 2022-10-11 | Snowflake Inc. | Concurrent transaction processing in a database system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100106753A1 (en) * | 2008-10-24 | 2010-04-29 | Microsoft Corporation | Cyclic commit transaction protocol |
US20150242439A1 (en) * | 2014-02-24 | 2015-08-27 | Microsoft Corporation | Automatically retrying transactions with split procedure execution |
US20150355981A1 (en) * | 2014-06-09 | 2015-12-10 | Daniel Booss | Hybrid SCM-DRAM Transactional Storage Engine For Fast Data Recovery |
CN105630863A (zh) * | 2014-11-25 | 2016-06-01 | Sap欧洲公司 | 用于多版本并发提交状态的事务控制块 |
CN106462586A (zh) * | 2014-03-28 | 2017-02-22 | 华为技术有限公司 | 基于记录的多版本并发控制的一致性读取的有效方法和系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5333303A (en) * | 1991-03-28 | 1994-07-26 | International Business Machines Corporation | Method for providing data availability in a transaction-oriented system during restart after a failure |
US9519551B2 (en) | 2013-03-28 | 2016-12-13 | Microsoft Technology Licensing, Llc | Recovery processing for database in persistent system |
JP2014215914A (ja) * | 2013-04-26 | 2014-11-17 | 株式会社東芝 | 端末装置、情報処理方法及び情報処理プログラム |
JP6318165B2 (ja) | 2013-10-24 | 2018-04-25 | 株式会社ミツバ | ワイパブレード |
US20160125022A1 (en) | 2014-10-31 | 2016-05-05 | Microsoft Corporation | Efficient maintenance of column store indexes on memory-optimized tables |
US10127260B2 (en) | 2014-11-25 | 2018-11-13 | Sap Se | In-memory database system providing lockless read and write operations for OLAP and OLTP transactions |
JP2016162981A (ja) * | 2015-03-04 | 2016-09-05 | 国立大学法人九州工業大学 | 改質mr流体及びこの改質mr流体を用いた把持機構並びに把持装置 |
JP6293709B2 (ja) * | 2015-07-22 | 2018-03-14 | 株式会社東芝 | ストレージシステムおよびストレージシステム用プログラム |
JP6515753B2 (ja) * | 2015-09-07 | 2019-05-22 | 富士通株式会社 | データベース制御プログラム、データベース制御方法及びデータベース制御装置 |
US9952931B2 (en) | 2016-01-19 | 2018-04-24 | Microsoft Technology Licensing, Llc | Versioned records management using restart era |
-
2018
- 2018-02-20 US US15/900,150 patent/US10795877B2/en active Active
- 2018-08-22 AU AU2018220055A patent/AU2018220055B2/en active Active
- 2018-08-23 CA CA3015328A patent/CA3015328A1/en active Pending
- 2018-08-28 EP EP18191143.9A patent/EP3493071A1/en active Pending
- 2018-08-30 JP JP2018161332A patent/JP7101566B2/ja active Active
- 2018-08-31 CN CN201811009677.6A patent/CN109871386B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100106753A1 (en) * | 2008-10-24 | 2010-04-29 | Microsoft Corporation | Cyclic commit transaction protocol |
US20150242439A1 (en) * | 2014-02-24 | 2015-08-27 | Microsoft Corporation | Automatically retrying transactions with split procedure execution |
CN106462586A (zh) * | 2014-03-28 | 2017-02-22 | 华为技术有限公司 | 基于记录的多版本并发控制的一致性读取的有效方法和系统 |
US20150355981A1 (en) * | 2014-06-09 | 2015-12-10 | Daniel Booss | Hybrid SCM-DRAM Transactional Storage Engine For Fast Data Recovery |
CN105630863A (zh) * | 2014-11-25 | 2016-06-01 | Sap欧洲公司 | 用于多版本并发提交状态的事务控制块 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515705A (zh) * | 2019-08-07 | 2019-11-29 | 上海交通大学 | 可扩展的持久性事务内存及其工作方法 |
CN110515705B (zh) * | 2019-08-07 | 2022-03-11 | 上海交通大学 | 可扩展的持久性事务内存及其工作方法 |
WO2021073571A1 (zh) * | 2019-10-16 | 2021-04-22 | 深圳巨杉数据库软件有限公司 | 基于无碎片回收的数据库多版本并发控制系统 |
Also Published As
Publication number | Publication date |
---|---|
JP7101566B2 (ja) | 2022-07-15 |
US10795877B2 (en) | 2020-10-06 |
AU2018220055B2 (en) | 2024-05-23 |
AU2018220055A1 (en) | 2019-06-20 |
EP3493071A1 (en) | 2019-06-05 |
CN109871386B (zh) | 2023-02-28 |
CA3015328A1 (en) | 2019-06-04 |
US20190171721A1 (en) | 2019-06-06 |
JP2019102059A (ja) | 2019-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109871386A (zh) | 非易失性存储器中的多版本并发控制(mvcc) | |
US11874746B2 (en) | Transaction commit protocol with recoverable commit identifier | |
US11360863B2 (en) | Key-value store on persistent memory | |
CN105630863B (zh) | 用于多版本并发提交状态的事务控制块 | |
JP6362685B2 (ja) | オンライン・ホット・スタンバイ・データベースのためのレプリケーション方法、プログラム、および装置 | |
US11132350B2 (en) | Replicable differential store data structure | |
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
JP3593366B2 (ja) | デ−タベ−ス管理方法 | |
US7587429B2 (en) | Method for checkpointing a main-memory database | |
CN111143389A (zh) | 事务执行方法、装置、计算机设备及存储介质 | |
US9471622B2 (en) | SCM-conscious transactional key-value store | |
US8832022B2 (en) | Transaction processing device, transaction processing method and transaction processing program | |
JPH0812631B2 (ja) | データベース・トランザクション及び照会処理システム | |
US20180210914A1 (en) | Consistent query of local indexes | |
CN110515705B (zh) | 可扩展的持久性事务内存及其工作方法 | |
US20120290547A1 (en) | Transaction processing device, transaction processing method, and transaction processing program | |
US20150113244A1 (en) | Concurrently accessing memory | |
KR101419428B1 (ko) | 모바일 환경에 구축된 데이터베이스에 대한 트랜잭션 로깅 및 회복 장치 및 그 방법 | |
JP5715074B2 (ja) | データベースシステム、データベース管理方法、およびデータベース管理プログラム | |
CN114816224A (zh) | 数据管理方法和数据管理装置 | |
JP4139642B2 (ja) | データベース管理方法およびシステム | |
CN115576494B (zh) | 数据存储方法和计算设备 | |
US11232090B2 (en) | Compressed row state information |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |