CN116249978A - 数据库系统中的并发事务处理 - Google Patents
数据库系统中的并发事务处理 Download PDFInfo
- Publication number
- CN116249978A CN116249978A CN202180064877.5A CN202180064877A CN116249978A CN 116249978 A CN116249978 A CN 116249978A CN 202180064877 A CN202180064877 A CN 202180064877A CN 116249978 A CN116249978 A CN 116249978A
- Authority
- CN
- China
- Prior art keywords
- transaction
- commit
- version identifier
- read
- version
- 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
- 238000000034 method Methods 0.000 claims abstract description 114
- 230000008569 process Effects 0.000 claims abstract description 48
- 230000004044 response Effects 0.000 claims abstract description 20
- 230000015654 memory Effects 0.000 claims description 28
- 238000005516 engineering process Methods 0.000 abstract description 17
- 206010000210 abortion Diseases 0.000 abstract description 5
- 238000013500 data storage Methods 0.000 description 36
- 238000004891 communication Methods 0.000 description 29
- 238000012545 processing Methods 0.000 description 22
- 230000005540 biological transmission Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 8
- 238000002955 isolation Methods 0.000 description 8
- 230000008878 coupling Effects 0.000 description 7
- 238000010168 coupling process Methods 0.000 description 7
- 238000005859 coupling reaction Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 239000000872 buffer Substances 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 101000801891 Homo sapiens Thioredoxin, mitochondrial Proteins 0.000 description 2
- 102100034795 Thioredoxin, mitochondrial Human genes 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 235000003642 hunger Nutrition 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000037351 starvation Effects 0.000 description 2
- 101150061874 TXN gene Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- GVVPGTZRZFNKDS-JXMROGBWSA-N geranyl diphosphate Chemical compound CC(C)=CCC\C(C)=C\CO[P@](O)(=O)OP(O)(O)=O GVVPGTZRZFNKDS-JXMROGBWSA-N 0.000 description 1
- 229910000078 germane Inorganic materials 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000005693 optoelectronics Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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
- 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/2379—Updates performed during online database operations; commit processing
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- 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/24—Querying
- G06F16/248—Presentation of query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
主题技术接收第一事务。主题技术将第一读取版本分配给第一事务,第一读取版本指示可线性化存储的第一版本。主题技术对数据库中的表执行来自第一事务的读取操作。主题技术确定对应于由读取操作产生的第一数据的第一提交版本标识符。响应于确定第一事务中不存在特定写入操作,主题技术继续执行不同的事务,并放弃执行与第一事务相关的提交过程。
Description
相关申请的交叉引用
本申请要求2020年9月22日提交的标题为“CONCURRENT TRANSACTION PROCESSINGIN ADATABASE SYSTEM”的序列号为63/081,611的美国临时专利申请的优先权,并且该美国临时专利申请的全部内容通过引用并入本文以用于所有目的。
技术领域
本公开的实施例总体上涉及基于网络的数据库系统或者云数据平台,并且更具体地说,涉及处理并发事务以在数据库系统内以安全和高性能的方式(例如,避免死锁和饥饿)启用OLTP(在线事务处理)。
背景
基于云的数据仓库和其他数据库系统或数据平台有时提供对事务处理(称为OLTP)的支持,使这样的系统能够执行通过内置的、系统定义的函数不能实现的操作。然而,为了减轻安全风险,需要安全机制来确保在这种系统上运行的用户代码保持隔离。
附图简述
从下面给出的详细描述和本公开的各种实施例的附图中,将更全面地理解本公开。
图1示出了根据本公开的一些实施例的示例计算环境,该示例计算环境包括与云存储平台通信的基于网络的数据仓库系统。
图2是示出根据本公开的一些实施例的计算服务管理器的部件的框图。
图3是示出根据本公开的一些实施例的执行平台的部件的框图。
图4是概念性地示出根据本公开的一些实施例的用于在数据库系统上管理和执行并发事务的示例软件架构的计算环境,这些并发事务可以由执行平台的给定执行节点来执行。
图5是示出根据本公开的一些实施例的数据库系统在执行方法中的操作的流程图。
图6是示出根据本公开的一些实施例的数据库系统在执行方法中的操作的流程图。
图7是示出根据本公开的一些实施例的数据库系统在执行方法中的操作的流程图。
图8示出了根据本公开的一些实施例的计算机系统形式的机器的图解表示,在该计算机系统形式的机器内可以执行指令集,以用于使机器执行本文所讨论方法中的任何一种或更多种方法。
详细描述
现在将详细参考用于实现本发明主题的具体示例实施例。这些具体实施例的示例在附图中示出,并且具体细节在以下描述中阐述,以便提供对主题的透彻理解。应当理解,这些示例并不旨在将权利要求的范围限制于所示的实施例。相反,它们旨在覆盖可能被包含在本公开范围内的替代、修改、和等同物。
在数据库系统中,可以支持在给定数据库上执行事务。为了便于将给定的事务提交给表,现有的数据库系统可以采用不同的方法,包括OLTP技术。如本文所讨论的,OLTP(在线事务处理)是指涉及面向事务的任务的一类数据处理。在示例中,OLTP涉及在给定数据库中插入、更新和/或删除不同数量的数据。OLTP可以处理大量用户的大量事务。这样的事务越来越多地出现在来自不同位置和计算环境中的分布式且联网的环境内,并且用户在该分布式且联网的环境中工作。因此,确保这样的事务以并发的方式执行和完成,从而在这样的分布式环境中保护数据的完整性和一致性,也变得越来越重要。
如本文所描述的,主题技术为针对可线性化存储(linearizable storage)执行事务内的一系列查询语句(例如,SQL语句)提供了并发控制和隔离。具体地,主题技术采用并发控制机制,该并发控制机制是用于读取操作的多版本并发控制(MVCC)与用于写入操作的锁定的组合。此外,主题技术实现了有针对性的隔离级别(例如,快照隔离),其中每个语句可以针对数据库的不同快照执行,并且写入锁被持有直到事务提交为止。
在实施例中,主题技术实现两级事务层次结构,其中顶级事务对应于SQL事务,以及嵌套事务对应于在父SQL事务内的SQL语句。给定的嵌套事务可以执行读取和写入操作,并且可以在成功之前执行零次或更多次回滚和重新启动的执行(a rollback and restartexecution)。在事务提交后,写入操作可以变得可见,并且每个被包含的语句所持有的写入锁可以被释放。
图1示出了根据本公开的一些实施例的示例计算环境100,该示例计算环境100包括基于网络的数据仓库系统102的示例形式的数据库系统。为了避免用不必要的细节模糊本发明主题,图1中省略了与传达对本发明主题的理解不密切相关的各种功能部件。然而,本领域技术人员将容易认识到,各种附加功能部件可以被包括作为计算环境100的一部分,以促进本文没有具体描述的附加功能。在其他实施例中,计算环境可以包括另一种类型的基于网络的数据库系统或云数据平台。
如图所示,计算环境100包括与云存储平台104(例如,Microsoft AzureBlob/>或Google Cloud Storage)和云凭证储存器(store)提供商106通信的基于网络的数据仓库系统102。基于网络的数据仓库系统102是基于网络的系统,其用于报告和分析来自一个或更多个不同来源的集成数据,所述来源包括在云存储平台104内的一个或更多个存储位置。云存储平台104包括多个计算机器,并向基于网络的数据仓库系统102按需提供计算机系统资源,例如数据存储和计算能力。
基于网络的数据仓库系统102包括计算服务管理器108、执行平台110和一个或更多个元数据数据库112。基于网络的数据仓库系统102托管并向多个客户端账户提供数据报告和分析服务。
计算服务管理器108协调和管理基于网络的数据仓库系统102的操作。计算服务管理器108还执行查询优化和编译,以及管理提供计算资源的计算服务的集群(也称为“虚拟仓库”)。计算服务管理器108可以支持任意数量的客户端账户,例如提供数据存储和检索请求的终端用户、管理本文描述的系统和方法的系统管理员、以及与计算服务管理器108交互的其他部件/设备。
计算服务管理器108还与客户端设备114通信。客服端设备114对应于由基于网络的数据仓库系统102支持的多个客户端账户之一的用户。用户可以利用客户端设备114向计算服务管理器108提交数据存储、检索、和分析请求。
计算服务管理器108还耦合到一个或更多个元数据数据库112,该元数据数据库112存储关于与基于网络的数据仓库系统102及其用户相关联的各种功能和方面的元数据。例如,元数据数据库112可以包括存储在远程数据存储系统中的数据以及可从本地高速缓存获得的数据的概要。另外,元数据数据库112可以包括关于如何在远程数据存储系统(例如,云存储平台104)和本地高速缓存中组织数据的信息。由元数据数据库112存储的信息允许系统和服务在不从存储设备加载或访问实际数据的情况下确定一条数据是否需要被访问。
作为另一个示例,元数据数据库112可以存储一个或更多个凭证对象115。通常,凭证对象115指示待从远程凭证储存器中检索的一个或更多个安全凭证。例如,凭证储存器提供商106维护多个远程凭证储存器118-1至118-N。远程凭证储存器118-1至118-N中的每一个可以与用户账户相关联,并且可以用于存储与用户账户相关联的安全凭证。凭证对象115可以指示待由计算服务管理器108从远程凭证储存器118-1至118-N中的一个检索的多个安全凭证中的一个(例如,用于访问由存储平台104存储的数据)。
计算服务管理器108还耦合到执行平台110,执行平台110提供执行各种数据存储和数据检索任务的多个计算资源。执行平台110耦合到云存储平台104的存储平台104。存储平台104包括多个数据存储设备120-1至120-N。在一些实施例中,数据存储设备120-1至120-N是位于一个或更多个地理位置的基于云的存储设备。例如,数据存储设备120-1至120-N可以是公共云基础设施或私有云基础设施的一部分。数据存储设备120-1至120-N可以是硬盘驱动器(HDD)、固态驱动器(SSD)、存储集群、Amazon S3TM存储系统、或任何其它数据存储技术。另外,云存储平台104可以包括分布式文件系统(例如Hadoop分布式文件系统(HDFS))、对象存储系统等。
如进一步示出的,存储平台104包括时钟服务130,可以联系时钟服务130以获取将大于先前返回的任何数字的数字,例如与当前时间相关的数字。在下文中,关于主题系统的实施例进一步讨论时钟服务130。
执行平台110包括多个计算节点。计算节点上的进程集合执行由计算服务管理器108编译的查询计划。该进程集合可以包括:第一进程,该第一进程执行查询计划;第二进程,该第二进程使用最近最少使用(least recently used,LRU)策略来监视和删除高速缓存文件,并实现内存不足(OOM)错误缓解进程;第三进程,该第三进程从进程日志和状态中提取健康信息以发送回计算服务管理器108;第四进程,该第四进程在系统引导(boot)之后建立与计算服务管理器108的通信;以及第五进程,该第五进程为由计算服务管理器108提供的给定作业处理与计算集群的所有通信,并将信息传送回计算服务管理器108和执行平台110的其他计算节点。
在一些实施例中,计算环境100的元件之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在可替代的实施例中,这些通信链路使用任何类型的通信介质和任何通信协议来实现。
计算服务管理器108、元数据数据库112、执行平台110、和存储平台104在图1中被示为单独的分立部件。然而,计算服务管理器108、元数据数据库112、执行平台110、和存储平台104中的每一个都可以被实现为分布式系统(例如,分布在多个地理位置处的多个系统/平台上)。另外,计算服务管理器108、元数据数据库112、执行平台110和存储平台104中的每一个可以根据所接收到的请求的改变和基于网络的数据仓库系统102的不断变化的需求而(彼此独立地)使规模放大或缩小。因此,在所描述的实施例中,基于网络的数据仓库系统102是动态的,并且支持定期改变以满足当前的数据处理需求。
在典型操作期间,基于网络的数据仓库系统102处理由计算服务管理器108确定的多个作业。这些作业由计算服务管理器108调度和管理,以确定何时以及如何执行作业。例如,计算服务管理器108可以将作业分成多个离散任务(或如本文进一步讨论的事务),并且可以确定执行多个离散任务中的每一个需要什么数据。计算服务管理器108可以将多个离散任务中的每个离散任务分配给执行平台110的一个或更多个节点以处理任务。计算服务管理器108可以确定处理任务需要什么数据,并且进一步确定执行平台110内的哪些节点最适合于处理该任务。一些节点可能已经缓存了处理任务所需的数据,因此是处理该任务的不错的候选者。存储在元数据数据库112中的元数据帮助计算服务管理器108确定执行平台110中的哪些节点已经缓存了处理任务所需的数据的至少一部分。执行平台110中的一个或更多个节点使用由这些节点缓存的数据以及必要时使用从云存储平台104检索到的数据来处理任务。期望从执行平台110内的高速缓存中检索尽可能多的数据,因为检索速度通常比从云存储平台104中检索数据快得多。
如图1所示,计算环境100将执行平台110与存储平台104分开。在这种布置中,执行平台110中的处理资源和高速缓存资源独立于云存储平台104中的数据存储设备120-1至120-N进行操作。因此,计算资源和高速缓存资源不限于特定的数据存储设备120-1至120-N。相反,所有计算资源和所有高速缓存资源可以从云存储平台104中的任何数据存储资源中检索数据,以及将数据存储到云存储平台104中的任何数据存储资源。
图2是示出根据本公开的一些实施例的计算服务管理器108的部件的框图。如图2所示,计算服务管理器108包括耦合到访问元数据数据库206的访问管理器202和凭证管理系统204,访问元数据数据库206是元数据数据库112的示例。访问管理器202处理针对本文描述的系统的认证和授权任务。凭证管理系统204促进使用远程存储的凭证(例如,被存储在远程凭证储存器118-1至118-N中的一个中的凭证)来访问外部资源(例如远程存储设备中的数据资源)。如本文所用,远程存储设备也可以被称为“永久存储设备”或“共享存储设备”。例如,凭证管理系统204可以创建和维护远程凭证储存器定义和凭证对象(例如,在访问元数据数据库206中)。远程凭证储存器定义标识远程凭证储存器(例如,远程凭证储存器118-1至118-N中的一个或更多个),并且包括用于从远程凭证储存器访问安全凭证的访问信息。凭证对象使用非敏感信息(例如,文本串)来标识一个或更多个安全凭证,该非敏感信息将从远程凭证储存器中检索以用于访问外部资源。当在运行时接收到调用外部资源的请求时,凭证管理系统204和访问管理器202使用存储在访问元数据数据库206中的信息(例如,凭证对象和凭证储存器定义)来从远程凭证储存器中检索用于访问外部资源的安全凭证。
请求处理服务208管理接收到的数据存储请求和数据检索请求(例如,将对数据库数据执行的作业)。例如,请求处理服务208可以确定处理接收到的查询(例如,数据存储请求或数据检索请求)的数据。数据可以存储在执行平台110内的高速缓存中,或者存储在存储平台104中的数据存储设备中。
管理控制台服务210支持管理员和其他系统管理者对各种系统和进程的访问。另外,管理控制台服务210可以接收执行作业并监视系统上的工作负荷的请求。
计算服务管理器108还包括作业编译器212、作业优化器214和作业执行器216。作业编译器212将作业解析为多个离散任务,并为多个离散任务中的每个离散任务生成执行代码。作业优化器214基于需要处理的数据来确定执行多个离散任务的最佳方法。作业优化器214还处理各种数据修剪操作和其他数据优化技术,以提高执行作业的速度和效率。作业执行器216执行从队列接收的或由计算服务管理器108确定的作业的执行代码。
作业调度程序和协调器(job scheduler and coordinator)218将接收到的作业发送到适当的服务或系统,以进行编译、优化、并分派到执行平台110。例如,可以将作业优先化并接着按该优先顺序对作业进行处理。在实施例中,作业调度程序和协调器218为由计算服务管理器108调度的内部作业以及其他“外部”作业(例如用户查询)确定优先级,该“外部”作业可以由数据库中的其他系统(例如,存储平台104)调度但可以利用执行平台110中的相同处理资源。在一些实施例中,作业调度程序和协调器218识别或分配执行平台110中的特定节点来处理特定任务。虚拟仓库管理器220管理在执行平台110中实现的多个虚拟仓库的操作。例如,虚拟仓库管理器220可以生成用于执行接收到的查询的查询计划。
另外,计算服务管理器108包括配置和元数据管理器222,配置和元数据管理器222管理与存储在远程数据存储设备和本地缓冲器(例如,执行平台110中的缓冲器)中的数据相关的信息。配置和元数据管理器222使用元数据来确定需要访问哪些数据文件以检索用于处理特定任务或作业的数据。监视器和工作负荷分析器224监管由计算服务管理器108执行的进程,并管理任务(例如,工作负荷)在执行平台110中的执行节点和虚拟仓库之间的分配。监视器和工作负荷分析器224还根据需要,基于整个基于网络的数据仓库系统102中不断变化的工作负荷来重新分配任务,并且还可以基于也可以由执行平台110处理的用户(例如,“外部”)查询工作负荷来重新分配任务。配置和元数据管理器222以及监视器和工作负荷分析器224耦合到数据存储设备226。图2中的数据存储设备226表示基于网络的数据仓库系统102内的任何数据存储设备。例如,数据存储设备226可以表示执行平台110中的缓冲器、存储平台104中的存储设备、或任何其他存储设备。
如本文实施例所述,计算服务管理器108验证来自执行平台(例如,执行平台110)的所有通信,以验证该通信的内容和上下文与已知分配给执行平台的任务一致。例如,执行查询A的执行平台的实例应该不被允许请求访问与查询A不相关的数据源D(例如,数据存储设备226)。类似地,给定的执行节点(例如,执行节点302-1)可能需要与另一个执行节点(例如,执行节点302-2)通信,并且应该被禁止与第三个执行节点(例如,执行节点312-1)通信,并且任何这样的非法通信可以被记录(例如,在日志或其它位置中)。此外,存储在给定执行节点上的信息限于与当前查询相关的数据,并且在密钥不可用的情况下,任何其他数据都是不可用的,通过销毁或加密来呈现。
图3是示出根据本公开的一些实施例的执行平台110的部件的框图。如图3所示,执行平台110包括多个虚拟仓库,该多个虚拟仓库包括虚拟仓库1、虚拟仓库2和虚拟仓库n。每个虚拟仓库包括多个执行节点,每个执行节点包括数据高速缓存和处理器。虚拟仓库可以通过使用多个执行节点来并行执行多个任务。如本文所讨论的,执行平台110可以基于系统和用户的当前处理需求实时添加新的虚拟仓库和丢弃现有的虚拟仓库。这种灵活性允许执行平台110在需要时快速部署大量计算资源,而不必在不再需要这些计算资源时被迫继续为它们付费。所有虚拟仓库都可以从任何数据存储设备(例如,云存储平台104中的任何存储设备)访问数据。
尽管图3中所示的每个虚拟仓库包括三个执行节点,但是特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中执行节点的数量是动态的,使得在存在额外需求时创建新的执行节点,并在不再需要现有的执行节点时将其删除。
每个虚拟仓库能够访问图1中所示的数据存储设备120-1至120-N中的任何一个。因此,没有必要给虚拟仓库分配具体的数据存储设备120-1至120-N,而是虚拟仓库可以从云存储平台104内的数据存储设备120-1至120-N中的任何一个访问数据。类似地,图3中所示的每个执行节点可以从数据存储设备120-1至120-N中的任何一个访问数据。在一些实施例中,可以给特定的虚拟仓库或特定的执行节点临时分配具体的数据存储设备,但是该虚拟仓库或执行节点可以后续从任何其他数据存储设备访问数据。
在图3的示例中,虚拟仓库1包括三个执行节点302-1、302-2和302-n。执行节点302-1包括高速缓存304-1和处理器306-1。执行节点302-2包括高速缓存304-2和处理器306-2。执行节点302-n包括高速缓存304-n和处理器306-n。每个执行节点302-1、302-2和302-n与处理一个或更多个数据存储和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(例如,聚类(clustering)服务、物化视图刷新(materialized view refresh)服务、文件压缩服务、存储过程服务、或文件升级服务)相关联的数据存储和数据检索任务。在其他实施方式中,特定虚拟仓库可以处理与特定数据存储系统或特定类别的数据相关联的数据存储和数据检索任务。
类似于上文讨论的虚拟仓库1,虚拟仓库2包括三个执行节点312-1、312-2和312-n。执行节点312-1包括高速缓存314-1和处理器316-1。执行节点312-2包括高速缓存314-2和处理器316-2。执行节点312-n包括高速缓存314-n和处理器316-n。另外,虚拟仓库3包括三个执行节点322-1、322-2和322-n。执行节点322-1包括高速缓存324-1和处理器326-1。执行节点322-2包括高速缓存324-2和处理器326-2。执行节点322-n包括高速缓存324-n和处理器326-n。
在一些实施例中,图3所示的执行节点对于由执行节点缓存的数据是无状态的。例如,这些执行节点不存储或以其他方式维护关于执行节点或由特定执行节点缓存的数据的状态信息。因此,在执行节点发生故障的情况下,可以用另一个节点透明地替换发生故障的节点。由于没有与发生故障的执行节点相关联的状态信息,所以新的(替换)执行节点可以轻松替换发生故障的节点,而无需考虑重新创建特定状态。
尽管图3中所示的执行节点各自包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可以有所不同。图3中所示的高速缓存在本地执行节点中存储从云存储平台104中的一个或更多个数据存储设备检索到的数据。因此,高速缓存减小或消除了在从远程存储系统中不断检索数据的平台中出现的瓶颈问题。本文描述的系统和方法不是从远程存储设备重复访问数据,而是从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用提供对高速缓存的数据的快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以存储来自云存储平台104中的任何存储设备的数据。
此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可以包含大量的计算资源和最少的高速缓存资源,从而使该执行节点对于需要大量计算资源的任务很有用。另一个执行节点可以包含大量的高速缓存资源和最少的计算资源,从而使该执行节点对于需要缓存大量数据的任务很有用。又一个执行节点可以包含提供更快的输入-输出操作的高速缓存资源,这对于需要快速扫描大量数据的任务很有用。在一些实施例中,基于执行节点将要执行的预期任务,在创建执行节点时确定与特定执行节点相关联的高速缓存资源和计算资源。
另外,与特定执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的改变的任务而随时间改变。例如,如果执行节点执行的任务变得更加的处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。
尽管虚拟仓库1、2和n与同一执行平台110相关联,但是可以使用在多个地理位置处的多个计算系统来实现虚拟仓库。例如,虚拟仓库1可以由第一地理位置处的计算系统来实现,而虚拟仓库2和虚拟仓库n可以由第二地理位置处的另一计算系统来实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同实体维护的基于云的计算系统。
另外,每个虚拟仓库在图3中被示为具有多个执行节点。可以使用在多个地理位置处的多个计算系统来实现与每个虚拟仓库相关联的多个执行节点。例如,虚拟仓库1的实例在一个地理位置处的一个计算平台上实现执行节点302-1和302-2,而在另一个地理位置处的不同计算平台上实现执行节点302-n。选择特定计算系统来实现执行节点可以取决于各种因素,例如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力、以及哪些计算系统已经实现虚拟仓库中的其他执行节点。
执行平台110也是容错的。例如,如果一个虚拟仓库发生故障,那么该虚拟仓库将快速地被位于不同地理位置处的不同虚拟仓库替换。
特定执行平台110可以包括任意数量的虚拟仓库。另外,特定执行平台中虚拟仓库的数量是动态的,使得当需要附加的处理和/或高速缓存资源时创建新的虚拟仓库。类似地,当与虚拟仓库相关联的资源不再是必要的时,可以删除现有的虚拟仓库。
在一些实施例中,虚拟仓库可以在云存储平台104中的相同数据上操作,但是每个虚拟仓库具有其自己的执行节点,其自己的执行节点具有独立的处理和高速缓存资源。这种配置允许不同虚拟仓库上的请求被独立地处理,并且请求之间没有干扰。这种独立处理与动态添加和移除虚拟仓库的能力相结合,支持为新用户添加新的处理能力,而不会影响现有用户观察到的性能。
图4是概念性地示出根据本公开的一些实施例的用于在数据库系统(例如,基于网络的数据仓库系统102)上管理和执行并发事务的示例软件架构的计算环境400,这些并发事务可以由执行平台110的给定执行节点来执行。在实施例中,处理流程由事务管理器执行,事务管理器被配置成管理和执行如本文进一步描述的事务。
如图所示,事务管理器440被包括在计算服务管理器108中。事务管理器440接收作业410,作业410可以被分成一个或更多个离散事务420-425,例如事务0、事务1、事务2、事务3等直到事务(n)。在实施例中,每个事务包括要执行的一个或更多个任务或操作(例如,读取操作、写入操作、数据库语句、用户定义的函数等)。事务管理器440在450接收作业,并在452确定可被执行以执行作业410的事务。事务管理器440被配置成基于可应用的规则和/或参数来确定一个或更多个离散事务,诸如事务0、事务1、事务2、事务3等等。事务管理器440在454分配事务。
如进一步示出的,事务管理器440被配置成并发处理可由执行平台110执行的多个作业。在示例中,事务管理器440可以接收第二作业430或第三作业435,其中的每一个作业包括待在执行平台110上执行的相应离散事务。每个事务可以由执行平台110并发执行,其中不同的操作被执行(例如,执行平台110执行来自每个事务中的相应的读取操作或写入操作)。
在实施方式中,其中包括有相应的离散事务的作业410由事务管理器440执行,事务管理器440可以执行查询管理器的职责(例如,处理查询语句和操作等)。如图所示,事务管理器440可以具有多个线程,包括例如事务管理器线程442a、442b、442c等。事务管理器440可以将包括多个离散事务的作业410分配给执行平台110的特定虚拟仓库。基于该分配,事务管理器440可以将包括多个离散事务的作业410发送到所分配的虚拟仓库以供执行。可替代地,事务管理器440可以发送作业410中包括的事务的子集以供执行平台110执行。
在实施例中,如本文进一步描述的,事务管理器440可以执行操作以处理可以并发执行的事务(例如OLTP),同时处理冲突并避免资源饥饿。此外,如本文进一步描述的,事务管理器440处理多个事务之间的冲突以及当多个事务在执行平台110上并行执行时可能出现的并发问题。如进一步示出的,执行平台110与存储平台104通信,存储平台104提供分布式数据库(例如,FoundationDB等),可以结合执行事务来在该分布式数据库中读取和写入数据。
在实施例中,事务管理器440代表客户端账户调度和管理事务的执行。事务管理器440可以调度被包括在给定事务中的任意SQL查询。事务管理器440可以承担调度作业410的角色,就好像它是客户端账户一样,而不是作为内部账户或其他特殊账户。事务管理器440可以体现例如账户管理员的角色或具有完成作业410所需的(最小)范围的角色。在实施例中,事务管理器440体现拥有作为作业410的目标(例如,对于集群,被聚类的表是目标)的对象的角色。
在实施例中,事务管理器440在452确定事务,并在454分配必须被执行以完全执行作业410的事务。在实施例中,事务管理器440在适当情况下将排序约束分配给一个或更多个离散事务中的任意数量的事务。根据作业410的约束,事务管理器440可以确定多个离散事务中的一个或更多个事务必须被序列化并以特定顺序执行。
在实施例中,事务管理器440生成报告,该报告指示作业410何时被调度执行以及估计要捆绑多少计算资源来执行作业410。事务管理器440可以提醒客户端账户何时执行作业410。
主题技术为针对可线性化存储(例如,可线性化的键值储存器)执行事务(例如,SQL事务内的一系列SQL语句)提供了并发控制和隔离。本文提到的事务包括一组以原子方式执行的操作。在示例中,这样的事务可以包括读取和写入操作,但是也可以包括诸如递增、递减、比较并交换等操作。此外,应当理解,可线性化存储可以包括任何类型的分布式数据库(例如,Apache HBase)。
下面的讨论涉及给定分布式数据库系统中的事务。在示例中,事务管理器440利用由存储平台104提供的可线性化存储来管理和处理如本文所述的事务。在实施例中,事务管理器440实现用于执行事务的读取提交模型(read committed model)。如本文所提到的,读取提交模型可以指这样的模型,该模型确保在给定事务中执行的所有读取操作都看到数据库的一致快照(例如,读取在读取操作开始时存在的最后一组已提交的值),并且只有当事务所做的更新没有导致与任何并发事务的写入-写入冲突时,事务本身才成功地提交。
如本文进一步讨论的,事务管理器440实现两级事务层次结构,其中顶级事务对应于SQL事务,而嵌套事务对应于在父SQL事务内的SQL语句。给定的嵌套事务可以执行诸如读取和写入等操作,并且可以在成功之前执行零次或更多次回滚和重新启动的执行。在事务提交后,写入操作可以变得可见,并且每个被包含的语句所持有的写入锁可以被释放。
如前所述,主题系统为针对可线性化存储执行SQL事务内的一系列SQL语句提供了并发控制和隔离。如本文进一步讨论的,事务管理器(例如,事务管理器440)被配置成提供并发控制机制,该并发控制机制可被理解为用于读取操作的多版本并发控制(MVCC)和用于写入操作的锁定的组合。主题系统提供用于读取提交隔离的技术,其中每个语句可以针对数据库(例如,存储平台104)的不同快照执行,其中写入锁被持有直到事务提交为止。
在实施例中,如本文所述的可线性化存储使得每个操作能够在调用和响应之间以原子方式执行。例如,这种可线性化的键值储存器确保操作以与那些操作的“实时”排序一致的原子方式执行,例如,当操作A在操作B开始之前完成时,操作B应该在操作A之后生效。在数据库的上下文中,对表中一行的第一次写入操作必须在对表中同一行的第二次写入或读取操作之前生效(如果第二次操作是在第一次操作完成之后发出的)。
本文描述的示例涉及可线性化存储,例如可线性化数据库,包括例如NoSQL系统等。给定的NoSQL数据库是指以表格格式以外的格式存储数据的数据库,并且可以以不同于关系表的方式存储数据。此外,Uber的Schemaless是通过在关系表中具有“键”和“值”列来构建可线性化键值存储的一个示例。可线性化数据库的其他示例有:HBase、RocksDB、TiKV、Redis、Etcd。
由主题系统提供的优化的一些示例包括利用由存储平台104的一些实施例(例如FoundationDB)提供的受限事务能力,这可以用来实现更高效的事务实施方式。例如,在写入(/锁定/删除)协议中,执行写入操作,然后进行读取操作以检查:(1)在写入请求之前发生的任何写入操作已提交、(2)任何其他写入操作与之前已序列化的写入操作被并发提交。下面的示例对以上进行了说明:
·T1开始语句S1
·S1启动FoundationDB事务,并使用它的读取版本作为读取时间戳
·S1希望写入对象X,因此它首先从读取时间戳读取对象X
·在未发现冲突的情况下,S1使用将提交时间戳嵌入到键中的带时间戳的操作并设置IsCommitEmbedded来写入X。
·S1在FoundationDB事务上设置针对前缀为X的所有键的读取冲突范围
·S1写入关于ID的一个事务状态条目,直接将其设置为已提交。
·T1提交FoundationDB事务。
·如果事务提交,则不存在并发冲突事务。
·如果事务中止,则对于所完成的写入中的一个写入,存在并发冲突事务。S1的写入和事务状态条目都不会被持久化。S1现在必须在慢速路径中重新启动。
在示例中,“读取版本”指的是数据库的对应于最后一个操作被成功提交到数据库的时间的“版本”或状态。
以下涉及严格可序列化性(serializability)的讨论。可线性化性(linearizability)对单个操作做出“实时”排序和原子性承诺,而严格可序列化性对操作组做出“实时”排序和原子性承诺。在示例中,随着时间的推移递增地提交操作组,以及发出终端“提交”命令。严格可序列化存储平台可以采用诸如悲观的基于锁的排除或乐观的验证阶段之类的技术来启用该功能。在该示例中,操作组被称为如本文提到的事务。主题系统可以对事务施加限制(例如操作的数量、大小或持续时间),并且总是拒绝超过这些限制的事务。
在实施例中,读取操作可以以以下方式进行优化。当用给定的读取时间戳进行读取时,在读取时间戳之后启动的任何事务在读取时间戳之前提交可能是不可行的。因此,如果事务ID被设置为与第一语句的读取时间戳相同,则主题系统可以读取[X.0,X.readTimestamp],而不是读取[X.0,X.inf]。因此,这种方法可以使对旧的或频繁写入的数据的读取操作更加有效。
在实施例中,主题系统实现两级事务层次结构,其中顶级事务对应于SQL事务,而嵌套事务(称为“StatementContext”)对应于在父SQL事务内的SQL语句。给定的StatementContext执行读取和写入操作,并且可以被指示在成功之前执行零次或更多次回滚和重新启动的执行。在示例中,事务控制来自成功语句的所有写入操作的集体可见性。在事务提交后,所有写入操作都变得可见,并且每个被包含的语句所持有的所有写入锁都被释放。
在实施例中,每个对象键与唯一地标识语句的单次执行尝试的戳(stamp)相关联,这可以通过附加由三部分组成的元组即(事务ID,statementNumber(语句编号),restartCount(重新启动计数))。更高阶分量是分配给SQL级事务的事务标识符。statementNumber标识在SQL级BEGIN/COMMIT块内的SQL语句。重新启动计数跟踪哪个语句重新启动尝试生成了此写入操作。StatementContext用该戳实例化,并将其应用于通过StatementContext实例执行的所有写入。
以这种方式使键带戳具有许多期望的特性。首先,如果key1<key2,则key1.suffix1<key2.suffix2,而不考虑suffix1和suffix2的值。如果key1==key2,那么后缀(suffix)的transactionID(事物ID)分量允许我们解析对象的提交状态,以确定它对语句的可见性。如果transactionID1==transactionID2,则语句编号允许语句查看由同一事务内的先前语句执行的写入。后缀的restartCount分量使系统能够在语句必须重新启动时检测和删除留下的对象的过时版本。
以类似的方式,语句的每次执行都被赋予一个由三部分组成的标识符,该由三部分组成的标识符包括语句的readTimestamp(RTS,读取时间戳)以及statementNumber(SN)和restartCount(RC)的当前值。这种方法确保作为SQL语句(或更一般的SQL事务)执行的一部分的每个语句,要么看到在SQL语句启动之前提交的数据,要么看到由事务本身写入或更新的数据。
在实施例中,事务管理器采用事务状态表(TST)来保持跟踪已提交的和已中止的事务。TST是一种持久的散列映射(hashmap),它将事务ID映射到它的元数据,最值得关注的是已终结的(finalized)语句编号及其最终的重新启动计数的列表、以及包括事务的提交时间戳(CTS)在内的提交结果。事务状态表中不存在正在进行的事务。在实施例中,TST可以被存储在存储平台104中,或者被存储在执行平台110的存储器或高速缓存内。
以下讨论涉及由事务管理器440使用的读取协议。
在实施例中,事务管理器440使用读取提交事务隔离级别,并且每个语句可以用不同的读取时间戳来运行。在示例中,针对给定键(或键的范围)的读取请求通过针对以X作为前缀的所有键执行可线性化存储读取调用来实现。该调用返回X的版本及其戳和值。该读取方法返回由在SQL语句启动前提交的事务产生的X的最新版本,或者由未取消的事务本身的最近语句(如果有的话)写入的X的最新版本。
以下讨论涉及由事务管理器440使用的写入协议。
在实施例中,写入协议检查WW(写入-写入)冲突和WW死锁两者。下面的示例描述了单个事务,并且没有冲突。假设对象X最初具有TXN1.0.0的戳,并且在时间戳10处被提交。在下面的示例中,应当理解,下面进一步描述的以下事务步骤可以在一个事务内完成,并集体被提交。在失败时,或者在超出底层事务系统的限制时,执行可以退回到单独地发出操作,如下文进一步详细描述的。
T2启动并创建StatementContext(ID=TXN2,语句编号=1,restartCount=0)的S1。
假设构造函数通过联系时钟服务130来从可线性化存储中获得15的读取时间戳。如前所述,时钟服务130是存储平台104的部件,可以联系该部件以获取将大于先前返回的任何数字的数字,例如与当前时间相关的数字。在实施例中,时钟服务130被单独地提供并且可独立于可线性化存储进行联系,或者可以被集成到可线性化存储中,使得时钟值可以被插入到写入的值中。后一种操作将被称为带时间戳的写入。
在实施例中,为了更新X的值,执行以下一系列动作:
{
S1用值100对X.TXN2.1.0进行可线性化存储写入
//下一步是使S1,通过检查是否存在已经在RTS和S1的写入之间更新了X的另外的事务
//来检查WW(写入-写入)冲突。
S1发出范围读取[X.0,X.inf]以获得X的所有版本及它们的戳的集合
该读取返回[X.TXN1.0.0,X.TXN2.1.0]。
S1在事务状态表中查找TXN1,发现提交时间戳为10。
10早于我们的读取时间戳15,因此不存在冲突。
S1忽略[X.TXN2.1.0],因为它属于S1
//假设目前没有检测到冲突
S1终结,并针对TXN2将(语句编号=1,重新启动计数=0)记录到事务状态表中
}
T2提交。这将导致事务状态表记录在可线性化存储中被更新,以反映TXN2现在已提交且其提交时间戳为20。
此时将有X的两个版本,一个版本的戳为TXN1.0.0,而另一个版本的戳为TXN2.1.0。读取X的后续事务可以通过读取事务状态记录来确定X的该新版本是否由已提交的事务写入,并确定该事务的CTS。
现在可以陈述事务T的写入协议。
在实施方式中,更新后的每一行(对象)需要两个单独的可线性化存储事务:
1)T的第一可线性化存储事务插入对象的新版本,该对象的键X以由三部分组成的后缀(T.ID,T.statementNumber,T.restartCount)作为后缀。
2)第二可线性化存储事务发出带有前缀“X.”的范围读取,以获得SCT(冲突事务集)。结果集是一个已写入(或正在写入)X的新版本的已提交或活动事务的列表。
对于该可线性化存储读取调用,存在多种可能的不同结果,它们按以下顺序估计:
1)SCT为空,在这种情况下,简单地允许T继续进行。
2)SCT不为空,但是对于SCT中的所有Ti,Ti已经在T的读取时间戳之前提交,因此不是WW(写入-写入)冲突。T可以继续进行。
3)SCT不为空;对于SCT中的所有Ti,Ti被提交;且SCT中存在Ti,使得其CTN大于T的读取时间戳。准许T无延迟地重新启动。
4)SCT不为空,且对于SCT中的一个或更多个Ti,Ti尚未提交或中止。T必须在重新启动当前语句之前,等待SCT中的所有事务完成。
5)SCT不为空,且对于SCT中的一个或更多个Ti,Ti.TransactionID与我们自己的事务ID相同,并且Ti.StatementCount小于我们当前的语句计数。这意味着当前持有锁,因为前面的语句获取了它并成功地完成了它的执行。T可以继续进行。
6)SCT不为空,且对于SCT中的一个或更多个Ti,TI.TransactionID与我们自己的事务ID相同,Ti.StatementCount与我们自己的StatementCount相同,并且Ti.RestartCount小于我们自己的重新启动计数。这是我们自己的事务的前一次执行中的锁,因此T持有关于这一行的锁,且T可以继续进行。
对于所有情况,对象(X.Stamp,值)将被留在数据库(例如,存储平台104)中。对于需要重新启动的(3)和(4),对象被留下来充当写入锁。通常,对对象X的所有试探性写入将形成写入锁的队列。(5)和(6)说明了这样的情况:先前留下的写入锁允许后续语句或语句的重新启动识别出它们已经持有它们希望获取的锁。
下面的讨论描述了一个说明写入-写入(WW)冲突的示例。写入-写入冲突,其也被理解为盖写(overwrite)未提交的数据,是指与事务的交错执行相关联的计算异常。为了简化示例,省略了戳。假设在T1或T2启动之前,对象X具有值500,戳为TXN 1.0.0,以及CTN为10。
T1启动并获得读取时间戳15
T2启动并获得读取时间戳20
T2写入(键=X.T2,值=100)
T2发出关于范围[X.0,X.Inf]的可线性化存储读取。集合SCT将为空,因此T2继续
T1写入(键=X.T1,值=50)
T1发出关于范围[X.0,X.Inf]的可线性化存储读取。集合SCT将包含T2,因此T1必须重新启动
T2成功提交。T1对X的CTN将>20。假设它是21
在等待直到T2提交或中止之后,T1用读取TS>21重新启动语句。
以下讨论涉及由事务管理器440使用的删除协议。
在实施例中,删除操作被实现为哨兵墓碑值(sentinel tombstone value)的写入;否则,删除操作采用与写入操作相同的协议。当读取操作确定最近提交的键是墓碑(tombstone)时,它认为该键不存在。
以下讨论涉及由事务管理器440使用的锁协议。
为了支持SELECT...FOR UPDATE的查询语句,事务管理器API提供了StatementContext::lock(Key),其允许在不向行写入值的情况下锁定行。lock()的实现遵循写入协议,只是它写入特殊的哨兵值来指示值的不存在(不同于SQL NULL)。在SELECT...FOR UPDATE语句成功完成之前,该语句也可能被强迫重新启动若干次。一旦这样做了,事务中的后续语句将该键的存在识别为它们持有锁的指示(根据上述的(5)和(6)情况)。所有读取都可以像写入一样忽略该键。
以下讨论涉及确定是否提交、中止或重新启动给定事务,这可以由事务管理器440确定。
当事务完成它的执行时,它将具有空的SCT,这指示提交可以继续进行;或者它将具有包含一个或更多个冲突事务的SCT,这指示事务将需要重新启动。
当语句被重新启动时,带有较低restartCount的戳的所有写入被留在数据库(例如,存储平台104)中,作为用于下一次执行的临时写入锁。该语句的下一次执行可能会写入不同的键集合。第一次和第二次执行之间的集合差异形成必须被移除并且永远不会可见的一组孤立的写入。语句本身可能并不依赖于总是能够清理其自己的孤立的写入,因为在进程崩溃的情况下,先前写入的位置将被遗忘。终结语句并记录成功执行的重新启动计数保证了只有一次执行的结果将始终变得可见,并准许懒惰地(lazily)清理孤立的写入。
通过将事务的事务ID插入到事务状态表中,事务被提交,并使其所有写入可见。由时钟服务130或直接由分布式数据库(例如,FoundationDB)填入提交时间戳,使得它高于任何先前分配的读取或提交时间戳。所有写入必须在语句可终结之前完成,并且所有语句必须在事务可提交之前终结。
通过将事务的事务ID插入到事务状态表中,事务被中止,且事务的事务结果被设置为已中止。已终结的语句及其重新启动计数的列表将被重新设置为空列表。对事务状态表的插入将使中止结果对所有冲突的事务可见,并且由已终结的语句执行的所有写入可以被主动地(proactively)或懒惰地从数据库(例如,存储平台104)中移除。
当语句试图以非空的SCT终结时,它等待所有冲突的事务的提交结果被持久化到事务状态表。一旦所有冲突的事务都已经提交或中止,那么该事务将开始其重新启动尝试。
以下讨论涉及可被利用(例如,被给定的客户端设备利用)来向事务管理器440发送命令和请求的API(例如,下面提到的事务管理器API)。
SQL事务包含一个或更多个SQL语句的序列。每个SQL语句都作为嵌套事务执行,如由事务管理器StatementContext类实现。每个事务管理器语句本身都作为一个或更多个数据库事务执行。
在实施例中,事务管理器API被分成两个部分:1)数据层,该数据层向事务执行过程提供读取和写入API;以及2)事务层,该事务层向计算服务管理器108提供用于编排事务生命周期的API。在实施方式中,事务在读取提交(READ COMMITTED)隔离级别上操作,并且在分布式数据库(例如,存储平台104)的顶部实现MVCC,以避免获取任何读取锁。
考虑以下的示例SQL查询:
更新emp.Salary=emp.Salary*1.1,其中emp.Dept=“shoe”;
在示例中,将创建StatementContext类的实例来执行该SQL语句。构造函数联系可线性化存储事务管理器以开始可线性化存储事务并获得可线性化存储STN,该可线性化存储STN然后被存储在readTimestamp变量中。
然后,更新操作在任意数量的执行节点上执行,这些节点全部都使用相同的StatementContext实例。在示例中,函数rangeRead()将被用于扫描基表或Dept上的索引,以便更新元组。将进行一系列write()调用来更新所有匹配员工的薪水。
如果语句在其执行过程中遇到任何冲突,对finalize()的调用将返回CONFLICT,以指示需要重新执行。重新启动取得进展的关键在于,语句的第一次执行实际上会产生在被更新的对象上设置写入锁的副作用。这确保了当语句被重新执行时,已经获得了必要的写入锁,并且语句通常将(但不总是)获得。
接下来,考虑一个示例,其说明3个事务之间的写入-写入冲突:
T1以时间戳10启动S1
T2以时间戳20启动S2
T3以时间戳30启动S3
S1写入X
S2写入Y
S3写入Z
S1写入Y,并注意到与T2的冲突
S2写入Z,并注意到与T3的冲突
S3写入X,并注意到与T1的冲突
在上面描述的这种情况下,三个事务卷入了死锁。每个语句都认为它必须重新启动并等待前一个事务的执行完成。没有事务具有完整的信息以知道它卷入了死锁。
因此,当语句由于冲突而未能终结时,取而代之的是,它将其冲突集写入到数据库(例如,存储平台104)中。这些冲突集可以被所有其他事务读取,允许所有其他事务在等待图(waits-for graph)中检测循环,该循环表明它们卷入了死锁。
图5是示出根据本公开的一些实施例的数据库系统在执行方法中的操作的流程图。方法500可以体现在用于由一个或更多个硬件部件(例如,一个或更多个处理器)执行的计算机可读指令中,使得方法500的操作可以由基于网络的数据仓库系统102的部件执行,诸如由计算服务管理器108的部件或执行平台110中的节点执行。相应地,下面通过有关的示例来描述方法500。然而,应当理解,方法500可以部署在各种其他硬件配置上,并且不旨在限于部署在基于网络的数据仓库系统102内。
在操作502,事务管理器440接收第一事务,该第一事务将在可线性化存储上执行。
在操作504,事务管理器440将第一读取版本分配给第一事务,第一读取版本指示可线性化存储的第一版本。可替代地,可以从时钟服务(例如,时钟服务130)检索读取时间戳,并且可以将事务标识符分配给第一事务,其中事务标识符对应于读取启动时间。
在操作506,事务管理器440对数据库中的表执行来自第一事务的读取操作。
在操作508,事务管理器440确定对应于由读取操作产生的第一数据的第一提交版本标识符。
在操作510,事务管理器440确定特定写入操作是否被包括在第一事务中。如果伴随第一事务要执行特定写入操作,则事务管理器440继续执行如下文描述的图7中的方法。
可替代地,当事务管理器440确定第一事务中不存在特定写入操作时,在操作512,事务管理器440继续执行不同的事务(以及放弃执行关于第一事务的提交过程),这在下面的图6中在示例中进行描述。应当理解,由于所执行的事务的并发性,下面在图6中进一步描述的操作可以在上面图5中描述的操作期间的任何时间执行。
图6是示出根据本公开的一些实施例的数据库系统在执行方法中的操作的流程图。方法600可以体现在用于由一个或更多个硬件部件(例如,一个或更多个处理器)执行的计算机可读指令中,使得方法600的操作可以由基于网络的数据仓库系统102的部件执行,诸如由计算服务管理器108的部件或执行平台110中的节点执行。相应地,下面参考这一点通过示例的方式来描述方法600。然而,应当理解,方法600可以部署在各种其他硬件配置上,并且不旨在限于部署在基于网络的数据仓库系统102内。
在一些实施例中,方法600可以结合如上所述的方法500来执行。例如,方法600可以在方法500的操作之后执行,或者基本上与方法500并发执行。
在操作602,事务管理器440接收第二事务,该第二事务将在可线性化存储上执行。
在操作604,事务管理器440为第二事务分配第二读取版本,第二读取版本指示可线性化存储的第二版本。
在操作606,事务管理器440对数据库中的表执行来自第二事务的第二读取操作。
在操作608,事务管理器440对数据库中的表执行来自第二事务的第二写入操作。
在操作610,事务管理器440确定对应于来自第二读取操作的第二数据结果的特定提交版本标识符。
在操作612,事务管理器440响应于特定提交版本标识符等同于第一提交版本标识符,完成写入操作。
在操作614,事务管理器440将第二提交版本标识符分配给由于写入操作而被存储到表的第二数据,第二提交版本标识符对应于表中的数据的第二版本,第二提交版本标识符不同于第一提交版本标识符。
在操作616,事务管理器440发起关于第二事务的提交过程。
图7是示出根据本公开的一些实施例的数据库系统在执行方法中的操作的流程图。方法700可以体现在用于由一个或更多个硬件部件(例如,一个或更多个处理器)执行的计算机可读指令中,使得方法700的操作可以由基于网络的数据仓库系统102的部件执行,诸如由计算服务管理器108的部件或执行平台110中的节点执行。相应地,下面参考这一点通过示例的方式来描述方法700。然而,应当理解,方法700可以部署在各种其他硬件配置上,并且不旨在限于部署在基于网络的数据仓库系统102内。
在一些实施例中,方法700可以结合如上面所讨论的方法500和方法600来执行。例如,方法700可以在方法500或方法600的操作之后执行(或者基本上与方法500或方法600中的任一种方法并发执行)。
在操作702,事务管理器440继续执行来自第一事务的特定写入操作。
在操作704,事务管理器440确定第一提交版本标识符与第二提交版本标识符不匹配。
在操作706,事务管理器440中止来自第一事务的特定写入操作。
在操作708,事务管理器440对数据库中的表执行来自第一事务的特定读取操作。
在操作710,事务管理器440确定对应于由特定读取操作产生的特定数据的特定提交版本标识符。
在操作712,事务管理器440重试以执行来自第一事务的特定写入操作。
在操作714,事务管理器440响应于特定提交版本标识符与第二提交版本标识符匹配来执行特定写入操作。
在操作716,事务管理器440发起关于第一事务的特定提交过程。
图8示出了根据示例实施例的计算机系统形式的机器800的图解表示,在该计算机系统形式的机器800内可以执行指令集以使机器800执行本文所讨论方法中的任何一种或更多种方法。具体地,图8以计算机系统的示例形式示出了机器800的图解表示,用于使机器800执行本文所讨论方法中的任何一种或更多种方法的指令816(例如,软件、程序、应用、小程序、app、或其他可执行代码)可以在该计算机系统内执行。例如,指令816可使机器800执行方法的500、方法600和方法700中的任何一个或更多个操作。作为另一示例,指令816可使机器800实施在至少图4中示出的部分数据流程。以这种方式,指令816将通用的、非编程的机器转换成特定的机器800(例如,计算服务管理器108或执行平台110中的节点),该特定的机器800被专门配置成以本文描述的方式执行所描述和示出的功能中的任何一个。
在替代实施例中,机器800作为独立的设备操作或者可以耦合(例如,联网)到其它机器。在联网部署中,机器800可以在服务器-客户端网络环境中以服务器机器或客户端机器的身份来操作,或者作为对等(或分布式)网络环境中的对等机器来操作。机器800可以包括但不限于服务器计算机、客户端计算机、个人计算机(PC)、平板计算机、膝上型计算机、上网本(netbook)、智能电话、移动设备、网络路由器、网络交换机、网络桥接器(networkbridge)或能够顺序地或以其它方式执行指令816的任何机器,指令816指定要由机器800采取的动作。此外,虽然仅示出了单个机器800,但术语“机器”还应被理解为包括单独或联合地执行指令816以执行本文所讨论方法中的任何一种或更多种方法的机器800的集合。
机器800包括处理器810、存储器830和输入/输出(I/O)部件850,它们被配置成例如经由总线802彼此通信。在示例实施例中,处理器810(例如,中央处理单元(CPU)、精简指令集计算(RISC)处理器、复杂指令集计算(CISC)处理器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、射频集成电路(RFIC)、另一处理器或其任何合适的组合)可以包括例如可以执行指令816的处理器812和处理器814。术语“处理器”旨在包括多核处理器810,多核处理器810可以包括可以同时执行指令816的两个或更多个独立处理器(有时称为“核”)。尽管图8示出了多个处理器810,但是机器800可以包括具有单核的单个处理器、具有多核的单个处理器(例如,多核处理器)、具有单核的多个处理器、具有多核的多个处理器或者它们的任意组合。
存储器830可以包括主存储器832、静态存储器834和存储单元836,它们都可以由处理器810例如经由总线802访问。主存储器832、静态存储器834和存储单元836存储指令816,指令816体现本文描述的方法或功能中的任何一种或更多种。在由机器800执行指令期间,指令816也可以全部或部分地驻留在主存储器832内、在静态存储器834内、在存储单元836的机器存储介质838内、在至少一个处理器810内(例如,在处理器的高速缓存存储器内)或它们的任何合适的组合。
I/O部件850包括用于接收输入、提供输出、产生输出、传输信息、交换信息、捕获测量值等的部件。包括在特定机器800中的具体的I/O部件850将取决于机器的类型。例如,诸如移动电话的便携式机器将有可能包括触摸输入设备或其他这样的输入机构,而无头服务器机器将不太可能包括这样的触摸输入设备。将认识到的是,I/O部件850可以包括图8中未示出的许多其他部件。I/O部件850根据功能进行分组仅仅是为了简化下面的讨论,并且该分组决不是限制性的。在各种示例实施例中,I/O部件850可以包括输出部件852和输入部件854。输出部件852可以包括视觉部件(例如,诸如等离子体显示面板(PDP)、发光二极管(LED)显示器、液晶显示器(LCD)、投影仪或阴极射线管(CRT)的显示器)、声学部件(例如,扬声器)、其他信号发生器等。输入部件854可以包括字母数字输入部件(例如,键盘、被配置成接收字母数字输入的触摸屏、光电键盘或其他字母数字输入部件)、基于指向的输入部件(例如,鼠标、触控板、轨迹球、操纵杆、运动传感器或另一指向仪器)、触觉输入部件(例如,物理按钮、提供触摸或触摸手势的定位和/或力的触摸屏或其他触觉输入部件)、音频输入部件(例如,麦克风)等。
通信可以使用多种技术来实现。I/O部件850可以包括通信部件864,通信部件864可操作来分别经由耦合882和耦合872将机器800耦合到网络880或设备870。例如,通信部件864可以包括网络接口部件或与网络880对接的另一合适的设备。在进一步的示例中,通信部件864可以包括有线通信部件、无线通信部件、蜂窝通信部件、和经由其他模态提供通信的其他通信部件。设备870可以是另一台机器或多种外围设备中的任一种(例如,经由通用串行总线(USB)耦合的外围设备)。例如,如上所述,机器800可以对应于计算服务管理器108或执行平台110中的任何一个,以及设备870可以包括客户端设备114或本文描述为与基于网络的数据仓库系统102或云存储平台104通信的任何其他计算设备。
可执行指令和机器存储介质
各种存储器(例如,830、832、834和/或处理器810和/或存储单元836的存储器)可以存储指令816和数据结构(例如,软件)的一个或更多个集合,这些指令816和数据结构体现本文所描述方法或功能中的任何一种或更多种或被本文所描述方法或功能中的任何一种或更多种所利用。当由处理器810执行时,这些指令816使各种操作实现所公开的实施例。
如本文所使用的,术语“机器存储介质”、“设备存储介质”和“计算机存储介质”意思相同,并且可以在本公开中互换使用。这些术语指的是存储可执行指令和/或数据的单个或多个非暂时性存储设备和/或非暂时性介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。相应地,这些术语应当被认为包括但不限于固态存储器以及光介质和磁介质,包括在处理器内部或外部的存储器。机器存储介质、计算机存储介质和/或设备存储介质的具体示例包括非易失性存储器,非易失性存储器包括例如:半导体存储器设备,诸如可擦除可编程只读取存储器(EPROM)、电可擦除可编程只读取存储器(EEPROM)、现场可编程门阵列(FPGA)和闪存设备;磁盘,例如内部硬盘和可移除磁盘;磁光盘;以及CD-ROM和DVD-ROM光盘。术语“机器存储介质”、“计算机存储介质”和“设备存储介质”具体排除了载波、经调制的数据信号和其他这样的介质(其中的至少一些包含在下面讨论的术语“信号介质”中)。
传输介质
在各种示例实施例中,网络880的一个或更多个部分可以是自组织网络(ad hocnetwork)、内联网、外联网、虚拟专用网络(VPN)、局域网(LAN)、无线LAN(WLAN)、广域网(WAN)、无线WAN(WWAN)、城域网(MAN)、互联网、互联网的一部分、公共交换电话网络(PSTN)的一部分、普通老式电话服务(POTS)网络、蜂窝电话网络、无线网络、网络、另一种类型的网络、或两种或更多种这样的网络的组合。例如,网络880或网络880的一部分可以包括无线或蜂窝网络,并且耦合882可以是码分多址(CDMA)连接、全球移动通信系统(GSM)连接或另一种类型的蜂窝或无线耦合。在该示例中,耦合882可以实现多种类型的数据传输技术中的任何一种,例如单载波无线电传输技术(1xRTT)、演进数据优化(EVDO)技术、通用分组无线电服务(GPRS)技术、增强型数据速率GSM演进(EDGE)技术、包括3G、第四代无线(4G)网络、通用移动电信系统(UMTS)、高速分组接入(HSPA)、全球微波接入互操作性(WiMAX)、长期演进(LTE)标准的第三代合作伙伴计划(3GPP)、由各种标准设置组织定义的其他技术、其他长程协议、或其他数据传输技术。
指令816可以使用传输介质经由网络接口设备(例如,包括在通信部件864中的网络接口部件)并利用多种众所周知的传输协议(例如,超文本传输协议(HTTP))中的任何一种在网络880上传输或接收。类似地,指令816可以使用传输介质经由耦合872(例如,对等耦合)被传输或接收到设备870。术语“传输介质”和“信号介质”意思相同,并且在本公开中可以互换使用。术语“传输介质”和“信号介质”应被理解为包括能够存储、编码或携带用于由机器800执行的指令816的任何无形介质,并且包括数字或模拟通信信号或便于这样的软件的通信的其他无形介质。因此,术语“传输介质”和“信号介质”应被理解为包括任何形式的经调制的数据信号、载波等。术语“经调制的数据信号”意指这样的信号:其具有以对信号中的信息进行编码的这样的方式设置或更改的其特性中的一个或更多个特性。
计算机可读介质
术语“机器可读介质”、“计算机可读介质”和“设备可读介质”意思相同,并且在本公开中可以互换使用。这些术语被定义为包括机器存储介质和传输介质。因此,这些术语包括存储设备/介质和载波/经调制的数据信号。
本文描述的示例方法的各种操作可以至少部分地由被临时配置(例如,通过软件)或永久配置为执行相关操作的一个或更多个处理器来执行。类似地,本文描述的方法可以至少部分是处理器实现的。例如,方法500的至少一些操作可以由一个或更多个处理器执行。某些操作的执行可以在一个或更多个处理器之间分配,该一个或更多个处理器不仅驻留在单个机器内,而且跨多个机器部署。在一些示例实施例中,一个或更多个处理器可以位于单个位置中(例如,在家庭环境、办公室环境或服务器场内),而在其他实施例中,处理器可以跨多个位置分布。
实施例的示例
下面是用于自适应地增强查询计划的系统和方法的实施例的一些示例的列表。
示例1是一种系统,所述系统包括:至少一个硬件处理器;以及存储器,该存储器存储使所述至少一个硬件处理器执行操作的指令,所述操作包括:接收第一事务,所述第一事务将在可线性化存储上执行;将第一读取版本分配给所述第一事务,所述第一读取版本指示所述可线性化存储的第一版本;对数据库中的表执行来自所述第一事务的读取操作;确定对应于由所述读取操作产生的第一数据的第一提交版本标识符;以及响应于确定第一事务中不存在特定写入操作,继续执行不同的事务,并放弃执行与第一事务相关的提交过程。
在示例2中,根据示例1的主题,其中,可选地,所述操作还包括:接收第二事务,所述第二事务将在可线性化存储上执行;向所述第二事务分配第二事务标识符,所述第二事务标识符指示所述可线性化存储的第二版本;对所述数据库中的所述表执行来自所述第二事务的第二读取操作;并对所述数据库中的所述表执行来自所述第二事务的写入操作。
在示例3中,根据示例1和2中任一项的主题,其中,可选地,其中,执行来自所述第二事务的写入操作可选地包括:确定对应于来自所述第二读取操作的第二数据结果的特定提交版本标识符;以及响应于所述特定提交版本标识符等同于所述第一提交版本标识符而完成所述写入操作。
在示例4中,根据示例1-3中任一项的主题,其中,可选地,其中,所述操作还包括:将第二提交版本标识符分配给由于所述写入操作而被存储到所述表的第二数据,所述第二提交版本标识符对应于所述表中的数据的第二版本,所述第二提交版本标识符不同于所述第一提交版本标识符;以及,发起关于所述第二事务的提交过程。
在示例5中,根据示例1-4中任一项的主题,其中,可选地,分配所述第二提交版本标识符包括使与所述第一提交版本标识符相关联的值递增来确定所述第二提交版本标识符。
在示例6中,根据示例1-5中任一项的主题,其中,可选地,所述操作还包括:继续执行来自所述第一事务的特定写入操作;确定所述第一提交版本标识符与所述第二提交版本标识符不匹配;以及中止来自所述第一事务的特定写入操作。
在示例7中,根据示例1-6中任一项的主题,其中,可选地,所述操作还包括:对所述数据库中的所述表执行来自所述第一事务的特定读取操作;以及确定对应于由所述特定读取操作产生的特定数据的特定提交版本标识符。
在示例8中,根据示例1-7中任一项的主题,其中,最佳地,所述操作还包括:重试以执行来自所述第一事务的所述特定写入操作;以及响应于所述特定提交版本标识符与所述第二提交版本标识符匹配来执行所述特定写入操作。
在示例9中,根据示例1-8中任一项的主题,其中,可选地,所述操作还包括:发起关于所述第一事务的特定提交过程。
在示例10中,根据示例1-9中任一项的主题,其中,可选地,所述数据库包括分布式数据库。
示例11是一种方法,所述方法包括:接收第一事务,所述第一事务将在可线性化存储上执行;将第一读取版本分配给所述第一事务,所述第一读取版本指示所述第一事务的第一启动时间;对数据库中的表执行来自所述第一事务的读取操作;确定对应于由所述读取操作产生的第一数据的第一提交版本标识符;以及响应于确定所述第一事务中不存在特定写入操作,继续执行不同的事务,并放弃执行与所述第一事务相关的提交过程。
在示例12中,根据示例11的主题,可选地,还包括:接收第二事务,所述第二事务将在可线性化存储上执行;给所述第二事务分配第二事务标识符,所述第二事务标识符指示所述可线性化存储的第二版本;对所述数据库中的所述表执行来自所述第二事务的第二读取操作;以及对所述数据库中的所述表执行来自所述第二事务的写入操作。
在示例13中,根据示例11和12中任一项的主题,其中,可选地,执行来自所述第二事务的所述写入操作包括:确定对应于来自所述第二读取操作的第二数据结果的特定提交版本标识符;以及响应于所述特定提交版本标识符等同于所述第一提交版本标识符来完成所述写入操作。
在示例14中,根据示例11-13中任一项的主题,其中,可选地,还包括:将第二提交版本标识符分配给由于所述写入操作而被存储到所述表的第二数据,所述第二提交版本标识符对应于所述表中的数据的第二版本,所述第二提交版本标识符不同于所述第一提交版本标识符;以及发起关于所述第二事务的提交过程。
在示例15中,根据示例11-14中任一项的主题,其中,可选地,分配所述第二提交版本标识符包括使与所述第一提交版本标识符相关联的值递增来确定所述第二提交版本标识符。
在示例16中,根据示例11-15中任一项的主题,可选地,还包括:继续执行来自所述第一事务的特定写入操作;确定所述第一提交版本标识符与所述第二提交版本标识符不匹配;以及中止来自所述第一事务的所述特定写入操作。
在示例17中,根据示例11-16中任一项的主题,可选地,还包括:对所述数据库中的所述表执行来自所述第一事务的特定读取操作;以及确定对应于由所述特定读取操作产生的特定数据的特定提交版本标识符。
在示例18中,根据示例11-17中任一项的主题,可选地,还包括:重试以执行来自所述第一事务的所述特定写入操作;以及响应于所述特定提交版本标识符与所述第二提交版本标识符匹配来执行所述特定写入操作。
在示例19中,根据示例11-18中任一项的主题,可选地,还包括:发起关于所述第一事务的特定提交过程。
在示例20中,根据示例11-19中任一项的主题,其中,可选地,所述数据库包括分布式数据库。
在示例21中是包括指令的计算机存储介质,所述指令当由机器的一个或更多个处理器执行时,将所述机器配置为执行操作,所述操作包括:接收第一事务;将第一读取版本分配给所述第一事务,所述第一事务将在可线性化存储上执行,所述第一读取版本指示所述可线性化存储的第一版本;对数据库中的表执行来自所述第一事务的读取操作;确定对应于由所述读取操作产生的第一数据的第一提交版本标识符;以及响应于确定所述第一事务中不存在特定写入操作,继续执行不同的事务,并放弃执行与所述第一事务相关的提交过程。
在示例22中,根据示例21的主题,其中,可选地,所述操作还包括:接收第二事务,所述第二事务将在所述可线性化存储上执行;给所述第二事务分配第二事务标识符,所述第二事务标识符指示所述可线性化存储的第二版本;对所述数据库中的所述表执行来自所述第二事务的第二读取操作;以及对所述数据库中的所述表执行来自所述第二事务的写入操作。
在示例23中,根据示例21和22中任一项的主题,其中,可选地,执行来自所述第二事务的所述写入操作包括:确定对应于来自所述第二读取操作的第二数据结果的特定提交版本标识符;以及响应于所述特定提交版本标识符等同于所述第一提交版本标识符来完成所述写入操作。
在示例24中,根据示例21-23中任一项的主题,其中,可选地,所述操作还包括:将第二提交版本标识符分配给由于所述写入操作而被存储到所述表的第二数据,所述第二提交版本标识符对应于所述表中的数据的第二版本,所述第二提交版本标识符不同于所述第一提交版本标识符;以及发起关于所述第二事务的提交过程。
在示例25中,根据示例21-24中任一项的主题,其中,可选地,分配所述第二提交版本标识符包括使与所述第一提交版本标识符相关联的值递增来确定所述第二提交版本标识符。
在示例26中,根据示例21-25中任一项的主题,其中,可选地,所述操作还包括:继续执行来自所述第一事务的特定写入操作;确定所述第一提交版本标识符与所述第二提交版本标识符不匹配;以及中止来自所述第一事务的所述特定写入操作。
在示例27中,根据示例21-26中任一项的主题,其中,可选地,所述操作还包括:对所述数据库中的所述表执行来自所述第一事务的特定读取操作;以及确定对应于由所述特定读取操作产生的特定数据的特定提交版本标识符。
在示例28中,根据示例21-27中任一项的主题,其中,可选地,所述操作还包括:重试以执行来自所述第一事务的所述特定写入操作;以及响应于所述特定提交版本标识符与所述第二提交版本标识符匹配来执行所述特定写入操作。
在示例29中,根据示例21-28中任一项的主题,其中,可选地,所述操作还包括:发起关于所述第一事务的特定提交过程。
在示例30中,根据示例21-29中任一项的主题,其中,可选地,所述数据库包括分布式数据库。
结束语
尽管参考具体的示例实施例描述了本公开的实施例,但显然地,在不偏离本发明主题的更广泛范围的情况下,可以对这些实施例做出各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。形成本申请的一部分的附图通过说明而非限制的方式显示了其中可以实施主题的具体实施例。所示出的实施例以充分的细节被描述,以使本领域的技术人员能够实施本文公开的教导。可以使用其他实施例和从其中衍生的实施例,使得可以做出结构或逻辑的替换和改变而不偏离本公开的范围。因此,此详细描述不应被理解为限制性意义,并且各种实施例的范围仅由所附权利要求连同这些权利要求所享有的完整范围的等同物一起限定。
本发明主题的这样的实施例可以在本文中单独地和/或共同地由术语“发明”提到,这仅仅是为了便利,并不意图自愿将本申请的范围局限于任何单一发明或发明构思(如果实际上公开了多于一种发明或发明构思的话)。因此,虽然本文中已经说明和描述了特定实施例,但是应当理解,可以用经计算以实现相同目的的任何布置来替换所示出的特定实施例。本公开意图涵盖各种实施例的任何和所有改编或变型。在阅读以上描述后,以上实施例的组合以及本文未具体描述的其他实施例对于本领域的技术人员来说将是明显的。
在本文档中,术语“一个(a)”或“一个(an)”,如专利文档中常见的那样,用于包括一个或多于一个,与“至少一个”或“一个或更多个”的任何其他实例或用法无关。在本文档中,术语“或”用于指非排他性的或,因此除非另有说明,否则“A或B”包括“A但不包括B”、“B但不包括A”和“A和B”。在所附权利要求中,术语“包括(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的纯英语等效词。此外,在所附权利要求中,术语“包括(including)”和“包括(comprising)”是开放式的;也就是说,包括除了权利要求中在这样的术语之后列出的那些元素之外的元素的系统、设备、物品或过程仍然被认为落入该权利要求的范围内。
Claims (20)
1.一种系统,包括:
至少一个硬件处理器;和
存储器,所述存储器存储使所述至少一个硬件处理器执行操作的指令,所述操作包括:
接收第一事务,所述第一事务将在可线性化存储上执行;
将第一读取版本分配给所述第一事务,所述第一读取版本指示所述可线性化存储的第一版本;
对数据库中的表执行来自所述第一事务的读取操作;
确定对应于由所述读取操作产生的第一数据的第一提交版本标识符;以及
响应于确定所述第一事务中不存在特定写入操作,继续执行不同的事务,并放弃执行与所述第一事务相关的提交过程。
2.根据权利要求1所述的系统,其中,所述操作还包括:
接收第二事务,所述第二事务将在所述可线性化存储上执行;
给所述第二事务分配第二读取版本,所述第二读取版本指示所述可线性化存储的第二版本;
对所述数据库中的所述表执行来自所述第二事务的第二读取操作;以及
对所述数据库中的所述表执行来自所述第二事务的写入操作。
3.根据权利要求2所述的系统,其中,执行来自所述第二事务的所述写入操作包括:
确定对应于来自所述第二读取操作的第二数据结果的特定提交版本标识符;以及
响应于所述特定提交版本标识符等同于所述第一提交版本标识符,完成所述写入操作。
4.根据权利要求2所述的系统,其中,所述操作还包括:
将第二提交版本标识符分配给由于所述写入操作而被存储到所述表的第二数据,所述第二提交版本标识符对应于所述表中的数据的第二版本,所述第二提交版本标识符不同于所述第一提交版本标识符;以及
发起关于所述第二事务的提交过程。
5.根据权利要求4所述的系统,其中,分配所述第二提交版本标识符包括使与所述第一提交版本标识符相关联的值递增来确定所述第二提交版本标识符。
6.根据权利要求4所述的系统,其中,所述操作还包括:
继续执行来自所述第一事务的特定写入操作;
确定所述第一提交版本标识符与所述第二提交版本标识符不匹配;以及
中止来自所述第一事务的所述特定写入操作。
7.根据权利要求6所述的系统,其中,所述操作还包括:
对所述数据库中的所述表执行来自所述第一事务的特定读取操作;以及
确定对应于由所述特定读取操作产生的特定数据的特定提交版本标识符。
8.根据权利要求7所述的系统,其中,所述操作还包括:
重试以执行来自所述第一事务的所述特定写入操作;以及
响应于所述特定提交版本标识符与所述第二提交版本标识符匹配,执行所述特定写入操作。
9.根据权利要求8所述的系统,其中,所述操作还包括:
发起关于所述第一事务的特定提交过程。
10.根据权利要求1所述的系统,其中,所述数据库包括分布式数据库。
11.一种方法,包括:
接收第一事务,所述第一事务将在可线性化存储上执行;
将第一读取版本分配给所述第一事务,所述第一读取版本指示所述可线性化存储的第一版本;
对数据库中的表执行来自所述第一事务的读取操作;
确定对应于由所述读取操作产生的第一数据的第一提交版本标识符;以及
响应于确定所述第一事务中不存在特定写入操作,继续执行不同的事务,并放弃执行与所述第一事务相关的提交过程。
12.根据权利要求11所述的方法,还包括:
接收第二事务;
给所述第二事务分配第二读取版本,所述第二读取版本指示所述可线性化存储的第二版本;
对所述数据库中的所述表执行来自所述第二事务的第二读取操作;以及
对所述数据库中的所述表执行来自所述第二事务的写入操作。
13.根据权利要求12所述的方法,其中,执行来自所述第二事务的所述写入操作包括:
确定对应于来自所述第二读取操作的第二数据结果的特定提交版本标识符;以及
响应于所述特定提交版本标识符等同于所述第一提交版本标识符,完成所述写入操作。
14.根据权利要求12所述的方法,还包括:
将第二提交版本标识符分配给由于所述写入操作而被存储到所述表的第二数据,所述第二提交版本标识符对应于所述表中的数据的第二版本,所述第二提交版本标识符不同于所述第一提交版本标识符;以及
发起关于所述第二事务的提交过程。
15.根据权利要求14所述的方法,其中,分配所述第二提交版本标识符包括使与所述第一提交版本标识符相关联的值递增以确定所述第二提交版本标识符。
16.根据权利要求14所述的方法,还包括:
继续执行来自所述第一事务的特定写入操作;
确定所述第一提交版本标识符与所述第二提交版本标识符不匹配;以及
中止来自所述第一事务的所述特定写入操作。
17.根据权利要求16所述的方法,还包括:
对所述数据库中的所述表执行来自所述第一事务的特定读取操作;以及
确定对应于由所述特定读取操作产生的特定数据的特定提交版本标识符。
18.根据权利要求17所述的方法,还包括:
重试以执行来自所述第一事务的所述特定写入操作;以及
响应于所述特定提交版本标识符与所述第二提交版本标识符匹配,执行所述特定写入操作。
19.根据权利要求18所述的方法,还包括:
发起关于所述第一事务的特定提交过程。
20.一种计算机存储介质,其包括指令,所述指令在由机器的一个或更多个处理器执行时将所述机器配置成执行操作,所述操作包括:
接收第一事务,所述第一事务将在可线性化存储上执行;
将第一读取版本分配给所述第一事务,所述第一读取版本指示所述可线性化存储的第一版本;
对数据库中的表执行来自所述第一事务的读取操作;
确定对应于由所述读取操作产生的第一数据的第一提交版本标识符;以及
响应于确定所述第一事务中不存在特定写入操作,继续执行不同的事务,并放弃执行与所述第一事务相关的提交过程。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063081611P | 2020-09-22 | 2020-09-22 | |
US63/081,611 | 2020-09-22 | ||
PCT/US2021/039674 WO2022066257A1 (en) | 2020-09-22 | 2021-06-29 | Concurrent transaction processing in a database system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116249978A true CN116249978A (zh) | 2023-06-09 |
Family
ID=80740348
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180064877.5A Pending CN116249978A (zh) | 2020-09-22 | 2021-06-29 | 数据库系统中的并发事务处理 |
Country Status (5)
Country | Link |
---|---|
US (3) | US11468032B2 (zh) |
EP (1) | EP4217888A1 (zh) |
CN (1) | CN116249978A (zh) |
DE (1) | DE202021004295U1 (zh) |
WO (1) | WO2022066257A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US20230394028A1 (en) * | 2022-06-02 | 2023-12-07 | Microsoft Technology Licensing, Llc | Method and system for lock after qualification for update queries |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5280612A (en) * | 1991-11-26 | 1994-01-18 | International Business Machines Corporation | Multiple version database concurrency control system |
US5335343A (en) * | 1992-07-06 | 1994-08-02 | Digital Equipment Corporation | Distributed transaction processing using two-phase commit protocol with presumed-commit without log force |
US6606626B1 (en) | 1998-10-20 | 2003-08-12 | Sybase, Inc. | Database system with lock manager enhancement for improving concurrency |
US6363387B1 (en) | 1998-10-20 | 2002-03-26 | Sybase, Inc. | Database system providing methodology for enhancing concurrency using row update bit and deferred locking |
WO2008091575A2 (en) * | 2007-01-22 | 2008-07-31 | Vast Systems Technology Corporation | Method and system for modeling a bus for a system design incorporating one or more programmable processors |
US8661204B2 (en) * | 2007-08-15 | 2014-02-25 | University Of Rochester, Office Of Technology Transfer | Mechanism to support flexible decoupled transactional memory |
US8429386B2 (en) * | 2009-06-30 | 2013-04-23 | Oracle America, Inc. | Dynamic tag allocation in a multithreaded out-of-order processor |
US8868506B1 (en) * | 2010-06-17 | 2014-10-21 | Evolphin Software, Inc. | Method and apparatus for digital asset management |
US8818963B2 (en) | 2010-10-29 | 2014-08-26 | Microsoft Corporation | Halloween protection in a multi-version database system |
US9086890B2 (en) * | 2012-01-06 | 2015-07-21 | Oracle International Corporation | Division unit with normalization circuit and plural divide engines for receiving instructions when divide engine availability is indicated |
US10474645B2 (en) | 2014-02-24 | 2019-11-12 | Microsoft Technology Licensing, Llc | Automatically retrying transactions with split procedure execution |
US20180011892A1 (en) | 2015-01-29 | 2018-01-11 | Hewlett Packard Enterprise Development Lp | Foster twin data structure |
US9864774B2 (en) * | 2015-06-23 | 2018-01-09 | International Business Machines Corporation | Granular buffering of metadata changes for journaling file systems |
US10795881B2 (en) * | 2015-12-18 | 2020-10-06 | Sap Se | Table replication in a database environment |
US10489518B1 (en) * | 2016-03-03 | 2019-11-26 | Nutanix, Inc. | Virtual machine object version control |
US10146606B2 (en) | 2016-04-06 | 2018-12-04 | Dell Products, Lp | Method for system debug and firmware update of a headless server |
US10545950B2 (en) | 2016-09-26 | 2020-01-28 | Amazon Technologies, Inc. | Atomic application of multiple updates to a hierarchical data structure |
US10346386B2 (en) | 2016-11-04 | 2019-07-09 | Salesforce.Com, Inc. | Multiversion concurrency control of database records with uncommitted transactions |
US10552372B2 (en) * | 2017-01-31 | 2020-02-04 | Microsoft Technology Licensing, Llc | Systems, methods, and computer-readable media for a fast snapshot of application data in storage |
US10977227B2 (en) | 2017-06-06 | 2021-04-13 | Sap Se | Dynamic snapshot isolation protocol selection |
US20200389309A1 (en) * | 2017-07-10 | 2020-12-10 | Burstiq Analytics Corporation | Systems and methods for accessing digital assets in a blockchain using owner consent contracts |
KR102348418B1 (ko) | 2017-07-11 | 2022-01-07 | 스월즈, 인크. | 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치 |
US10795877B2 (en) | 2017-12-04 | 2020-10-06 | Sap Se | Multi-version concurrency control (MVCC) in non-volatile memory |
US10698920B2 (en) * | 2017-12-22 | 2020-06-30 | Dropbox, Inc. | Techniques for a linearizable primary-secondary database system that replicates database data with eventual consistency |
WO2019168557A1 (en) * | 2018-02-27 | 2019-09-06 | Visa International Service Association | High-throughput data integrity via trusted computing |
US10754565B2 (en) * | 2018-04-23 | 2020-08-25 | Google Llc | Systems and methods for deferred lock enforcement |
US10817506B2 (en) | 2018-05-07 | 2020-10-27 | Microsoft Technology Licensing, Llc | Data service provisioning, metering, and load-balancing via service units |
WO2019220269A1 (en) * | 2018-05-14 | 2019-11-21 | Gerlits Andras | System and method for a distributed database |
WO2020030891A1 (en) | 2018-08-07 | 2020-02-13 | Perpetual Altruism Limited | Computer implemented method and system for updating a database system for a blockchain version control system; computer implemented methods of auctioning an item for a seller, and computer implemented method of updating a smart contract |
CN111183450B (zh) * | 2019-09-12 | 2024-04-19 | 创新先进技术有限公司 | 日志结构存储系统 |
US11468032B2 (en) | 2020-09-22 | 2022-10-11 | Snowflake Inc. | Concurrent transaction processing in a database system |
US11436212B2 (en) | 2020-09-22 | 2022-09-06 | Snowflake Inc. | Concurrent transaction processing in a database system |
-
2021
- 2021-01-29 US US17/163,034 patent/US11468032B2/en active Active
- 2021-06-29 WO PCT/US2021/039674 patent/WO2022066257A1/en unknown
- 2021-06-29 DE DE202021004295.4U patent/DE202021004295U1/de active Active
- 2021-06-29 EP EP21873125.5A patent/EP4217888A1/en active Pending
- 2021-06-29 CN CN202180064877.5A patent/CN116249978A/zh active Pending
-
2022
- 2022-08-23 US US17/821,670 patent/US11709818B2/en active Active
-
2023
- 2023-05-31 US US18/326,950 patent/US20230325376A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230011046A1 (en) | 2023-01-12 |
US11709818B2 (en) | 2023-07-25 |
US20230325376A1 (en) | 2023-10-12 |
DE202021004295U1 (de) | 2023-07-11 |
US11468032B2 (en) | 2022-10-11 |
EP4217888A1 (en) | 2023-08-02 |
WO2022066257A1 (en) | 2022-03-31 |
US20220092051A1 (en) | 2022-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11003689B2 (en) | Distributed database transaction protocol | |
US11436212B2 (en) | Concurrent transaction processing in a database system | |
US11709818B2 (en) | Managing concurrent transactions in database systems | |
US11809916B2 (en) | Deadlock detection in distributed databases | |
CN113632073B (zh) | 数据源上的可扩展流 | |
US11762846B1 (en) | Key prefix driven data encryption in tree structures | |
EP4332771A1 (en) | Distributed execution of transactional queries | |
US20240020298A1 (en) | Serialization of data in a concurrent transaction processing distributed database | |
US11704305B1 (en) | Optimizations for long-lived statements in a database system | |
US20230195719A1 (en) | Optimizations to read and write transactions for large values in distributed databases | |
US20240176775A1 (en) | Datastore workload isolation | |
US12007990B1 (en) | Deferred constraints support in distributed database systems | |
US20240232173A1 (en) | Distributed execution of transactional queries | |
US11514080B1 (en) | Cross domain transactions | |
US11709808B1 (en) | Schema evolution for the serialization of non-primary key columnar data into row-organized byte sequences | |
US11709866B2 (en) | Scalable compaction in a concurrent transaction processing distributed database | |
US20230350921A1 (en) | Database processing using hybrid key-value tables | |
US20230205785A1 (en) | A distributed database that uses hybrid table secondary indexes | |
US11880388B2 (en) | Hybrid table secondary index for lookups, unique checks, and referential integrity constraints | |
US12007993B1 (en) | Multi database queries |
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 | ||
CB02 | Change of applicant information |
Country or region after: U.S.A. Address after: Montana Applicant after: Snowflake Co. Address before: Montana Applicant before: SNOWFLAKE COMPUTING Inc. Country or region before: U.S.A. |
|
CB02 | Change of applicant information |