CN107066467B - 用于事务高速缓存无效的原子可见性切换 - Google Patents
用于事务高速缓存无效的原子可见性切换 Download PDFInfo
- Publication number
- CN107066467B CN107066467B CN201611027768.3A CN201611027768A CN107066467B CN 107066467 B CN107066467 B CN 107066467B CN 201611027768 A CN201611027768 A CN 201611027768A CN 107066467 B CN107066467 B CN 107066467B
- Authority
- CN
- China
- Prior art keywords
- timestamp
- modification
- progress
- data
- cache
- 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.)
- Active
Links
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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24539—Query rewriting; Transformation using cached or materialised query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/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/24552—Database cache management
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
相关申请的交叉引用
本申请要求于2015年11月24日提交的美国临时专利申请No.62/259,405的权益,将其通过引用全文并入于此。
背景技术
几乎所有的商业数据库系统依赖于高速缓存技术以改进性能。由于存储器成本的降低以及计算速度的增加,今天数据库可以很大。大数据库可以做出对于特定信息查询数据库的计算集中处理。高速缓存机制已经由数据库系统使用以帮助减小查询数据库的计算复杂性。与占用更长时间来存取的存储设备(比如基于磁盘的存储设备)相反,高速缓存通常在可以快速地存取的存储器(比如随机存取存储器(RAM))中实现。高速缓存典型地存储频繁使用的数据,并减小数据库系统存取数据页需要的时间。
高速缓存条目典型地取决于比如引用表或者视图的其他数据。例如,查询结果可以取决于多个引用表,其中一些可以被递归地存取。但是,数据库系统内的事务可能使得表的条目被修改或者删除。为了提供数据库中数据的事务一致的快照,需要使与修改的表对应的高速缓存的内容无效。
附图说明
附图并入在这里且形成说明书的一部分。
图1是根据示例实施例的在多个节点中包括多个高速缓存的共享磁盘数据库系统的框图。
图2图示根据示例实施例的数据库管理系统。
图3图示根据示例实施例的高速缓存节点。
图4是描述根据示例实施例的由高速缓存节点更新表时间戳和表时间戳查询的处理的序列图。
图5是图示根据示例实施例的用于在高速缓存节点处理读取查询的处理的流程图。
图6A是描述根据示例实施例的用于处理标识数据库表的时间戳的请求的方法的流程图。
图6B是描述根据示例实施例的用于处理数据库更新请求的方法的流程图。
图7是描述根据实施例的使高速缓存节点中的表时间戳的远程副本无效的处理的序列图。
图8A和图8B图示根据实施例的两个示例。
图9是描述根据实施例的用于处理数据库更新请求和在高速缓存节点的表时间戳的副本的无效处理的方法的流程图。
图10是描述根据实施例的用于在高速缓存节点更新表时间戳的副本的方法的流程图。
图11是对实现各种实施例有用的示例计算机系统。
在图中,同样的附图标记通常指示相同或者类似的元件。另外,通常,附图标记的最左边的数字标识附图标记首次出现的图。
具体实施方式
提供高效的高速缓存无效机制是挑战性的问题。高速缓存节点保存与高速缓存的数据相关联的时间戳。该时间戳典型地与高速缓存节点中的所有条目相关联。因此,如果单个表中的条目在源数据库中被更新,则高速缓存节点中的全部表将具有过时的时间戳和将被无效。
在这里提供了系统、方法和/或计算机程序产品实施例,和/或其组合和子组合,用于使已经在与源数据库耦合的一个或多个高速缓存节点中高速缓存的数据无效。在这里公开的系统和方法通过消除不必要的高速缓存无效而改进高速缓存效率。
在实施例中,每一源表具有它自己的时间戳。该时间戳例如可以被保存为在源数据库中源表的属性。此外,在本实施例中,(在高速缓存节点中存储的)每一高速缓存的实体也具有它自己的时间戳,其指示从来自源数据库的一个或多个数据库表检索高速缓存的实体的时间戳。因此,在给定的高速缓存节点中,可以分开地使每一高速缓存的实体无效而不影响其他高速缓存的实体的有效性。
典型地,当在高速缓存节点中找到请求的结果(比如,但不限于,查询结果、授权检查的结果、从一个或多个表导出的索引、高速缓存查找的结果等)时,检查与该请求结果相关联的高速缓存的实体的时间戳。如果高速缓存的实体的时间戳小于源数据库的最新时间戳,则确定高速缓存的实体包括过时的数据,且不应该用于答复请求。
指向图1,图示了其中可以实现实施例的示例数据库计算环境100。数据库环境100包括数据库管理系统(DBMS)102和与DBMS 102通信的客户端101。DBMS 102可以是在服务器上执行且经由以下描述的网络(比如网络103)可接入到客户端102的系统。虽然客户端101在图1中表示为与DBMS 102分开的物理机器,但是这通过示例的方式呈现,而不是限制。在附加的实施例中,客户端101占据与DBMS 102相同的物理系统。在另外的实施例中,客户端101是要求访问DBMS 102的软件应用。在另一实施例中,用户可以操作客户端101以请求访问DBMS 102。遍及该说明书,术语客户端和用户将可互换地使用以指示手动地或者自动地访问DBMS 102的任何硬件、软件或者人类请求者,比如客户端101。另外,客户端101和DBMS102两者可以在计算机系统,比如图11中讨论的示例计算机系统内执行。
客户端101和DBMS 102可以经网络103通信。网络103可以是可以携带数据通信的任何网络或者网络的组合。这种网络103可以包括,但不限于局域网、城市区域网和/或包括因特网的广域网。
DBMS 102可以从客户端101接收请求,比如查询。该请求可以用于检索、修改、附加或者以其他方式操纵或者访问在DBMS 102和/或高速缓存节点104中存储的数据,如将相对于图2进一步描述的。
为了加快对请求(比如查询)的响应,DBMS 102中存储的数据的副本(copy)可以存储在一个或多个高速缓存节点,比如高速缓存节点104a-104c中(在这里统称为高速缓存节点104)。虽然高速缓存节点104a-104c表示为远离DBMS 102的物理机器,这是以示例的方式呈现,而不是限制。虽然在如图1所示的示例实施例中,高速缓存节点104a-104c经由网络103与DBMS 102通信,在附加的实施例中,一个或多个高速缓存节点104a-104c对于DBMS102是本地的,例如,直接连接到DBMS 102。以下进一步具体地描述在高速缓存节点中存储和访问数据。
指向图2,图示了DBMS 102的示例组件。在一个示例中,DBMS 102可以包括服务器或者是服务器的一部分。例如,DBMS 102可以由处理逻辑实现和/或包括处理逻辑,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。DBMS 102包括查询处理引擎201、DBMS 102中存储的多个数据库表215a-215n(也称为源数据库表)和全局(DBMS-宽)提交(commit)ID数据结构221(也称为提交标识计数器)。DBMS 102进一步包括高速缓存管理器211、高速缓存无效器213和表更新跟踪器223。将在下面依次描述这些组件中的每一个。
在一个示例中,为处理查询,DBMS 102包括查询处理引擎201,该查询处理引擎201又包括解析器模块203、执行单元205和提交引擎207。以下相对于它们的功能描述查询处理引擎组件,因为它属于处理寻址到DBMS 102的查询。
查询可以由客户端101使用符合查询语言的语法发送到DBMS 102。在示例实施例中,查询语言是结构化查询语言(“SQL”),但是可以是另一查询语言。DBMS 102能够根据查询语言解释查询,且基于该解释,生成到数据库表215a-215n的请求。
查询可以由用户使用客户端101或者由在客户端101上执行的应用生成。在接收时,DBMS 102开始处理查询。一旦处理查询,处理的查询的结果以查询结果从DBMS 102发送到客户端101。
解析器模块203解析所接收的查询。在实施例中,解析器162可以将查询转换为表示查询的格式的二叉树数据结构。在其他实施例中,可以使用其他类型的数据结构。
当解析完成时,解析器模块203将所解析的查询传递到归一化器231。归一化器231可以归一化所解析的查询。例如,归一化器231可以从解析的查询消除冗余SQL结构,和/或还对于解析的查询执行错误检查,其确认解析的查询中的表的名称符合DBMS 102中存储的表的名称。归一化器231也可以确认如由解析的查询描述的DBMS 102中存储的表当中的关系有效。
仍然考虑图2,一旦完成归一化,则归一化器231将归一化的查询传递到编译器233。编译器233将归一化的查询编译为机器可读格式。编译处理确定怎样由DBMS 102执行查询。为了保证高效地执行查询,编译器233可以执行查询优化器235,以生成用于执行查询的访问计划。
查询优化器235分析该查询和确定用于执行查询的查询计划。该查询计划根据查询语义检索和操纵DBMS 102中存储的数据库表中的信息。这可以包括选择每一访问的表的访问方法,选择对表执行连接(join)操作的顺序和选择每一连接操作中要使用的连接方法。因为可能有使用这些操作的组合执行给定查询的多个策略,查询优化器235还可以包括生成和评估多个策略,从该多个策略中选择执行查询的最好策略。
在实施例中,查询优化器235生成多个查询计划。一旦生成,则查询优化器235从多个查询计划选择单个查询计划以执行查询。给出几个示例,所选的查询计划可以是成本高效的计划,使用DBMS 102中最小量的存储器的查询计划,最快执行的查询计划,或者以上的任何组合。
在实施例中,为了优化器235生成和选择查询计划,执行单元205可以使用数据统计来估计特定的查询计划的计算成本。例如,可以考虑查询计划的大小(即,行数)的估计以选择高效的查询计划。基于该估计,查询优化器235从多个查询计划选择执行查询的高效的查询计划。
作为其功能的一部分,查询优化器235还可以生成索引以保证来自DBMS 102中存储的表的信息可以被快速地和高效地检索。索引是所选的数据库表字段的分类副本,其允许查询快速地检索信息和不必扫描整个数据库来检索信息的选择。
在实施例中,代码发生器237生成DBMS 103实现所选的高效的查询计划所需的代码。执行单元205执行生成的代码。
仍然考虑图2,在DBMS 102接收的查询可以包括读取和/或写入请求。虽然读取请求仅检索已经在DBMS 102内的表(比如数据库表215a-215n)中存储的数据,写入请求需要关于一个或多个这些表的数据修改和/或数据删除。提交引擎207用于处理写入请求。在数据库管理系统中,“提交”是指做出一组假定的永久改变。例如,在SQL中,提交声明(statement)结束数据库管理系统内的事务,且做出对所有客户端可见的所有改变。在SQL中,通常格式是发布“开始工作”声明,一个或多个SQL声明,且然后提交声明。替代地,在SQL中,可以发布“回滚(rollback)”声明,其撤消从发布“开始工作”起执行的所有工作。
注意到,虽然根据数据库查询图示了该示例,但是本公开的实施例不限于数据库查询。本公开的实施例可以应用于来自客户端101、高速缓存节点104等的任何请求。本公开的实施例可以应用于导出用于任何请求的一个或多个有关的表的任何方法。例如,该请求可以包括,但不限于比如授权检查的数据的请求、从一个或多个表导出的索引的请求、高速缓存查找等。
在一个示例中,在事务期间,由查询处理引擎201接收的改变请求可以存储在数据修改日志中,其可以在数据修改时间写入到非易失性日志存储设备(例如,一个或多个磁盘)。提交日志可以是可以永久地标记成功地提交相应的事务且先前的写入数据修改日志有效的日志。在一个示例中,当处理提交请求时,例如,提交引擎207可以将提交日志写入到非易失性日志存储设备。在那些改变的完成时,提交引擎207递增提交ID,比如提交ID 221,其是DBMS宽的全局计数器。提交ID 221有效地跟踪表215a-215n中数据的版本。表215a-215n中存储的数据的旧版本可以存储在DBMS 102中的分开的存储空间,或者一个或多个高速缓存节点,比如104a-104c中,且在请求时被检索。
仍然考虑图2,DBMS 102另外包括一个或多个数据库表,比如数据库表215a-215n。数据库表215a-215n中的每一个具有与其相关联的表时间戳属性,如由219a-219n指示的。该表时间戳典型地是指示已经更新表的提交事务当中的最大提交ID的计数器。该表时间戳可以基于提交ID更新。用于每一数据库表的表时间戳属性可以存储在数据库表自身中,或者在比如如以下将要描述的表更新跟踪器223的另一数据结构中,或者在与DBMS 102相关联的任何其他数据结构中。另外,DBMS 102中存储的每一表包括修改进行中计数器。注意到,本领域技术人员将理解可以代替地使用其他数据结构以实现与修改进行中计数器相同的功能,比如,但不限于标记、整数等。例如,数据库表215a具有在其中存储的修改进行中计数器217a,数据库表215b具有在其中存储的另一修改进行中计数器217b,等等。如将相对于图4-图10具体描述的,修改进行中计数器用于保证在一个或多个高速缓存节点(比如高速缓存节点104a-104c)的请求时,对于每一数据库表提供最新的表时间戳信息。虽然修改进行中计数器数据结构示为存储在数据库表中,但是注意到这些修改进行中计数器数据结构可以存储在与DBMS 102相关联的其他数据结构中。在一个实施例中,每一源表具有它自己的表时间戳和它自己的修改进行中计数器。在本实施例中,(在高速缓存节点中存储的)每一高速缓存的实体也具有它自己的时间戳,其指示从来自源数据库的一个或多个数据库表检索高速缓存的实体的时间戳。在本实施例中,通过使用与每一表相关联的表时间戳和修改进行中计数器,可以分开地使给定高速缓存节点中的每一高速缓存的实体无效而不影响其他高速缓存的实体的有效性。
仍然考虑图2,DBMS 102进一步包括表更新跟踪器223,其更新与已经更新的每一数据库表相关联的时间戳。因为每一数据库表具有分开的表时间戳,更新、删除或者以其他方式修改一个数据库表中存储的信息,仅导致要影响(递增)的该数据库表的时间戳,且使其他数据库表的时间戳保留原样。例如,如果作为数据修改请求的结果,修改数据库表215a中的数据,则仅更新表时间戳219a。在另一示例中,如果修改与表215b相关联的元数据,则仅更新表时间戳219b。
根据一个示例,表时间跟踪器223也可以配置为管理一个或多个高速缓存节点中一个或多个表时间戳219a-219n的副本。例如,当高速缓存节点104高速缓存来自数据库表215a的高速缓存的实体时,高速缓存节点104可以向表时间跟踪器223登记,以使得表时间跟踪器223将在高速缓存节点104中保留表时间戳219a的副本,如以下更详细地讨论的。在该示例中,表时间跟踪器223可以配置为当表时间戳219a被改变和/或正在被改变的过程中时,使高速缓存节点104中表时间戳219a的副本无效。在另一示例中,高速缓存的实体可以例如由于两个或更多数据库表215a-215n之间的相关性,而产生自与两个或更多数据库表215a-215n相关联的请求结果(例如,查询结果)。在该示例中,表时间跟踪器223可以配置为当执行对两个或更多数据库表215a-215n中的任意的更新时,使高速缓存节点104中的高速缓存的实体无效。在该示例中,表时间跟踪器223将保留与在高速缓存节点104中的两个或更多数据库表215a-215n对应的两个或更多表时间戳219a-219n的副本。在一个示例中,具有来自表215a-215n的高速缓存的结果的所有高速缓存节点可以向表时间跟踪器223自动地登记,以使得表时间跟踪器223将保留它们的表时间戳的副本。替代地,高速缓存节点可以决定是否向表时间跟踪器223登记。与数据库表215a-215n相关联的表时间戳219a-219n可以存储在表更新跟踪器223中,且当更新时对相应的表做出改变。替代地,表时间戳219a-219n可以存储在它们的相应的表中,且表更新跟踪器223当对数据库表做出改变时更新表时间戳。在该示例中,表时间戳219a-219n指示它们相应的表已经被更新的最后时间。
本公开的实施例提供了用于更新表时间戳219a-219n和提交ID 221的新颖方法,以使得不从高速缓存节点(比如高速缓存节点104a-104c中的任意)提供过时数据。将相对于图4-图10具体描述该方法。
仍然考虑图2,DBMS 102另外包括处理高速缓存管理器211。高速缓存管理器211保持在DBMS 102的布置下的所有高速缓存节点的列表。当高速缓存节点,例如,高速缓存节点104c被添加到服务DBMS 102时,高速缓存节点向高速缓存管理器211登记它自己。因此,高速缓存管理器211将高速缓存节点104c的名称添加到它管理的所有高速缓存节点的列表。类似地,当高速缓存节点,例如,高速缓存节点104c从DBMS 102的布置去除时,它从高速缓存管理器211撤销登记它自己。因此,高速缓存管理器211从它管理的高速缓存节点的列表去除高速缓存节点104c。高速缓存管理器211可以相对于它管理的高速缓存节点另外执行其他服务,比如收集高速缓存使用统计和分布跨越高速缓存节点的可用存储器预算。高速缓存管理器211可以另外允许以分布式方式的高速缓存节点间通信。
DBMS 102可以进一步包括高速缓存无效器213。当高速缓存条目被插入到高速缓存中时,它们可以与从属的对象相关联。如上所述,可以更新数据库表215a-215n中存储的对象。该更新可以寻址到元数据、数据或者特权,或者其他类型。在从属的对象的更新时,高速缓存无效器213可以向高速缓存节点,比如高速缓存节点104通知改变。这些通知基于登记的相关性分派。为了更快的无效,高速缓存条目被标记为无效。这允许基于事务标识符的旧的快照的查找和无效高速缓存条目的异步无用数据收集。可以对于特定的高速缓存条目手动地触发无效。另外,可以在对于其登记了相关性的数据的改变时触发自动无效。当高速缓存条目被添加到高速缓存时可以指定这些相关性,且分解递归的相关性。相关性由标识符(例如,对象)、类型(例如,表)和改变标志(例如,元数据改变)描述。该类型和改变标志指导无效处理且用于过滤不相关的事件。作为非限制示例,用于SQL视图的高速缓存节点可以引用另一视图和三个表。然后,该视图和三个表将是从属的对象。本公开的实施例可以递归地分解这些相关性低至表的级别,且在表的级别执行更新跟踪。
指向图3,根据实施例图示了具有在其中存储的示例数据结构的高速缓存节点104(比如高速缓存节点104a、104b或者104c)。在一个示例中,高速缓存节点104可以包括服务器或者是服务器的一部分。例如,高速缓存节点104可以由处理逻辑实现和/或包括处理逻辑,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。高速缓存节点104包括一组高速缓存关键字301a-301m,相应的高速缓存的实体303a-303m,和相应的高速缓存的实体时间戳305a-305n。每一高速缓存的实体303a-303m包括反映在DBMS 102中找到的相应的一个或多个源数据库表中找到的信息的高速缓存的请求结果(例如,高速缓存的查询结果,授权检查的高速缓存的结果,从一个或多个表导出的高速缓存的索引等)。例如,如图所示,高速缓存关键字301a与对应于图2中的数据库表215a的高速缓存的实体303a相关联。另外,与高速缓存关键字301a对应的高速缓存的实体303a另外包括高速缓存的实体时间戳305a,其反映从DBMS 102中的一个或多个源数据库表检索高速缓存的实体303a的时间。高速缓存关键字301a和/或高速缓存的实体303a可以引用任意数目的源表和/或源表片段。例如,高速缓存关键字301a和/或高速缓存的实体303a可以引用一个或多个表,且高速缓存的实体的该组引用表可以重叠。根据一个示例,高速缓存关键字301可以包括可用于标识和/或定位高速缓存的实体的信息。例如,高速缓存关键字301可以包括用于请求、查询字符串、表对象标识符(OID)、分区OID等的指令。换句话说,当在一个示例中,对DBMS 102做出查询,且查询的结果在源表215a时,该结果的副本(也称为复制品)也可以存储在高速缓存的实体303a中。因此,对于进一步的查询,该查询可以指向高速缓存节点104,且在确定与查询相关联的关键字匹配高速缓存关键字301之后,可以代替表215a从高速缓存节点104和高速缓存的实体303a检索该结果。
高速缓存节点104还可以存储指示它已经在其中高速缓存的每一源表的最新的表时间戳的信息。例如,如图所示,表时间戳307a-307m对应于高速缓存的实体303a-303m,且保持DBMS 102中相应的源数据库表的最新的时间戳的值。换句话说,高速缓存节点104中的表时间戳307a-307m可以是源节点(例如,DBMS 102)中表时间戳219a-219n的副本。当源表及其相应的高速缓存位于两个不同工作节点时,每个表时间戳查找将涉及节点间通信。因此,在一个实施例中,表时间戳的副本存储在高速缓存节点中,以减小节点间通信需要的时间。但是,这些表时间戳的副本需要被有高效地更新。在一个示例中,高速缓存节点104中的高速缓存的实体303a对应于源节点(例如,DBMS 102)中表215a中存储的所有数据或者数据的子集。高速缓存的实体时间戳305a对应于高速缓存高速缓存的实体303a的时间戳。在该示例中,表时间戳307a包括当最后更新表215a时表时间戳217a的副本。在另一示例中,高速缓存节点104中的高速缓存的实体303b对应于源节点(例如,DBMS 102)中表215a和215b中存储的数据的子集。如在先前示例,高速缓存的实体时间戳305b对应于高速缓存高速缓存的实体303b的时间戳。但是,与在先前示例中不同,这里高速缓存的实体303b的有效性将取决于在高速缓存节点104中存储高速缓存的实体303b之后是否存在对表215a和215b中任何一个的任何更新。如上所述和将相对于图7-图10更详细地讨论的,源节点(例如,DBMS 102)的表更新跟踪器223可以配置为控制表时间戳307a-307m的有效性。可选地,高速缓存节点104可以包括检查在其中存储的所有高速缓存的条目并删除那些标记为无效的无用数据收集程序模块。
在DBMS中更新表时间戳和处理高速缓存查询
图4、图5、图6A和图6B描述根据实施例,怎样更新表时间戳,和处理请求,以在高速缓存节点上提供事务一致的快照。在一个示例中,包括表215a-215n的DBMS 102可以是包括源表的源节点,从该源表高速缓存高速缓存的实体。另外地或者替代地,源节点可以是任何处理逻辑,其可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,关于处理装置执行的指令)或者其组合,且可以包括从其高速缓存高速缓存的实体的源表。
指向图4,根据实施例图示了描述在DBMS 102中更新表时间戳,和由高速缓存节点从DBMS 102的表时间戳查询的处理的示例序列图400。为了促进描述该处理,通常参考先前引入到图2中的数据结构。时间图400可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。
在步骤401,且例如在时间戳10,源数据库表1中存储的数据的副本存储在高速缓存节点104中,可能作为来自要求访问和检索数据库表1的DBMS 102的查询的结果。但是,该步骤401可以是存储一个或多个源表中的任意和/或在一个或多个源表的任何片段中的数据的子集的任何请求的结果。高速缓存节点104以与图3中示出的那些类似的数据结构,存储具有高速缓存时间戳10的该数据。
一旦在403发布更新请求(例如,提交声明/请求),需要修改在数据库表,比如数据库表215a中存储的数据,或者与该数据库表相关联的元数据。为处理此,在步骤407,递增与数据库表对应的修改进行中计数器(比如修改进行中计数器217a)的值。注意到,更新请求403可以包括对多于一个表的更新,且因此可以涉及多于一个修改进行中计数器。在步骤408,提交引擎207(作为示例)可以将提交日志(其可以是可以永久地标记成功地提交相应的事务且先前写入数据修改日志有效的日志)写入到长期存储器存储设备(例如,非易失性日志存储设备,比如磁盘)。在一个示例中,该操作可能是费时的操作。在步骤409,提交ID221的值递增到下一时间戳,例如,11。
在405,具有时间戳11的请求Q1从高速缓存节点104发布到源DBMS 102。该请求Q1可以基于发送到高速缓存管理器的对高速缓存节点104的高速缓存查找。另外地或者替代地,请求Q1可以基于对源节点的数据库查询。在一个示例中,请求Q1可以基于源节点已经指向(例如,转发)到高速缓存节点104的查询。由于请求Q1,在步骤411,高速缓存节点104可以请求DBMS 102以标识在其中存储的一个或多个数据库表,比如数据库表215a的最新的时间戳。但是,由于更新请求(例如,提交声明)403的发布,DBMS 102已经在修改表215a的过程中。也就是,提交ID 221已经被更新,但是表215a的表时间戳还未被更新。因此,在这种暂时状态,由DBMS 102返回到高速缓存节点104的任何时间戳信息将反映过时的信息。为了解决该问题,在步骤413,做出有效性检查以标识修改进行中计数器217a是否大于零。如果修改进行中计数器217a的值确定为大于零,则指示数据库表215a正在经历更新。因此,在时间戳10在高速缓存节点104中高速缓存的该数据库表的先前的副本不再有效。
在步骤415,更新的表217a的表时间戳设置为等于提交ID 221的值。最终,在步骤417,关于影响在403发布的提交声明的所有操作完成,且修改进行中计数器217a的值递减回到零。
指向图5,图示了根据实施例描述用于在高速缓存节点104处理比如但不限于读取查询的请求的方法500的流程图。方法500可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。继续参考图1-图3描述流程图500的方法。例如,可以使用高速缓存节点104实现流程图500。流程图500的方法的步骤不限于以下将要描述的顺序,且可以以不同次序执行各种步骤。另外,在实施例中,流程图500的方法的两个或更多步骤可以彼此同时执行。
该方法500开始于步骤501且移动到步骤503。在步骤503,高速缓存节点104接收比如读取请求的请求。随后,在步骤505,高速缓存节点104执行查找以定位与读取请求相关联的高速缓存关键字。这可以通过搜索高速缓存节点104中存储且图3中示出的数据结构而做出。高速缓存关键字301a-301n可以是分类的、未分类的、存储在散列表、链接表、双链接表、树或者其他数据结构中。因此,高速缓存节点104可以根据其中存储它们的数据结构在所有高速缓存关键字301a-301n当中搜索高速缓存关键字。
在步骤507,高速缓存节点104做出检查以确定查找是否成功。如果查找成功,则指示在读取请求中请求的数据对象的副本存储在高速缓存节点中的高速缓存的实体中,作为其结果,处理移动到步骤511。但是,如果在步骤507确定在高速缓存节点中没有找到与读取请求相关联的高速缓存关键字,则处理移动到步骤509,且随后在步骤520结束。
在步骤511-517,高速缓存节点104确定包括在请求(例如,读取请求)中请求的对象的表的高速缓存的副本的时间戳是最新的或者旧的。在步骤511,高速缓存节点104检索包括对象的高速缓存的实体的时间戳。在步骤513,高速缓存节点104发送请求到源513,以标识与一个或多个数据库表中的每一个相关联的最新的时间戳,该一个或多个数据库表与包括对象的高速缓存的实体相关联。在步骤515,高速缓存节点104可以执行等待操作,直到从DBMS 102接收到响应为止。该等待可以具有预定上限,例如,2秒,之后,方法移动到指示高速缓存丢失的步骤509。
在高速缓存节点104从DBMS 102接收到响应之后,该方法移动到步骤517,其中,高速缓存节点104比较由DBMS 102返回的一个或多个数据库表时间戳当中的最大值和与包括对象的高速缓存的实体对应的高速缓存的实体时间戳。如果确定一个或多个数据库表时间戳的最大值大于高速缓存的实体时间戳,这意味着与高速缓存的实体相关联的至少一个数据库表的数据库表时间戳大于高速缓存的实体时间戳。在该情况下,高速缓存对象确定为是旧的,且该方法移动到步骤509。但是,如果确定与高速缓存的实体相关联的全部数据库表时间戳具有与高速缓存的时间戳相同的值(即,一个或多个数据库表时间戳当中的最大值与高速缓存的实体时间戳相同),则方法移动到步骤519,其中,响应于在步骤503接收的读取查询返回高速缓存的对象。在一个实施例中,如果与包括对象的高速缓存的实体相关联的一个或多个源表未向例如表更新跟踪器223登记,则高速缓存节点可能在步骤515没有接收到响应,且该方法移动到指示高速缓存丢失的步骤509。另外地或者替代地,在未登记一个或多个源表的情况下,该方法在步骤517不能确定最大源表时间戳,因为高速缓存节点未接收到且将不具有所有请求的时间戳。在该示例中,该方法可以再次移动到指示高速缓存丢失的步骤509。根据一个示例,如以下讨论的,如果未登记一个或多个源表,则源节点可以在发送表时间戳到高速缓存节点(在步骤515,高速缓存节点接收表时间戳)之前登记它们。
根据一个示例,例如客户端101的读取器具有指示读取器请求查询的最后时间的快照时间戳(sTS)。当读取器提交查询时,快照时间戳可以比较与该查询相关联的高速缓存的实体时间戳。在一个实施例中,这些处理可以例如由引擎201、高速缓存管理器211等执行。如果高速缓存的实体时间戳等于快照时间戳,则读取器“看到”相同快照,且因此,可以批准从与查询相关联的高速缓存的实体获得的查询的结果的有效性。如果高速缓存的实体时间戳小于快照时间戳,且最大表时间戳小于或等于高速缓存的实体时间戳,则因为条目被高速缓存所以相关的表还未被更新,且因此可以批准请求的查询的结果的有效性。
但是,如果高速缓存的实体时间戳小于快照时间戳且最大表时间戳大于高速缓存的实体时间戳,则已经更新相关表但是读取器不能“看到”它们,或者相关表已经更新了多于一次。当该状况发生时,可以拒绝请求的查询的结果的有效性。在该情况下,存在高速缓存的实体可能对于读取器是有效的可能性,且因此,存在错误拒绝的可能性。如果高速缓存的实体时间戳大于快照时间戳,则可以拒绝请求的查询的结果的有效性。与先前情况类似,在该情况下,存在高速缓存的条目可能对于读取器有效的可能性,且因此,存在错误拒绝的可能性。
指向图6A,图示了描述方法600的流程图,该方法600用于处理标识比如DBMS 102的DBMS中的比如表215a-215n中的任意的数据库表的表时间戳的请求。方法600可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。继续参考图1-图3描述流程图600的方法。例如,流程图600可以使用引擎201、表更新跟踪器223或者DBMS 102的其他组件实现。流程图600的方法的步骤不限于以下将要描述的顺序,且可以以不同次序执行各种步骤。另外,在实施例中,流程图620的方法的两个或更多步骤可以彼此同时执行。
方法600起始于步骤601且移动到步骤603。在步骤603,比如DBMS 102的源服务器从比如高速缓存节点104a的高速缓存节点接收标识DBMS 102中存储的一个或多个源数据库表,比如数据库表215a的当前时间戳的请求。在一个示例中,在从高速缓存节点接收请求之后,源节点(例如,DBMS 102)可以确定高速缓存节点104a已经请求的一个或多个源数据库表是否向用于高速缓存的源节点登记。如果一个或多个源数据库表已经向用于高速缓存的源节点登记,则该方法可以继续步骤605。但是,如果源节点确定一个或多个源数据库表(高速缓存节点正在答复它的表时间戳)还未登记用于高速缓存,则源节点可以登记用于高速缓存的一个或多个源数据库表。在一个示例中,比如图8中的表801的表可用于向它的相应的一个或多个高速缓存节点登记一个或多个源数据库表。在该示例中,源节点可以使用一个或多个高速缓存节点标识符(ID),以向它的相应的一个或多个高速缓存节点登记一个或多个源数据库表。在一个示例中,登记一个或多个源数据库表也可以包括生成用于该一个或多个源数据库表的相应的修改进行中计数器和/或表时间戳。在登记之后,该方法可以在步骤605继续。
在步骤605,DBMS 102确定与数据库表215a对应的修改进行中计数器,例如修改进行中计数器217a的值是否大于零。如果DBMS 102确定修改进行中计数器217a的值大于零,则指示数据库表217a当前正在经历修改。因此,DBMS 102不发送对在步骤603接收的请求的任何响应,且该方法简单地在步骤610结束。但是,如果在步骤605,确定修改进行中计数器等于零,则DBMS 102将与数据库表217a相关联的时间戳返回到高速缓存节点。该方法随后在步骤610结束。注意到,虽然以一个表图示了方法600,但该方法可以包括多于一个表,且因此,可以涉及多于一个修改进行中计数器。
指向图6B,图示了描述用于在DBMS比如DBMS 102处理数据库更新请求的方法620的流程图。方法620可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。继续参考图1-图3描述流程图620的方法。例如,流程图620可以使用引擎201、表更新跟踪器223或者DBMS102的其他组件实现。流程图620的方法的步骤不限于以下将要描述的顺序,且可以以不同次序执行各种步骤。另外,在实施例中,流程图620的方法的两个或更多步骤可以彼此同时执行。
该方法起始于步骤621且移动到步骤623。在步骤623,DBMS 102接收用于更新存储在数据库表K(比如数据库表215a)中的数据,或者与该数据库表K相关联的元数据的请求。在步骤625,递增修改进行中计数器的值。根据一个示例,表更新跟踪器223可以配置为更新修改进行中计数器的值。
该方法随后移动到步骤627,其中,提交引擎207(作为示例)可以将提交日志(其可以是可以永久地标记成功地提交相应的事务且先前写入的数据修改日志有效的日志)写入到长期存储器存储设备(例如,比如磁盘的非易失性日志存储设备)。
随后,该方法移动到步骤629,其中,递增提交ID(例如,提交ID 221)。此后,在步骤633,与数据库表相关联的时间戳(比如数据库表时间戳219a)设置为等于提交ID。在这点之后,不存在需要发生更多的数据修改动作。因此,在步骤633,修改进行中计数器递减回到零,且方法在步骤637结束。根据一个示例,步骤625-633可以是事务提交的一部分,且步骤623可以在事务内重复。
高效的节点间高速缓存
图7、图8A、图8B、图9和图10描述了根据实施例源表时间戳的本地副本如何可以存储在高速缓存节点中和与源节点同步地使其无效。在一个示例中,包括表215a-215n的DBMS102可以是包括源表的源节点,从该源表高速缓存高速缓存的实体。另外地或者替代地,源节点可以是任何处理逻辑,其可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,关于处理装置执行的指令)或者其组合,且可以包括从其高速缓存高速缓存的实体的源表。
指向图7,根据实施例图示了描述使高速缓存节点中的表时间戳的远程副本无效的处理的示例序列图700。为了促进描述该处理,通常参考先前引入到图2和图3中的数据结构。时间图700可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。
在步骤717,DBMS 102接收更新表的更新请求(例如,提交请求)并执行更新请求(例如,该提交请求)。在一个示例中,提交引擎207可以配置为执行更新请求(例如,提交请求)。更新请求可以包括写入事务。为处理此,在步骤701,DBMS 102例如通过表更新跟踪器223递增与数据库表对应的修改进行中计数器,比如修改进行中计数器217a的值。在步骤703,提交引擎207(作为示例)可以将提交日志(其可以是可以永久地标记成功地提交相应的事务且先前写入数据修改日志有效的日志)写入到长期存储器存储设备(例如,非易失性日志存储设备,比如磁盘)。在一个示例中,该操作可能是费时的操作。
在提交引擎207将提交日志写入长期存储器的时间期间,DBMS 102可以发送消息到高速缓存节点104,以使位于高速缓存节点104中的表时间戳的一个或多个副本无效。根据该示例性实施例,高速缓存节点104(如图3描述的)包括表时间戳307a-307m,其存储指示它已经在其中高速缓存的每一表的最新表时间戳的信息。例如,表时间戳307a-307m对应于高速缓存的实体303a-303m,且保持DBMS 102中相应的源数据库表215a-215n的最新时间戳的值。例如,高速缓存节点104中的表时间戳307a是DBMS 102中的表时间戳219a的副本。当提交请求717要求例如源表215a的改变时,当处理和完成提交请求时将更新表时间戳219a。因此,高速缓存104中表时间戳219a的副本–表时间戳307a–应该被无效(例如,标记为无效的或者删除的)。但是,因为在提交717的结尾更新表时间戳219a,所以如果在该时间期间高速缓存104参考表时间戳307a,则高速缓存104将发现该表时间戳的错误的值。因此,该实施例设计用于一旦提交717开始则使表时间戳307a中的值无效。因此,在提交引擎207向长期存储设备(例如,磁盘)执行影响提交日志中的声明的I/O操作的步骤703期间,DBMS 102发送消息705到高速缓存节点104以使表时间戳307的值无效。根据一个示例,705可以是从源节点102到高速缓存节点104的远程呼叫。在该示例中,当网络I/O操作(例如,到高速缓存节点104的远程呼叫)与提交日志操作重叠时可以减小等待时间开销。提交日志操作时间例如可以包括提交引擎207执行磁盘I/O操作需要的时间。在一个实施例中,提交日志操作时间可以排除更新和存储提交ID 221需要的时间。
在步骤707,高速缓存节点104响应于消息705使表时间戳307a无效。接下来高速缓存节点104发送消息709到DBMS 102,以指示已经在高速缓存节点104中执行了无效处理。根据一个示例,709可以是在高速缓存节点104使表时间戳307a无效之后对远程呼叫705的响应。根据一个示例,消息709可以是成功指示符,以使得以分布的设置来避免具有未标记为无效的高速缓存节点。
在步骤711,DBMS 102将提交ID 221的值递增到下一时间戳。根据一个示例,该步骤可以包括获取提交ID 221的锁定。在步骤713,DBMS 102将更新的表217a的表时间戳设置为等于提交ID 221的值。根据一个示例,该步骤可以包括获取相应的表时间戳的锁定。最终,在步骤715,完成关于影响在717发布的提交声明的操作,且修改进行中计数器217a的值例如递减回到零。根据一个示例,该步骤可以包括释放提交ID 221和/或相应的表时间戳的锁定。
虽然图7图示一个源102和一个高速缓存节点104,但注意到图7的处理700可以在一个源102和多个高速缓存节点之间执行。在该示例中,多个高速缓存节点已经高速缓存了源表和/或取决于在处理700中正在更新的源表的高速缓存的实体。因此,源102通知这些多个高速缓存节点以使它们的表时间戳的副本无效。在该示例中,无效消息705可以多播到多个高速缓存节点。此外,虽然图7图示影响一个表的事务的提交,但注意到在事务的提交期间可以更新源(例如,DBMS 102)中的多个源表,且因此在处理700中可能涉及多个修改进行中计数器217。在该示例中,消息705可以包括用于对应于正在更新的源(例如,DBMS 102)中的多个源表的高速缓存节点104中的表时间戳的多个副本的无效消息。
图8A和图8B图示根据实施例的分别在DBMS 102和高速缓存节点104中的两个示例性表。根据此示例,表801可以存储在DBMS 102内的高速缓存管理器211中。另外地或者替代地,表801可以存储在DBMS 102内的其他位置中,例如,表更新跟踪器223,且表801例如可以由表更新跟踪器223管理。表803可以存储在高速缓存节点104中。表801指示哪个高速缓存节点已经高速缓存哪个表。可以使用表更新跟踪器233填充和更新表801。根据一个示例,当高速缓存管理器211和/或无效器213将表登记为用于高速缓存相关时,可以保持表801。如上相对于图2所述的,已经高速缓存来自表215a-215n的查询结果的所有高速缓存节点可以向表时间跟踪器223自动地登记,以使得表时间跟踪器223将保持它们的表时间戳的副本。替代地,高速缓存节点可以决定是否向表时间跟踪器22 3登记。因此,源节点(例如,DBMS102)例如通过表更新跟踪器223,可以跟踪包括对应于源表的高速缓存实体的高速缓存节点。通过跟踪高速缓存节点,如果需要,源节点能够使表时间戳的副本无效。
例如,表801图示高速缓存节点3已经高速缓存了具有对象ID 1442和1446的实体。当DBMS 102接收与特定的表相关联的提交请求717时,DBMS 102在表801中查找以确定是否任何高速缓存节点已经高速缓存了该特定的表。如果DBMS 102确定已经由高速缓存节点高速缓存了该特定的表,则DBMS 102执行图7的方法700以使该高速缓存节点的表时间戳无效。在高速缓存节点104的表803存储从其高速缓存的实体被高速缓存在高速缓存节点104中的表的对象ID和它们的关联的提交ID。
指向图9,图示了描述方法900的流程图,该方法900用于处理在比如DBMS 102的DBMS的数据库更新请求,和在高速缓存节点的表时间戳的副本的无效处理。方法900可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。继续参考图1-图3描述流程图900的方法。例如,流程图900可以使用引擎201、提交引擎207、表更新跟踪器223或者DBMS 102的其他组件中的至少一个实现。流程图900的方法的步骤不限于以下将要描述的顺序,且可以以不同次序执行各种步骤。另外,在实施例中,流程图900的方法的两个或更多步骤可以彼此同时执行。
该方法起始于步骤901和移动到步骤903。在步骤903,DBMS 102接收用于更新存储在数据库表K(比如数据库表215a)中的数据,或者与该数据库表K相关联的元数据的请求。
在步骤905,递增修改进行中计数器的值。根据一个示例,表更新跟踪器223可以配置为更新修改进行中计数器的值。该方法随后移动到步骤907,其中,DBMS 102发送消息到具有表K的副本和/或取决于表K的高速缓存实体的高速缓存节点,以使与在该高速缓存节点中的表K相关联的表时间戳的副本无效。根据一个实施例,DBMS 102存储比如表801的表。DBMS 102可以使用表801以确定哪个或哪些高速缓存节点具有源表K的副本和/或取决于源表K的高速缓存实体。在该示例中,在步骤907之前,DBMS 102可以使用表801以确定无效消息应该发送到的一个或多个高速缓存节点。
该方法随后移动到步骤909,其中,提交引擎207(作为示例)可以将提交日志(可以是可以永久地标记成功地提交相应的事务且先前写入的数据修改日志有效的日志)写入到长期存储器存储设备(例如,比如磁盘的非易失性日志存储设备)。注意到,虽然示出步骤907在步骤909之前,至少这两个步骤可以以任何其他次序执行,比如实质上同时执行。通过实质上重叠这两个操作,当网络I/O操作(例如,远程呼叫或者到高速缓存节点104的消息传递)与提交日志操作重叠时,可以减小等待时间开销。
随后,该方法移动到步骤911,其中,递增提交ID(例如,提交ID 221)。此后,在步骤913,与数据库表相关联的时间戳(比如数据库表时间戳219a)设置为等于提交ID。在这点之后,不需要发生更多的数据修改动作。因此,在步骤915,修改进行中计数器递减回到零,且方法在步骤920结束。
指向图10,图示了描述根据实施例的用于更新在高速缓存节点的表时间戳的副本的方法1000的流程图。方法1000可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理装置上执行的指令)或者其组合。继续参考图1-图3描述流程图1000的方法。例如,流程图1000可以使用高速缓存节点104实现。流程图1000的方法的步骤不限于以下将要描述的顺序,且可以以不同次序执行各种步骤。另外,在实施例中,流程图1000的方法的两个或更多步骤可以彼此同时执行。
该方法1000起始于步骤1001和移动到步骤1003。在步骤1003,高速缓存节点104从源节点,比如DBMS 102接收无效消息。该无效消息用于使与表K相关联的表时间戳的副本无效。例如,图3的表时间戳307a与表215a的表时间戳219a相关联。在正在更新表215a的同时(例如,如在图9中讨论的),高速缓存节点104在步骤1003接收无效消息以使高速缓存节点104表时间戳307a无效。
在步骤1005,高速缓存节点104使作为与表K相关联的表时间戳219a的副本的表时间戳307a无效。在步骤1007,高速缓存节点1007可以将用于与表K相关联的表时间戳的新值的请求发送到源节点,比如DBMS 102。在步骤1009,高速缓存节点104可以接收更新表时间戳且可以在表时间戳307a中存储新的值。
图11是其中可以实现实施例的示例计算机系统的框图。例如,可以使用一个或多个公知的计算机系统,比如图11所示的计算机系统1100实现各种实施例。计算机系统1100可以是能够执行在这里描述的功能的任何公知的计算机,比如可从国际商业机器公司、Apple、Sun、HP、Dell、Sony、Toshiba等得到的计算机。
计算机系统1100包括一个或多个处理器(也称为中央处理单元,或者CPU),比如处理器1104。处理器1104连接到通信基本设施或者总线1106。
一个或多个处理器每个可以是图形处理单元(GPU)。在实施例中,GPU是作为设计用于快速地处理在电子装置上的数学集中的应用的专用电子电路的处理器。GPU可以具有对于大的数据块,比如对计算机图形应用普遍的数学集中的数据、图像和视频的并行处理高效的高度并行结构。
计算机系统1100还包括一个或多个用户输入/输出装置1103,比如监视器、键盘、指示装置等,其通过一个或多个用户输入/输出接口1102与通信基本设施1106通信。
计算机系统1100还包括主存储器或者主要存储器1108,比如随机存取存储器(RAM)。主存储器1108可以包括一级或多级高速缓存。主存储器1108在其中存储控制逻辑(即,计算机软件)和/或数据。
计算机系统1100还可以包括一个或多个次级存储装置或者存储器1110。次级存储器1110例如可以包括硬盘驱动器1112和/或可拆卸存储装置或者驱动器1114。可拆卸存储驱动器1114可以是软盘驱动器、磁带驱动器、致密盘驱动器、光存储装置、磁带备用装置和/或任何其他存储装置/驱动器。
可拆卸存储驱动器1114可以与可拆卸存储单元1118互动。可拆卸存储单元1118包括计算机可使用的或者可读取的存储装置,具有在其上存储的计算机软件(控制逻辑)和/或数据。可拆卸存储单元1118可以是软盘、磁带、致密盘、DVD、光存储盘,和/或任何其他计算机数据存储装置。可拆卸存储驱动器1114以公知的方式从可拆卸存储单元1118读取和/或写入到可拆卸存储单元1118。
根据示例性实施例,次级存储器1110可以包括用于允许计算机程序和/或其他指令和/或数据由计算机系统1100访问的其他装置、手段或者其他方法。这种装置、手段或者其他方法例如可以包括可拆卸存储单元1122和接口1120。可拆卸存储单元1122和接口1120的示例可以包括程序盒和盒式接口(比如在视频游戏装置中找到的)、可拆卸存储器芯片(比如EPROM或者PROM)和关联的插座、存储棒和USB端口、存储卡和关联的存储卡槽,和/或任何其他可拆卸存储单元和关联的接口。
计算机系统1100可以进一步包括通信或者网络接口1124。通信接口1124使计算机系统1100能够与远程装置、远程网络、远程实体等(单独地和集合地由附图标记1128表示)的任何组合通信和互动。例如,通信接口1124可以允许计算机系统1100经通信路径1126与远程装置1128通信,该通信路径1126可以是有线和/或无线的,且可以包括LAN、WAN、因特网等的任何组合。控制逻辑和/或数据可以经由通信路径1126发送到和从计算机系统1100发送。
在实施例中,包括有形的计算机可使用或者可读介质的具有在其上存储的控制逻辑(软件)的有形的设备或者制造物在这里也被称为计算机程序产品或者程序存储装置。这包括,但不限于计算机系统1100、主存储器1108、次级存储器1110和可拆卸存储单元1118和1122,以及具体表现前述的任何组合的有形的制造物。这种控制逻辑当由一个或多个数据处理装置(比如计算机系统1100)执行时,使得这种数据处理装置如在这里描述的操作。
基于本公开中包括的教导,对本领域技术人员很明显如何使用除了图11中示出的之外的数据处理装置、计算机系统和/或计算机架构做出和使用实施例。具体来说,实施例可以以除了在这里描述的那些之外的软件、硬件和/或操作系统实现来操作。
结论
要认识到具体实施方式部分,而不是发明内容和摘要部分(如果有的话)意在用于解释权利要求。发明内容和摘要部分(如果有的话)可以提出由发明人考虑的一个或多个,但不必是所有示例性实施例,且因此不意在以任何方式限制本公开或者所附权利要求。
虽然在这里已经参考用于示例性领域和应用的示例性实施例描述了本公开,但是应当理解本公开不限于此。其他实施例和对其的修改是可能的,且在本公开的范围和精神内。例如,且不限制该段落的普遍性,实施例不限于在图中图示和/或在这里描述的软件、硬件、固件和/或实体。另外,实施例(无论是否在这里明确地描述)对超出在这里描述的示例的领域和应用具有重要的实用性。
已经通过图示指定功能的实现及其关系的功能构建块的帮助在这里描述了实施例。这些功能构建块的边界在这里为了说明的方便而任意地限定。可以定义替代的边界,只要适当地执行指定的功能与关系(或其等效物)即可。此外,替代实施例可以使用不同于在这里描述的次序的次序执行功能块、步骤、操作、方法等。
在这里对“一个实施例”、“一实施例”、“示例实施例”或者类似短语的引用指示描述的实施例可以包括特定的特征、结构或者特性,但是每个实施例不必包括特定的特征、结构或者特性。此外,这种短语不必指示相同实施例。另外,当关于实施例描述特定的特征、结构或者特性时,将这种特征、结构或者特性并入到其他实施例中在本领域技术人员的认识内,而无论是否在这里明确地提到或者描述。
本公开的广度和范围不应该由任意以上描述的示例性实施例限制,而是应该仅根据下面的权利要求及其等效限定。
Claims (20)
1.一种用于数据存储的方法,包括:
由一个或多个计算装置,在源数据库接收更新与在源数据库存储的表相关联的数据的更新请求;
由一个或多个计算装置,修改与所述表对应的修改进行中数据结构,以指示对于所述表修改在进行中,其中,在对于所述表修改在进行中的同时与所述表相关联的高速缓存的副本数据无效,其中,一个表对应一个修改进行中数据结构;
由一个或多个计算装置,基于所述更新请求更新所述表中的数据;
由一个或多个计算装置,更新提交标识数据结构以反映已经更新所述源数据库;
由一个或多个计算装置,基于提交标识数据结构更新与所述表对应的表时间戳的值,以使与较早的时间戳相关联的高速缓存的副本数据无效;和
由一个或多个计算装置,修改所述修改进行中数据结构的值,以指示在更新与所述表对应的表时间戳的值时对于所述表修改不在进行中。
2.如权利要求1所述的方法,其中,修改所述修改进行中数据结构包括从与来自在源数据库存储的多个表中的各个表对应的多个修改进行中数据结构中,选择与所述表对应的修改进行中数据结构。
3.如权利要求1所述的方法,进一步包括:
在所述源数据库,从高速缓存节点接收标识所述表时间戳的时间戳标识请求;
响应于基于与所述表对应的修改进行中数据结构的值确定对于所述表修改不在进行中,发送所述表时间戳的值到高速缓存节点。
4.如权利要求1所述的方法,进一步包括:
发送包括所述表中数据的子集的更新到高速缓存节点。
5.如权利要求1所述的方法,其中,高速缓存的实体被包括在高速缓存节点中,所述高速缓存的实体包括所述表中数据的子集的副本,且其中,所述高速缓存节点进一步包括与所述高速缓存的实体相关联的高速缓存关键字,所述方法进一步包括:
如果与所述表相关联的数据的请求相关联的请求关键字与所述高速缓存关键字相匹配,则将用于与所述表相关联的数据的请求引导到所述高速缓存节点。
6.如权利要求1所述的方法,其中,高速缓存的实体被包括在高速缓存节点中,所述高速缓存的实体包括所述表中数据的子集的副本,且其中,所述高速缓存节点进一步包括与所述高速缓存的实体相关联的高速缓存关键字,所述高速缓存节点包括与所述高速缓存的实体相关联的时间戳,所述方法进一步包括:
如果基于与所述高速缓存的实体相关联的时间戳和与所述表对应的表时间戳的比较,与所述高速缓存的实体相关联的时间戳和与所述表对应的表时间戳相同,并且与所述表相关联的数据的请求相关联的请求关键字与所述高速缓存关键字相匹配,则将用于与所述表相关联的数据的请求引导到所述高速缓存节点。
7.如权利要求1所述的方法,其中,高速缓存的实体被包括在高速缓存节点中,所述高速缓存的实体包括所述表中数据的子集的副本,且其中,所述高速缓存的实体进一步包括在所述源数据库存储的另一表中数据的子集的副本。
8.如权利要求1所述的方法,进一步包括:
将提交日志写入到非易失性存储装置。
9.一种用于数据存储的系统,包括:
存储器;和
至少一个处理器,耦合到所述存储器且配置为:
在源数据库,接收更新与在源数据库存储的表相关联的数据的更新请求;
修改与所述表对应的修改进行中数据结构,以指示对于所述表修改在进行中,其中,在对于所述表修改在进行中的同时与所述表相关联的高速缓存的副本数据无效,其中,一个表对应一个修改进行中数据结构;
基于所述更新请求更新所述表中的数据;
更新提交标识数据结构以反映已经更新了所述源数据库;
基于提交标识数据结构更新与所述表对应的表时间戳的值,以使与较早的时间戳相关联的高速缓存的副本数据无效;和
修改所述修改进行中数据结构的值,以指示在更新与所述表对应的表时间戳的值时对于所述表修改不在进行中。
10.如权利要求9所述的系统,其中,修改所述修改进行中数据结构包括从与来自在源数据库存储的多个表中的各个表对应的多个修改进行中数据结构中,选择与所述表对应的修改进行中数据结构。
11.如权利要求9所述的系统,所述至少一个处理器进一步配置为:
在所述源数据库,从高速缓存节点接收标识所述表时间戳的时间戳标识请求;
响应于基于与所述表对应的修改进行中数据结构的值确定对于所述表修改不在进行中,发送所述表时间戳的值到高速缓存节点。
12.如权利要求9所述的系统,所述至少一个处理器进一步配置为:
发送包括所述表中数据的子集的更新到高速缓存节点。
13.如权利要求9所述的系统,其中,高速缓存的实体被包括在高速缓存节点中,所述高速缓存的实体包括所述表中数据的子集的副本,且其中,所述高速缓存节点进一步包括与所述高速缓存的实体相关联的高速缓存关键字,且所述至少一个处理器进一步配置为:
如果与所述表相关联的数据的请求相关联的请求关键字与所述高速缓存关键字相匹配,则将用于与所述表相关联的数据的请求引导到所述高速缓存节点。
14.如权利要求9所述的系统,其中,高速缓存的实体被包括在高速缓存节点中,所述高速缓存的实体包括所述表中数据的子集的副本,且其中,所述高速缓存节点进一步包括与所述高速缓存的实体相关联的高速缓存关键字,所述高速缓存节点进一步包括与所述高速缓存的实体相关联的时间戳,且所述至少一个处理器进一步配置为:
如果基于与所述高速缓存的实体相关联的时间戳和与所述表对应的表时间戳的比较,与所述高速缓存的实体相关联的时间戳和与所述表对应的表时间戳相同,并且与所述表相关联的数据的请求相关联的请求关键字与所述高速缓存关键字相匹配,则将用于与所述表相关联的数据的请求引导到所述高速缓存节点。
15.如权利要求9所述的系统,其中,高速缓存的实体被包括在高速缓存节点中,所述高速缓存的实体包括所述表中数据的子集的副本,且其中,所述高速缓存的实体进一步包括在所述源数据库存储的另一表中数据的子集的副本。
16.如权利要求9所述的系统,其中,所述至少一个处理器进一步配置为将提交日志写入到非易失性存储装置。
17.一种非瞬时计算机可读存储介质,具有在其上存储的指令,所述指令当由至少一个计算装置执行时,使得所述至少一个计算装置执行包括以下的操作:
由一个或多个计算装置,在源数据库接收更新与在源数据库存储的表相关联的数据的更新请求;
由一个或多个计算装置,修改与所述表对应的修改进行中数据结构,以指示对于所述表修改在进行中,其中,在对于所述表修改在进行中的同时与所述表相关联的高速缓存的副本数据无效,其中,一个表对应一个修改进行中数据结构;
由一个或多个计算装置,基于所述更新请求更新所述表中的数据;
由一个或多个计算装置,更新提交标识数据结构以反映已经更新了所述源数据库;
由一个或多个计算装置,基于提交标识数据结构更新与所述表对应的表时间戳的值,以使与较早的时间戳相关联的高速缓存的副本数据无效;和
由一个或多个计算装置,修改所述修改进行中数据结构的值,以指示在更新与所述表对应的表时间戳的值时对于所述表修改不在进行中。
18.如权利要求17所述的非瞬时计算机可读存储介质,其中,修改所述修改进行中数据结构包括从与来自在源数据库存储的多个表中的各个表对应的多个修改进行中数据结构中,选择与所述表对应的修改进行中数据结构。
19.如权利要求17所述的非瞬时计算机可读存储介质,所述操作进一步包括:
在所述源数据库,从高速缓存节点接收标识所述表时间戳的时间戳标识请求;
响应于基于与所述表对应的修改进行中数据结构的值确定对于所述表修改不在进行中,发送所述表时间戳的值到高速缓存节点。
20.如权利要求17所述的非瞬时计算机可读存储介质,所述操作进一步包括:
发送包括所述表中数据的子集的更新到高速缓存节点。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562259405P | 2015-11-24 | 2015-11-24 | |
US62/259,405 | 2015-11-24 | ||
US14/961,309 US10353895B2 (en) | 2015-11-24 | 2015-12-07 | Atomic visibility switch for transactional cache invalidation |
US14/961,309 | 2015-12-07 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107066467A CN107066467A (zh) | 2017-08-18 |
CN107066467B true CN107066467B (zh) | 2022-12-27 |
Family
ID=57389154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611027768.3A Active CN107066467B (zh) | 2015-11-24 | 2016-11-21 | 用于事务高速缓存无效的原子可见性切换 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10353895B2 (zh) |
EP (1) | EP3173946A1 (zh) |
CN (1) | CN107066467B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10877956B2 (en) | 2015-11-24 | 2020-12-29 | Sap Se | Transactional cache invalidation for inter-node caching |
US10353895B2 (en) | 2015-11-24 | 2019-07-16 | Sap Se | Atomic visibility switch for transactional cache invalidation |
US10552413B2 (en) | 2016-05-09 | 2020-02-04 | Sap Se | Database workload capture and replay |
US10298702B2 (en) | 2016-07-05 | 2019-05-21 | Sap Se | Parallelized replay of captured database workload |
CN109284066B (zh) * | 2017-07-19 | 2022-09-30 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备及系统 |
US10901974B2 (en) * | 2018-03-29 | 2021-01-26 | Salesforce.Com, Inc. | Hybrid cloud chain management of centralized and decentralized data |
US10698892B2 (en) | 2018-04-10 | 2020-06-30 | Sap Se | Order-independent multi-record hash generation and data filtering |
CN108880913B (zh) * | 2018-07-30 | 2020-01-31 | 网宿科技股份有限公司 | 一种流量特征的管理方法、装置及中心节点服务器 |
CN109271415B (zh) * | 2018-08-14 | 2020-07-14 | 蜜小蜂智慧(北京)科技有限公司 | 一种征信数据库的数据处理方法及装置 |
CN111221857B (zh) * | 2018-11-08 | 2023-04-18 | 华为云计算技术有限公司 | 从分布式系统中读数据记录的方法和装置 |
US11113262B2 (en) | 2019-04-01 | 2021-09-07 | Sap Se | Time-efficient lock release in database systems |
US11347705B2 (en) | 2019-04-02 | 2022-05-31 | Sap Se | Supporting scalable distributed secondary index using replication engine for high-performance distributed database systems |
US11321344B2 (en) * | 2019-09-20 | 2022-05-03 | Sap Se | Virtual database tables with updatable logical table pointers |
US11455304B2 (en) | 2019-09-20 | 2022-09-27 | Sap Se | Graph-based predictive cache |
US10949197B1 (en) * | 2019-11-05 | 2021-03-16 | International Business Machines Corporation | Analysis of patch impact on a running database application |
US11693876B2 (en) | 2020-01-10 | 2023-07-04 | Sap Se | Efficient shared bulk loading into optimized storage |
US11514015B2 (en) | 2020-01-30 | 2022-11-29 | Salesforce.Com, Inc. | Reducing requests using probabilistic data structures |
US11526474B2 (en) * | 2020-01-30 | 2022-12-13 | Salesforce.Com, Inc. | Reducing requests using probabilistic data structures |
US11709752B2 (en) | 2020-04-02 | 2023-07-25 | Sap Se | Pause and resume in database system workload capture and replay |
US11615012B2 (en) | 2020-04-03 | 2023-03-28 | Sap Se | Preprocessing in database system workload capture and replay |
CN112783866A (zh) * | 2021-01-29 | 2021-05-11 | 深圳追一科技有限公司 | 数据读取方法、装置、计算机设备和存储介质 |
US11550762B2 (en) | 2021-02-24 | 2023-01-10 | Sap Se | Implementation of data access metrics for automated physical database design |
CN113868278B (zh) * | 2021-09-29 | 2023-08-01 | 北京有竹居网络技术有限公司 | 一种数据处理方法、装置及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1577327A (zh) * | 2003-06-25 | 2005-02-09 | 微软公司 | 用于寄存和检索可以用来使缓存记录无效的数据库表格变化信息 |
CN103827865A (zh) * | 2011-09-23 | 2014-05-28 | 国际商业机器公司 | 利用异步的基于日志的复制来改进数据库高速缓存 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6938139B2 (en) | 2002-06-21 | 2005-08-30 | Jp Morgan Chase Bank | Method and system for data element change across multiple instances of data base cache |
US8312222B1 (en) * | 2002-12-13 | 2012-11-13 | Open Text, S.A. | Event-driven regeneration of pages for web-based applications |
US7457828B2 (en) | 2003-08-29 | 2008-11-25 | Sap Ag | System and method for synchronizing distributed buffers when committing data to a database |
US7657706B2 (en) | 2003-12-18 | 2010-02-02 | Cisco Technology, Inc. | High speed memory and input/output processor subsystem for efficiently allocating and using high-speed memory and slower-speed memory |
US10296629B2 (en) | 2006-10-20 | 2019-05-21 | Oracle International Corporation | Server supporting a consistent client-side cache |
US7836258B2 (en) * | 2006-11-13 | 2010-11-16 | International Business Machines Corporation | Dynamic data cache invalidate with data dependent expiration |
US8615635B2 (en) * | 2007-01-05 | 2013-12-24 | Sony Corporation | Database management methodology |
GB0710920D0 (en) | 2007-06-06 | 2007-07-18 | Icom Ltd | Mobile application |
US20090187599A1 (en) * | 2008-01-23 | 2009-07-23 | Bruso Kelsey L | Generating identity values in a multi-host database management system |
US8069313B2 (en) | 2009-03-27 | 2011-11-29 | Sap Ag | Method and system for managing cache invalidation |
US8589361B2 (en) | 2010-08-30 | 2013-11-19 | Oracle International Corporation | Reduced disk space standby |
US9152626B2 (en) | 2011-12-19 | 2015-10-06 | Sap Se | Transactional-consistent cache for database objects |
US9342411B2 (en) | 2012-10-22 | 2016-05-17 | International Business Machines Corporation | Reducing memory overhead of highly available, distributed, in-memory key-value caches |
US9069817B2 (en) * | 2012-11-28 | 2015-06-30 | International Business Machines Corporation | Database row access control |
US9660874B2 (en) | 2012-12-13 | 2017-05-23 | Level 3 Communications, Llc | Devices and methods supporting content delivery with delivery services having dynamically configurable log information |
US9152501B2 (en) | 2012-12-19 | 2015-10-06 | International Business Machines Corporation | Write performance in fault-tolerant clustered storage systems |
US9507842B2 (en) * | 2013-04-13 | 2016-11-29 | Oracle International Corporation | System for replication-driven repository cache invalidation across multiple data centers |
US10747746B2 (en) | 2013-04-30 | 2020-08-18 | Amazon Technologies, Inc. | Efficient read replicas |
US9648125B2 (en) * | 2013-10-04 | 2017-05-09 | Akamai Technologies, Inc. | Systems and methods for caching content with notification-based invalidation |
US10013447B2 (en) * | 2014-05-29 | 2018-07-03 | Splice Machine, Inc. | Transaction execution commitment without updating of data row transaction status |
US9880936B2 (en) | 2014-10-21 | 2018-01-30 | Sybase, Inc. | Distributed cache framework |
US10353895B2 (en) | 2015-11-24 | 2019-07-16 | Sap Se | Atomic visibility switch for transactional cache invalidation |
-
2015
- 2015-12-07 US US14/961,309 patent/US10353895B2/en active Active
-
2016
- 2016-11-18 EP EP16002465.9A patent/EP3173946A1/en not_active Ceased
- 2016-11-21 CN CN201611027768.3A patent/CN107066467B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1577327A (zh) * | 2003-06-25 | 2005-02-09 | 微软公司 | 用于寄存和检索可以用来使缓存记录无效的数据库表格变化信息 |
CN103827865A (zh) * | 2011-09-23 | 2014-05-28 | 国际商业机器公司 | 利用异步的基于日志的复制来改进数据库高速缓存 |
Also Published As
Publication number | Publication date |
---|---|
EP3173946A1 (en) | 2017-05-31 |
CN107066467A (zh) | 2017-08-18 |
US20170147638A1 (en) | 2017-05-25 |
US10353895B2 (en) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107066467B (zh) | 用于事务高速缓存无效的原子可见性切换 | |
US10877956B2 (en) | Transactional cache invalidation for inter-node caching | |
US11314716B2 (en) | Atomic processing of compound database transactions that modify a metadata entity | |
US10409864B2 (en) | Transaction control block for multiversion concurrency commit status | |
US11182356B2 (en) | Indexing for evolving large-scale datasets in multi-master hybrid transactional and analytical processing systems | |
US9020916B2 (en) | Database server apparatus, method for updating database, and recording medium for database update program | |
EP2653986B1 (en) | Client-side caching of a database transaction token. | |
Ports et al. | Transactional consistency and automatic management in an application data cache | |
US11138227B2 (en) | Consistent query execution in hybrid DBMS | |
US9811560B2 (en) | Version control based on a dual-range validity model | |
US20210081202A1 (en) | Persistent transactional memory metadata-based buffer caches | |
Raza et al. | One-shot Garbage Collection for In-memory OLTP through Temporality-aware Version Storage | |
US20230342355A1 (en) | Diskless active data guard as cache | |
US20240143594A1 (en) | Offloading graph components to persistent storage for reducing resident memory in distributed graph processing | |
US11704305B1 (en) | Optimizations for long-lived statements in a database system | |
Pimentel et al. | Enhancing locality via caching in the GMU protocol | |
Bortnikov et al. | Reconciling transactional and non-transactional operations in distributed key-value stores | |
US20100145996A1 (en) | Accessing Data in a Multi-Generation Database | |
CN110502535A (zh) | 数据访问方法、装置、设备和存储介质 | |
RK et al. | Transactional Consistency and Automatic Management in an Application Data Cache |
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 |