CN104239357A - 用于数据库事务的并发请求处理 - Google Patents
用于数据库事务的并发请求处理 Download PDFInfo
- Publication number
- CN104239357A CN104239357A CN201310250265.2A CN201310250265A CN104239357A CN 104239357 A CN104239357 A CN 104239357A CN 201310250265 A CN201310250265 A CN 201310250265A CN 104239357 A CN104239357 A CN 104239357A
- Authority
- CN
- China
- Prior art keywords
- key assignments
- transactions requests
- data
- storage
- affairs
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
一种请求处理器,可以接收对将要使用数据库的数据运行的事务的事务请求,并且可以将该事务请求的第一事务请求分类为简单事务请求,并且将该事务请求的第二事务请求分类为复杂事务请求。键值存储引擎可以使用在收到第一事务请求的之前确定的、并且基于该数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务,并且如果有的话可以更新反映由第一事务引起的键值存储的改变的键值Δ。关系存储引擎可以造成所述至少一个处理器使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务,并且如果有的话可以更新反映由第二事务引起的关系存储的改变的关系Δ。同步器可以基于键值Δ和关系Δ来运行键值存储和关系存储的同步。
Description
技术领域
此说明书涉及用于数据库的事务请求处理。
背景技术
各种类型的数据库通常用于存储、管理、访问或者利用数据。在关联的数据库操作中,可以读取、创建、更新、删除、比较、合并或操纵数据。
在实践中,可以由许多不同的用户以重叠或并行的方式访问给定数据库。例如,许多用户可以在给定时间段之内向相同的数据库提交重叠的事务请求。在这种场景中,重要的是数据库之内的数据保持当前(current)、精确和一致。例如,在使用相同的数据满足来自第二用户的请求之前必须完成由第一用户做出的数据修改并使之可用,以便保证第二用户接收及时和精确的结果。
因此,可以延迟来自用户的事务请求直到与相同数据相关的先前的事务请求已经完成。在一些情况下,由给定用户感受到的结果延迟可以是极小或微小的。然而,在接收到大量并行事务请求的诸如上面谈到的那些情景中,用户可能感受不满意或不可接受的累积的延迟。
例如,具体地,诸如电子商务(e-commerce)或社交网络应用之类的基于网络的应用可以使上百万的用户能同时地尝试访问支持相应基于网络的应用的一个或多个数据库。因此在这种场景中以上描述的困难可能是显著的问题。作为结果,这种基于网络的应用的用户(例如,顾客)可能不满意,并且提供基于网络的应用的商户会感受在顾客的忠诚度和盈利方面的损失。
发明内容
根据一个一般方面,一种系统可以包括记录在计算机可读介质上的、并且可由至少一个处理器运行的指令。所述系统可以包括请求处理器,被配置为造成所述至少一个处理器接收对将要使用数据库的数据运行的事务的事务请求,并且还被配置为造成所述至少一个处理器将该事务请求的第一事务请求分类为简单事务请求,并且将该事务请求的第二事务请求分类为复杂事务请求。所述系统可以包括键(key)值存储引擎,被配置为造成所述至少一个处理器使用在接收到第一事务请求之前确定的并且基于所述数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务,并且还被配置为如果有的话则更新反映由第一事务引起的键值存储的改变的键值Δ(delta)。所述系统可以包括关系存储引擎,被配置为造成所述至少一个处理器使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务,并且还被配置为如果有的话则更新反映由第二事务引起的关系存储的改变的关系Δ。所述系统可以包括同步器,被配置为造成所述至少一个处理器基于键值Δ和关系Δ来运行键值存储和关系存储的同步。
实施方式可以包括以下特征中的一个或多个。例如,可以在包括数据库的数据库层从至少一个应用接收所述事务请求。
所述请求处理器可以被配置为使用键值存储的预先计算的结果基于描述其满意可能性的特征的分类标准来分类第一事务请求和第二事务请求。结果计算器可以被配置为造成所述至少一个处理器基于将要由请求处理器接收到的将来事务请求的预测可能性来计算键值存储的预先计算的结果。所述同步器可以被配置为造成结果计算器基于键值Δ和关系Δ与该同步共同地更新预先计算的结果。
所述键值存储引擎可以被配置为确定与第一事务请求关联的键,并且在键值存储之内执行相应值的查找。所述键值存储引擎可以包括无效通知器,被配置为基于键值Δ的更新来更新关系Δ。所述同步器可以被配置为基于关系Δ和从键值存储引擎的无效通知器接收到的更新来更新关系存储,以及其后清空关系Δ的内容。
所述关系存储引擎可以包括无效通知器,被配置为基于关系Δ的更新来更新键值Δ。所述同步器可以被配置为基于键值Δ和从关系存储引擎的无效通知器接收到的更新来更新键值存储,以及其后清空键值Δ的内容。
所述请求处理器、键值存储引擎、关系存储引擎以及同步器可以在系统的主存储器中实现。所述关系存储引擎可以被配置为造成所述至少一个处理器更新存储在非易失性存储器中的事务记录并且利用由第一事务或第二事务的运行引起的对数据库的任何改变来更新数据库。
根据另一一般方面,用于运行存储在计算机可读存储介质上的指令的计算机实现的方法可以包括:接收对将要使用数据库的数据运行的事务的事务请求,将该事务请求的第一事务请求分类为简单事务请求,以及将该事务请求的第二事务请求分类为复杂事务请求。所述方法可以包括使用在接收到第一事务请求之前确定的以及基于数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务,使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务,以及如果有的话则更新反映由第一事务引起的键值存储的改变的键值Δ。所述方法可以包括如果有的话则更新反映由第二事务引起的关系存储的改变的关系Δ,以及基于键值Δ和关系Δ运行键值存储和关系存储的同步。
实施方式可以包括以下特征中的一个或多个。例如,更新键值Δ可以包括基于键值Δ来更新关系Δ,以及更新关系Δ可以包括基于关系Δ来更新键值Δ。所述同步可以包括基于键值Δ和关系Δ与该同步共同地更新预先计算的结果。
根据另一一般方面,有形地具体实现在非临时性计算机可读存储介质上的计算机程序产品可以包括指令。当所述指令被运行时可以被配置为接收对将要使用数据库的数据运行的事务的事务请求,将该事务请求的第一事务请求分类为简单事务请求,以及将该事务请求的第二事务请求分类为复杂事务请求。当所述指令被运行时可以被配置为使用在接收到第一事务请求之前确定的并且基于该数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务,以及使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务。当所述指令被运行时可以被配置为如果有的话则更新反映由第一事务引起的键值存储的改变的键值Δ,如果有的话则更新反映由第二事务引起的关系存储的改变的关系Δ,以及基于键值Δ和关系Δ来运行键值存储和关系存储的同步。
实施方式可以包括以下特征中的一个或多个。例如,在更新键值Δ中,当所述指令被运行时可以被配置为基于键值Δ来更新关系Δ,在更新关系Δ中,当所述指令被运行时可以被配置为基于关系Δ来更新键值Δ。
所述同步可以包括基于关系Δ和从键值存储接收到的更新来更新关系存储,以及其后清空关系Δ的内容。所述同步可以包括基于键值Δ和从关系存储接收到的更新来更新键值存储,以及其后清空键值Δ的内容。
所述同步可以包括基于键值Δ和关系Δ与该同步共同地更新预先计算的结果。可以在包括数据库的数据库层从至少一个应用接收所述事务请求。
在附图和下面的描述中阐述一个或多个实施方式的细节。其它特征将由从描述和附图、以及从权利要求书中变得清楚。
附图说明
图1是用于管理并行数据库事务请求的系统的框图。
图2是示出图1的系统的示例实施方式细节的框图。
图3是示出图1、图2的系统的示例操作的流程图。
图4是示出用于图1的系统中的示例预先请求计算结果的流程图。
图5是用于图1的系统的示例实施方式中的B树数据结构的框图。
图6是示出图1、图2的系统的额外的示例操作的流程图。
图7是示出用于更新图4的预先计算的结果的示例操作的流程图。
图8是使用分布、分级(scaled)架构的图1、图2的系统的示例实施方式的框图。
具体实施方式
图1是用于管理并行数据库事务请求的系统100的框图。在图1的示例中,数据库102示出为支持从应用104接收到的事务请求。如上所述,应用104可以接收大量并行事务请求。在图1的示例中,如下面详细描述的,在系统100的数据库层分离这种并行事务请求,以使得在数据库层之内不同地管理不同类型的事务请求。作为这些和有关特征的结果,作为一个整体来看,可以通过系统100立即和有效地满足事务请求,即使当在很短时间段之内接收到大量的事务请求的时候。
在图1的示例中,数据库102和应用104将理解为实际上表示架构的任何类型的已知或将来的实施方式,在该架构中前端应用与用户(或事务请求的其他源)(直接或间接地)交互,包括接收需要一个或多个后端数据库的支持的事务请求。为了示例和说明起见,在随后的示例实施方式中,数据库102通常描述为关系数据库,诸如可以使用一个或多个关系表来存储数据,在关系表中单个表格行表示相应的数据记录,而单个表格列表示相应的数据类型。
当然,如谈到的,数据库102可以表示与此处描述的特征和技术不矛盾的任何类型的数据库,诸如,例如,面向对象数据库。这种数据库通常与(多个)数据库管理技术或数据库管理系统(DBMS)以及关联的语言(诸如,在关系数据库情况下,结构化查询语言(SQL))相关。
类似地,应用104可以表示可以访问数据库102的任何应用。同样为了说明和示例起见,此处可以就互联网应用(例如,电子商务或社交网络应用)而言来描述应用104。例如,应用104可以表示商业应用(例如,用于提供链管理、客户关系管理、或企业资源计划),商店的雇员利用该商业应用可以访问库存、客户或财务数据记录。
此外在图1中,结果计算器106可以被配置为访问数据库102并且生成键值存储108的内容。在图1的示例中,键值存储108的内容可以存储为键值对,以使得键值存储引擎110可以使用特定键容易地执行查找以迅速地并精确地定位关联值。此外,可以使用诸如下面参照图5描述的一个或多个合适的数据结构存储键值存储108的内容。
在下面参照图4详细地描述在填充键值存储108中的结果计算器106的操作。此外,在下面参照图7提供在系统100的操作期间随时间更新键值存储108的背景下的结果计算器106的操作。
然而,通常,为了每次在接收到需要这种结果的事务请求之前准备键值存储108,结果计算器106可以被理解为识别将要利用数据库102执行的特定操作和计算。这样做时,结果计算器106可以预测将经由应用104接收到的事务请求、或事务请求的类型,并且可以预先计算和存储用于这种预测的事务请求的结果作为键值存储108。例如,结果计算器106可以基于在前接收到的这种事务请求的频率或相对频率来预测特定事务请求,或事务请求的类型的将来接收。
另外,或替代地,结果计算器106可以基于数据库102和/或应用104的特征或方面来预测将来的事务请求。例如,与已经包括在数据库102之内达预定义最小时间的数据相比,新近存储到数据库102的数据可能更可能包括在由结果计算器106执行的计算中。在其中应用104表示电子商务相关的应用的另一示例中,可能发生的是某些类别的待售的商品被预测为短期中的事务请求的主体,以使得结果计算器106可以使用来自与这种待售商品有关的数据库102的数据执行关联的计算。
作为具体、简化的示例,可能发生的是数据库102是库存数据库,并且应用104表示库存管理应用。在这种设置中,可能发生的是频繁地接收请求关于待售的商品或待售的商品的类别的特定信息的事务请求。例如,这种事务请求可以指定对在特定时间段之内(例如,在特定年限之内)出售的这种商品的数量的请求。在这种场景中,结果计算器106可以预先计算用于键值存储108之内的存储的相应结果,例如,其中可以使用合适的散列算法生成特定键,并且该特定键是利用的这种事务请求的特定的这种示例的事务结果来唯一地识别的。因此,当由键值存储引擎110收到匹配事务请求时,键值存储引擎110可以再次使用合适的散列算法来迅速地识别用于请求的事务结果的相应键,并且可以其后执行在键值存储108之内的期望的事务结果的查找。
如下面更详细的描述的,因此可以通过使用键值存储引擎110和键值存储108满足由应用104接收到的许多类型的公共事务请求。例如,仅仅作为描述的,可以非常迅速地满足请求预先计算值的简单读取的事务请求。类似地,也可以迅速地满足使用两个或多个预存储的值或结果的简单组合的读操作。此外,可以使用键值存储引擎110运行简单的写操作(例如,创建或插入操作),如下面也更详细地描述的。
因此,如刚刚描述的,可以利用键值存储引擎110和键值存储108迅速和精确地满足由应用104接收到的大量事务请求。尽管如此,应用104还可能接收到许多类型的事务请求,其可能很难、不切实际,或不可能使用键值存储引擎110来满足。
因此,在图1的示例中,关系存储引擎112包括在图1的系统100中,其可以被配置为利用关系数据存储114以满足这种事务请求,使用键值存储引擎110和键值存储108可能不能满足这种事务请求。具体地,一些事务请求可能需要使用数据库102的数据执行逻辑上复杂和/或详细和过长的计算。在其他示例中,可能发生的是很难或不可能在收到一些事务请求之前预测它们,以使得可能不实际或不可能的是结果计算器106生成用于包括在键值存储108之内的相关的结果。此外,可能发生的是可以以特定大小优化使用键值存储108存储的大块数据,超过该特定大小通过结果计算器106的预先计算的结果会提供减弱的或可忽略的实际正返回(net positive return)。
因此,关系数据存储114可以表示数据库102的复制版本或子集,并且可以使用相同或修改的格式存储为底层数据库102。例如,在上面谈到的数据库102表示一个或多个关系表的关系数据库的场景中,可以使用相应于底层数据库102的行和列将关系数据存储114类似地存储为一个或多个关系表。作为结果,关系存储引擎112可以相对于关系数据存储114虚拟地应用从应用104接收到的任何事务请求,可以相对于数据库102应用该应用104。
在操作中,请求处理器116可以被配置为接收可以通过应用104接收到的多个事务请求。请求处理器116可以咨询分类标准117以决定将特定事务请求路由到键值存储引擎110还是关系存储引擎112。
一般说来,例如,如下面参照图6更详细描述的,分类标准117可以将任一输入的事务请求分类为简单或复杂,然而简单事务请求可以发送给键值存储引擎110,而更复杂的事务请求可以发送给关系存储引擎112。例如,在最直接的场景中,简单事务请求或许被识别为仅请求查询/读取操作的那些,和/或也许是基本写操作(例如,创建或插入操作)。同时,复杂事务请求可以定义为需要相对于包含在底层数据库102之内的数据的更广度的计算和/或操作的那些事务请求,因为在关系数据存储114之内表示这种数据。
另一方面,如可以从键值存储108和关系数据存储114的以上讨论中了解的,通过分类标准识别的简单事务请求可以理解为可以极可能包括在键值存储108之内的那些事务请求,而复杂事务请求可以被识别为可能需要访问关系数据存储114以成功完成的那些事务请求。因而,分类标准117的配置可以取决于在计算键值存储108的内容中的结果计算器106的操作的底层设置。例如,如果结果计算器106被配置为包括键值存储108之内的特定类型的数据,则可能与这种数据有关的事务请求可能更可能通过分类标准117分类为将要发送给键值存储引擎110的简单事务请求。因此,在用于路由到键值存储引擎110或关系存储引擎112的、分类输入事务请求中的请求处理器116的某些操作可以理解为至少部分地是有关就图1的系统100的用户方的设计配置的事情。
因此,如下面更详细地描述的,例如,参照图3、图6、图7,请求处理器116可以接收给定事务请求,并且基于分类标准117,可以将接收到的事务请求路由到键值存储引擎110以用于使用键值存储108满足该事务请求。仅仅作为参考,分类标准117可以访问结果计算器106和/或键值存储108的操作,以使得请求处理器116可以具有通过键值存储引擎110满足事务请求的高期望或确定性。然而,因为此处讨论的理由,还可能发生的是请求处理器116将可能不能通过使用键值存储108满足的事务请求路由到键值存储引擎110。在此情况下,键值存储引擎110和/或请求处理器116可以被配置为将这种事务请求进一步路由到关系存储引擎112。
另外,如上面参考的,请求处理器116还可以基于分类标准117接收可以路由到关系存储引擎112的第二事务请求。其后,关系存储引擎112可以使用关系数据存储114满足路由的事务请求。
如下面参照图2更详细地描述的,可以使用主存储器运行键值存储引擎110和关系存储引擎112的操作,以便提高系统100的总体效率。然而,一般说来,使用易失存储介质实现主存储器,以致用于实现系统100的硬件或软件的崩溃(crash)或其他中断可能导致不希望的数据丢失。因此,如下面还参照图2描述的,可以使用底层非易失性存储介质存储数据库102自身。然后,在主存储器的易失存储介质的背景下,可以保持反映运行的全部数据事务的事务记录118。因此,可以使用事务记录118按需要/要求更新数据库102。然后,在硬件/软件崩溃或其他系统中断情况下,数据库102的数据将不被丢失,并且可以使用事务记录118被更新直到失败或其他中断的时间点处。作为结果,通常可以再创建和产生直到崩溃或其他中断的时间点的当前的系统100,该系统100包括关系数据存储114和键值存储108。
如可以从以上的说明书了解的,以及如下面更详细描述的,由键值存储引擎110运行的事务请求可以造成在键值存储108的内容方面的变化。类似地,由关系存储引擎112运行的事务请求可以导致在关系数据存储114的内容方面的改变。例如,由请求处理器116接收到并被路由到键值存储引擎110的事务请求可以造成对键值存储108的给定数据记录的改变。接着,与相同数据记录有关、并且由请求处理器116接收到并路由到键值存储引擎110的随后的事务请求必须反映所讨论的数据记录的更新值,以便向应用104提供当前的和精确的响应。
类似地,由关系存储引擎112处理的稍后接收到的事务请求必须反映由关系存储引擎112处理的早先接收到的事务请求引起的、对关系数据存储114的早先更新。此外,但是类似地,在键值存储108的背景下,由关系存储引擎112收到的事务请求必须也以考虑对由键值存储引擎110引起的数据记录的更新的方式处理。类似地,但是相反地,由键值存储引擎110处理的事务请求必须反映作为由关系存储引擎112处理早先事务请求的结果的、对关系数据存储114做出的早先改变。
因此,如图1的示例中示出的,同步器119可以被配置为与键值存储引擎110和关系存储引擎112交互,以便由此保证键值存储108和关系数据存储114之间的同时性的期望定时和水平。例如,同步器119可以被配置为以定义的时间间隔运行键值存储108和关系数据存储114之间的完全同步,以便由此反映和包括任一和全部数据修改,该数据修改对反映因为刚在之前的同步化操作的完成而运行的全部事务请求是必须的。另外,或替代地,同步器119可以被配置为响应于请求或键值存储引擎110和/或关系存储引擎112的其他操作来运行这种同步。例如,同步器119可以在已经管理特定数目的事务请求之后,和/或与处理可能暗示或需要这种同步的特定事务请求或某类事务请求关联地处理同步。
为了便利利用同步器119的操作,并且通常保证向从应用104接收到的事务请求提供当前的、精确的结果,键值存储引擎110可以包括键值Δ120,其被配置为跟踪可能由通过键值存储引擎110处理事务请求造成的、键值存储108的任何改变。例如,由键值存储引擎110处理的事务请求可以造成在键值存储108之内插入新的数据记录。键值存储引擎110可以使用键值Δ120简单地存储创建的数据记录,而不在那时修改键值存储108的内容(或关系数据存储114或数据库102的内容)。
类似地,删除键值存储108之内的结果的事务请求可以反映在键值Δ120之内。具体地,在后一示例中,不必须实际上从键值存储108中删除特定数据记录。而是,删除的数据记录可以使用键值Δ120简单地标记为无效的。然后,如上面参考的,有必要保证此后关系存储引擎112不利用或尝试访问如此删除的数据记录。因此,键值存储引擎110的无效通知器122可以被配置为向关系存储引擎112通知所讨论的数据记录的删除/无效。更具体地,例如,如下面参照图6详细描述的,无效通知器122可以被配置为向关系存储引擎112通知对键值Δ120的任何更新,在利用关系数据存储114向通过请求处理器116从应用104接收到的事务请求提供当前的、精确的响应方面,所述更新有可能影响关系存储引擎112的操作。
类似地,关系存储引擎112可以保持关系Δ124,其反映由通过关系存储引擎112处理事务请求引起的对关系存储114的任何更新,并且该更新还没有通过同步器119的操作反映在关系数据存储114之内。对无效通知器122的操作也类似,关系存储引擎112可以包括无效通知器126,其也可以被配置为向键值存储引擎110发出特定数据的无效的通知,以便由此保证键值存储引擎110不向通过请求处理器116从应用接收到的事务请求提供不准确的或过时的响应。
因此,在操作中,键值存储引擎110可以使用键值存储108满足来自请求处理器116的事务请求,并且此后更新键值Δ120以反映对键值存储108的任何所导致的改变。如果需要,则无效通知器122可以向关系存储引擎112通知此后将要反映在关系数据124之内的这种改变。关系存储引擎112可以因此利用关系Δ124,并且使用关系数据存储114以满足从请求处理器116接收到的后续的请求。类似说明可以适用于关系存储引擎112,即,可以使用关系数据存储114处理事务请求,并且可以通过无效通知器126向键值存储引擎110通知完全地、整个地、或部分地反映在关系Δ124中的对关系数据存储114的任何所导致的改变。
例如,还如下面参照图6描述的,作为设计选择的问题,无效通知器122、126的操作可以稍微变化。例如,在一些实施方式中,当更新键值Δ120时,无效通知器122可以向关系Δ124通知所讨论的更新,并且可以由此造成对关系Δ124之内的相应数据记录的实际更新,由此反映对键值Δ120的底层更新。
然而,在其他示例实施方式中,无效通知器122可以简单地识别键值Δ120和/或键值存储108的有关的、修改的数据,以使得关系Δ124可以简单地跟踪识别的数据已经改变的事实,而不实际上在那时知道它的更新值。在后一种示例中,当通过关系存储引擎112收到与关系Δ124之内的、由无效通知器122识别的无效/修改的数据关联的事务请求时,关系存储引擎112可以触发同步器119以使用各自的键值Δ120和关系Δ124来部分地或完全同步键值存储108和关系数据存储114。在这种示例中,然后,可以了解的是同步器119的操作可能潜在地由无效通知器122、126之一或两者发送的通知的特定类型或数量而触发。
因此,键值存储引擎110和关系存储引擎112能够以使能管理由应用104接收到的大量并行事务请求的、专门有效的方式提供快速和精确的响应。当这样做时,键值存储引擎110和关系存储引擎112可以分别地使用键值Δ120和关系Δ124也分别地跟踪对键值存储108和关系数据存储114的改变。在某一时间段之后,和/或响应于一些其它的刺激,同步器119可以更新关系数据存储114和键值存储108,在该时间可能期望或需要擦除键值Δ120和/或关系Δ124的一些或全部。如可以了解的,以及如下面也详细描述的,关于这一点可以通过在识别将要包括在同步器119的同步化操作中的特定数据中的无效通知器122、126的早先操作而便利同步器119的操作。此外,因为可以在主存储器中实现全部部件108-119,所以在满足应用104接收到的事务请求方面,所述部件的操作可以非常迅速和有效,即使在存在大量并行事务请求的情况下。
如图1中示出的,系统100可以使用至少一个计算设备128实现,该至少一个计算设备128可以自身包括至少一个处理器128A和至少一个计算机可读存储介质128B。即,例如,可以使用在操作中部分或完全地彼此通信以及并行的两个或多个计算设备128实现系统100。类似地,可以利用并行运行的两个或多个处理器,以便提高系统100的操作的速度和效率。
如上面参考的,并且如下面参照图2更详细地描述和示出的,计算机可读存储介质128B可以表示至少两种不同类型的计算机存储器。例如,计算机可读存储介质128B可以表示用于在事务记录118中存储数据库102的第一、非易失性存储器。同时,计算机可读存储介质128B也可以通常表示作为至少一个计算设备128的主存储器提供的第二、易失性存储器。还如参照图2描述和示出的,可以利用这种主存储器以实现并运行图1的系统100的部件108-119中的任何一个。
虽然使用多个离散的、单个模块示出图1的系统100,但是可以了解,这种说明仅是为了示例和描述系统100的操作起见。因此,还可以了解的是可以组合系统100的任何两个或多个部件用于作为单个部件运行。类似地,但是相反地,图1的系统100中示出的任何单个部件可以在多种示例实施方式中分为两个或多个子部件。例如,同步器119的一些或全部可以分割并包括在键值存储引擎110和关系存储引擎112的相应部分之内。通过另一示例,请求处理器116的一些功能可以包括在键值存储引擎110的操作之内,因为,例如,如上面参考的,路由通过键值存储引擎110的事务请求可能不能使用键值存储108被满足,而是必须此后通过关系存储引擎112使用关系数据存储114来满足它。
图2是示出在图1的系统100的实施期间的不同类型的存储器的示例使用的框图。在图2的示例中,将用户202(表示一个或多个用户)示出为向数据库系统204提供事务请求。如所示,存储器206表示用于实现键值存储引擎110、关系存储引擎112以及同步器119的易失性的、主存储器的示例。当然,虽然为了简化起见未具体地在图2的示例中示出,可以了解的是还可以使用存储器206实现键值存储引擎110、关系存储引擎112以及同步器119(包括键值存储108和关系数据存储114)的各种内部和有关的部件。
同时,第二存储器208示出为用于实现事务记录118和底层数据库102。如所示,例如,存储器208可以包括诸如硬盘或固态驱动器(SSD)的非易失性存储器。
因此,如描述的,可以使用存储器206以快速、有效的方式运行键值存储引擎110、关系存储引擎112以及同步器119的操作。为了防止存储器206的固有不稳定性,如所示和描述的,关系存储引擎112可以不断地更新事务记录118,以便反映使用存储器206运行的全部事务。因此,在发生系统崩溃或其他故障时,可以仅使用事务记录118和数据库102的内容再现在中断的时候的系统的当前状态。
此外,在实践中,可以不断地更新事务记录118,仅仅作为参考,但是它可以不是同步地反映数据库102之内的这种改变所必须的或期望的。而是,事务记录118可以在一时间段内、和/或直到事务的某一阈值数目才收集事务,随之会发生事务记录118和数据库102的同步,并且事务记录118的内容可以被清除。
图3是示出图1的系统100的示例操作的流程图300。在图3的示例中,操作302-316示出为分离的、连续的操作。然而,可以了解的是操作302-316中的任何两个或多个可以以部分地或完全重叠或并行的方式、和/或以嵌套、迭代、分支或循环方式实现。此外,在这种变化之内,可以了解的是,可以包括图3的示例中未具体地示出的额外的或可替换操作,而同时可以省略操作302-316中的一个或多个。
在图3的示例中,如上面参考的,可以接收对将要使用数据库的数据运行的事务的事务请求(302)。例如,请求处理器116可以通过应用104接收事务请求,例如,作为图2的应用104与用户202的交互的结果。
事务请求的第一事务请求可以分类为简单事务请求(304)。例如,如描述的,请求处理器116可以咨询分类标准117以确定使用键值存储108的内容可能或必然满足该第一事务请求。如描述的,这种分类可以基于对键值存储108的实际认识,和/或可以基于第一事务请求的特性和类型。例如,如描述的,当具体对数据可能包括在键值存储108之内时作为数据的直接的创建/读取/更新/删除的任何事务请求可以分类为简单事务请求。
同时,事务请求的第二事务请求可以分类为复杂事务请求(306)。例如,请求处理器116可以基于分类标准117确定第二事务请求需要两个或多个数据记录或数据表的逻辑组合,或否则可能需要使用键值存储108不太可能的或不能满足的计算密集的计算。具体地,例如,可能要求一个或多个数据行(或全部数据表格)锁定直到完成第二事务请求的任何这种事务请求将可能分类为复杂事务请求。
此外在图3中,可以使用在接收到第一事务请求之前确定的、并且基于数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务(308)。例如,键值存储引擎110可以使用键值存储108满足第一事务请求,其中,如描述的,键值存储108的键内容可以已经由结果计算器106使用存储在数据库102(和/或存储在关系数据存储114)中的数据在前地计算出。
可以使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务(310)。例如,关系存储引擎112可以使用关系数据存储114满足第二事务请求。
如果有的话,则可以更新反映由第一事务引起的键值存储的改变的键值Δ(312)。例如,键值存储引擎110可以基于由第一事务请求的运行产生的键值存储108的任何改变来更新键值Δ120。
类似地,如果有的话,则可以更新反映由第二事务引起的关系存储的改变的关系Δ(314)。例如,关系存储引擎112可以使用关系数据存储114基于第二事务的运行来更新关系Δ124。
最终在图3的示例中,可以基于键值Δ和关系Δ运行键值存储和关系存储的同步(316)。例如,同步器119可以使用键值Δ120和关系Δ124更新关系数据存储114。类似地,同步器119可以使用键值Δ120、关系Δ124、以及结果计算器106(如下面参照图7更详细地描述的,到必须重新计算将要存储在键值存储108之内的结果的程度)来更新键值存储108。
图4是示出图1的结果计算器106的示例操作的流程图400。即,例如,流程图400示出可以运行以填充键值存储108的结果计算器106的操作,预期接收到的将来的事务请求可以由该键值存储108满足。
在图4的示例中,可以通过结果计算器106加载全部必须的交易数据(402)。例如,结果计算器106可以访问数据库102,以便利用预期将是大量或部分将来的事务请求的主体的数据。例如,结果计算器106可以分析事务记录118以确定事务请求的相对频率或事务请求的类型,并且可以从其中推断以确定从数据库102提取哪个数据或哪个类型的数据。
类似地,结果计算器106可以确定将要在提取的数据上执行的计算的类型,并且可以此后基于该数据运行计算(404)。此外,随时间,结果计算器106可以在系统100的操作期间监督键值存储108的使用,以便由此判断数据和在键值存储108的填充期间执行的关联的计算的选择的相对成功。因此,例如,在键值存储108的将来的更新期间,结果计算器106会更可能选择在基于键值存储108运行事务请求的期间已经由键值存储引擎110频繁地利用的数据和关联的计算。
最终在图4中,可以使用键值存储108存储计算结果(406)。在示例实施方式中,计算结果可以以使得能够通过键值存储引擎110在键值存储108之内快速、精确地查找期望的结果的方式存储。具体地,例如,图5示出可以利用来填充键值存储108的内容的B树数据结构。如所示,图5的B树数据结构包括以分级(hierarchical)形式安排的许多节点502-520。因此,从图5的数据结构内部查找任何特定数据项可以迅速地发生,因为数据结构的分布特性暗示访问任何特定数据项将需要最多遍历相对较小数目的分级数据结构的层。
更具体地,如所示,每个节点可以包括多个键和关联数据项,每个项还可以与数据结构的下一底层的节点和关联的键/数据项关联。因此,即使图5的数据结构的整体数据量显著地增加,数据结构层的深度也将不按比例增长,以使得实现为定位特定值的任何特定关键字的检索仅需要访问相对较小数目的层级来定位期望值。
在示例实施方式中,结果计算器106可以利用合适的散列算法来填充键值存储108,以使得键值存储引擎110可以利用相同的散列算法从键值存储108访问期望值。在这种场景中,如下面参照图8更详细描述的,结果计算器106可以使用多个不同的计算设备利用散列算法来实现图5的数据结构。因此,这种计算设备中的任何给定的一个中的数据量可以限于可接受的或期望的水平。此外,可以同时地运行许多分离的事务请求,以使得计算的负担可以在不同的并行的计算设备中间分配。
例如,在通过键值存储引擎110访问键值存储108期间,将简单地需要键值存储引擎110使用合适的散列算法找到与特定事务请求有关的相关节点。然后,取决于所讨论的事务请求的基础特性,将简单地需要键值存储引擎110重叠、添加、或去除相应的节点。当使用主存储器实现键值存储108时,如图2的示例中示出的,则例如,可以使用存储器池预先分配可用存储器空间用于实现键值存储108。此外,在这种示例实施方式中访问键值存储108可以运行为直接的存储器访问,而不需要在基础操作系统级别的资源。
此外,在键值存储108的背景下,可以在使用图5的数据结构时实现许多不同的变化和优化。例如,如上面参考的,结果计算器106可以被配置为使用被考虑可能由输入的事务请求频繁地访问的预先计算的结果来填充键值存储108。然而,尽管如此,可能发生的是,键值存储108的至少一些数据不被很频繁地访问。因此,为了节省键值存储108的数据要求,图5的数据结构的不被共同地或频繁地访问的这种B树节点可以重定位用于使用关系数据存储114和/或底层数据库102的存储。在更特定示例中,键值存储引擎110可以监督图5的B树的每个节点的命中率,并且,随时间,可以确定哪个这种节点被相对地和频繁地利用。然后,这种节点可以运动到关系数据存储114,也许连同同步器119的同步化操作一起。然后,如描述的,可以使用事务记录118记录对关系数据存储114的这种更新,并且最终反映在数据库102之内。
图6是示出图1和图2的系统的更详细示例操作的流程图600。在图6的示例中,事务请求可以被接受(602)。例如,如描述的,请求处理器116可以从应用104接收事务请求,用于基于分类标准117将其分类为简单或复杂事务请求(604)。然而,在额外的或可替换示例实施方式中,请求处理器116,或它的功能可以实现在键值存储引擎110之内或通过键值存储引擎110实现。例如,可能发生的是,全部事务请求初始地路由到键值存储引擎110,其然后可以确定这种事务请求是否可以使用键值存储108被满足。如果否,则事务请求可以被路由到关系存储引擎114。
然而,在图6的示例中一旦发生接受的事务请求的分类(604),则被确定分类为简单事务请求的事务请求还可以被分类为查询或写入事务(606)。如果事务请求是查询操作,则可以通过键值存储引擎110使用键值存储108来运行底层事务(608)。
通过特定示例,这种事务请求可以请求表示某一类型的项的全部实例的输出的读操作。然后,事务运行可以涉及简单地访问键值存储108以从中检索实例。另外,如上面参考的,键值存储引擎110可以检查键值Δ120,以便确定对该键值Δ120的任何先前的更新是否需要反映在为当前事务请求计算的结果之内。
例如,可能发生的是,在通过键值存储引擎110使用键值存储108运行先前的事务期间,特定项类型的额外的实例被创建或插入。因此,键值存储引擎110将更新事务请求结果以包括来自键值Δ120的额外的实例。更一般地,然后,可以了解的是,键值存储引擎110可以初始地运行使用键值存储108可以满足的任何这种查询操作,并且可以此后基于键值Δ120的内容来更新这种结果。
在一些情况下,可能发生的是可以不使用键值存储108运行请求的事务。例如,可能发生的是不存在包含在图5的数据结构之内的相应的键和相关值。例如,如描述的,可能发生的是,所需的数据值先前移动到了关系存储114,或从未通过结果计算器106包括在键值存储108之内。在此情况下,如此处描述的,失败事务请求可以转送到关系存储引擎112从而用于运行(例如,如下面参照操作618描述的)。然而,如果事务已经成功地运行(608),则例如,可以向应用104和/或用户202返回相应的结果(610)。
同时,如果确定原始的事务请求是写操作(606),则可以通过键值存储引擎110使用键值存储108尝试再次运行底层事务(612)。如上参照操作608描述的,这种事务运行可以包括连同键值Δ120的考虑一起的键值存储108的商询,以便由此获得当前、精确的结果。此外,如还参照操作608描述的,不能通过键值存储引擎110运行事务可能导致向关系存储引擎112转送事务请求,由此用于运行(例如,在操作618的背景下,如下面描述的)。
在键值存储引擎110相对于键值存储108的内容来运行写操作的这种示例中,可以了解的是,这种事务将导致键值存储108的内容的改变,和/或对从其确定键值存储108的内容的底层数据的改变。因此,如上面参照图1谈到的,键值存储引擎110的无效通知器122可以向关系存储引擎112提供有关数据的在前版本不再有效或不是当前的通知(箭头615),以便保证关系存储引擎112不尝试使用这种使过时或无效数据来处理事务请求。
如谈到的,在某些示例实施方式中,无效通知器122可以向关系存储引擎112简单地通知数据无效,而不需要对关系Δ124的内容的相应的立即更新。例如,在已经更新了特定数据记录的内容的情况中,无效通知器122可以向关系Δ124简单地通知不应该使用相应的数据记录直到将来的同步过程已经被运行。只要关系存储引擎112不需要所讨论的该数据记录来满足事务请求,就可以累积这种无效通知。然后,在一定量时间之后,或在特定数目的无效通知和/或事务请求之后,可以通过使用同步器119更新关系Δ124以反映由无效通知器122指示的实际内容改变。
在额外的或可替换实施方式中,关系存储引擎112可以仅使用从无效通知器122接收到的无效通知的相关子集来执行关系Δ124的更新。例如,关系存储引擎112可以接收需要由无效通知器122指定为无效的数据的事务请求,并且可以此后要求对于需要对所讨论的该事务请求提供当前的、精确的结果的至少那些数据项立即更新关系Δ124。
此外,在基于从无效通知器122接收到的通知来更新关系数据124中,关系存储引擎112的操作可以基于其他因素变化。例如,这种更新过程可以基于接收到的无效通知的类型而变化。例如,在无效通知指示从键值存储108删除特定数据记录的情况中,关系存储引擎112可以简单地需要将相关数据记录关联为在关系Δ124之内不可用,并且可以根本不需要从关系Δ124实际上删除有关的数据记录,直到诸如由同步器119执行了键值存储108和关系数据存储114的完全同步的时候。另一方面,在新的数据被创建、插入、或添加到键值Δ120的示例中,可能因此必须使用描述的一个或多个技术来更新关系Δ124,以便向关联的事务请求提供快速、精确的结果。
连同向关系存储引擎通知由当前写入请求的事务运行引起的数据无效(614),键值存储引擎110还可以更新键值Δ120自身。例如,如可以了解的,在从键值存储108删除数据的情况中,可以运行对键值Δ120的相应更新(616)。例如,被影响的数据记录的镜像可以包括在键值Δ120之内,并且或者标记为已删除/无效,或被改变以反映包括在运行的事务之内的底层写操作。
因此,连同键值Δ120(616)的更新,可以返回事务结果(610)。如所示,此后可以继续接受请求(602),以使得分类为简单(604)的后续的事务请求可以继续以刚才描述的方式被处理,包括利用对于已经在先前运行的事务的上下文中做出的键值Δ120的任何更新。
同时,由请求处理器116分类为复杂(604)的事务请求可以转送到关系存储引擎112,因此事务可以被运行(618)。在运行事务中,可以了解的是,关系存储引擎112被配置为将关系Δ124连同关系数据存储114一起利用,以便保证运行的事务的结果是当前的和精确的(具体地,如上所述,关系Δ124将至少反映处理当前事务请求所需的相关数据的无效的指示,如上面参照箭头615谈到和示出的)。在任何情况下,如描述的,通过保证至少处理事务请求所需的关系Δ124的需要的部分是当前的,并且连同从关系数据存储114中获得的相关数据一起考虑,关系存储引擎112可以保证连同运行事务一起提供快速和精确的结果。
通过在关系存储引擎112中接收到的事务请求的分类的特性,非常可能的是关联的事务的运行(618)将导致对关系数据存储114的更新或其他改变是否是不必须的。因此,类似于无效通知器122的无效通知器126可以进行到向键值存储引擎110通知受运行的事务的影响的数据的无效(620)。具体地,如通过箭头621示出的,无效通知器126可以向键值Δ120发出无效通知。如上参照无效通知器122描述的,这种通知可以仅提供足够信息以防止键值存储引擎110错误地使用过时数据。此后,可以运行键值Δ120和键值存储108的局部或完全的同步,以便还保证通过键值存储引擎返回的任何后续的结果(例如,在操作中610)是当前和精确的。
如通过键值存储108的特性可以了解的,对键值Δ120的这种更新(616)可以最终依赖于结果计算器106的操作以向键值存储引擎110提供将要用于处理事务请求的当前、精确的数据。例如,如描述的,结果计算器106可以填充键值存储108,包括基于数据库102和/或关系数据存储114的底层数据运行某些计算。当这种底层数据改变时,例如,作为在处理事务请求中的关系存储引擎112的操作的结果,则基于这种变更的数据的计算必须也被更新以便提供当前的、精确的结果。这种更新可以作为一个或多个同步过程的一部分运行,如此处描述的,具体地,下面参照图7详细描述在更新键值Δ120中的结果计算器106的操作。
然后,连同向键值存储引擎110通知有关数据无效(620),关系存储引擎112可以进行到更新关系Δ124(622)。然后,事务结果可以返回到应用104/用户102(624),并且此后请求可以继续被接受(602)。
因此,流程图600的操作602-624示出图1的系统100可以以非常快速和有效的方式接收并处理大量的并行地接收到的事务请求,同时保证完成的高水平和精确度。随时间,在这种操作期间,可以理解的是,键值120和关系Δ124的内容可以增长并累积到不期望的数据量水平。例如,数据无效的通知可以在键值Δ120和/或关系Δ124之一或两者之内累积。更一般地,键值Δ120和/或关系Δ124的总大小可以增长到不期望的大。在此情况下,以上描述的保持并使用键值Δ120和关系Δ124的益处可能部分地或完全抵消,因为需要保持和使用键值Δ120和关系Δ124的计算资源可能最终胜过以上描述的益处。
因此,必须或期望的可能是执行一个或多个同步过程(626)。关于这一点,可以了解的是,存在上面谈到的至少三个不同类型的同步过程,其可以以不同的时间比例和/或响应于不同的触发事件而实现。
例如,可以执行的一类同步包括更新键值Δ120和关系Δ124之一或两者,以便更新作为来自无效通知器122、126的早前接收的无效通知的结果、已经被指定为无效的包含在键值Δ120和关系Δ124中的数据。如描述的,这种同步可能相对频繁地发生,并且可以随着当前或预测的事务请求所需的标记为无效的仅那些部分数据的同步而发生。
第二类型同步是指键值Δ120和关系Δ124与键值存储108和关系数据存储114的同步。在这种同步期间,对数据做出并且反映在键值Δ120和关系Δ124之一或两者之内的全部改变可以通过键值存储108和关系数据存储114的相应修改反映。因此,在完成这种同步过程时,键值存储108和关系数据存储114的内容将至少临时彼此一致,并且键值Δ120和关系Δ124可以至少自身被临时清空。
对于第三类型同步,还如上面谈到的,通过关系存储引擎112运行的全部事务可以反映在事务记录118中。因此,在第三类型同步过程期间,数据库102可以更新以反映全部这种跟踪的事务和关联数据。因此,事务记录118也可以被临时清空,直到接收到新事务。在一些实施例中,在确定是否和如何计算某些结果以用于包括在键值存储108之内中,事务记录118的内容可以为了通过结果计算器106的长期使用而保持。
如可以了解的,同步器119可以被配置为便利连同键值存储引擎110和/或关系存储引擎112的这种同步。通常,同步器119的操作可以分类为前向同步或反向同步。例如,前向同步可以指的是由通过键值存储引擎110处理的事务引起的同步,其将反映在键值Δ124中,并且此后传播到关系Δ124,并且因此传播到关系数据存储114以及此后,传播到事务记录118。
相反,反向同步可以理解为指的是作为由关系存储引擎112运行的事务的结果的、通过同步器119运行的同步。即,如上面谈到并且下面参照图7详细描述的,在关系存储引擎112中接收到由此用于运行的事务请求将通常需要对键值Δ120的更新,其可能需要完全或部分地由结果计算器106处理以便以当前的、最新的方式来更新键值Δ120,以及最终键值存储108。
通常,可以了解的是,第一类型同步(即,基于在Δ120,124中接收到的无效通知的同步)可能最频繁地和最容易地发生。同时,第二类型同步(即,与关联的清空Δ120、124的内容一起,使用相应的键值Δ120和关系Δ124更新键值存储108和关系数据存储114)可能相对更少频繁地发生。最终,在示例实施方式中,第三同步过程(即,使用事务记录118更新数据库102)需要更不频繁地发生。
图7是示出反向同步过程的示例操作的流程图700,与图6的箭头621大体地关联。在图7的示例中,假定已经由关系存储引擎112运行复杂事务,并且已经与其结合地更新关系Δ124。同时,如上面参照图6(例如,参照操作620)谈到的,无效通知器126可以向键值存储引擎110通知这种数据无效(702)。
还如上面参照图6描述的,可以因此利用相应的新数据值更新键值Δ120(704),例如或者立即连同接收到的数据无效的通知、或在关联的同步过程期间。于是,结果计算器106可以被配置为重新运行先前执行的操作和关联的计算以向键值存储108提供预先计算的结果,但是使用键值Δ120的当前的、更新的值(706)。
因此,结果计算器106的相应输出也可以存储在键值Δ120之内(708)。然后,在由键值存储引擎110运行的后续的事务期间,键值Δ120将提供完整的和当前的数据,需要保证利用键值存储108的事务提供当前的、精确的事务结果。
图8是示出图1和图2的系统的详细示例实施方式的框图。在图8的示例中,多个计算设备802-810单独地用于不同的角色,以便实现和优化上面参照图1-图7描述的各种特征和功能。
具体地,如示出的,可以利用负载平衡器802以实现请求处理器116、同步器119和/或结果计算器106。同时,计算设备804、806、808提供键值存储部件108、110的单个、并行实现。最终在图8中,分离的计算设备810示出为实现相关存储器部件112、114。在图8的构造的示例实施方式中,例如,可以使用SAP HANA数据库系统实现关系存储引擎810,同时可以使用基于Java的应用服务器实现各种键值存储引擎804、806、808。
在示例实施方式中,可以平衡描述的系统和技术以保证事务隔离,其中需要一起完成许多数据改变,或者,如果这种完成不可能,则将一起失败。然而,在此处描述的实施方式中,可能发生在一些场景中的是,这种一组数据改变的子集可以成功地完成并在完成剩余的数据改变之前返回相应的结果。例如,可能发生的是返回部分结果然后同步过程不能成功地完成,以使得系统不能精确地提供全部请求的结果。
为了降低或消除相关的不期望的结果,可以在单个存储位置(例如,图8的804或810)之内保持事务隔离。然后,相关的存储引擎可以在提供结果的全部事务组之前等待(或,在一个或多个改变请求失败的情况下,在提供相应的错误消息之前)。
另外,或替代地,响应于上面谈到的同步错误的类型,可以重新尝试同步过程(以便保持数据一致性)。在最终同步失败的不期望的事件中,则可以通知请求的应用以使得它可以实现任何应用专用的校正措施。
因此,诸如图8的示例的实施方式,以及图1和图2的系统的各种其他实施例可以提供高速事务处理,即使对于很大数据量,和/或在存在大量的并行事务请求的情况下。通过实现键值存储引擎110和键值存储108以及数据库层,而不是应用层,如图1的示例中示出的,可以避免数据库层中的潜在的瓶颈。
此外,如通过图8的示例示出的,图1和图2的系统可以容易地缩放,由此利用并行运行的大量的计算设备,以使得再次,可以立即处理很大量的数据。此外,例如,如与尝试依赖于大量计算资源以求获得类似结果的解决方案比较,与获得这种高水平性能关联的费用可以显著地降低。
可以在数字的电子线路中实现此处描述的各种技术的实施方式,或在计算机硬件、固件、软件或它们的组合中实现。实施方式可以被实现为计算机程序产品,即,有形地包括在信息载体(例如,在机器可读存储设备或传播信号)中的计算机程序,用于通过数据处理装置运行,或控制,例如,可编程处理器、计算机、或多个计算机的数据处理装置的操作。诸如上面描述的计算机程序的计算机程序可以以任何形式的编程语言编写,包括编译或解释语言,并且它可以以任何形式布置,包括作为独立程序或作为模块、组件、子例程、或适合用在计算环境中的其它单元。可以布置计算机程序以在位于一个地点或分布于多个地点并由通信网络互连的一个计算机或多个计算机上执行。
可以通过运行计算机程序的一个或多个可编程处理器执行方法步骤以通过在输入数据上操作并生成输出来执行功能。方法步骤也可以由专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合于计算机程序的执行的处理器包括例如通用和专用微处理器二者以及任何种类的数字计算机的任何一个或多个处理器。一般地,处理器将从只读存储器或随机存取存储器或这二者接收指令和数据。计算机的元件可以包括用于执行指令的至少一个处理器和用于存储指令和数据的一个或多个存储器件。一般地,计算机还可以包括一个或多个用于存储数据的大容量存储设备,例如磁盘、磁光盘或光盘,或可操作地耦接到该一个或多个大容量存储设备以从其接收数据或向其传送数据或二者皆有。适合于具体实现计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,例如包括:半导体存储器件,例如EPROM、EEPROM和闪速存储器件;磁盘,例如内部硬盘或活动磁盘;磁光盘;和CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。
为了提供与用户的交互,实施方式可以被实现在具有例如CRT(阴极射线管)或LCD(液晶显示器)监视器之类的用于向用户显示信息的显示设备以及键盘和例如鼠标或跟踪球之类的指示设备的计算机上,通过这些,用户可以提供向计算机的输入。另一种设备也可以用于提供与用户的交互;例如,向用户提供的反馈可以是任何传感反馈的形式,例如,视觉反馈、听觉反馈、或触觉反馈;并且来自用户的输入可以以任何形式被接收,包括声波、语音或触觉的输入。
实施方式可以被实现在如下的计算系统中:包括后端部件,例如作为数据服务器;或包括中间件部件,例如应用服务器;或包括前端部件,例如具有图形用户界面或网络浏览器的客户端计算机,通过图形用户界面或网络浏览器,用户可以与此说明书描述的主题的实施方式交互;或一个或多个这样的后端、中间件或前端部件的任何组合。部件可以由任何形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”)和例如互联网的广域网(“WAN”)。
虽然已经如此处描述的示出描述的实施方式的特定特征,但是本领域技术人员现在将想到许多修改、替换、改变和等效物。因此,将理解所附的权利要求意图覆盖落入实施例范围的所有这种修改和改变。
Claims (20)
1.一种包括记录在计算机可读媒介上的、并且可由至少一个处理器运行的指令的系统,所述系统包括:
请求处理器,被配置为造成所述至少一个处理器接收对将要使用数据库的数据运行的事务的事务请求,并且还被配置为致使所述至少一个处理器将该事务请求的第一事务请求分类为简单事务请求,并且将该事务请求的第二事务请求分类为复杂事务请求。
键值存储引擎,被配置为造成所述至少一个处理器使用在接收到第一事务请求之前确定的、并且基于数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务,并且还被配置为如果有的话则更新反映由第一事务引起的键值存储的改变的键值Δ;
关系存储引擎,被配置为造成所述至少一个处理器使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务,并且还被配置为如果有的话则更新反映由第二事务引起的关系存储的改变的关系Δ;以及
同步器,被配置为造成所述至少一个处理器基于键值Δ和关系Δ运行键值存储和关系存储的同步。
2.如权利要求1所述的系统,其中在包括数据库的数据库层中从至少一个应用接收所述事务请求。
3.如权利要求1所述的系统,其中所述请求处理器被配置为使用键值存储的预先计算的结果、基于描述其满意可能性的特征的分类标准来分类第一事务请求和第二事务请求。
4.如权利要求3所述的系统,包括结果计算器,被配置为造成所述至少一个处理器基于将要由请求处理器接收到的将来的事务请求的预测的可能性来计算键值存储的预先计算的结果。
5.如权利要求4所述的系统,其中所述同步器被配置为造成所述结果计算器基于键值Δ和关系Δ与该同步共同地更新预先计算的结果。
6.如权利要求1所述的系统,其中所述键值存储引擎被配置为确定与第一事务请求关联的键,并且在键值存储之内执行相应值的查找。
7.如权利要求1所述的系统,其中所述键值存储引擎包括无效通知器,被配置为基于更新键值Δ来更新关系Δ。
8.如权利要求7所述的系统,其中同步器被配置为基于关系Δ并且基于从键值存储引擎的无效通知器接收到的更新来更新关系存储,以及此后清空关系Δ的内容。
9.如权利要求1所述的系统,其中所述关系存储引擎包括无效通知器,被配置为基于关系Δ的更新来更新键值Δ。
10.如权利要求9所述的系统,其中所述同步器被配置为基于键值Δ并基于从关系存储引擎的无效通知器接收到的更新来更新键值存储,以及此后清空键值Δ的内容。
11.如权利要求1所述的系统,其中所述请求处理器、键值存储引擎、关系存储引擎、以及同步器实现在系统的主存储器中。
12.如权利要求11所述的系统,其中所述关系存储引擎被配置为造成所述至少一个处理器更新存储在非易失性存储器中的事务记录并且利用由第一事务或第二事务的运行引起的对其的任何改变来更新数据库。
13.一种用于运行存储在计算机可读存储介质上的指令的计算机实现的方法,所述方法包括:
接收对将要使用数据库的数据运行的事务的事务请求;
将该事务请求的第一事务请求分类为简单事务请求;
将该事务请求的第二事务请求分类为复杂事务请求;
使用在接收到第一事务请求之前确定的、并且基于数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务;
使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务;
如果有的话则更新反映由第一事务引起的键值存储的改变的键值Δ;
如果有的话则更新反映由第二事务引起的关系存储的改变的关系Δ;以及
基于键值Δ和关系Δ运行键值存储和关系存储的同步。
14.如权利要求13所述的方法,其中更新键值Δ包括基于该键值Δ来更新关系Δ,并且进一步其中更新关系Δ包括基于该关系Δ来更新键值Δ。
15.如权利要求13所述的方法,其中所述同步包括基于键值Δ和关系Δ与该同步共同地更新预先计算的结果。
16.一种有形地具体实现在非临时的计算机可读存储介质上并包括指令的计算机程序产品,当所述指令被运行时,所述计算机程序产品被配置为:
接收对将要使用数据库的数据运行的事务的事务请求;
将该事务请求的第一事务请求分类为简单事务请求;
将该事务请求的第二事务请求分类为复杂事务请求;
使用在接收到第一事务请求之前确定的、并且基于数据的预先计算的结果的键值存储来运行满足第一事务请求的第一事务;
使用包括数据的子集的关系存储来运行满足第二事务请求的第二事务;
如果有的话则更新反映由第一事务引起的键值存储的改变的键值Δ;
如果有的话则更新反映由第二事务引起的关系存储的改变的关系Δ;以及
基于键值Δ和关系Δ运行键值存储和关系存储的同步。
17.如权利要求16所述的计算机程序产品,其中在更新键值Δ中,当所述指令被运行时被配置为基于该键值Δ来更新关系Δ,以及,在更新关系Δ中,当所述指令被运行时被配置为基于该关系Δ来更新键值Δ。
18.如权利要求17所述的计算机程序产品,其中所述同步包括基于关系Δ并基于从键值存储接收到的更新来更新关系存储,以及此后清空关系Δ的内容,以及进一步其中所述同步包括基于键值Δ并基于从关系存储接收到的更新来更新键值存储,以及此后清空键值Δ的内容。
19.如权利要求16所述的计算机程序产品,其中所述同步包括基于键值Δ和关系Δ与该同步共同地更新预先计算的结果。
20.如权利要求16所述的计算机程序产品,其中在包括数据库的数据库层中从至少一个应用接收所述事务请求。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310250265.2A CN104239357B (zh) | 2013-06-21 | 2013-06-21 | 用于数据库事务的并发请求处理 |
US13/929,478 US9430544B2 (en) | 2013-06-21 | 2013-06-27 | Concurrent request handling for database transactions |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310250265.2A CN104239357B (zh) | 2013-06-21 | 2013-06-21 | 用于数据库事务的并发请求处理 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104239357A true CN104239357A (zh) | 2014-12-24 |
CN104239357B CN104239357B (zh) | 2019-01-18 |
Family
ID=52111786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310250265.2A Active CN104239357B (zh) | 2013-06-21 | 2013-06-21 | 用于数据库事务的并发请求处理 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9430544B2 (zh) |
CN (1) | CN104239357B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106603610A (zh) * | 2015-10-19 | 2017-04-26 | 阿里巴巴集团控股有限公司 | 一种数据获取方法及装置 |
CN107402981A (zh) * | 2017-07-07 | 2017-11-28 | 国网浙江省电力公司信息通信分公司 | 一种基于分布式离线数据库的数据增量处理方法及系统 |
CN107710203A (zh) * | 2015-06-29 | 2018-02-16 | 微软技术许可有限责任公司 | 分布式键/值存储库之上的事务数据库层 |
CN110515707A (zh) * | 2019-08-22 | 2019-11-29 | 上海交通大学 | 基于预先事务处理的确定性并发控制方法及系统 |
CN111259004A (zh) * | 2020-01-08 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 一种存储引擎中数据索引的方法以及相关装置 |
CN112035471A (zh) * | 2020-08-28 | 2020-12-04 | 中国平安人寿保险股份有限公司 | 一种事务处理方法及计算机设备 |
CN112559496A (zh) * | 2020-12-24 | 2021-03-26 | 百果园技术(新加坡)有限公司 | 一种分布式数据库事务原子性实现方法及装置 |
CN113312415A (zh) * | 2020-02-27 | 2021-08-27 | Sap欧洲公司 | 用于数据库操作的近存储器加速 |
CN112035471B (zh) * | 2020-08-28 | 2024-05-17 | 中国平安人寿保险股份有限公司 | 一种事务处理方法及计算机设备 |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4057156A1 (en) * | 2014-06-24 | 2022-09-14 | Google LLC | Processing mutations for a remote database |
US9971526B1 (en) * | 2015-06-29 | 2018-05-15 | Amazon Technologies, Inc. | Volume-based key-value store |
US10083203B2 (en) | 2015-08-11 | 2018-09-25 | International Business Machines Corporation | Reducing the cost of update, delete, and append-only insert operations in a database |
US10528436B2 (en) * | 2016-05-31 | 2020-01-07 | Vmware, Inc. | Micro-journal based transaction logging |
US10445308B2 (en) | 2016-05-31 | 2019-10-15 | Vmware, Inc. | Commit coalescing for micro-journal based transaction logging |
US11120002B2 (en) * | 2016-07-20 | 2021-09-14 | Verizon Media Inc. | Method and system for concurrent database operation |
US10705926B2 (en) * | 2016-07-29 | 2020-07-07 | Rubrik, Inc. | Data protection and recovery across relational and non-relational databases |
US10637964B2 (en) | 2016-11-23 | 2020-04-28 | Sap Se | Mutual reinforcement of edge devices with dynamic triggering conditions |
US10614054B2 (en) * | 2017-05-12 | 2020-04-07 | International Business Machines Corporation | Synchronizing data values by sending updates |
US10606820B2 (en) * | 2017-05-12 | 2020-03-31 | International Business Machines Corporation | Synchronizing data values by requesting updates |
US11593824B2 (en) * | 2017-08-09 | 2023-02-28 | Verisign, Inc. | System and method for domain name valuation |
US10885017B2 (en) * | 2017-10-05 | 2021-01-05 | Zadara Storage, Inc. | Multiple transactions in a single KV store |
US10841020B2 (en) | 2018-01-31 | 2020-11-17 | Sap Se | Online self-correction on multiple data streams in sensor networks |
CN109472681B (zh) * | 2018-11-22 | 2022-03-04 | 泰康保险集团股份有限公司 | 一种企业批次付款方法及装置 |
CN110352445B (zh) * | 2018-11-27 | 2023-08-22 | 创新先进技术有限公司 | 使用智能合约执行多方交易 |
US10873504B1 (en) * | 2019-07-17 | 2020-12-22 | Hewlett Packard Enterprise Development Lp | Managing concurrently received configuration requests in a computing network |
US11429628B2 (en) * | 2019-09-20 | 2022-08-30 | Samsung Electronics Co., Ltd. | Transaction grouping for overwrite merge |
CN111144926B (zh) * | 2019-11-27 | 2023-07-18 | 泰康保险集团股份有限公司 | 业务请求处理方法、装置、系统、电子设备及可读介质 |
US11327962B1 (en) * | 2020-01-23 | 2022-05-10 | Rockset, Inc. | Real-time analytical database system for querying data of transactional systems |
US11645424B2 (en) * | 2020-04-27 | 2023-05-09 | International Business Machines Corporation | Integrity verification in cloud key-value stores |
JP7481244B2 (ja) * | 2020-12-02 | 2024-05-10 | 株式会社日立製作所 | データ同期システム、データ同期装置及びデータ同期方法 |
CN114064664A (zh) * | 2022-01-17 | 2022-02-18 | 北京奥星贝斯科技有限公司 | 在数据库中查询事务修改内容的方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6862593B2 (en) * | 2002-05-17 | 2005-03-01 | Sun Microsystems, Inc. | Separation of database transactions |
CN101405735A (zh) * | 2006-03-17 | 2009-04-08 | 微软公司 | 在企业资源计划系统内的并发控制 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5261069A (en) | 1990-08-13 | 1993-11-09 | Hewlett-Packard Company | Method of maintaining consistency of cached data in a database system |
US6363387B1 (en) | 1998-10-20 | 2002-03-26 | Sybase, Inc. | Database system providing methodology for enhancing concurrency using row update bit and deferred locking |
US6609126B1 (en) * | 2000-11-15 | 2003-08-19 | Appfluent Technology, Inc. | System and method for routing database requests to a database and a cache |
US6718349B2 (en) | 2000-12-14 | 2004-04-06 | Borland Software Corporation | Intelligent, optimistic concurrency database access scheme |
US7164676B1 (en) * | 2001-03-21 | 2007-01-16 | Cisco Technology, Inc. | Method and apparatus for a combined bulk and transactional database synchronous scheme |
US7293028B2 (en) | 2001-06-08 | 2007-11-06 | Sap Ag | Cache-conscious concurrency control scheme for database systems |
CA2384259A1 (en) | 2002-04-29 | 2003-10-29 | Ibm Canada Limited-Ibm Canada Limitee | Access concurrency for cached authorization information in relational database systems |
US7120651B2 (en) | 2003-08-01 | 2006-10-10 | Oracle International Corporation | Maintaining a shared cache that has partitions allocated among multiple nodes and a data-to-partition mapping |
US7555499B2 (en) | 2004-08-17 | 2009-06-30 | Oracle International Corporation | Diagnosing database performance problems using a plurality of wait classes |
US7434010B2 (en) | 2006-08-04 | 2008-10-07 | Microsoft Corporation | Combined pessimistic and optimisitic concurrency control |
US7930274B2 (en) | 2007-09-12 | 2011-04-19 | Sap Ag | Dual access to concurrent data in a database management system |
US7761434B2 (en) | 2007-11-19 | 2010-07-20 | Red Hat, Inc. | Multiversion concurrency control in in-memory tree-based data structures |
US8170914B2 (en) | 2008-11-07 | 2012-05-01 | Bryan Mongeau | Inventory control system for digital signage network having a plurality of screen zones associated with a plurality of displays |
US8121980B2 (en) * | 2009-02-13 | 2012-02-21 | Microsoft Corporation | Transactional record manager |
US8949190B2 (en) | 2011-11-07 | 2015-02-03 | Sap Se | Point-in-time database recovery using log holes |
US8775397B2 (en) | 2012-06-26 | 2014-07-08 | Sap Ag | Database access acceleration |
-
2013
- 2013-06-21 CN CN201310250265.2A patent/CN104239357B/zh active Active
- 2013-06-27 US US13/929,478 patent/US9430544B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6862593B2 (en) * | 2002-05-17 | 2005-03-01 | Sun Microsystems, Inc. | Separation of database transactions |
CN101405735A (zh) * | 2006-03-17 | 2009-04-08 | 微软公司 | 在企业资源计划系统内的并发控制 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11301457B2 (en) | 2015-06-29 | 2022-04-12 | Microsoft Technology Licensing, Llc | Transactional database layer above a distributed key/value store |
CN107710203A (zh) * | 2015-06-29 | 2018-02-16 | 微软技术许可有限责任公司 | 分布式键/值存储库之上的事务数据库层 |
CN107710203B (zh) * | 2015-06-29 | 2021-05-07 | 微软技术许可有限责任公司 | 分布式键/值存储库之上的事务数据库层 |
CN106603610B (zh) * | 2015-10-19 | 2019-11-22 | 阿里巴巴集团控股有限公司 | 一种数据获取以及同步方法、装置 |
CN106603610A (zh) * | 2015-10-19 | 2017-04-26 | 阿里巴巴集团控股有限公司 | 一种数据获取方法及装置 |
CN107402981A (zh) * | 2017-07-07 | 2017-11-28 | 国网浙江省电力公司信息通信分公司 | 一种基于分布式离线数据库的数据增量处理方法及系统 |
CN107402981B (zh) * | 2017-07-07 | 2023-07-18 | 国网浙江省电力公司信息通信分公司 | 一种基于分布式离线数据库的数据增量处理方法及系统 |
CN110515707A (zh) * | 2019-08-22 | 2019-11-29 | 上海交通大学 | 基于预先事务处理的确定性并发控制方法及系统 |
CN110515707B (zh) * | 2019-08-22 | 2022-02-25 | 上海交通大学 | 基于预先事务处理的确定性并发控制方法及系统 |
CN111259004A (zh) * | 2020-01-08 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 一种存储引擎中数据索引的方法以及相关装置 |
CN111259004B (zh) * | 2020-01-08 | 2023-04-14 | 腾讯科技(深圳)有限公司 | 一种存储引擎中数据索引的方法以及相关装置 |
CN113312415A (zh) * | 2020-02-27 | 2021-08-27 | Sap欧洲公司 | 用于数据库操作的近存储器加速 |
CN112035471A (zh) * | 2020-08-28 | 2020-12-04 | 中国平安人寿保险股份有限公司 | 一种事务处理方法及计算机设备 |
CN112035471B (zh) * | 2020-08-28 | 2024-05-17 | 中国平安人寿保险股份有限公司 | 一种事务处理方法及计算机设备 |
CN112559496A (zh) * | 2020-12-24 | 2021-03-26 | 百果园技术(新加坡)有限公司 | 一种分布式数据库事务原子性实现方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104239357B (zh) | 2019-01-18 |
US9430544B2 (en) | 2016-08-30 |
US20140379638A1 (en) | 2014-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104239357A (zh) | 用于数据库事务的并发请求处理 | |
US11520770B2 (en) | System and method for providing high availability data | |
US11288002B2 (en) | System and method for providing high availability data | |
US9916353B2 (en) | Generating multiple query access plans for multiple computing environments | |
RU2458399C2 (ru) | Кэширование в памяти совместно используемых настраиваемых данных множества арендаторов | |
US8768915B2 (en) | Database system and method of optimizing cross database query | |
CN108446975B (zh) | 一种额度管理方法及装置 | |
US10936614B2 (en) | Management of extract transform load (ETL) jobs via a model that is based on a bayesian network | |
US8775397B2 (en) | Database access acceleration | |
US10956400B2 (en) | Query processing using primary data versioning and secondary data | |
US20170330239A1 (en) | Methods and systems for near real-time lookalike audience expansion in ads targeting | |
CN103530303A (zh) | 移动设备分析引擎 | |
CN105190611B (zh) | 用于数据库横向扩展的方法及装置 | |
US10108665B2 (en) | Generating multiple query access plans for multiple computing environments | |
US11126641B2 (en) | Optimized data distribution system | |
US10812322B2 (en) | Systems and methods for real time streaming | |
EP3971730A1 (en) | Latency minimization in datacenters | |
US11500833B2 (en) | Archiving accelerator-only database tables | |
US11334600B1 (en) | Partial reloading in data synchronization | |
RU2679207C1 (ru) | Управление системой баз данных | |
US20240028593A1 (en) | In-memory graph query engine with persisted storage | |
US11451627B2 (en) | System and method for content management with intelligent data store access across distributed stores | |
US20150379585A1 (en) | Single Sheet Planning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |