CN117931765A - 重新验证传播的细粒度决策 - Google Patents

重新验证传播的细粒度决策 Download PDF

Info

Publication number
CN117931765A
CN117931765A CN202311353810.0A CN202311353810A CN117931765A CN 117931765 A CN117931765 A CN 117931765A CN 202311353810 A CN202311353810 A CN 202311353810A CN 117931765 A CN117931765 A CN 117931765A
Authority
CN
China
Prior art keywords
data object
target data
data
objects
updating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311353810.0A
Other languages
English (en)
Inventor
J·金
K·朴
E·金
J·Y·李
T·李
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SAP SE
Original Assignee
SAP SE
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SAP SE filed Critical SAP SE
Publication of CN117931765A publication Critical patent/CN117931765A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • G06F16/213Schema design and management with details for schema evolution support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

提供了用于选择性重新验证数据对象的各种系统和方法。在一个示例中,计算机实现的方法包括:根据定义语句更新数据库系统的目标数据对象,并且确定定义语句是否改变目标数据对象的一个或多个对象属性。响应于确定定义语句改变目标数据对象的一个或多个对象属性,所述方法包括重新验证依赖于目标数据对象的数据对象。响应于确定定义语句没有改变目标数据对象的一个或多个对象属性,所述方法包括不重新验证依赖于目标数据对象的数据对象。通过这种方式,可以提高数据库管理性能和速度,同时保持数据库中数据对象的有效性。

Description

