CN107710203A - 分布式键/值存储库之上的事务数据库层 - Google Patents
分布式键/值存储库之上的事务数据库层 Download PDFInfo
- Publication number
- CN107710203A CN107710203A CN201680039150.0A CN201680039150A CN107710203A CN 107710203 A CN107710203 A CN 107710203A CN 201680039150 A CN201680039150 A CN 201680039150A CN 107710203 A CN107710203 A CN 107710203A
- Authority
- CN
- China
- Prior art keywords
- key
- value
- data
- transaction
- row
- 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/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/21—Design, administration or maintenance of databases
-
- 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
-
- 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/2365—Ensuring data consistency and integrity
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
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)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
计算系统被配置为耦合到远程存储系统。远程存储系统包括键/值存储库。计算系统被配置为对被存储在远程存储系统上的数据执行事务。系统包括数据库客户端。数据库客户端包括被配置为允许用户使用数据库客户端请求数据库操作的接口。系统还包括耦合到数据库客户端的数据库引擎。数据库引擎被配置为从数据库客户端接收对于数据库操作的请求。数据库引擎还被配置为从远程存储系统获得并且操作事务状态,其被存储为远程存储系统处的键/值存储库中的一个或多个键/值对。数据库引擎被配置为使用事务状态来对键/值存储库中的一个或多个数据键/值对事务性地执行数据操作。
Description
背景技术
计算机和计算系统已经影响现代生活的几乎每个方面。计算机通常在工作、休闲、保健、交通、娱乐、家务管理等中有所涉及。
进一步地,可以通过计算系统的经由网络连接被相互连接到其他计算系统的能力来增强计算系统功能。网络连接可以包括但不限于经由有线或无线以太网的连接、蜂窝连接、或者甚至通过串行、并行、USB或者其他连接的计算机到计算机连接。连接允许计算系统访问其他计算系统处的服务并且迅速地并且高效地从其他计算系统接收应用数据。
计算系统的相互连接已促进基于云的数据库。一个这类数据库是NoSQL数据库。云中的许多NoSQL方案提供最大程度的可扩展性的优点。然而,这以不具有将通常存在于全特征的数据库技术中的特征为代价来完成。例如,基于云的NoSQL方案未完全支持ACID(原子性、一致性、隔离性、耐久性)事务、多个索引和查询隔离。例如,在从华盛顿雷德蒙德的微软公司可获得的Azure表存储中,事务支持存在以允许多个行被原子地提交,但是具有一个HTTP往返程、100行的最大值以及4MB的最大有效载荷的限制。
在此要求保护的主题不限于解决仅在诸如上文所描述的那些环境中任何缺点或者在诸如上文所描述的那些环境中操作的实施例。相反,该背景技术仅被提供以说明其中可以实践在此所描述的一些实施例的一个示例性技术区域。
发明内容
在此所说明的一个实施例包括被配置为被耦合到远程存储系统的本地计算系统。远程存储系统包括键/值存储库。计算系统被配置为对被存储在远程存储系统上的数据执行事务。本地计算系统包括数据库客户端。数据库客户端包括被配置为允许用户使用数据库客户端来请求数据库操作的接口。本地计算系统还包括被耦合到数据库客户端的数据库引擎。数据库引擎被配置为从数据库客户端接收对数据库操作的请求。数据库引擎还被配置为(从远程存储系统)获得并且操作被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态。数据库引擎被配置为使用事务状态来键/值存储库中的一个或多个数据键/值对事务性地执行数据操作。
本发明内容被提供以引入以在相似描述中下面进一步描述的简化形式的概念的选择。本发明内容不旨在标识要求保护的主题的关键特征或基本特征,其也不旨在被用作辅助确定要求保护的主题的范围。
附加特征和优点将从下面的说明书中被阐述并且部分地将从说明书显而易见或者可以由本文的教导的实践来学习。可以借助于在所附的权利要求书中特别地指出的装置和组合实现和获得本发明的特征和优点。本发明的特征将从以下说明书和所附的权利要求变得更充分明显,或者可以通过如在下文中所阐述的本发明的实践而被学习。
附图说明
为了描述可以获得上文记载和其他优点和特征的方式,上文简要描述的主题的更特别的描述将通过参考在附图中图示的特定实施例而被提供。理解这些附图描绘仅典型的实施例并且因此将不被认为是对范围的限制,通过使用附图利用附加的特殊性和细节将描述和解释实施例,其中:
图1图示了耦合到远程存储系统的本地系统,其中远程存储系统包括键/值存储库;
图2图示了包括数据行、事务状态和垃圾回收信息的键/值存储库的方案;
图3图示了使用被存储为键/值存储条目的事务状态的随时间的事务数据操作的进展;
图4图示了历史版本数据如何被存储使得可以使用被存储在键/值存储库中的事务状态数据来实现快照隔离;以及
图5图示了使用本地系统处的数据库引擎对数据执行事务的方法,在本地系统中,通过使用被存储为远程存储系统处的一个或多个键/值对的事务状态,所存储的数据被存储为远程存储系统处的一个或多个数据键/值对。
具体实施方式
在此所图示的实施例可以包括在键/值存储库之上提供ACID(Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(耐久性))事务支持的功能。特别地,实施例可以被配置为解决与跨越多个机器分布并且由多个客户端(其各自可以充当存储上的读取器和写入器)可访问的高度可扩展的键/值远程存储库(诸如从华盛顿雷德蒙德的微软公司购得的Azure存储装置)进行交互的挑战。如此,这样的分布式存储装置可以被用于以与传统的全特征的数据库技术类似的方式实现事务计算。
特别地,一些实施例可以支持分布式键/值远程存储装置上的ACID事务。这可以允许用于读取器的快照隔离,其中读取器可以是连接到分布式键/值远程存储库的本地客户端。实施例可以允许编程模型被实现在使用类似事务语义(例如,开始事务、提交事务、回滚事务等)的这样的环境中。可以实现其中事务可以跨越多个往返行程存在并且生存、移除行计数周围的限制和个体事务中的总体有效载荷大小的实施例。可以实现使得单个数据库写入器可以与任何数目的活动读取器共存的实施例。可以实现其中事务可以跨越多个物理存储分区或者甚至穿过存储账户边界的实施例。可以实现其中可以在能够在分布式云服务拓扑中有用的客户端之间(在一个客户端上开始并且在另一客户端上继续)传送事务的实施例。
实施例可以解决通过使用被配置为访问和修改被存储为键/值存储库中的键/值对的事务状态信息的本地客户端来实现键/值存储分布式数据库上的事务计算的问题。这允许分布式数据库具有简单的传统结构,但是能够在高级事务计算的支持中被使用。
现在参考图1,图示了实现这样的系统的示例计算环境100。计算环境100包括多个本地系统102-1到102-n,其耦合到远程存储系统104。远程存储系统104可以是分布式且可扩展的系统。因此,虽然被示出为单个实体,但是远程存储系统104可以实际上被分布在各种不同的物理机器上的各种物理位置中。远程存储系统104包括数据存储库106。数据存储库106包括键/值存储库108。实施例实现用于通过使用键/值存储库108存储用于当对被存储在远程存储系统104处的数据执行事务时在本地系统(诸如本地系统102-1)处由事务逻辑使用的事务状态(在图2的描述中,将示出事务状态可以被存储在事务状态行202中)对被存储在远程存储系统104处的数据执行事务的功能。这被实现使得可以通过最小化或在一些情况下消除待由远程存储系统104使用的事务数据处理逻辑来在远程存储系统104上执行事务。相反,可以在本地系统102-1处实现逻辑。
以下图示了使用本地系统102-1的示例。然而,应当理解,原理可以适用于耦合到远程存储系统104的任何本地系统。本地系统102-1被配置为被耦合到远程存储系统104。如所指出的,远程存储系统104包括键/值存储库108。本地系统102-1被配置为对被存储在远程存储系统104上的数据执行事务。本地系统102-1包括数据库客户端110。数据库客户端110包括被配置为允许用户使用数据库客户端110请求数据库操作的接口112。这样的用户可以是本地系统102-1处的过程或系统、系统管理员、耦合到本地系统102-1的其他系统等。
本地系统102-1包括耦合到数据库客户端110的数据库引擎114。数据库引擎114被配置为从数据库客户端110接收对于数据库操作的请求。数据库引擎114还被配置为对远程存储系统104处的数据存储库106执行事务操作。在一些实施例中,这可以通过数据库引擎114被配置为更新键/值存储库108的键/值行中的各列以控制事务数据操作来实现。例如(如结合图2、图3和图4的描述将更详细地图示的),数据库引擎被配置为更新被存储为远程存储系统处的键/值存储库108中的一个或多个键/值行的事务状态中的写租用列,以指示数据库引擎已获取写租用。数据库引擎114被配置为更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值行的事务状态中的当前事务列,以包括标识已开始的特定事务的标识符。数据库引擎114被配置为更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值行的事务状态中的未提交的事务列,以包括将特定事务标识为未提交的事务的标识符。数据库引擎114被配置为对键/值存储库中的一个或多个键/值对执行一个或多个数据操作(即,读取或者写入)。
参考图2,图示了多版本数据存储库中的键/值存储的一部分的示例。图2图示了键/值存储库108可以被分为各种块。特别地,键/值存储库108可以包括事务状态行202。事务状态行包括事务状态。如下面将更详细地讨论的,事务状态行302包括可以包括被用于执行事务数据处理以及执行垃圾回收的信息的各列。在所图示的实施例中,针对键/值存储库中的每个版本行(下面更详细地定义的)包括对应的事务行。键/值存储库108还包括版本行204。每个版本行保持逻辑行的单索引的单版本。在所图示的示例中,一个逻辑行==到N个逻辑行,一个每索引。逻辑列数据跨越若干物理列被序列化。在所图示的特定示例中,每个索引重复用于全部逻辑行的数据。其他实现可以以不同的方式完成类似功能(诸如例如,通过向底层数据行提供指针)。键/值存储库108还包括垃圾回收行208。在所图示的示例中,每个物理行具有对应的垃圾回收行。下面将更详细地解释垃圾回收行。
键/值存储库108还包括映射表210。映射表210将读取器/写入器标识符映射到版本表的分区键。
现在参考图3,图示了使用被存储在事务状态行202中的事务状态的特定示例。特别地,图3图示了当各种事务数据处理动作被执行时事务状态行212如何随时间改变。
在图3中所图示的示例中,事务状态行212包括被存储在键/值存储库108中的一个或多个键/值行中的写租用列304(参见图1)。写租用列304可以包括数据库引擎114已经获取写租用的指示。在所图示的示例中,这通过提供时间戳。然而,这不是被要求的,并且其他实施例可以以其他方式实现该功能。特别地,在一些实施例中,绝不针对其表示的时间值读取时间戳。相反,实施例可以仅观察值未针对某个时间段改变。当条目尚未在大量的时间段改变时,条目可以被认为是终止的,并且其他写入器可以窃取租用。因此,条目不需要是时间戳。
事务状态行212还包括被存储在键/值存储库108中的一个或多个键/值行中的当前事务列306。当前事务列306可以包括单调地增加的标识符,其标识已开始的特定事务。
事务状态行212还包括被存储在键/值存储库108中的一个或多个键/值行中的未提交的事务列表列308。未提交的事务列表列308可以包括将特定事务标识为是未提交的事务的标识符。未提交的事务列表列308可以包括阵列,并且可以包括未提交的多个不同的事务。该阵列可以被用于读取数据并且用在垃圾回收操作中,如下面将更详细地描述的。
参考图1,远程存储系统104被配置为提供被存储在数据存储库106中的事务状态行212(参见图3),并且从多个不同的本地系统(统称为102)接收更新的事务状态。特别地,本地系统102中的每个本地系统102可以具有对数据存储库106执行事务数据库操作以读取或者写入待操作的数据的数据库引擎114。这样,数个本地系统102可以通过读取事务状态行212(参见图3)并且向数据存储库106提供更新的事务状态,而不需要使用远程存储系统处的传统数据库逻辑,而是允许事务数据库逻辑在本地系统102处实现,来对数据存储库106全部执行事务数据库操作。此外,本地系统102可以一起协调以执行事务的不同的部分。例如,一个本地系统可以关于事务通知另一本地系统,并且请求另一本地系统完成事务。如果第一本地系统标识对于第二本地系统的事务标识符,那么第二本地系统可以使用事务状态行中的事务状态来完成事务。
再一次返回图3,当事务数据处理动作被执行时,图示了对事务状态的改变。特别地,示出了六个不同的时间点。现在将针对使用六个不同的时间点的实施例解释事务处理的示例。为了安全,在所图示的示例中,利用线性最佳化语义进行对于事务状态行的更新,使得空转写入器将保证仅一个将成功。
在时间点1处,图示了初始状态。在该初始状态中,无写入器(例如,本地系统处的数据库引擎)当前正对与事务状态行212相关联的数据存储库行执行事务数据处理动作。在所图示的初始状态中,20个事务已经在过去发生,并且不存在未提交的事务。
在时间点2处,在具有与事务状态行212相关联的数据存储行的逻辑数据存储库上获得写租用。特别地,在所示的示例中,写租用列304利用一些数据被更新以指示已经取得写租用。在当前示例中,写租用列304利用日期和时间戳被更新。
在时间点3处,具有与事务状态行212相关联的数据存储行的逻辑数据存储库上的事务开始。开始事务采取的一个动作是使当前事务列306中的计数器递增,其中计数器值是与事务相关联的事务标识符。该事务标识符可以稍后被用于防止冲突的事务数据处理动作或者用于垃圾回收,如下面将更详细地图示的。事务标识符被添加到未提交的事务列308。通过具有添加到该列的计数器值,可以标识冲突事务。特别地,如下面将更详细地图示的,当事务提交时,事务标识符从未提交的事务列308被移除。然而,如果事务未提交,则事务标识符被允许保持在未提交的事务列308中。该功能可以被用于完成快照隔离,如结合图4的描述下面将更详细地图示的。
在时间点4处,实施例将数据写入(在该示例中)到与事务状态行212相关联的数据存储行。在所图示的示例中,更新写租用列304。这是写租用语义的一部分,使得等待写入的其他写入器将继续等待,因为其知道活动写入器仍然正在写入,而不是窃取租用。注意,这特定于该示例,并且其他实施例可以更新数据写入路径外部的写租用列304。
在时间点5处,事务提交。提交事务包括从未提交的事务列308清除事务标识符。如上文所指出的,如果执行回滚(而不是提交事务)的需要发生,可以实现对事务标识符不作为的无操作场景,这允许事务标识符(在这种情况下“21”)通过防止其被移除而保持在未提交的事务列308中。回滚通过利用版本数据库列将是自动化的,并且简单地不使用与事务标识符相关联的版本。特别地,后续事务被防止使用与被包括在未提交的事务列中的事务标识符相关联的版本行。
在时间点6处,发布写租用。在该示例中,这通过清除写租用列304来执行。当写租用列304具有其中的非终止条目时,其他写入器将不写入到与事务状态行212相关联的数据存储行。
虽然未特别地示出在示例中,但是可以实现各种优化。例如,获取写租用可以是事务的隐含开始。作为另一示例,提交或者回滚可以隐含地在下一事务的开始处开始。
现在参考图4,图示了快照隔离如何被实现的示例。在该示例中,本地系统102-1(参见图1)处的数据库引擎114作为读取器读取事务状态行212。在所图示的示例中,事务状态结构指示可能已提交的最高事务号是19,并且具有18的标识符的事务未被提交。
数据库引擎114查询各种版本行404。相同逻辑行的不同的版本与事务20、18、10、5和4相关联并且通过相同事务号递减排序。特别地,这些行中的每个行已经被附到版本行404,作为结合执行相关联的事务被写入的结果。使用该信息,当前事务可以标识与其他事务隔离操作的数据“快照”。
以下说明了所图示的示例中的行键的解剖结构。针对示例键“I:N:FILENAME.TXT:FFFFFFF...”,其中“I”是项表,“N”是‘文件名’索引,‘FILENAME.TXT’是索引的逻辑值。FFFFFFF...是反向行版本。因此,如一般化的解剖结构是[表]:[索引]:[索引值]:[反向版本]。从索引更不可知的(并且关于事务支持更多的)可以有用的备选表示是:[未修饰键行]:[反向版本],其中具有相同未修饰键行(和不同的版本)的多个物理行通过时间表示相同逻辑行的多个版本。
拒绝与事务号20相关联的版本行,因为其在当前事务(其是事务号19)之前被创建。与事务号18相关联的版本行被拒绝,因为其未提交。接受与事务号10相关联的版本行,因为其是在当前事务之前找到并且未出现在未提交的事务的列表中的下一行。拒绝与事务号5和4相关联的版本行,仅因为使用最新的可接受行。因此,实施例能够实现用于事务的快照隔离。
给定上文所说明的特定示例,现在说明连同与可以被包括在本发明的各种实施例中的这样的特征有关的其他细节的特征的一般标识。
实施例可以实现简化的“行版本”方案。事务状态行212被定义以保持关于当前事务状态的数据。事务状态将针对用于每个事务范围存在一次,并且事务操作不能跨越该边界读取/写入数据。
事务状态行212包括跟踪写租用以帮助加强单个写入器的写租用列304。当写事务开始时,写入器(例如,图1中所示的数据库引擎114)将向该列添加其当前时间(或者某个其他值)。存在全局更新时间(例如,1分钟),其中写入器更新其值以更新其租用。其他写入器被期望在通过在旧的写租用上进行相等性检查抢占不同的写入器之前等待至少全局更新时间。如果写租用在全局更新时间之后未改变,那么不同的写入器可以接管写租用以开始新事务。使用上文的图3中所图示的写租用列304来图示写租用跟踪的示例。
事务状态行212跟踪当前事务列306中的当前事务号。在所图示的示例中,这是当前事务的数目。对于读取器而言,除非其在未提交的事务列表列308中(下面更详细地讨论的),否则其意味着具有小于或等于该值的事务号是可信任的。在所图示的实施例中,对于写入器而言,其开始的下一事务将是该增量的事务号。使用上文的当前事务列306图示了跟踪当前事务号的示例。
使用未提交的事务列表列308的事务状态行212跟踪存在但是尚未提交的事务的列表。这提供标识特定事务是否被提交的能力。在所图示的示例中,未提交的事务列表列308是不可信任的事务号阵列。全部新写入事务被添加到该列表,并且在成功的提交时被移除。在一些实施例中(诸如使用来自华盛顿雷德蒙德的微软公司的Azure表列的那些实施例),存在二进制数据的64k的限制。这强加在新写入事务可以开始之前8192个失败事务的限制,但是多个列可以被用于增加该限制。
键/值存储库108的表中的数据行(参见例如,图2中的版本行204)被版本化。这意味着当数据在数据行中操作时,新行被创建以从操作存储数据,但是先前数据(在其存在的程度上)被允许保持(直到由垃圾回收移除)而不是由不同的版本标识符标识。在一些实施例中,版本标识符是用于创建更新的事务的事务标识符。例如,用于数据行的键可以分成两个部分。虽然例如正常键值将是[键值],那么写入到键/值存储库108的物理表的实际键将是[键值]:[事务号],其中[事务号]标识已创建对应于[键值]的数据的事务的事务标识符。注意,实施例可以反转用于数据行(而不是垃圾回收行)的事务号,作为优化,使得结果以查询将使用他们的次序被返回(即,首先最大事务号)。对键/值存储库108中的版本行204的写入是加法操作而不管逻辑操作(是否是创建、更新或删除)。注意,如果单个键在相同事务中被写入超过一次,则全部附加写入将是物理更新操作。在所图示的示例中,键/值存储库108的表中的版本行204被写作两个行。如上文所描述的主要数据行204-1,以及垃圾回收帮助器行208-1。对于该示例而言,在该情况中写入的键可以是GC:[事务号]:[键值]。
读取器(例如,数据库引擎114)通过读取事务状态行212并且持续其用于事务的持续时间而与事务交互。事务状态的该单个视图帮助实现快照隔离,如下面更详细地解释的。
读取器随着范围扫描而执行全部查询。即使查询是点查询,扫描也读取用于适于查询的键值的足够的物理行版本,直到可接受行被找到。数据库引擎114的查询逻辑使用事务状态行212数据,以基于在事务开始时数据库的快照视图,来标识所返回的哪个(哪些)物理行是有效的。下面将更详细地解释这如何实现的细节。
实施例还可以包括垃圾回收机制。垃圾回收机制标识小于由活动读取器或者写入器当前使用中的任何事务号的事务号。垃圾回收机制清理全部物理数据和现在陈旧的垃圾回收行。也即,不能够被认为是对于任何当前或者未来读取器或者写入器有效的物理行。垃圾回收机制可以在后台中运行,或者可以在写路径中的正常数据库访问期间运行。
以下现在说明各种附加细节和示例。
写入器事务将被给予相关联的事务号,其当事务开始时从事务状态行212被获得。例如,如果这是事务状态行212中的事务状态行的初始状态:
当前事务 | 未提交的事务 | 写租用 |
6 | 1,3 | 空 |
然后新的写入事务将通过做出以下修改而开始具有7的事务标识符的新事务:
当前事务 | 未提交的事务 | 写租用 |
6 | 1,3,7 | <时间> |
写入器(例如,图1中的数据库引擎114)可以然后使用具有7的事务标识符的事务来写入数据行:当是时候提交时,写入器将更新事务状态行如下:
注意,虽然在该示例中完成,写租用不必在事务提交时被清除。在不退出写租用的情况下,另一写事务可以通过相同写入器立即地被开始。
实施例可以被实现以确保仅一个写入器每次活动地写入一组版本行。注意,该一次一个行为限于由事务状态行212保护的数据(参见图3)。
当写入器是活动的并且第二写入器期望写入到键/值存储库的版本行时,其将读取事务状态行212并且检查写租用列304。如果写租用值存在,则第二写入器将在其可以确定现有事务是否被放弃之前等待全局更新时间的终止。如果写租用值尚未在第一调用与全局更新时间的终止之间改变,则第二写入器可以抢占第一写入器的事务。如果写租用值已改变,那么第二写入器假定第一写入器仍然是活动的,并且继续等待另一全局更新时间。
如果第一写入器的事务仍然是打开的并且更新时间正接近,其更新写租用列304中的写租用值以防止另一写入器抢占其事务。
事务状态行212的更新经由如果-匹配表头使用线性最佳化以确保另一写入器尚未改变结构。如果ETAG失配发生,则其意味着另一写入器已开始事务。因此,第一写入器的已经打开的事务丢失并且已经隐含地回滚。回滚自然地发生,因为事务号将保持在未提交的事务列表上。
一旦事务已开始,写入器或者读取器被给予事务号,其被用于事务的持续时间。表方案允许行版本化。如此,添加行、修改行或者删除行的任何逻辑动作将全部添加行。注意:如果单个行在单个事务的范围内被修改多次,则表操作变为原始地现在添加到版本化行204的更新(参见图2)。注意,删除的行简单地被修改以指示物理行应该在“删除”状态中。
如在图4中所图示的,每个版本化行包括:分区键列450,其存储分区标识符值;行键列452,其存储与事务号值连结的行键值;事务号列456,其存储事务号值;删除列454,其指示行是否是删除行;以及数据列458,其存储实际行数据。更特别地,分区标识符值是独立于行版本化的将适于行的值。行键值是独立于行版本化的将适于行的值。事务号值是在其开始时被指派给事务的事务号。其被附加到行键值。行键列452中使用的事务号值被示出用于在列456中以帮助读取器读取事务号。列456通常未包括在数据库中。行键列452中的事务号值出于垃圾回收目的而非规则查询目的。删除列454包括行是否已被删除的指示器,并且被认为是其是否不存在于逻辑数据库中。键/值存储库中的行的存在被用于抑制接受在事务号20处(在所图示的示例中)和上文运行的事务的非删除行中的任一个。数据列458保持被序列化为二进制并且封装为单个列的实际表的内容。然而,当存在每列的数据限制时,多个列可以被用于存储数据。
事务读取器通过在与版本行(参见图4)中的表数据交互之前读取事务状态行212(参见图4)的事务状态行来实现快照隔离。其将使用当前事务列306和未提交的事务列表列308的组合,以标识什么事务号值是可信任的。
如果版本行([例如,事务值])中的值小于或者等于被包括在当前事务列306中的读取器的事务号([例如,事务隔离值]),则版本行中的数据被认为是可信任的。对此的例外是当版本行的事务号在未提交的事务列表列308中(指示尚未提交或者回滚)。如果多个行被认为是可信任的,则使用具有最高事务号值的行。更正式地说:
1.[事务值]>[事务隔离值]
a.行来自未来事务,或者进行中的事务。
b.值不能被信任
2.[事务值]<=[事务隔离值],但是[事务值]在未提交的事务列表中
a.行来自回滚事务,或者进行中的事务
b.值不能被信任
3.[事务值]<=[事务隔离值],并且[事务值]不在未提交的事务列表中
a.值可以是可信任的。数个行可以在该状态中,并且具有最大[事务值]值的行被使用。
b.如果具有在该状态中的最大[事务值]的行被标记有[删除]==真,则逻辑行不存在。
利用该方法,事务读取器实现用于其读取的快照隔离,因为其可以标识信任的适当的行版本,并且可以在提交的、未提交的或者回滚事务之间进行区分。
该方法可以被用于其预测完全地被包含在分区键和行键内的查询。具有其他预测的查询可以返回不表示最新提交的事务号的行,同时省略表示最新事务号的行。作为全部数据列的二进制序列化的数据列通过设计防止该种类的不安全的查询预测。如果事务读取器也是写入器,则其也信任其自身的事务行数据,而不管其事务号在未提交的列表上。
以下现在说明关于垃圾回收的细节。可以执行垃圾回收,使得来自滚回事务的行被移除。备选地或者附加地,可以执行垃圾回收,使得如果存在更新的提交的事务行,则可以移除来自先前地提交的事务的行。实施例确保在这两种情况下,不存在活动地使用垃圾回收行的活动读取器,或者仍然在垃圾回收事务上操作的写入器。
垃圾回收系统116可以被包括在数据库引擎114中,并且可以分为各自具有其自己的功能的数个角色。例如,垃圾回收系统116包括垃圾回收调度器118。垃圾回收调度器118标识清理事务号,其是清理的开放上限事务号。垃圾回收系统116包括垃圾回收运行器120。垃圾回收运行器120执行垃圾回收算法以清理键/值存储库。垃圾回收系统116结合数据库写入器122工作。数据库写入器122将提示写入到键/值存储库以允许垃圾回收运行器120知道删除什么。垃圾回收系统116还结合数据库读取器124工作。如果其将由清理事务号影响,则数据库读取器124有效地从运行抢占垃圾回收。垃圾回收可以例如以两种方式运行。第一,垃圾回收可以在后台中运行,这意味着某个调度事件活动地与数据库引擎114交互以执行垃圾回收调度和清理。备选地或者附加地,垃圾回收可以根据写路径运行,这意味着当写入发生时,旧垃圾可以同时被清理。
任何时候数据库写入器122在事务期间添加或者修改物理行,这意味着可以存在在事务提交的情况下将清理的取代行(例如,较低事务号中的版本行)。如果事务回滚,那么在当前事务期间创建的物理版本行可以被移除,并且取代行未被清理。为了发现哪些版本行在垃圾回收期间将被清理,一个附加垃圾回收行被添加到数据行204中的每个物理数据行的键/值存储库的垃圾回收行208(参见图2)。例如,添加具有两个物理行的逻辑行还将添加两个物理垃圾回收数据行如下:
最后两个行(‘垃圾回收’)允许垃圾回收运行器120标识已经变得陈旧作为当前事务的提交的结果的较旧的物理行,或者被清理作为当前事务的回滚的结果的新的物理行。注意,‘事务值’(指示当前事务)是垃圾回收行中的索引数据的前缀而不是后缀。还注意,垃圾回收:事务值未反转,而数据行具有反转的事务值。
如果新物理行取代较旧物理行,则O事务列被填充。其将不存在于其中物理行合理新的情况中(类似之前绝不看到的新索引值)。
存在其中物理行可以变得与垃圾回收器孤立的特殊情况。当物理行被标记为删除时(删除=真),那么不存在将包括其垃圾回收结构中的该行的O事务的未来事务。存在其中这可以发生的两个示例场景。首先,修改已经现有的逻辑行,并且某些索引改变导致待标记为删除=真的索引物理行的值。在第二示例中,行在相同事务中被修改多次,使得物理行被添加在事务中,并且然后在相同事务中被标记为删除=真。
这两种情况的方案是相同的。无论何时数据行进入删除=真状态,对应的垃圾回收行设定删除=真。
注意,在以上第二情况中,存在其中单个事务从删除=真状态进行并且然后稍后到删除=假状态的特殊情况。在第一更新中(删除=真),将存在引用删除行的垃圾回收行,以及删除=真。当第二更新发生时(删除=假),原始垃圾回收行被修改以设定删除=假。存储器内跟踪可以被用于基于在当前事务中已经写入的内容来跟踪垃圾回收行是否将被添加或者更新。注意,该跟踪以任一方式存在以确定规则数据行是否是加或者更新。
垃圾回收行与其对应的数据行(诸如在从华盛顿雷德蒙德的微软公司可获得的Azure存储装置中的相同实体分批事务中)原子地被写作规则键/值存储行。
当垃圾回收操作时,其选择事务号来清理。这通过垃圾回收调度器118完成。垃圾回收运行器120从比所选择的事务号更低的事务号移除陈旧数据,并且在一些情况下移除等于事务号的陈旧行(例如,未提交的事务可以完全被清理)。
虽然在所说明的示例中,单个事务号值被选择用于清理,并且实际的清理过程针对事务号值的范围发生。特别地,将在单个垃圾回收经过中处理最后的成功清理与所选择的事务号之间的事务。
垃圾回收自身由垃圾回收运行器120来执行。为了标识当清理特定事务号(事务值)时删除的行,进行以下查询:
行键<=‘垃圾回收:[事务值];’以及
行键>‘垃圾回收:’
注意,使用该过程,最旧事务号(通常被标识为最小事务号)首先被清理。
查询的结果将返回小于或等于垃圾回收尚未发生的清理事务号的所有事务的所有垃圾回收行。对于返回的每个垃圾回收行而言,清理将发生如下:
●如果事务号是提交的事务
○对于对应的行数据的物理行键可以基于O事务列(如果存在的话)被形成以移除取代行。
○如果删除=真,物理行键可以基于事务值针对对应的数据行被形成
●如果事务号是未提交的事务
○物理行键可以基于事务值针对对应的数据行被形成
●垃圾回收行自身还从上表说明性地被删除:
假定事务值是提交的事务,第一垃圾回收行将导致以下删除:
[索引1]:[索引1值]:[O事务]
垃圾回收:[事务值]:[索引1]:[索引1值]
第二垃圾回收行将导致以下删除(注意,归因于现在被删除=l的额外删除):
[索引2]:[索引2值]:[O事务]
[索引2]:[索引2值]:[事务值]
垃圾回收:[事务值]:[索引2]:[索引2值]
垃圾回收行在与正被删除的行相同的实体分批事务中被删除作为该行的结果。虽然清理可以是分批的,但是其未并行发生,因为较旧的事务首先被清理。这由于删除的行而被完成。如果更新的删除行在更旧行之前被删除,活动读取器可以检索更旧的行版本,因为其未看到删除的行。
在不存在垃圾回收的更多行之后,事务状态行212可以使未提交的事务列表308中的未提交事务的其列表被清理。所有事务号<=事务号被清理可以从列表被移除。
虽然清理事务状态行212中的未提交的事务列表308可以与活动写入器竞争,但是其他操作将不因为写入到事务状态行212而将抢占活动写入器(由于ETAG改变)。因此,垃圾回收将在写租用被声明的情况下跳过该步骤,这允许下一通过完成清理。
在未提交的事务列表列308满了的情况下,存在用于阻塞状态的潜在性,这防止新的写入器。事务状态行可能无法进行没有人接管的陈旧写租用。如此,一些实施例可以实现在写租用列304中的写租用值足够旧的情况下写入到事务状态行的垃圾回收。虽然这将在一个仍然活动的情况下抢占活动写入器,但是这是非常稀少的(并且可以指示不健康的写入器)。这样做将不引起永久损害,但是将使抢占的写入器发生故障。
以上垃圾回收算法将实际的垃圾回收算法与确定垃圾回收多少数据并且在何处垃圾回收自身执行拆开。利用没有读取器或者写入器与小于如由垃圾回收调度器118保证的指定事务号的事务号当前活动的假定,垃圾回收运行器120采取事务号值作为输入。
标识安全事务号用于垃圾回收操作是垃圾回收调度器118的作业。该事务号将确定多少数据收集上被垃圾回收。注意,垃圾回收调度此处将仅标识什么垃圾回收安全,而非确定何时并且何处垃圾回收算法的调度和执行将运行的过程。
对于标识用于垃圾回收的事务号操作的垃圾回收调度器而言,数个控制行被包括在键/值存储库108的事务状态行202中(参见图2)。
事务状态行212是主要事务控制数据结构。
垃圾回收考虑行214用于广告垃圾回收正试图在特定事务号处被调度。在所图示的示例中,存在两个可能的状态值:‘考虑中’,以及‘延迟’。还存在期限,其指示何时考虑的事务号将被调度。活动读取器和写入器可以检测该行的存在,并且将状态从“考虑中”改变到“延迟”,以在该事务号处延迟垃圾回收。
垃圾回收调度行216被用于指示下一垃圾回收通过将在先前地考虑的值处运行。当事务号到达该行时,保证不存在针对事务号操作的更多活动读取器/写入器。
下面是示例。考虑初始状态:
然后,垃圾回收调度器118决定尝试在1:00处调度垃圾回收。
假定其倾向于在10分钟之后进行垃圾回收。如果活动读取器(或者进行读取的写入器)仍然针对事务号<10工作,则其将通过修改考虑行214检测该当前状态。注意,活动事务号可以在该时间段期间向前滚动:
然后,垃圾回收调度器118将稍后(在1:10处)返回检查以查看垃圾回收是否可以实际上被调度。这可以比1:10更晚,或者比1:10更早。存在执行比期限期间更频繁地调度器的优点,因为如果读取器/写入器将状态设定为‘延迟的’,调度器可以更积极地将其转换回到‘考虑中’(利用期限)。其将通知延迟的状态,并且将其返回设定以重新考虑新期限:
如果无活动读取器/写入器恢复延迟垃圾回收,则垃圾回收调度器118可以通过使调度结束完成其作业。在该状态中,下一垃圾回收运行将针对事务号=10操作:
调度算法可以甚至当‘事务:垃圾回收:调度的’已经具有值时继续运行。
即使其不是空,也可以更新事务就绪。调度器算法中的没有东西必须接触‘事务:事务’行(即,事务状态行212)。这使其写入对于可以活动地提升当前事务号的任何活动写入器“不可见”。
要考虑的事务值贯穿考虑->延迟->考虑转换而未改变。原因是避免从在陈旧事务号绝不解决以垃圾回收的过度活动读取器/写入器。
当其处理其操作时,可以使活动读取器/写入器读取‘事务:垃圾回收:调度的’行(即,调度行216)。如果事务就绪或事务最后运行列包含大于读取器/写入器的活动事务号的事务号,那么警报可以被引发,因为保护机制已经失败。
如上文所指出的,活动读取器和写入器参与垃圾回收器调度器算法,以在其将由事务号影响的情况下延迟垃圾回收的执行。垃圾回收更新间隔被定义为其中读取器和写入器返回检查事务状态行202的时间间隔。这可以被完成以确认要考虑的事务值中的事务:垃圾回收:考虑值不大于事务的事务号。如果其是,则状态被设定为延迟的。在备选实施例中,写入器可以进行检查,以针对大于或等于延迟。但是这不应当是必要的,因为要考虑的事务值不应当在写租用被保持时设定到当前事务号。
读取器和写入器还可以返回检查以确认用于事务就绪和事务最后运行的事务:垃圾回收:考虑值不大于事务的事务号。事务应当致死地失败,在这种情况下
用于检查的逻辑如下,无论何时从键/值存储库108的版本行读取或者写入:
垃圾回收间隔更新时间满足()将检查内部计时器,这测量最后时间垃圾回收被确认以不被标记为用于影响事务号的‘考虑’。如果垃圾回收更新间隔已经满足,则其返还真。
延迟垃圾回收()将从Azure表读取事务:垃圾收集行,并且执行数个检查。如果事务就绪或事务最后运行被设定为影响事务号,则调用将致死地失败,因为垃圾回收已经被调度并且我们的保护机制已经失败。如果要考虑的事务值被设定为影响事务号并且状态被设定为‘考虑’,则跟踪行的内部计时器将被更新以将状态设定为‘延迟’。跟踪垃圾回收更新间隔的内部计时器还将被重置。
垃圾回收间隔更新时间满足()调用和潜在地延迟垃圾回收()在执行读或者写()函数,因为未知的时间量可以在第一延迟垃圾回收()调用与执行读或者写()调用之间经过。如果系统整体地过负载或者过负荷,则这可以在几分钟内被测量。第二调用确保如果垃圾回收在先验检查之后运行,则无论什么仅从数据库被读取不能被使用。由于写入器锁,因而写入将不需要保护。
以上算法使用定时帮助保证在事务号将被调度之前,无影响活动读取器/写入器存在。由于期限是时间戳,因而其经受时间偏移。
考虑以下示例,其中两个机器二者有效地运行调度器算法。在该示例中,机器1是在壁钟时间之后5分钟,并且机器2是在壁钟时间之前5分钟。总计,存在10分钟的时钟偏移。
在以上示例中,仅壁钟时间的一分钟已经经过,但是垃圾回收调度器算法已经将事务号调度到垃圾回收。本发明将引起活动读取器/写入器10分钟以延迟垃圾回收,但是相反仅1分钟被给予。
以下描述定义‘最大潜在漂移’的一个机制,作为潜在的时钟偏移假定,并且使系统安全地调度垃圾回收。应当理解,可以在其他实施例中实现其他机制。考虑以下定义:
最大潜在漂移(D)。在数据将变得损坏之前(因为垃圾回收被允许太早地运行),机器的时钟的最大时间跨度可以被容忍为不正确。
目标垃圾回收间隔。当垃圾回收被考虑时与当其被调度以安全地运行时之间的目标时间跨度。该值未考虑时钟偏移。
垃圾回收调度间隔。确定当垃圾回收可以运行时的逻辑时间跨度,其被用于计算调度的‘期限’列。这解释跨越机器的偏移,并且通过以下被计算:(D*2)+(垃圾回收调度间隔)。
垃圾回收更新间隔。长运行读取器/写入器检查事务:垃圾回收行以延迟垃圾回收调度的间隔。这小于‘目标垃圾回收间隔’/2。
推荐以下值:
注意,在几天内测量‘目标垃圾回收间隔’。这允许测量其中垃圾回收落后或者未运行的系统。这是防御措施,使得如果关键数据恶化故障正被调查,垃圾回收可以在不降低服务的情况下被禁止一段时间。三天间隔将导致在最差情况下的数据建立的六天,以及垃圾回收清理垃圾的三天。
在一些实施例中,可以通过执行本地时间测量结果的数据中心中的一个机器来避免时钟偏移的敏感性。由于期限的开始和结束时间是本地记号测量,因而其将不易造成时间偏移。
以下讨论现在指代可以执行的若干方法和方法动作。虽然可以以特定次序讨论或者以如以特定次序发生的流程图中图示方法步骤,但是除非特别说明或者要求,否则不要求特定排序,因为动作取决于另一动作在动作被执行之前被完成。
现在参考图5,图示了方法500。可以在包括耦合到远程存储系统的多个本地系统的计算环境中实践方法500。远程存储系统包括键/值存储库。方法500包括用于对被存储为远程存储系统处的一个或多个数据键/值对的数据上在本地系统处的数据库引擎处的数据执行事务的动作。这可以通过使用键/值存储库来存储用于当对被存储在远程存储系统处的数据执行事务时由本地系统处的事务逻辑使用的事务状态完成。这样,可以在具有由远程存储系统使用的最小事务数据处理逻辑的远程存储系统上执行事务。
方法500包括在本地系统处,接收对被存储在远程存储系统处的数据执行事务的请求(动作502)。例如,如在图1中所图示的,数据库引擎114可以从数据库客户端110接收请求以对键/值存储库108中的数据执行事务。
方法500还包括从远程存储系统获得被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态(动作504)。例如,数据库引擎114可以获得图2中所图示的事务状态行202中的一个或多个。
方法500还包括通过更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态,来对键/值存储库中的一个或多个数据键/值对事务性地执行一个或多个数据操作(动作506)。
例如,更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态可以包括:更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值行的事务状态中的写租用字段,以指示数据库引擎已经获取一个或多个数据键/值对上的写租用。在图3中上文图示了该示例,其中写租用列304被更新。
在备选或者附加示例中,更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态包括:更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值行的事务状态中的当前事务字段,以包括标识事务在一个或多个数据键/值对中的数据上已经开始的标识符。在图3中上文图示了该示例,其中当前事务列306被更新。
在备选或者附加示例中,更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态包括:更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值行的事务状态中的未提交的事务字段,以执行以下各项中的至少一项:添加或者移除将事务标识为一个或多个数据键/值对中的数据上的未提交的事务的一个或多个标识符。在图3中上文图示了该示例,其中未提交的事务列308被更新。
方法还可以包括通过从远程存储系统更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态来提交一个或多个数据键/值对中的数据上的事务。例如,这可以包括通过移除将事务标识为一个或多个数据键/值对中的数据上的未提交的事务的标识符来提交一个或多个数据键/值对中的数据上的事务。如上文所图示的,从未提交的事务列308移除标识事务的标识符使得该事务变得耐久,这是因为版本行204(参见图2)中的行然后具有可以由后续事务使用的有效提交数据。
方法500还可以包括确定一个或多个数据键/值对中的数据上的事务应当停止并且回滚,并且因此,防止更新被存储为远程存储系统处的键/值存储库中的一个或多个键/值行的事务状态中的未提交的事务字段。这防止将事务标识为是一个或多个数据键/值对中的数据上的未提交的事务的标识符的移除。这可以被用于防止后续事务使用基本上使行中的数据无效的版本行204中的行。特别地,如果该先前事务被指示为在未提交的事务字段中的阵列中未提交,则任何稍后事务将不使用来自由先前事务创建的版本行的数据。
方法500还可以包括接收不同的计算系统已经开始一个或多个数据键/值对中的数据上的事务的通知,但是事务尚未被提交或者被中止;并且因此,使用被存储为远程存储系统处的键/值存储库中的一个或多个键/值对的事务状态恢复包括以下各项中的至少一项的事务:对一个或多个数据键/值对中的数据执行数据操作;中止事务;或者提交事务。因此例如本地系统102-2可以具有以在此先前地所指示的方式开始事务的数据库引擎。本地系统102-2可以不完成事务,但是可以向本地系统102-1指示其应当完成事务。如果本地系统102-1知道事务标识符(其可以例如从本地系统102-2接收),那么本地系统102-1可以使用事务状态(诸如事务状态行202中的事务状态)来完成事务。完成事务可以包括:更新版本行204中的至少一个键/值对;提交事务(诸如通过更新针对提交事务如上文所指示的事务状态);或者中止事务(诸如通过防止从未提交的事务列表移除事务标识符)。
进一步地,可以通过包括一个或多个处理器和计算机可读介质(诸如计算机存储器)来实践方法。特别地,计算机存储可以存储计算机可执行指令,其当由一个或多个处理器执行时使得各种功能被执行,诸如实施例中所记载的动作。
本发明的实施例可以包括或者利用包括计算机硬件的专用或通用计算机,如下面更详细地讨论的。本发明的范围内的实施例还包括用于携带或者存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可以由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。携带计算机可执行指令的计算机可读介质是传输介质。因此,以示例而非限制的方式,本发明的实施例可以包括至少两个不同地不同的种类的计算机可读介质:物理计算机可读存储介质和传输计算机可读介质。
物理计算机可读存储介质包括RAM、ROM、EEPROM、CD-ROM或者其他光盘存储装置(诸如CD、DVD等)、磁盘存储装置或者其他磁性存储设备或者可以被用于以计算机可执行指令或数据结构的形式存储期望的程序代码装置,并且可以由通用或专用计算机来访问的任何其他介质。
“网络”被定义为实现计算机系统和/或模块和/或其他电子设备之间的电子数据的传输的一个或多个数据链路。当信息通过网络或其他通信连接(或者硬连线、无线或者硬连线或无线的组合)被传送或被提供到计算机时,计算机适当地将连接视为传输介质。传输介质可以包括可以网络和/或数据链路,其被用于以计算机可执行指令或数据结构的形式携带期望的程序代码装置并且可以由通用或专用计算机访问。上文的组合也被包括在计算机可读介质的范围内。
进一步地,在到达各种计算机系统组件时,以计算机可执行指令或数据结构的形式的程序代码装置可以从传输介质自动地传送到物理计算机可读存储介质((或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可以被缓冲在网络接口模块(例如,“NIC”)内的RAM中,并且然后最终地被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因此,计算机可读物理存储介质可以被包括在还(或甚至主要地)利用传输介质的计算机系统组件中。
计算机可执行指令包括例如使得通用计算机、专用计算机或者专用处理设备执行特定功能或功能组的指令和数据。计算机可执行指令可以是例如二进制、中间格式指令(诸如汇编语言或甚至源代码)。虽然已经以特定于结构特征和/或方法动作的语言描述主题,但是将理解到,所附的权利要求中定义的主题不必限于上文所描述的特定特征或动作。而是,所描述的特征和行为被公开为实现权利要求的示例形式。
本领域的技术人员将理解到,本发明可以被实践在具有许多类型的计算机系统配置的网络计算环境中,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、可穿戴设备、多处理器系统、基于微处理器或可编程的消费者电子产品、网络PC、小型计算机、大型计算机、移动电话、PDA、平板电脑、寻呼机、手表、路由器、交换机等。本发明还可以被实践在其中通过网络链接(或者通过硬连线数据链路、无线数据链路或者通过硬连线数据链路和无线数据链路的组合)本地计算机系统和远程计算机系统并且二者执行任务的分布式系统环境中。在分布式系统环境中,程序模块可以被定位在本地存储器存储设备和远程存储器存储设备二者中。
备选地或者另外,可以至少部分地通过一个或多个硬件逻辑部件执行在此所描述的功能。例如,并且非限制性地,可以使用的说明性类型的硬件逻辑组件:包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。
在不脱离其精神或特点的情况下,可以以其他特定形式实现本发明。所描述的方面将在所有方面中仅被认为是说明性而非限制性的。因此,本发明的范围由所附的权利要求书,而不是由前述说明书指示。落在权利要求的等效物的意义和范围内的所有改变将被包含在权利要求的范围内。
Claims (10)
1.一种计算系统,其被配置为被耦合以对被存储在远程存储系统处的数据执行事务,所述系统包括:
数据库客户端,其中所述数据库客户端包括被配置为允许用户使用所述数据库客户端来请求数据库操作的接口;
数据库引擎,其被耦合到所述数据库客户端,并且被配置为从所述数据库客户端接收对于数据库操作的请求;
其中所述数据库引擎被配置为从所述远程存储系统获得并且操作事务状态,所述事务状态被存储为在所述远程存储系统处的键/值存储库中的一个或多个键/值对;以及
其中所述数据库引擎被配置为使用所述事务状态来对被存储为所述键/值存储库中的一个或多个数据键/值对的数据事务性地执行数据操作。
2.根据权利要求1所述的计算系统,其中所述数据库引擎被配置为更新被存储为在所述远程存储系统处的所述键/值存储库中的一个或多个键/值行的所述事务状态中的写租用字段,以指示所述数据库引擎已经获取所述一个或多个数据键/值对上的写租用。
3.根据权利要求1所述的计算系统,其中所述数据库引擎被配置为更新被存储为在所述远程存储系统处的所述键/值存储库中的一个或多个键/值行的所述事务状态中的当前事务字段,以包括标识在所述一个或多个数据键/值对中的数据上已经开始的特定事务的标识符。
4.根据权利要求1所述的计算系统,其中所述数据库引擎被配置为更新被存储为在所述远程存储系统处的所述键/值存储库中的一个或多个键/值行的所述事务状态中的未提交的事务字段,以添加并且移除将特定事务标识为所述一个或多个数据键/值对中的数据上的未提交的事务的标识符。
5.根据权利要求1所述的计算系统,其中所述数据库引擎被配置为通过从所述远程存储系统更新被存储为在所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的所述事务状态来提交所述一个或多个数据键/值对中的数据上的事务。
6.一种使用本地系统处的数据库引擎来对被存储为远程存储系统处的一个或多个数据键/值对的数据执行事务的计算机实现的方法,所述计算机实现的方法由执行用于所述计算机实现的方法的计算机可执行指令的一个或多个处理器来执行,并且所述计算机实现的方法包括:
在所述本地系统处,接收对被存储在所述远程存储系统处的数据执行事务的请求;
从所述远程存储系统获得被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的事务状态;以及
通过更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的所述事务状态来对被存储为所述键/值存储库中的一个或多个数据键/值对的所述数据事务性地执行一个或多个数据操作。
7.根据权利要求6所述的计算机实现的方法,其中更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的所述事务状态包括:更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值行的所述事务状态中的写租用字段,以指示所述数据库引擎已经获取所述一个或多个数据键/值对上的写租用。
8.根据权利要求6所述的计算机实现的方法,其中更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的所述事务状态包括:更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值行的所述事务状态中的当前事务字段,以包括标识所述事务在所述一个或多个数据键/值对中的数据上已经开始的标识符。
9.根据权利要求6所述的计算机实现的方法,其中更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的所述事务状态包括:更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值行的所述事务状态中的未提交的事务字段,以执行以下中的至少一项:添加或者移除将所述事务标识为所述一个或多个数据键/值对中的数据上的未提交的事务的一个或多个标识符。
10.根据权利要求6所述的计算机实现的方法,还包括:通过从所述远程存储系统更新被存储为所述远程存储系统处的所述键/值存储库中的一个或多个键/值对的所述事务状态来提交所述一个或多个数据键/值对中的数据上的所述事务。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/754,406 US11301457B2 (en) | 2015-06-29 | 2015-06-29 | Transactional database layer above a distributed key/value store |
US14/754,406 | 2015-06-29 | ||
PCT/US2016/039922 WO2017004098A1 (en) | 2015-06-29 | 2016-06-29 | Transactional database layer above a distributed key/value store |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107710203A true CN107710203A (zh) | 2018-02-16 |
CN107710203B CN107710203B (zh) | 2021-05-07 |
Family
ID=56413875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680039150.0A Active CN107710203B (zh) | 2015-06-29 | 2016-06-29 | 分布式键/值存储库之上的事务数据库层 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11301457B2 (zh) |
EP (1) | EP3314473B1 (zh) |
CN (1) | CN107710203B (zh) |
WO (1) | WO2017004098A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111886582A (zh) * | 2019-09-12 | 2020-11-03 | 创新先进技术有限公司 | 日志结构存储系统 |
CN107710203B (zh) * | 2015-06-29 | 2021-05-07 | 微软技术许可有限责任公司 | 分布式键/值存储库之上的事务数据库层 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10970311B2 (en) * | 2015-12-07 | 2021-04-06 | International Business Machines Corporation | Scalable snapshot isolation on non-transactional NoSQL |
US10394775B2 (en) | 2015-12-28 | 2019-08-27 | International Business Machines Corporation | Order constraint for transaction processing with snapshot isolation on non-transactional NoSQL servers |
US10585876B2 (en) * | 2016-04-07 | 2020-03-10 | International Business Machines Corporation | Providing snapshot isolation to a database management system |
US11423013B2 (en) * | 2019-05-30 | 2022-08-23 | Ebay Inc. | Transactions on non-transactional database |
US12061708B1 (en) | 2019-09-27 | 2024-08-13 | Amazon Technologies, Inc. | Remote tracking and identification of key access patterns for databases |
CN112463311B (zh) * | 2021-01-28 | 2021-06-08 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
US20220318227A1 (en) * | 2021-03-30 | 2022-10-06 | Dropbox, Inc. | Content management system for a distributed key-value database |
US11727157B2 (en) | 2021-07-22 | 2023-08-15 | International Business Machines Corporation | Building an encrypted document store |
Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5860070A (en) * | 1996-05-31 | 1999-01-12 | Oracle Corporation | Method and apparatus of enforcing uniqueness of a key value for a row in a data table |
JP2007334759A (ja) * | 2006-06-16 | 2007-12-27 | Oki Electric Ind Co Ltd | 情報漏洩防止装置、方法及びプログラム |
US7647503B2 (en) * | 1996-07-02 | 2010-01-12 | Wistaria Trading, Inc. | Optimization methods for the insertion, projection, and detection of digital watermarks in digital data |
CN102682071A (zh) * | 2011-03-07 | 2012-09-19 | 微软公司 | 用于主存储器数据库的高效的多版本锁定 |
US20130036136A1 (en) * | 2011-08-01 | 2013-02-07 | International Business Machines Corporation | Transaction processing system, method and program |
WO2013041852A2 (en) * | 2011-09-19 | 2013-03-28 | Cloudtran, Inc. | Scalable distributed transaction processing system |
CN103064964A (zh) * | 2012-12-29 | 2013-04-24 | 天津南大通用数据技术有限公司 | 一种支持分布式事务的数据库的连接方法 |
CN103106158A (zh) * | 2011-08-08 | 2013-05-15 | 株式会社东芝 | 包括键-值存储的存储器系统 |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库系统及其读写方法 |
US20130290243A1 (en) * | 2012-04-26 | 2013-10-31 | Cloudtree, Inc. | Method and system for transaction representation in append-only datastores |
US20130290283A1 (en) * | 2012-04-30 | 2013-10-31 | International Business Machines Corporation | Scm-conscious transactional key-value store |
CN103577588A (zh) * | 2013-11-12 | 2014-02-12 | 西安雷迪维护系统设备有限公司 | 一种云数据库中分布式事务的实现方法 |
CN103782574A (zh) * | 2011-09-09 | 2014-05-07 | 甲骨文国际公司 | 用于数据库事务的幂等性 |
US20140156618A1 (en) * | 2012-12-03 | 2014-06-05 | Vmware, Inc. | Distributed, Transactional Key-Value Store |
CN103890709A (zh) * | 2011-11-07 | 2014-06-25 | 英派尔科技开发有限公司 | 基于缓存的键值数据库映射和复制 |
US20140310259A1 (en) * | 2013-04-15 | 2014-10-16 | Vmware, Inc. | Dynamic Load Balancing During Distributed Query Processing Using Query Operator Motion |
CN104239357A (zh) * | 2013-06-21 | 2014-12-24 | Sap欧洲公司 | 用于数据库事务的并发请求处理 |
CN104239572A (zh) * | 2014-09-30 | 2014-12-24 | 普元信息技术股份有限公司 | 基于分布式缓存实现元数据分析的系统及方法 |
CN104504158A (zh) * | 2015-01-19 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种快速更新业务的内存缓存的方法和设备 |
US20150112999A1 (en) * | 2011-06-27 | 2015-04-23 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
CN104793988A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
US9348883B2 (en) * | 2011-06-01 | 2016-05-24 | Clustrix, Inc. | Systems and methods for replication replay in a relational database |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961865B1 (en) * | 2001-05-24 | 2005-11-01 | Oracle International Corporation | Techniques for resuming a transaction after an error |
US8504542B2 (en) * | 2011-09-02 | 2013-08-06 | Palantir Technologies, Inc. | Multi-row transactions |
US20130110767A1 (en) | 2011-10-26 | 2013-05-02 | Nec Laboratories America, Inc. | Online Transaction Processing |
US8738964B2 (en) | 2011-12-13 | 2014-05-27 | Red Hat, Inc. | Disk-free recovery of XA transactions for in-memory data grids |
CN102446226B (zh) | 2012-01-16 | 2015-09-16 | 北大方正集团有限公司 | 一种实现NoSQL的键值存储引擎的方法 |
WO2014008495A2 (en) | 2012-07-06 | 2014-01-09 | Cornell University | Managing dependencies between operations in a distributed system |
US9268834B2 (en) | 2012-12-13 | 2016-02-23 | Microsoft Technology Licensing, Llc | Distributed SQL query processing using key-value storage system |
US9244961B2 (en) * | 2012-12-14 | 2016-01-26 | Oracle International Corporation | Concurrent access for hierarchical data storage |
US9367346B2 (en) | 2013-02-20 | 2016-06-14 | Nec Corporation | Accelerating distributed transactions on key-value stores through dynamic lock localization |
US11301457B2 (en) | 2015-06-29 | 2022-04-12 | Microsoft Technology Licensing, Llc | Transactional database layer above a distributed key/value store |
-
2015
- 2015-06-29 US US14/754,406 patent/US11301457B2/en active Active
-
2016
- 2016-06-29 CN CN201680039150.0A patent/CN107710203B/zh active Active
- 2016-06-29 WO PCT/US2016/039922 patent/WO2017004098A1/en active Application Filing
- 2016-06-29 EP EP16739329.7A patent/EP3314473B1/en active Active
-
2022
- 2022-03-08 US US17/689,621 patent/US20220197896A1/en active Pending
Patent Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5860070A (en) * | 1996-05-31 | 1999-01-12 | Oracle Corporation | Method and apparatus of enforcing uniqueness of a key value for a row in a data table |
US7647503B2 (en) * | 1996-07-02 | 2010-01-12 | Wistaria Trading, Inc. | Optimization methods for the insertion, projection, and detection of digital watermarks in digital data |
JP2007334759A (ja) * | 2006-06-16 | 2007-12-27 | Oki Electric Ind Co Ltd | 情報漏洩防止装置、方法及びプログラム |
CN102682071A (zh) * | 2011-03-07 | 2012-09-19 | 微软公司 | 用于主存储器数据库的高效的多版本锁定 |
US9348883B2 (en) * | 2011-06-01 | 2016-05-24 | Clustrix, Inc. | Systems and methods for replication replay in a relational database |
US20150112999A1 (en) * | 2011-06-27 | 2015-04-23 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
US20130036136A1 (en) * | 2011-08-01 | 2013-02-07 | International Business Machines Corporation | Transaction processing system, method and program |
CN103106158A (zh) * | 2011-08-08 | 2013-05-15 | 株式会社东芝 | 包括键-值存储的存储器系统 |
CN103782574A (zh) * | 2011-09-09 | 2014-05-07 | 甲骨文国际公司 | 用于数据库事务的幂等性 |
WO2013041852A2 (en) * | 2011-09-19 | 2013-03-28 | Cloudtran, Inc. | Scalable distributed transaction processing system |
CN103890709A (zh) * | 2011-11-07 | 2014-06-25 | 英派尔科技开发有限公司 | 基于缓存的键值数据库映射和复制 |
US20130290243A1 (en) * | 2012-04-26 | 2013-10-31 | Cloudtree, Inc. | Method and system for transaction representation in append-only datastores |
US20130290283A1 (en) * | 2012-04-30 | 2013-10-31 | International Business Machines Corporation | Scm-conscious transactional key-value store |
US20140156618A1 (en) * | 2012-12-03 | 2014-06-05 | Vmware, Inc. | Distributed, Transactional Key-Value Store |
CN103064964A (zh) * | 2012-12-29 | 2013-04-24 | 天津南大通用数据技术有限公司 | 一种支持分布式事务的数据库的连接方法 |
US20140310259A1 (en) * | 2013-04-15 | 2014-10-16 | Vmware, Inc. | Dynamic Load Balancing During Distributed Query Processing Using Query Operator Motion |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库系统及其读写方法 |
CN104239357A (zh) * | 2013-06-21 | 2014-12-24 | Sap欧洲公司 | 用于数据库事务的并发请求处理 |
CN103577588A (zh) * | 2013-11-12 | 2014-02-12 | 西安雷迪维护系统设备有限公司 | 一种云数据库中分布式事务的实现方法 |
CN104793988A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
CN104239572A (zh) * | 2014-09-30 | 2014-12-24 | 普元信息技术股份有限公司 | 基于分布式缓存实现元数据分析的系统及方法 |
CN104504158A (zh) * | 2015-01-19 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种快速更新业务的内存缓存的方法和设备 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107710203B (zh) * | 2015-06-29 | 2021-05-07 | 微软技术许可有限责任公司 | 分布式键/值存储库之上的事务数据库层 |
US11301457B2 (en) | 2015-06-29 | 2022-04-12 | Microsoft Technology Licensing, Llc | Transactional database layer above a distributed key/value store |
CN111886582A (zh) * | 2019-09-12 | 2020-11-03 | 创新先进技术有限公司 | 日志结构存储系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107710203B (zh) | 2021-05-07 |
EP3314473A1 (en) | 2018-05-02 |
US11301457B2 (en) | 2022-04-12 |
WO2017004098A1 (en) | 2017-01-05 |
US20220197896A1 (en) | 2022-06-23 |
EP3314473B1 (en) | 2021-03-03 |
US20160378819A1 (en) | 2016-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107710203A (zh) | 分布式键/值存储库之上的事务数据库层 | |
CN107977376B (zh) | 分布式数据库系统及事务处理方法 | |
US20220067025A1 (en) | Ordering transaction requests in a distributed database according to an independently assigned sequence | |
CN108804112B (zh) | 一种区块链落账处理方法及系统 | |
CA2779181C (en) | System for updating an associative memory | |
US9621409B2 (en) | System and method for handling storage events in a distributed data grid | |
CN106030533B (zh) | 通过拆分过程执行自动重试事务 | |
US8935225B2 (en) | Persistent data storage techniques | |
CN109923534A (zh) | 对具有未提交事务的数据库记录的多版本并发控制 | |
US20100153397A1 (en) | Maintaining a relationship between two different items of data | |
ES2805755T3 (es) | Sistema y método para sincronización de sesión con sistemas externos independientes | |
US8666959B2 (en) | Data access device, data access method and data access program | |
Shraer et al. | Cloudkit: Structured storage for mobile applications | |
WO2023249673A1 (en) | Version control interface supporting time travel access of a data lake | |
EP1197876A2 (en) | Persistent data storage techniques | |
CN104111962B (zh) | 具有批量操作的增强型事务高速缓存 | |
US9766949B2 (en) | System and method for locking exclusive access to a divided resource | |
US10942912B1 (en) | Chain logging using key-value data storage | |
US11789922B1 (en) | Admitting for performance ordered operations of atomic transactions across a distributed database | |
Krishnan | Building big data applications | |
US20230236882A1 (en) | Event scheduler sub-system for aggregation, prioritization, and serialization of software application events | |
US20130166506A1 (en) | Data change management through use of a change control manager | |
US9652766B1 (en) | Managing data stored in memory locations having size limitations | |
CN110377614A (zh) | 一种分布式环境下的订单处理锁系统 | |
US9727621B2 (en) | Systems and methods for servicing database events |
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 |