重新验证传播的细粒度决策
技术领域
本公开通常涉及数据库管理系统,以及执行元数据对象处理和过滤的应用或系统。特定实施方式与数据库对象重新验证有关。
背景技术
存储大量数据的大型数据库越来越普遍。这样的数据库可以使用不同的结构存储数据,其可以使用元数据帮助定义结构。当创建或更改这样的结构或元数据时,可能需要检查或审查结构的其余部分。然而,对于大型数据库来说,这种检查可能需要相当长的时间。因此,还有改进的余地。
发明内容
提供本发明内容是为了以简化的形式介绍以下在详细描述中进一步描述的概念的选择。本发明内容不旨在识别所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护主题的范围。
根据数据对象的改变是否会导致对象属性的改变,可以执行或跳过数据库重新验证。在一个示例中,一种方法包括接收与数据库系统中的数据对象有关的定义语句或命令。根据定义语句更新数据库系统的数据对象。如果在更新目标数据对象时改变了数据对象的对象属性,则重新验证依赖于数据对象的数据对象。如果在更新数据对象时数据对象的对象属性没有改变,则不重新验证依赖于数据对象的数据对象。通过这种方式,可以选择性地传播(propagate)重新验证,从而通过减少更新数据对象之后的处理量来提升数据库管理。
本公开还包括被配置为执行上述方法或包括用于执行上述方法的指令的计算系统和有形的、非暂时性计算机可读存储介质。如本文所述,可以根据需要将各种其他特征和优点结合到技术中。
本发明的上述和其他目的、特征和优点将从以下参考附图进行的详细描述中变得更加明显。
附图说明
图1A是示出根据一个示例的示例数据对象集合的示意图。
图1B是示出用于图1A的示例数据对象集合的示例对象依赖性(dependency)和对象视图元数据的表的集合。
图2A是示出应用于图1A的数据对象集合的示例对象定义操作的示意图。
图2B是示出在第一示例对象定义操作之后的示例对象依赖性和对象视图元数据的表集合。
图2C是示出在第二示例对象定义操作之后的示例对象依赖性和对象视图元数据的表的集合。
图3是示出可以实现所描述的实施例的数据库管理系统的示例体系结构的框图。
图4A是示出用于数据库对象的选择性重新验证的示例方法的高级流程图。
图4B示出具有数据库对象的选择性重新验证的对象定义操作的示例伪代码。
图5A是示出根据一个示例的用于刷新数据对象依赖性的示例方法的高级流程图。
图5B示出用于刷新对象依赖性信息的示例伪代码。
图6A是示出应用于图1A的相互关联数据对象集合的示例数据对象依赖性刷新的示意图。
图6B是示出按拓扑顺序应用于图1A的相互关联数据对象的示例数据对象依赖性刷新的示意图。
图7是示出根据一个示例的相互关联数据对象的示例集合的图。
图8是示出根据一个示例的用于选择性重新验证数据库对象的示例方法的高级流程图。
图9是示出根据一个示例的用于利用选择性重新验证更新数据库对象的示例方法的高级流程图。
图10是示出根据一个示例的用于更新数据对象和选择性重新验证依赖数据对象的示例方法的高级流程图。
图11是示出可以实现所描述的实施例的示例计算系统的框图。
图12是示出可以结合本文所描述的技术使用的示例云计算环境的框图。
图13是示出可以用于实现所公开技术的各方面的示例数据库系统的框图。
具体实施方式
本文提供了各种示例来说明所公开的技术。来自任何示例的技术可以与在任何一个或多个其他示例中描述的技术相结合,以实现如权利要求中所体现的公开技术的范围和精神,超出本文所提供的明确描述。此外,如本领域技术人员所理解的,在本文的实施例中描述的组件也可以被组合或重组,以实现权利要求的范围和精神。
示例1-重新验证传播的细粒度决策概述
数据库通常有许多数据对象,诸如表或视图,它们通常是相互关联的。例如,视图可以由多个表形成,或者第一表可以对多个表具有外键(foreignkey)依赖性。海量数据库可能有成千上万的数据对象,这些数据对象可能具有相互依赖性。由于这些相互依赖性,当一个数据对象发生改变时,其他数据对象可能会变得无效或也需要改变。因此,当对数据对象进行改变时,可能需要重新验证(或确认有效性)。
为了说明数据库中数据对象重新验证的简单场景,图1A描绘了数据对象集合100,其中至少一些是相互关联的。数据对象集合100包括第一数据对象View1 110、第二数据对象View2 120、第三数据对象View3 130、第四数据对象Table1 140和第五数据对象Table2150。
因此,数据库可以将这些数据对象表示为以下数据对象(其在创建时通常有效):
CREATE TABLE Table1(创建名为Table1的表)(A INT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE TABLE Table2(创建名为Table2的表)(A INT NOT NULLDEFAULT 10(A非空整数默认10),B VARCHAR(200)DEFAULT‘TEST2’(B可变长字符串(200)默认‘TEST2’));
CREATE VIEW View1 AS SELECT*FROM Table1(在名为Table1的表上创建名为View 1的视图);
CREATE VIEW View2 AS SELECT*FROM View1(在名为View1的视图上创建名为View 2的视图);
CREATE VIEW View3 AS SELECT View1.A,View2.B FROM View1,View2(在名为View1、View2的视图的View1.A、View2.B列上创建名为View3的视图);
值得注意,在所描绘的示例中,数据对象Table2 150不具有依赖于它的任何数据对象。图1B示出了说明集合100的对象依赖性的对象依赖性表170以及示出了集合100的视图的视图元数据的视图元数据表180。用于这些数据对象的元数据可能如下,其详细说明了数据对象的相互依赖性:
对象:Table1,Table2,View1,View2,View3
依赖性:(View1参考Table1),(View2参考View1),(View3参考View1),(View3参考View2)
对象依赖性表170中所描绘的依赖性类型指示,如图1A中所描绘,View1110具有对基础对象Table1 140的直接依赖性,View2 120具有对基础对象Table1 140的间接依赖性,View3 130具有对基础对象Table1 140的间接依赖性,View2 120具有对基础对象View1110的直接依赖性,View3 130具有对基础对象View1 110的直接依赖性,View3 130对基础对象View 2 120具有直接依赖,并且不存在对基础对象Table2 150的对象依赖。
视图元数据表180描绘了Table1 140的逻辑结构如何被传播到直接或间接依赖于其的视图中,即View1 110、View2 120和View3 130。例如,对于视图View1 110,视图列包括来自数据对象Table1 140的列的数据,即具有“AINT NOT NULL(A非空整数)”的第一列和具有“B VARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’)”的第二列,如图所示。类似地,根据视图View2 120对视图View1 110的依赖性,视图View2 120的视图列还包括具有“AINT NOT NULL(A非空整数)”的第一列和具有“BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’)”的第二列,如图所示。当视图View3 130选择View1的第一列110和View2的第二列120时,视图View3 130的视图列还包括具有“AINT NOT NULL(A非空整数)”的第一列和具有“B VARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’)”的第二列,如图所示。
接下来,可以对数据对象进行改变,诸如将视图的依赖性从一个数据对象改变为另一数据对象:
ALTER VIEW View1 AS SELECT*FROM Table2(变更名为View1的视图为在名为Table2的表上创建);
图2A示出说明将这种改变210应用于数据对象集合100的数据对象导致不同的数据对象集合215的图200。如图所示,改变210以将View1 110的依赖性从数据对象Table1140改变为数据对象Table2 150的方式来改变视图View1 110。数据对象Table2 150的列与数据对象Table1 140的列不同:
CREATE TABLE Table1(创建名为Table1的表)(AINT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE TABLE Table2(创建名为Table2的表)(AINT NOT NULLDEFAULT 10(A非空整数默认10),B VARCHAR(200)DEFAULT‘TEST2’(B可变长字符串(200)默认‘TEST2’));
作为变更(ALTER)操作210的结果,用于这些数据对象的元数据和数据对象相互依赖性改变如下:
对象:Table1,Table2,View1,View2,View3
依赖性:(View1参考Table2),(View2参考View1),(View3参考View1),(View3参考View2)
图2B示出说明集合215的对象依赖性的初始改变的对象依赖性表250,以及说明对用于集合215的视图的视图元数据的初始变化的视图元数据表260。在进行改变或ALTER操作210之后,其中View1 110的依赖性从Table1140改变为Table2 150,数据对象View1 110的对象依赖性表250的条目252从对数据对象Table1 140的直接依赖改变为作为基础对象的数据对象Table2150。类似地,如视图元数据表260中所示,数据对象View1 110的视图元数据262改变为对应于数据对象Table2 150的列。因此,依赖对象View2 120和View3 130接下来可以被重新验证,因为它们现在间接地依赖于基础对象Table2 150而不是基础对象Table1 140。对象依赖性和视图元数据可以基于由拓扑顺序从数据对象View1 110生成的依赖性树来更新并且数据对象可以被重新验证。例如,数据对象View2 120可以被检查,更新和重新验证,然后数据对象View3 130可以被检查,更新和重新验证。以这种方式重新验证依赖对象确保了由于定义操作(例如,通过更改基础对象、删除基础对象和/或改变依赖性)而可能无效的数据对象被正确地标记为无效,使得可以基于验证标志而不是试图对无效数据对象执行命令来提供错误消息(例如,“视图无效”)。在其他情况下,可以预览改变的效果,并提醒用户可能因改变而无效的对象。例如,用户可以使用这些信息来决定不进行改变、进行不同的改变、更新其他对象以使其在改变之后有效,或者删除对象以使其他用户不会遇到错误。
例如,如果数据对象所依赖的另一数据对象(例如,View1和/或Table1)以将影响数据对象有效性的方式改变,则数据对象(例如,View2)可能变得无效。例如,如果从数据对象(例如,View2)至少间接依赖的基础对象(例如,Table1)中删除列,则访问数据对象(例如,View2)可能会失败,因为数据对象引用的基础对象已不存在。在这样的示例中,无效数据对象被标记为无效。相反,如果基础对象的对象属性没有改变,则尽管基础对象发生了改变,数据对象仍然可能有效。在一些示例中,如果至少保持了基础对象的逻辑结构,则尽管对基础对象进行了改变,数据对象仍然可能有效。例如,假设视图View2直接依赖于视图View1,进而视图View1依赖于表Table1,如上所述。如果视图View1如上所述被更改为依赖于具有相同逻辑结构(例如,相同属性)的表Table2,则视图View2可能仍然有效,因为尽管间接基础对象发生了改变(例如,从Table1到Table2),但是直接基础对象View1的逻辑结构没有改变。在一些示例中,如果逻辑结构不变,但基础对象的内容发生了改变,则数据对象可能仍然有效。
例如,可以向用户提供关于由对相关数据对象的改变所导致的表或视图的添加或删除的属性的信息,并且用户可以确认是否应该从相关数据对象添加或删除这些属性,或者以某种其他方式改变相关数据对象以适应对相关数据对象的改变。在进一步的情况下,至少某些数据对象可以响应于对存在依赖性的数据对象的改变而自动更新。例如,可以识别丢失或添加的属性,并生成适当的命令(诸如DDL语句)来更改数据对象。
在上面的示例中,一旦视图View2 120和View3 130的对象依赖性和视图元数据被更新,视图View2 120和视图3 130仍然有效。然而,如果存在许多依赖对象,诸如在大型数据库中,则对象重新验证会很慢。例如,在根数据对象具有200000个依赖数据对象的实施方式中,重新验证可能需要大约20分钟才能完成。
如本文中进一步描述的,如果在应用改变之后对象属性没有改变,则计算费用(例如,专用于重新验证的处理资源和花费在重新验证数据对象上的时间量)可以显著减少。具体而言,用于通过相互关联数据对象集合选择性重新验证或选择性传播重新验证的方法可以包括:如果对象属性没有改变,则跳过重新验证。例如,考虑上面的示例,其中数据对象Table1 140和Table2150是:
CREATE TABLE Table1(创建名为Table1的表)(A INT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE TABLE Table2(创建名为Table2的表)(AINT NOT NULL(A非空整数默认10),B VARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
当应用上面描述的变更(ALTER)操作210将视图View1 110的依赖性从Table1 140改变为Table2 150时,View1 110的对象属性是不变的,因为在该示例中数据对象Table1140和Table2 150是相同的。图2C示出说明对集合215的对象依赖性的该初始改变的对象依赖性表270,以及说明对集合215的视图的视图元数据的初始改变的视图元数据表280。对象依赖性表270的条目272指示数据对象View1 110的基础对象现在是数据对象Table2 150,而基于Table2 150的列更新View1 110的视图元数据282。
由于View1 110的属性如在视图元数据表180和280之间反映的那样是不变的,因此重新验证依赖数据对象将不会导致对依赖视图的视图列的任何改变,并且因此通过数据对象集合传播重新验证动作,例如,通过迭代依赖对象来更新视图元数据和重新验证依赖对象是不必要的。相反,只需要更新依赖对象的对象依赖性,并且可以跳过重新验证。例如,用于选择性重新验证的方法可以包括:响应于确定更改的数据对象(即,View1 110)的视图元数据在更改操作之后没有改变,更新对象依赖性表270的剩余条目(例如,使得依赖对象View2和View3的间接依赖性改变为基础对象Table2),不更新视图元数据表280的剩余条目,并且不检查任何数据对象的有效性。通过以这种方式选择性传播重新验证,其中当对象属性不变时不执行重新验证,由于重新验证的计算费用减少,重新验证性能可能会显著提高。
示例2-用于数据对象的选择性重新验证的环境
图3示出说明用于选择性重新验证数据库中的数据对象的示例体系结构300的框图。体系结构300可以在本文进一步描述的一个或多个计算系统中实现。数据库管理系统302可以包括多个数据对象模块310和多个数据对象320。数据对象320通常是相互关联的,其中一些对象依赖于其他对象。数据对象320可以包括表、视图、过程、同义词、序列、触发器或其他数据对象。通常,这样的数据对象可以具有存储关于它们各自的依赖性的信息的元数据。元数据可以存储在中央结构或结构集合中,诸如存储在数据字典或信息模式中。因此,可以通过引用这样的数据字典来确定对象依赖性,例如通过分析数据字典并提取对象依赖性信息。附加地或可替换地,对象依赖性和/或视图元数据可以被存储为数据对象,诸如上文所述的表170和180。
数据对象320可以包括数据库中的数据对象,诸如表或视图,或者其他数据库对象,诸如过程、同义词、序列或触发器。这样的对象可以包括具有关于对象或对象的依赖性的元数据的元数据对象。其他数据对象可以包括实例化的类对象或可以相互引用、相互依赖或相互关联的任何其他数据对象。在数据库之外,数据对象可以包括树或另一层次结构中的节点,或者相互依存的实例化数据变量或对象。
对象,诸如图1A中作为说明性示例描绘的对象Table1 140,可以包括根对象。根对象可以包括初始对象、顶级对象或不依赖于诸如集合100的相互关联数据对象集合中的任何其他对象的对象。诸如Table1 140的根对象可以具有对不属于相互关联数据对象集合100的其他对象的依赖性。在这种情况下,根对象所依赖的其他对象通常不是相互关联数据对象集合100的处理的一部分或不与之相关。例如,重新验证过程可以包括指定将被分析的关系的特定类型的逻辑,并且可选地可以包括将不被分析的关系的某些类型。
如上所述和本文所述,对象的逻辑结构可以由数据对象的定义语句(DEFINITION)来表示。在某些示例中,定义语句可以用数据定义语言(DDL)编写,DDL是用于创建和/或修改数据库对象(例如,表)的SQL语法。示例DDL命令包括创建(CREATE)、变更(ALTER)、丢弃(DROP)、截断(TRUNCATE)等。请注意,虽然某些DDL命令(例如,创建(CREATE))可能会改变现有表的逻辑结构,但某些DDL命令(例如,截断(TRUNCATE))可能不会改变现有表中的逻辑结构。在其他示例中,只要可以捕获对象的逻辑结构(例如,属性、数据类型等),对象的定义语句就可以由其他格式和语法来表示。作为一个说明性示例,数据对象的逻辑结构被表示为DDL语句,这些语句是可读字符串,诸如“CREATE TABLE Table1(创建名为Table1的表)(AINT NOT NULL(A非空整数),B VARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’))”和“CREATE VIEW View1 ASSELECT*FROM Table1.(在名为Table1的表上创建名为View 1的视图。)”。在这些示例中,CREATE语句(字符串格式)可以保存(hold)或定义数据对象的逻辑结构。可替代地,数据对象的逻辑结构可以用其他格式表示。例如,DDL语句可以被可逆地转换为二进制值、哈希值等。在一个特定示例中,每个DDL语句都可以被转换为128位哈希值,其可以比创建(CREATE)语句字符串更有效地存储。基于哈希值的DDL语句的比较也可以比DDL字符串的比较更高效(例如,更快)。因此,尽管本文关于可读字符串来描述DDL语句,但是应当理解,在不脱离本公开的范围的情况下,可以使用DDL语句的其他表式。
多个数据对象模块310可以包括定义操作模块312。定义操作模块312被配置为经由定义语句生成数据库管理系统302的数据对象320或以其他方式与数据库管理系统302的数据对象320进行交互。例如,定义操作模块312可以通过创建(CREATE)、变更(ALTER)、替换(REPLACE)和丢弃(DROP)语句等引起数据对象320的改变。
多个数据对象模块310可以进一步包括重新验证模块314。重新验证模块314被配置为响应于数据对象320中的一个或多个改变来重新验证数据对象320,所述一个或多个改变例如可以由定义操作模块312执行的一个或多个定义语句或者定义操作引起。如本文中进一步描述的,重新验证模块314可以选择性重新验证多个数据对象320的数据对象,例如通过跳过在定义操作模块312的动作之后对象属性不变的数据对象的重新验证。为了响应于依赖数据对象所依赖的基础对象的改变来重新验证数据对象,重新验证模块314根据基础对象的变化来更新依赖数据对象,并确定每个依赖数据对象在改变之后是否仍然有效。如果对基础对象的改变使得依赖数据对象无效,则重新验证模块314可以将给定数据对象的验证标志改变为“无效”,例如通过引用不再存在的结构(或者在重新验证模块314评估所提议的改变对数据对象的影响的示例中,在改变被实现之后将不再存在)。
多个数据对象模块310可以进一步包括依赖性刷新模块316。依赖性刷新模块316被配置为响应于数据对象320的改变来刷新数据对象320中的一个或多个依赖对象的对象依赖性。例如,依赖性刷新模块316可以维护和更新对象依赖性表(诸如对象依赖性表170)中的条目。依赖性刷新模块316更新对象依赖性,无论重新验证模块314是否重新验证对应的数据对象,例如通过更新用于依赖数据对象的视图元数据并检查这种依赖数据对象在改变之后是否仍然有效。依赖性刷新模块316因此确保给定数据对象的对象依赖性被更新和正确,即使在数据对象320中的改变之后重新验证模块314没有评估给定数据对象的有效性。依赖性刷新模块316可以更新依赖对象的对象依赖性而重新验证模块314跳过依赖对象的重新验证的示例DDL语句可以包括但不限于变更视图(ALTER VIEW)、创建或替换视图(CREATE ORREPLACE VIEW)、创建或替换存储过程(CREATE ORREPLACEPROCEDURE)等。
作为一个说明性和非限制性的示例,考虑以下DDL语句:
CREATE TABLE Table1(创建名为Table1的表)(A INT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE TABLE Table2(创建名为Table2的表)(A INT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE VIEW View1 AS SELECT*FROM Table1(在名为Table1的表上创建名为View 1的视图);
ALTER VIEW View1 AS SELECT*FROM Table2(变更名为View 1的视图为在名为Table2的表上创建);
在上面的示例中,前两个DDL语句创建表。具体地,第一个CREATE语句创建具有列A和列B的表Table1,而第二个CREATE语句创建具有列A和B的表Table2,其结构和默认条目与由第一个CREATE语句创建的表Table1相同。第三个DDL语句是创建选择并因此包括表Table1中的所有列的视图View1的创建(CREATE)语句。第四个DDL语句是变更(ALTER)语句,其更改视图View1以选择并包括表Table2中的所有列。虽然变更(ALTER)语句将视图View1的对象依赖性从表Table1改变为表Table2,但视图元数据或视图属性不会改变。因此,如本文所述的选择性重新验证可以包括在不重新验证依赖对象的情况下更新或刷新对象依赖性。换句话说,用于选择性重新验证的方法可以确定数据对象的视图属性在变更(ALTER)语句之后是否改变,并决定重新验证依赖对象(例如,检查对象有效性并更新用于依赖对象的元数据)或在不重新验证的情况下更新依赖对象的对象依赖性(例如,更新依赖对象的基础对象但不检查依赖对象的有效性或更新依赖对象的元数据)。
作为另一个说明性和非限制性示例,考虑以下与创建或替换存储过程(CREATE ORREPLACE PROCEDURE)相关的DDL语句:
CREATE TABLE Table1(创建名为Table1的表)(A INT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE TABLE Table2(创建名为Table2的表)(A INT NOT NULL(A非空整数),BVARCHAR(100)DEFAULT‘TEST1’(B可变长字符串(100)默认‘TEST1’));
CREATE PROCEDURE Proc1()AS(创建存储过程Proc1())
BEGIN(开始)
SELECT*FROM Table1(在名为Table1的表上创建);
END(结束);
CREATE ORREPLACE PROCEDURE Proc1()AS(创建或替换存储过程Proc1())
BEGIN(开始)
SELECT*FROM Table2(在名为Table2的表上创建);
END(结束);
在上面的示例中,通过创建或替换存储过程(CREATE OR REPLACEPROCEDURE)语句将基表从Table1改变为Table2,但过程属性没有改变。因此,根据本文提供的系统和方法,对象依赖性可以被刷新,而重新验证可以不响应于这样的定义语句而发生。
可以通过实现本文所述的选择性数据库重新验证和依赖性刷新技术来改进的一个示例数据库系统是德国沃尔多夫(Walldorf)的SAP SE的SAPHANATM
示例3用于数据对象的选择性重新验证和依赖性刷新的方法
图4A示出说明用于数据对象的重新验证传播的细粒度决策的示例方法400的高级流程图。具体地,方法400涉及选择性重新验证数据对象和更新数据对象的对象依赖性。方法400是关于图3的系统和组件来描述的,但是应当理解,在不脱离本公开的范围的情况下,方法400可以用其他系统和组件实现。
方法400开始于405。在405,方法400评估数据对象的当前属性。数据对象的当前属性可以包括,例如,定义数据对象的逻辑结构的对象参数,包括一个或多个属性、属性名称、属性的数据类型、值的可空性唯一性等。为了评估数据对象的当前属性,方法400可以将对象属性收集到数据对象Pold中,作为说明性和非限制性示例。例如,方法400可以从诸如视图元数据表180的数据对象收集对象属性,诸如视图元数据表180中所描绘的视图元数据。作为另一示例,方法400可以从存储这样的对象属性的数据字典中检索对象属性。可替换地,方法400可以从数据对象收集对象属性,并利用对象属性更新数据字典。
在410,方法400接收用于数据对象的定义命令。定义命令可以包括与数据对象相关的DDL命令,包括但不限于创建(CREATE)命令、变更(ALTER)命令、丢弃(DROP)命令、截断(TRUNCATE)命令等。在415,方法400基于定义命令更新对象,这可以包括更新用于数据对象的元数据、数据对象的逻辑结构等。在根据定义命令更新对象之后,方法400继续到420。在420,方法400评估对象的更新属性。例如,作为说明性和非限制性示例,方法400可以将更新对象的对象属性收集到数据对象Pnew中。
在425继续,方法400确定对象属性是否改变。为了确定在利用新定义更新对象之后对象属性是否改变,方法400可以将在405处评估的先前或旧对象属性(并且例如保存为数据对象Pold)与在420处评估的新对象属性(并且例如存储为数据对象Pnew)进行比较。如果旧对象属性与新对象属性相同(例如,Pold==Pnew),则数据对象的对象属性没有改变;否则,数据对象的对象属性已经改变。对象属性可以包括定义数据对象的逻辑结构的元数据,使得如果数据对象的逻辑结构改变,则对象属性改变。如果对象属性改变(“是”),方法400继续到430。在430,方法400重新验证对象的依赖对象。方法400可以例如通过更新每个依赖对象并评估每个依赖对象的有效性来重新验证对象的依赖对象。方法400然后返回。
然而,再次参考425,如果对象属性没有改变(“否”),则方法400继续到435。在435,方法400评估对象的对象依赖性。例如,方法400确定哪些数据对象依赖于更新的对象。为此,方法400可以访问存储关于基础对象、依赖对象和依赖性类型的元数据的对象依赖性表,诸如对象依赖性表170。在440,方法400确定对象依赖性是否改变。例如,方法400可以将更新对象之后的对象的对象依赖性与更新对象之前的对象的对象依赖性进行比较。如果给定依赖对象的基础对象发生改变,则对象依赖性可能会发生改变。因此,方法400可以在415确定更新的对象的基础对象是否由于更新而改变。如果对象依赖性没有改变(“否”),则方法400进行到445。在445,方法400不执行任何重新验证或依赖性刷新,因为这样的重新验证和依赖性刷新是不必要的。方法400然后返回。
然而,再次参考440,如果对象依赖性改变(“是”),则方法400继续到450。在450,方法400更新对象的对象依赖性。例如,如果在应用定义命令之后对象依赖于不同的基础对象,则方法400相应地更新对象依赖性,例如在诸如对象依赖性表170的对象依赖性表中。方法400可以进一步更新依赖性的依赖性类型,例如,以指示对象之间更新的依赖性是直接的还是间接的。在455继续,方法400刷新对象的依赖对象的对象依赖性。方法400可以刷新依赖于对象的每个依赖对象的对象依赖性,例如,按照对象的依赖树的拓扑顺序。方法400能够在不执行重新验证的情况下刷新间接基础对象,因为直接基础对象是持久的。本文关于图5A和图5B进一步描述了用于在不执行重新验证的情况下刷新对象依赖性的示例方法。在刷新对象的依赖对象的对象依赖性之后,方法400返回。
因此,提供了一种用于重新验证传播的细粒度决策的方法。在改变数据对象之后,该方法包括如果与数据对象的逻辑结构相关的对象属性改变,则在依赖于数据对象的整个数据对象中传播重新验证,刷新这种依赖数据对象的对象依赖性,但如果对象属性没有改变,则不重新验证这种依赖数据对象,如果对象属性和依赖项没有改变,则不重新验证或刷新依赖性。该方法响应于数据对象的定义命令自动执行这种细粒度决策。以这种方式,不管定义命令是否改变了目标数据对象,数据库中的数据对象的有效性可以被主动维护,而无需在定义命令之后对每个依赖对象执行强力重新验证。图4B描绘了用于响应于执行定义语句而选择性重新验证数据对象的示例伪代码470。
示例4-用于刷新数据对象的对象依赖性的方法
图5A示出了说明用于刷新数据对象的对象依赖性的示例方法500的高级流程图。具体地,方法500涉及更新数据对象的对象依赖性,即使在跳过对这样的数据对象的重新验证时也是如此。作为说明性和非限制性示例,方法500可以更新存储关于数据对象的对象依赖性的元数据的对象依赖性表,诸如对象依赖性表170。方法500可以包括例如方法400的子例程,并且可以对应于上文描述的方法400的动作455。方法500是关于图3和图4的系统、组件和方法来描述的,但是应当理解,在不脱离本公开的范围的情况下,方法500可以用其他系统、组件、和方法来实现。
方法500开始于505。在505,方法500识别对象的依赖对象的列表。例如,方法500可以将在该实例中包括根对象的对象的依赖对象收集到列表中。在510,方法500对依赖对象的列表执行拓扑排序。例如,方法500可以对依赖数据对象执行广度优先拓扑排序,以生成依赖数据对象的有序列表(例如,堆栈、队列或其他数据结构),其中基于依赖性对数据对象进行排序(其中数据对象在列表中比其父对象晚,或者在层次结构中比父对象低)。
在515,方法500刷新拓扑排序的依赖对象列表中的每个对象的对象依赖性。具体地,方法500可以按照拓扑排序的依赖对象列表的顺序刷新每个对象的对象依赖性,使得当为给定对象刷新对象依赖性时,给定对象的父对象的对象依赖性已经被刷新。
为此,对于拓扑排序的依赖对象列表中的每个依赖对象,方法500可以执行步骤520、522、524和526。例如,对于给定依赖对象,在520,方法500识别依赖对象的直接基础对象。例如,方法500可以将给定依赖对象的直接基础对象收集到数据对象(例如,被命名为directBaseObjects)中。在522,方法500识别依赖对象的所识别的直接基础对象中的基础对象。例如,方法500可以将所识别的直接基础对象(例如,directBaseObjects)中的每个对象的基础对象收集到附加数据对象(例如,被命名为newIndirectBaseObjects)。在524,方法500放弃给定依赖对象的先前间接基础依赖性。然后,在526,方法500根据所识别的基础对象(即,newIndirectBaseObjects)创建新的间接基础依赖性。
以这种方式,方法500有效地更新或刷新依赖于目标数据对象的每个数据对象的对象依赖性。在刷新依赖对象的拓扑排序列表中的所有对象的对象依赖性之后,方法500返回。刷新对象依赖性的示例可以包括更新对象依赖性表(诸如对象依赖性表250)的元数据,使得对象依赖性表的条目准确地指示依赖对象的基础对象。图5B示出了用于刷新数据对象的对象依赖性的示例伪代码550。
示例5-刷新数据对象的对象依赖性的说明性用例
图6A示出了说明数据对象的集合605和按拓扑顺序排序的依赖树615的生成610的图600。如图所示,在将改变210应用于数据对象的集合100之后,数据对象的集合605可以对应于数据对象的集合215,例如,使得数据对象View1 110的依赖性或基础对象从数据对象Table1 140改变为数据对象Table2 150。由于数据对象View1 110是定义命令的主体,因此数据对象View1110是拓扑排序610的根对象。作为依赖树生成610的结果,按拓扑顺序排序的依赖树615示出依赖于数据对象View2 120的数据对象View3 130和依赖于数据对象View1 110的数据对象View2 120。
当如上文关于图5A所描述的刷新数据对象的对象依赖性时,依赖树615中的数据对象的对象依赖性按所描述的顺序被更新。首先,更新或刷新数据对象View1 110的对象依赖性,以指示数据对象Table2 150作为基础对象。接下来,如图6B所示,在625更新或刷新数据对象View2 120的对象依赖性,以指示数据对象Table2 150作为基础对象。接下来,在635更新或刷新数据对象View3 130的对象依赖性,以指示数据对象Table2 150作为基础对象。虽然在该描述的示例中的对象依赖性是简单的,但是应当理解,以这种方式刷新对象依赖性确保了在具有更大的多个数据对象和基础数据对象之间更复杂的相互依赖性的示例中被准确地刷新对象依赖性。
示例6数据对象的选择性重新验证和依赖性刷新的优点
图7示出了说明数据对象的示例集合700的示意图。类似于图1A中所描绘的示例集合,集合700包括数据对象View1 710、数据对象Table1 740和数据对象Table2 750,其中数据对象View1 710被更新为依赖于数据对象Table2 750而不是数据对象Table1 740。然而,与图1A中所描绘的数据对象的集合100相比,大量的多个数据对象720依赖于数据对象View1 710。在该示例场景中,大量的多个数据对象720包括至少1000个依赖于数据对象View1 710的依赖对象,使得依赖树的深度为100,并且在每个级别上有10个数据对象。因此,多个数据对象720包括数据对象V1_1 722、V1_10 724、V100_1 726、V100_10 728,以及它们之间的所有数据对象(未明确示出,但在图7中用省略号表示)。
在执行诸如“ALTER VIEW View1 AS SELECT*FROM Table2(变更名为View 1的视图为在名为Table2的表上创建)”的改变以将基表从Table1 740改变为Table2 750之后,作为说明性示例,当完全重新验证所有依赖数据对象时所经过的时间可以包括33秒。相比之下,当跳过重新验证并仅刷新对象依赖项时,执行相同改变所经过的时间为0.5秒。通过这种方式,本文所述的选择性重新验证和依赖性刷新技术在数据库管理中提供了实质性的改进,因为专用于处理对海量数据库的更新的计算资源量以及处理这种更新所花费的时间量可以显著减少(例如,数量级)。数据库管理性能的这种改进随着数据库的大小和复杂性而增加。
示例7用于执行数据对象的附加过程
图8示出了说明用于选择性重新验证数据对象和更新数据对象的对象依赖性的示例方法800的高级流程图。方法800开始于805。在805,方法800根据定义语句更新数据库系统的目标数据对象。在810,方法800确定定义语句是否改变目标数据对象的一个或多个对象属性。在815,响应于确定定义语句改变目标数据对象的一个或多个属性,方法800重新验证依赖于目标数据对象的数据对象。在820,响应于确定定义语句没有改变目标数据对象的一个或多个对象属性,方法800不重新验证依赖于目标数据对象的数据对象。方法800因此返回。
图9示出了说明用于选择性重新验证数据对象和更新数据对象的对象依赖性的示例方法900的高级流程图。方法900开始于905。在905,方法900根据定义语句更新数据库系统的目标数据对象。在910,方法900响应于确定定义语句改变了目标数据对象的对象属性,重新验证依赖于目标数据对象的一个或多个数据对象。在915,方法900响应于确定所述定义语句没有改变所述目标数据对象的对象属性,在不重新验证一个或多个数据对象的情况下,更新依赖于目标数据对象的一个或多个数据对象的对象依赖性。方法900因此返回。
图10示出了说明用于选择性重新验证数据对象和更新数据对象的对象依赖性的示例方法1000的高级流程图。方法1000从1005开始。在1005,方法1000评估数据库中的数据对象的属性。在1010,方法1000接收用于更新数据对象的定义命令。在1015,方法1000根据定义命令更新数据对象。在1020,方法1000评估更新的数据对象的更新的属性。在1025,方法1000基于数据对象的属性和更新的数据对象的更新的属性来确定数据对象的对象属性是否改变。在1030,方法1000响应于确定数据对象的对象属性改变,重新验证依赖于数据对象的一个或多个数据对象。在1035,方法1000响应于确定数据对象的对象属性没有改变,在不重新验证依赖于数据对象的数据对象的情况下,更新依赖于数据对象的一个或多个数据对象的依赖性。方法1000因此返回。
示例8-计算环境
图11描绘了可以实现所描述的创新的合适的计算系统1100的示例。计算系统1100并不旨在对本公开的使用范围或功能提出任何限制,因为这些创新可以在不同的计算系统中实现。
参考图11,计算系统1100包括一个或多个处理单元1110、1115和存储器1120、1125。在图11中,该基本配置1130被包括在虚线内。处理单元1110、1115可以执行计算机可执行指令,诸如用于实现本文的示例中描述的特征(例如,方法400、500、800、900和1000)。处理单元可以是通用中央处理单元(CPU)、专用集成电路(ASIC)中的处理器或任何其他类型的处理器。在多处理系统中,多个处理单元可以执行计算机可执行指令以增加处理能力。例如,图11示出了中央处理单元1110以及图形处理单元或协同处理单元1115。有形存储器1120、1125可以是可由处理单元1110、1115访问的易失性存储器(例如,寄存器、缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或两者的某种组合。存储器1120、1125可以以适合由处理单元1110、1115执行的计算机可执行指令的形式存储实现本文所述的一个或多个创新的软件1180。
计算系统1100可以具有附加特征。例如,计算系统1100可以包括存储1140、一个或多个输入设备1150、一个或多个输出设备1160和一个或多个通信连接1170,其包括输入设备、输出设备和用于与用户交互的通信连接。诸如总线、控制器或网络的互连机制(未示出)可以互连计算系统1100的组件。通常,操作系统软件(未示出)可以为在计算系统1100中执行的其他软件提供操作环境,并协调计算系统1100的组件的活动。
有形存储1140可以是可移动的或不可移动的,并且包括磁盘、磁带或盒式磁带、CD-ROM、DVD或任何其他可以用于以非临时方式存储信息,并且可以在计算系统1100内访问的介质。存储器1140可以存储用于实现本文所述的一个或多个创新的软件1180的指令。
输入设备1150可以是诸如键盘、鼠标、笔或轨迹球的输入设备、语音输入设备、扫描设备、触摸设备(例如,触摸板、显示器等)或向计算系统1100提供输入的另一设备。输出设备1160可以是显示器、打印机、扬声器、CD写入器或提供来自计算系统1100的输出的另一设备。
通信连接1170可以使得能够通过通信介质与另一计算实体进行通信。通信介质可以传送信息,诸如计算机可执行指令、音频或视频输入或输出或者调制的数据信号中的其他数据。调制的数据信号一个或多个特性被设置或改变,以便对信号中的信息进行编码的信号。作为示例而非限制,通信介质可以使用电、光、RF或其他载波。
这些创新可以在计算机可执行指令的上下文中描述,诸如包括在程序模块中的指令,这些指令在计算系统中在目标真实或虚拟处理器上执行(例如,最终在一个或多个硬件处理器上执行)。通常,程序模块或组件可以包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。在各种实施例中,程序模块的功能可以根据需要在程序模块之间组合或分离。用于程序模块的计算机可执行指令可以在本地或分布式计算系统内执行。
为了便于说明,该详细描述使用了“确定(determine)”和“使用(use)”等术语来描述计算系统中的计算机操作。这些术语是对由计算机执行的操作的高级描述,不应与由人类执行的行为混淆。与这些术语相对应的实际计算机操作根据实施方式而变化。
示例9-计算机可读介质
本文中的任何计算机可读介质可以是非暂时性的(例如,诸如DRAM或SRAM的易失性存储器、诸如磁存储、光存储等的非易失性存储)和/或有形的。本文描述的任何存储动作都可以通过存储在一个或多个计算机可读介质(例如,计算机可读存储介质或其他有形介质)中来实现。被描述为存储的任何事物(例如,在实现期间创建和使用的数据)都可以存储在一个或多个计算机可读介质(例如,计算机可读存储介质或其他有形介质)中。计算机可读介质可以被限于不由信号组成的实施方式。
本文描述的任何方法都可以通过一个或多个计算机可读介质(例如,计算机可读存储介质或其他有形介质)或一个或多个计算机可读存储设备(例如,存储器、磁存储、光存储等)中的(例如,存储在其上、编码在其上等)计算机可执行指令来实现。这样的指令可以使得计算设备执行该方法。本文所描述的技术可以用各种编程语言来实现。
示例10-云计算环境
图12描绘了示例云计算环境1200,其中可以实现所描述的技术,包括例如计算系统1100和本文中的其他系统,诸如数据库管理系统302。云计算环境1200可以包括云计算服务1210。云计算服务1210可以包括各种类型的云计算资源,诸如计算机服务器、数据存储库、网络资源等。云计算服务1210可以位于中央(例如,由企业或组织的数据中心提供)或分布式(例如,通过位于不同位置(诸如不同数据中心和/或位于不同城市或国家)的各种计算资源提供)。
云计算服务1210可以由各种类型的计算设备(例如,客户端计算设备)使用,诸如计算设备1220、1222和1223。例如,计算设备(例如,1220、1222和1224)可以是计算机(例如,台式机或膝上型计算机)、移动设备(例如,平板电脑或智能手机)或其他类型的计算设备。例如,计算设备(例如,1220、1222和1224)可以利用云计算服务1210执行计算操作(例如,数据处理、数据存储等)。
在实践中,可以支持基于云、基于本地或混合场景。
示例11-示例数据库体系结构
数据库系统通常使用通常面向事务的在线事务处理(onlinetransactionprocessing,OLTP)工作负载或通常涉及数据分析的在线分析处理(onlineanalytical processing,OLAP)工作负载来操作。OLTP事务通常用于核心业务功能,诸如输入、操纵或检索操作数据,并且用户通常希望事务或查询能够快速完成。例如,OLTP事务可以包括诸如INSERT、UPDATE和DELETE的操作,以及相对简单的查询。OLAP工作负载通常涉及用于企业资源规划和其他类型的商业智能的查询。OLAP工作负载通常很少对数据库记录执行更新(如果有的话),相反,它们通常读取和分析过去的事务,通常是大量的。
图13示出了示例数据库环境1300。数据库环境1300可以包括客户端1304。尽管示出了单个客户端1304,但是客户端1304可以表示多个客户端。客户端1304可以是OLAP客户端、OLTP客户端或其组合。
客户端1304与数据库服务器1306进行通信。通过各种子组件,数据库服务器1306可以处理对数据库操作的请求,诸如存储、读取或操作数据的请求(即CRUD操作)。会话管理器组件1308可以负责管理客户端1304和数据库服务器1306之间的连接,诸如使用数据库编程接口(诸如Java数据库连接(JDBC)、开放数据库连接(ODBC)或数据库共享库(DBSL))与数据库服务器通信的客户端。通常,会话管理器1308可以同时管理与多个客户端1304的连接。会话管理器1308可以执行诸如为客户端请求创建新会话、将客户端请求分配给现有会话以及验证对数据库服务器1306的访问的功能。对于每个会话,会话管理器1308可以维护上下文,该上下文存储与会话相关的参数的集合,诸如与提交数据库事务或事务隔离级别(诸如语句级别隔离或事务级别隔离)相关的设置。
对于其他类型的客户端1304,诸如基于web的客户端(诸如使用HTTP协议或类似传输协议的客户端),客户端可以与应用管理器组件1310对接。尽管被示为数据库服务器1306的组件,但是在其他实施方式中,应用管理器1310可以位于数据库服务器1305之外,但是与数据库服务器1307通信。应用管理器1310可以以与会话管理器1308类似的方式发起与数据库服务器1306的新数据库会话,并执行其他功能。
应用管理器1310可以确定请求数据库操作的应用的类型,并通过调用或执行过程调用、生成查询语言语句或者在客户端1304和数据库服务器1306可用的格式之间转换数据等方式,在数据库服务器1306处促成请求的执行。在特定示例中,应用管理器1310从客户端1304接收对数据库操作的请求,但不存储与请求相关的信息,诸如状态信息。
一旦在客户端1304和数据库服务器1306之间建立了连接,包括当通过应用管理器1310建立连接时,客户端请求的执行通常使用诸如结构化查询语言(SQL)的查询语言来执行。在执行请求时,会话管理器1308和应用管理器1310可以与查询接口1312通信。查询接口1312可以负责创建与数据库服务器1306的适当的执行组件的连接。查询接口1312还可以负责确定请求是否与先前缓存的语句或存储过程相关联,并调用存储过程或将先前缓存的语句与该请求相关联。
至少某些类型的数据库操作请求,诸如用查询语言编写数据或操纵数据的语句,可以与事务上下文相关联。在至少一些实施方式中,每个新会话都可以被分配给事务。事务可以由事务管理器组件1314来管理。事务管理器组件1314可以负责诸如协调事务、管理事务隔离、跟踪正在运行和已关闭事务以及管理事务的提交或回滚(rollback)的操作。在执行这些操作时,事务管理器1314可以与数据库服务器1306的其他组件通信。
查询接口1312可以与诸如结构化查询语言处理器的查询语言处理器1316通信。例如,查询接口1312可以向查询语言处理器1316转发来自客户端1304的查询语言语句或其他数据库操作请求。查询语言处理器1316可以包括查询语言执行器1320,诸如SQL执行器,其可以包括线程池1324。对数据库操作或其组件的一些请求可以由查询语言处理器1316直接执行。查询语言处理器1316可以将其他请求或其组件转发到数据库服务器1306的另一组件。例如,事务控制语句(诸如提交或回滚操作)可以由查询语言处理器1316转发到事务管理器1314。在至少一些情况下,查询语言处理器1316负责执行检索或操纵数据的操作(例如,SELECT、UPDATE、DELETE)。诸如查询的其他类型的操作可以由查询语言处理器1316发送到数据库服务器1306的其他组件。查询接口1312和会话管理器1308可以维护和管理与数据库操作请求相关联的上下文信息。在特定实施方式中,查询接口1312可以维护和管理通过应用管理器1310接收的请求的上下文信息。
当由会话管理器1308或应用管理器1310在客户端1304和数据库服务器1306之间建立连接时,诸如查询的客户端请求可以被分配给线程池1324的线程,诸如使用查询接口1312。在至少一个实施方式中,线程与用于执行处理活动的上下文相关联。线程可以由数据库服务器1306的操作系统管理,或者由数据库服务器的另一组件管理,或者与数据库服务器的其他组件组合管理。通常,在任何时刻,线程池1324都包含多个线程。在至少一些情况下,线程池1324中的线程数量可以被动态调整,诸如响应于数据库服务器1306处的活动级别。在特定方面,线程池1324的每个线程可以被分配给多个不同会话。
当接收到查询时,会话管理器1308或应用管理器1310可以确定查询的执行计划(plan)是否已经存在,诸如在计划缓存1336中。如果存在查询执行计划,则可以检索缓存的执行计划并将其转发给查询语言执行器1320,诸如使用查询接口1312。例如,查询可以被发送到由会话管理器1308或应用管理器1310确定的线程池1324的执行线程。在特定示例中,查询计划被实现为抽象数据类型。
如果查询不与现有执行计划相关联,则可以使用查询语言解析器1328来解析查询。查询语言解析器1328可以例如检查查询的查询语言语句以确保它们具有正确语法,并确认这些语句在其他方面是有效的。例如,查询语言解析器1328可以检查查询语言语句中所列举的表和记录是否在数据库服务器1306中被定义。
还可以使用查询语言优化器1332来优化查询。查询语言优化器1332可以操纵查询语言语句的元素以允许更有效地处理查询。例如,查询语言优化器1332可以执行操作,诸如去关联查询(unnesting queries)或为查询中的各种操作(诸如语句内的操作)确定优化的执行顺序的操作。在优化之后,可以为查询生成或编译执行计划。在至少一些情况下,执行计划可以被缓存在诸如计划缓存1336中,如果再次接收到查询,则可以(诸如由会话管理器1308或应用管理器1310)检索执行计划。
出于本公开的目的,可以由查询语言优化器1332执行的一个任务是确定应当执行对数据库操作的请求或其一部分的位置。例如,可以提交从多个数据源读取数据的复杂查询。数据源中的至少一个可以是虚拟表,并且请求可以在锚节点上执行,诸如由实现数据库环境1300的计算系统表示的节点,或者在另一节点上执行,其包括响应于对数据库操作的请求、对数据库操作的另一请求或者基于包括一个或多个节点的数据库系统的总体工作负载/性能(即,如果工作负载超过阈值,则可以实例化非锚节点)而动态创建的节点。
一旦生成或接收到查询执行计划,查询语言执行器1320可以监督查询的执行计划的执行。例如,查询语言执行器1320可以调用数据库服务器1306的适当子组件。
在执行查询时,查询语言执行器1320可以调用查询处理器1340,其可以包括一个或多个查询处理引擎。查询处理引擎可以包括例如OLAP引擎1342、联接引擎1344、属性引擎1346或计算引擎1348。OLAP引擎1342例如可以应用规则来创建OLAP查询的优化执行计划。联接引擎1344可以用于实现关系运算符,通常用于非OLAP查询,诸如联接和聚合操作。在特定实施方式中,属性引擎1346可以实现列数据结构和访问操作。例如,属性引擎1346可以实现合并功能和查询处理功能,诸如扫描列。
在某些情况下,诸如如果查询涉及复杂的或内部并行的操作或子操作,则查询执行器1320可以向作业(job)执行器组件1354发送查询的操作或子操作,作业执行器部件1354可以包括线程池1356。查询的执行计划可以包括多个计划运算符。在特定实施方式中,作业执行线程池1356的每个作业执行线程可以被分配给单独的计划运算符。作业执行器组件1354可以被用于并行执行查询的运算符的至少一部分。在某些情况下,计划运算符可以被进一步划分和并行化,诸如让操作同时访问同一表的不同部分。使用作业执行器组件1354可以增加数据库服务器1306的一个或多个处理单元上的负载,但是可以改善查询的执行时间。
查询处理器1340的查询处理引擎可以访问存储在数据库服务器1306中的数据。数据可以在行存储1362中按行格式存储,或者在列存储1364中按列格式存储。至少在某些情况下,数据可以在行格式和列格式之间转换。查询处理器1340执行的特定操作可以访问或操作行存储1362,列存储1364中的数据,或者,至少对于某些类型的操作(诸如联接、合并和子查询),访问或操作行存储1362和列存储器1364两者中的数据。在至少一些方面中,行存储1362和列存储1364可以被维持在主存储器中。
持久层1368可以与行存储1362和列存储1364通信。持久层1368可以负责诸如提交写入事务、存储重做日志条目、回滚事务以及周期性地将数据写入存储以提供持久化数据1372的动作。
在执行对数据库操作(例如,查询或事务)的请求时,数据库服务器1306可能需要访问存储在另一位置(诸如另一数据库服务器)的信息。数据库服务器1306可以包括用于管理这种通信的通信管理器1380组件。当应用管理器位于数据库服务器之外时,通信管理器1380还可以促成数据库服务器1306与客户端1304或应用管理程序1310之间的通信。
在一些情况下,数据库服务器1306可以是包括多个数据库服务器的分布式数据库系统的一部分。数据库服务器的至少一部分可以包括数据库服务器1306的一些或全部组件。在某些情况下,数据库系统的数据库服务器可以存储数据的多个副本。例如,表可以在多个数据库服务器上复制。另外,或者可替换地,数据库系统中的信息可以分布在多个服务器之间。例如,第一数据库服务器可以保存第一表的副本,第二数据库服务器可以保存第二表的副本。在进一步的实施方式中,可以在数据库服务器之间对信息进行分区。例如,第一数据库服务器可以保存第一表的第一部分并且第二数据库服务器可以保存第一表的第二部分。
在执行对数据库操作的请求时,数据库服务器1306可能需要访问数据库系统内或外部系统处的其他数据库服务器或其他信息源,诸如远程数据对象所在的外部系统。通信管理器1380可以被用于促成这样的通信。例如,通信管理器1380可以接收并路由来自数据库服务器1306的组件(或来自另一数据库服务器)的对信息的请求,以及接收并路由回复。
数据库服务器1306可以包括用于协调涉及远程数据源的数据处理操作的组件。特别地,数据库服务器1306包括数据联合组件1390,其至少部分地处理访问在远程系统处维护的对访问数据的请求。在执行其功能时,数据联合组件1390可以包括一个或多个适配器1392,其中适配器可以包括在与远程系统通信时可用的逻辑、设置或连接信息,诸如在获得信息以帮助生成虚拟参数化数据对象或使用虚拟参数化的数据对象执行对数据的请求(诸如向远程系统发出对使用远程系统的对应参数化对象访问的数据的请求)中。适配器的示例包括在德国沃尔多夫的SAP SE提供的技术中实现的“连接器”。此外,所公开的技术可以使用数据联合技术的基础技术,诸如SAP SE的智能数据访问(SDA)和智能数据集成(SDI)。
示例12–示例实施方式
尽管为了方便呈现,以特定的、顺序的顺序描述了一些公开的方法的操作,但是这种描述方式包括重排,除非本文所阐述的特定语言需要特定的顺序。例如,在某些情况下,顺序描述的操作可以被重新排列或同时执行。
如本申请和权利要求中所述,除非上下文另有明确规定,否则单数形式“一个”、“一”和“该”包括复数形式。此外,术语“包括”指“包含”。此外,“和/或”指“和”或“或”以及“和”和“或”
示例13–示例实施例
可以实现以下示例实施例中的任何一个。
在一个示例中,计算系统包括存储器、耦合到存储器的一个或多个硬件处理器以及存储指令的一个或多个计算机可读存储介质,所述指令在被加载到存储器中时使得一个或多个硬件处理器:根据定义语句更新数据库系统的目标数据对象,响应于在更新目标数据对象的同时改变目标数据对象的对象属性的定义语句,重新验证依赖于目标数据对象的数据对象,以及响应于在更新目标数据对象时没有改变目标数据对象的对象属性的定义语句,重新验证不依赖于目标数据对象的数据对象。
在计算系统的第一示例中,一个或多个计算机可读存储介质还存储指令,当执行指令时使得一个或多个硬件处理器确定目标数据对象的对象依赖性改变,以及响应于在更新目标数据对象时没有改变目标数据对象的对象属性的定义语句,更新依赖于目标数据对象的数据对象的对象依赖性。在可选地包括第一示例的计算系统的第二示例中,为了更新依赖于目标数据对象的数据对象的对象依赖性,一个或多个计算机可读存储介质还存储指令,当执行指令时,使得一个或多个硬件处理器确定依赖于目标数据对象的给定数据对象的基础数据对象,并根据确定的基础数据对象来更新给定数据对象的对象依赖性元数据。在可选地包括第一和第二示例中的一个或多个的计算系统的第三示例中,一个或多个计算机可读存储介质还存储指令,当执行指令时使得一个或多个硬件处理器生成依赖于目标数据对象的数据对象的拓扑排序的有序列表,以及根据依赖于目标数据对象的数据对象的拓扑排序的有序列表来更新依赖于目标数据对象的数据对象的对象依赖性。在可选地包括第一至第三示例中的一个或多个的计算系统的第四示例中,一个或多个计算机可读存储介质还存储指令,当执行指令时使得一个或多个硬件处理器响应于没有改变目标数据对象的对象属性的定义语句和没有改变要求数据对象的对象依赖性的定义语句,不重新验证依赖于目标数据对象的数据对象,也不更新依赖于目标数据对象的数据对象的对象依赖性。在可选地包括第一至第四示例中的一个或多个的计算系统的第五示例中,一个或多个计算机可读存储介质还存储指令,当执行指令时指令使得一个或多个硬件处理器在更新目标数据对象之前评估目标数据对象的属性,在更新目标数据对象之后评估目标数据对象的属性,并且通过将更新目标数据对象之前的目标数据对象的属性与更新目标数据对象之后的目标数据对象的属性进行比较,确定目标数据对象的对象属性是否改变。在可选地包括第一到第五示例中的一个或多个的计算系统的第六示例中,定义语句包括数据定义语言命令。在可选地包括第一到第六示例中的一个或多个的计算系统的第七示例中,数据定义语言命令包括创建(CREATE)、变更(ALTER)或替换(REPLACE)命令。
在另一示例中,计算机实现的方法包括根据定义语句更新数据库系统的目标数据对象,响应于确定定义语句改变了目标数据对象的对象属性而重新验证依赖于目标数据对象的一个或多个数据对象,以及响应于确定定义语句没有改变目标数据对象的对象属性,在不重新验证一个或多个数据对象的情况下更新依赖于目标数据对象的一个或多个数据对象的对象依赖性。
在方法的第一示例中,方法还包括比较在更新目标数据对象之前和之后的目标数据对象的逻辑结构,如果在更新目标数据对象之后逻辑结构改变,则确定定义语句改变了目标数据对象的对象属性,以及如果在更新目标数据对象之后逻辑结构没有改变,则确定定义语句没有改变目标数据对象的对象属性。在可选地包括第一示例的方法的第二示例中,方法还包括接收定义语句,并响应于接收到定义语句根据定义语句自动更新目标数据对象。在可选地包括第一和第二示例中的一个或多个的方法的第三示例中,方法还包括:确定依赖于目标数据对象的一个或多个数据对象中的给定数据对象的基础数据对象,以及根据所确定的基础数据对象,更新依赖于目标数据对象的一个或多个数据对象中的指定数据对象的对象依赖性元数据。在可选地包括第一至第三示例中的一个或多个的方法的第四示例中,目标数据对象包括表或视图。在可选地包括第一至第四示例中的一个或多个的方法的第五示例中,重新验证一个或多个数据对象包括测试一个或多个数据对象的一个或多个父对象的有效性。在可选地包括第一至第五示例中的一个或多个的方法的第六示例中,方法还包括,在根据定义语句更新目标数据对象之前,确定定义语句将改变目标数据对象的对象属性,确定数据对象依赖于目标数据对象的对象属性,以及输出指示定义语句可以使至少一个依赖对象无效的消息。
在又一示例中,一个或多个非暂时性计算机可读存储介质存储计算机可执行指令,当执行指令时使一个或多个处理器执行方法,方法包括:评估数据库中的数据对象的属性;接收用于更新数据对象的定义命令;根据定义命令更新数据对象;评估更新的数据对象的更新的属性;基于数据对象的属性和更新的数据对象的更新的属性来确定数据对象的对象属性是否改变;响应于确定数据对象的对象属性改变,重新验证依赖于数据对象的一个或多个数据对象;以及响应于确定数据对象的对象属性没有改变,在不重新验证依赖于数据对象的数据对象的情况下,更新依赖于数据对象的一个或多个数据对象的依赖性。
在一个或多个非暂时性计算机可读存储介质的第一示例中,方法还包括根据一个或多个数据对象的拓扑排序列表来更新一个或多个数据对象的对象依赖性。在可选地包括第一示例的一个或多个非暂时性计算机可读存储介质的第二示例中,确定数据对象的对象属性是否改变包括:在更新数据对象之前和之后比较数据对象的逻辑结构;如果逻辑结构在更新数据对象之后改变,则确定数据对象的对象属性改变;以及如果在更新数据对象之后逻辑结构没有改变,则确定数据对象的对象属性没有改变。在可选地包括第一和第二示例中的一个或多个的一个或多个非暂时性计算机可读存储介质的第三示例中,定义命令包括数据定义语言语句。在可选地包括第一到第三示例中的一个或多个的一个或多个的一个或多个非暂时性计算机可读存储介质的第四示例中,数据定义语言语句包括指示数据对象的CREATE语句、ALTER语句和REPLACE语句中的一个或多个。在可选地包括第一到第四示例中的一个或多个的一个或多个非暂时性计算机可读存储介质的第五示例中,数据对象包括表或视图。
示例14–示例备选方案
来自任何示例的技术可以与在任何一个或多个其他示例中描述的技术相结合。鉴于所公开的技术的原理可以应用于许多可能的实施例,应当认识到,所示的实施例是所公开技术的示例,不应当被视为对所公开技术范围的限制。相反,所公开的技术的范围包括所附权利要求的范围和精神所涵盖的内容。

Claims (20)

1.一种计算系统,包括:
至少一个存储器;
耦合到所述至少一个存储器的一个或多个硬件处理器;以及
一个或多个存储指令的计算机可读存储介质,当所述指令由所述计算系统执行时,使所述计算系统:
根据定义语句更新数据库系统的目标数据对象;
确定定义语句是否改变目标数据对象的一个或多个对象属性;
响应于确定所述定义语句改变所述目标数据对象的所述一个或多个对象属性,重新验证依赖于所述目标数据对象的数据对象;以及
响应于确定所述定义语句没有改变所述目标数据对象的所述一个或多个对象属性,不重新验证依赖于所述目标数据对象的数据对象。
2.根据权利要求1所述的计算系统,其中,所述一个或多个计算机可读存储介质还存储指令,所述指令在被执行时,响应于确定所述定义语句没有改变所述目标数据对象的所述一个或多个对象属性,使得所述一个或多个硬件处理器:
确定所述目标数据对象的对象依赖性改变;以及
更新依赖于所述目标数据对象的数据对象的对象依赖性。
3.根据权利要求2所述的计算系统,其中,为了更新依赖于所述目标数据对象的数据对象的对象依赖性,所述一个或多个计算机可读存储介质还存储指令,所述指令在被执行时使得一个或多个硬件处理器:
确定依赖于所述目标数据对象的给定数据对象的基础数据对象;以及
根据所述确定的基础数据对象来更新给定数据对象的对象依赖性元数据。
4.根据权利要求3所述的计算系统,其中,所述一个或多个计算机可读存储介质还存储指令,所述指令在被执行时,使得所述一个或多个硬件处理器:
生成依赖于所述目标数据对象的数据对象的拓扑排序的有序列表;以及
根据依赖于所述目标数据对象的数据对象的拓扑排序的有序列表,更新依赖于所述目标数据对象的数据对象的对象依赖性。
5.根据权利要求2所述的计算系统,其中,所述一个或多个计算机可读存储介质还存储指令,所述指令在被执行时,响应于确定所述定义语句没有改变所述目标数据对象的所述一个或多个对象属性,使得所述一个或多个硬件处理器:
确定所述目标数据对象的对象依赖性没有改变;以及
不更新依赖于所述目标数据对象的数据对象的对象依赖性。
6.根据权利要求1所述的计算系统,其中,所述一个或多个计算机可读存储介质还存储指令,所述指令在被执行时使得所述一个或多个硬件处理器:
在根据所述定义语句更新所述目标数据对象之前评估所述目标对象的属性;
在根据所述定义语句更新所述目标数据对象之后评估所述目标对象的属性;以及
通过将更新所述目标数据对象之前的所述目标数据对象属性与更新所述目标数据对象之后的所述目标对象的属性进行比较来确定所述目标数据对象的所述一个或多个对象属性是否改变。
7.根据权利要求1所述的计算系统,其中,所述一个或多个对象属性包括定义所述目标数据对象的逻辑结构的一个或多个对象属性。
8.根据权利要求1所述的计算系统,其中,为了确定所述定义语句改变所述目标数据对象的所述一个或多个对象属性,所述一个或多个计算机可读存储介质还存储指令,所述指令在被执行时使一个或多个硬件处理器:
确定所述定义语句移除所述目标数据对象的属性;以及
识别依赖于所述目标数据对象的属性的依赖对象。
9.一种在计算系统中实现的方法,所述计算系统包括至少一个存储器和耦合到所述至少一个存储器的至少一个硬件处理器,所述方法包括:
根据定义语句更新数据库系统的目标数据对象;
响应于确定所述定义语句改变所述目标数据对象的对象属性,重新验证依赖于所述目标数据对象的一个或多个数据对象;以及
响应于确定所述定义语句没有改变所述目标数据对象的对象属性,在不重新验证所述一个或多个数据对象的情况下,更新依赖于所述目标数据对象的所述一个或多个数据对象的对象依赖性。
10.根据权利要求9所述的方法,还包括:
比较在更新所述目标数据对象之前和之后的所述目标数据对象的逻辑结构;
如果在更新所述目标数据对象之后所述逻辑结构改变,则确定所述定义语句改变所述目标数据对象的对象属性;以及
如果在更新所述目标数据对象之后所述逻辑结构没有改变,则确定所述定义语句没有改变所述目标数据对象的对象属性。
11.根据权利要求9所述的方法,还包括:
接收所述定义语句;以及
响应于接收到所述定义语句,根据所述定义语句自动更新所述目标数据对象。
12.根据权利要求9所述的方法,还包括:
确定依赖于所述目标数据对象的所述一个或多个数据对象的给定数据对象的基础数据对象;以及
根据所述确定的基础数据对象,更新依赖于所述目标数据对象的所述一个或多个数据对象的给定数据对象的对象依赖性元数据。
13.根据权利要求9所述的方法,还包括:
在根据所述定义语句更新所述目标数据对象之前,确定所述定义语句将改变所述目标数据对象的对象属性;
确定数据对象依赖于所述目标数据对象的对象属性;以及
输出指示所述定义语句可以使至少一个依赖对象无效的消息。
14.根据权利要求9所述的方法,其中重新验证所述一个或多个数据对象包括测试所述一个或多个数据对象的一个或多个父对象的有效性。
15.一个或多个非暂时性计算机可读存储介质,包括计算机可执行指令,当所述指令由包括至少一个硬件处理器和耦合到所述至少一个硬件处理器的至少一个存储器的计算系统执行时,使得所述计算系统:
评估数据库中数据对象的属性;
接收更新数据对象的定义命令;
根据所述定义命令更新所述数据对象;
评估所述更新的数据对象的更新的属性;
基于所述数据对象的属性和所述更新的数据对象的更新的属性来确定所述数据对象的对象属性是否改变;
响应于确定所述数据对象的对象属性改变,重新验证依赖于所述数据对象的一个或多个数据对象;以及
响应于确定所述数据对象的对象属性没有改变,在不重新验证依赖于所述数据对象的数据对象的情况下,更新依赖于所述数据对象的所述一个或多个数据对象的对象依赖性,。
16.根据权利要求15所述的一个或多个非暂时性计算机可读存储介质,其中,所述计算机可执行指令在被执行时还使得所述计算系统:
根据所述一个或多个数据对象的拓扑排序列表来更新所述一个或多个数据对象的对象依赖性。
17.根据权利要求15所述的一个或多个非暂时性计算机可读存储介质,其中,为了确定所述数据对象的对象属性是否改变,所述计算机可执行指令在被执行时还使得所述计算系统:
在更新所述数据对象之前和之后比较所述数据对象的逻辑结构;
如果在更新所述数据对象之后所述逻辑结构改变,则确定所述数据对象的对象属性改变;以及
如果在更新所述数据对象之后所述逻辑结构没有改变,则确定所述数据对象的对象属性没有改变。
18.根据权利要求15所述的一个或多个非暂时性计算机可读存储介质,其中,所述定义命令包括数据定义语言语句。
19.根据权利要求18所述的一个或多个非暂时性计算机可读存储介质,其中,所述数据定义语言语句包括指示所述数据对象的创建语句、变更语句和替换语句中的一个或多个。
20.根据权利要求15所述的一个或多个非暂时性计算机可读存储介质,其中,所述数据对象包括表或视图。
CN202311353810.0A 2022-10-25 2023-10-18 重新验证传播的细粒度决策 Pending CN117931765A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/973,440 US20240134842A1 (en) 2022-10-25 2022-10-24 Fine-grained decision on propagation of revalidation
US17/973,440 2022-10-25

Publications (1)

Publication Number Publication Date
CN117931765A true CN117931765A (zh) 2024-04-26

Family

ID=88417223

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311353810.0A Pending CN117931765A (zh) 2022-10-25 2023-10-18 重新验证传播的细粒度决策

Country Status (3)

Country Link
US (1) US20240134842A1 (zh)
EP (1) EP4361834A1 (zh)
CN (1) CN117931765A (zh)

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11048728B2 (en) * 2018-12-12 2021-06-29 Sap Se Dependent object analysis

Also Published As

Publication number Publication date
US20240134842A1 (en) 2024-04-25
EP4361834A1 (en) 2024-05-01

Similar Documents

Publication Publication Date Title
CN109144994B (zh) 索引更新方法、系统及相关装置
US7769789B2 (en) High performant row-level data manipulation using a data layer interface
US20150234884A1 (en) System and Method Involving Resource Description Framework Distributed Database Management System and/or Related Aspects
US7822710B1 (en) System and method for data collection
US9632944B2 (en) Enhanced transactional cache
EP2746971A2 (en) Replication mechanisms for database environments
US20150205850A1 (en) Eager replication of uncommitted transactions
US10296542B2 (en) Integration database framework
US10339040B2 (en) Core data services test double framework automation tool
US9600299B2 (en) Application object framework
US9509769B2 (en) Reflecting data modification requests in an offline environment
US11442934B2 (en) Database calculation engine with dynamic top operator
US10620660B2 (en) Efficient timestamp solution for analyzing concurrent software systems
US7415457B2 (en) Using a cache to provide cursor isolation
WO2020192663A1 (zh) 一种数据管理方法及相关设备
US8548980B2 (en) Accelerating queries based on exact knowledge of specific rows satisfying local conditions
CN117421302A (zh) 一种数据处理方法及相关设备
US11507575B2 (en) Complex query rewriting
EP4361834A1 (en) Fine-grained decision on propagation of revalidation
US11681687B2 (en) Executing transactions on distributed databases
US11789971B1 (en) Adding replicas to a multi-leader replica group for a data set
US11188228B1 (en) Graphing transaction operations for transaction compliance analysis
US11521089B2 (en) In-database predictive pipeline incremental engine
Pupezescu et al. Optimizations of Database Management Systems for Real Time IoT Edge Applications
Zhu Towards Automated Online Schema Evolution

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