CN105283872B - 为sql处理缓存外部数据源 - Google Patents

为sql处理缓存外部数据源 Download PDF

Info

Publication number
CN105283872B
CN105283872B CN201480030497.XA CN201480030497A CN105283872B CN 105283872 B CN105283872 B CN 105283872B CN 201480030497 A CN201480030497 A CN 201480030497A CN 105283872 B CN105283872 B CN 105283872B
Authority
CN
China
Prior art keywords
external data
caching
external
inquiry
column
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
Application number
CN201480030497.XA
Other languages
English (en)
Other versions
CN105283872A (zh
Inventor
A·豪德莱
C·伊艾
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.)
Oracle International Corp
Original Assignee
Oracle International Corp
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 Oracle International Corp filed Critical Oracle International Corp
Publication of CN105283872A publication Critical patent/CN105283872A/zh
Application granted granted Critical
Publication of CN105283872B publication Critical patent/CN105283872B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24539Query rewriting; Transformation using cached or materialised query results
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management

Abstract

用于SQL处理的缓存外部数据源的技术被提供。根据实施例,数据库系统接收从外部数据源要求外来数据的查询。响应于接收查询,数据库系统确定外来数据当前是否存在于数据库系统的缓存中。响应于确定外来数据当前不存在于缓存中,数据库系统从外部数据源检索外来数据,将外来数据映射到表的列颗粒,以及将列颗粒存储在缓存中。在另一个实施例中,数据库系统接收要求外来数据的第二查询。响应于确定外来数据被缓存在存储的列颗粒中,数据库系统从缓存中检索列颗粒。

Description

为SQL处理缓存外部数据源
技术领域
本公开通常涉及评估数据库查询的技术,更具体地涉及用于为查询处理缓存外部数据源的技术。
背景技术
数据库是存储在诸如一组硬盘之类的一个或多个存储设备上的数据和元数据的结构化的集合。依赖于实施方式,在数据库内的数据可以根据各种数据模型被逻辑器地组织。例如,在关系模型中,数据通常被组织到一组表中,其中每个表包括一组行和列。在大多数情况中,每行代表不同的对象,而每列代表不同的属性。但是,其他数据模型也可以用于组织数据。
数据库管理系统(DBMS)是控制对数据库中数据的访问的软件。DBMS被配置为接收和处理通常被称为查询的各种数据库命令。在许多实施方式中,DBMS支持符合结构化查询语言(SQL)的查询。SQL是用于管理关系DBMS(RDMBS)中的数据的标准化查询语言。
SQL包括两组不同的命令:用于管理和索引在数据库中的数据结构的数据定义语言(DDL);以及用于访问和操作存在于数据结构内的数据的数据操作语言(DML)。DDL通常被用于创建、改变以及删除诸如表、索引、视图和约束之类的数据库对象,而DML通常被用于添加、查询、更新和删除在已有的数据库对象中的数据。
当DBMS接收诸如SQL表达式之类的查询时,DBMS评估此查询以得到查询结果。查询评估包括两个阶段:查询编译和查询执行。在查询编译期间,DBMS解析SQL表达式并且生成查询执行计划。查询执行计划指定一组有序的步骤,其经常被表示为查询操作符树,被用于执行查询。在每个步骤处的查询操作符与表示在查询执行中将被执行的计算或其他动作的一个或多个表达式相关联。示例的SQL操作符包括但不限于表扫描、连接、表队列、分组操作以及布隆过滤器(bloom filter)。一旦查询执行计划被生成,就根据所述计划执行查询。
为了评估SQL表达式,DBMS依赖于数据库内数据的内部结构和组织。例如,SQL表达式可以基于数据存在于特定表中的位置识别要访问数据库中的哪个数据。存在于数据库外部的数据(这里被称为“外来数据(foreign data)”)通常不被由内部的数据库元数据限定的结构和组织所约束。例如,外来数据可以不被外部数据源组织成表格格式,并且可以根据外部数据源限定的不同的结构和格式被组织。因此,SQL查询通常不能被用于访问和修改数据库外部的数据。
一种使得SQL查询能够分析存在于数据库之外的数据的方法涉及将外来数据加载到数据库。数据库加载器是从外部源中提取数据、将被提取的数据变换为适合于加载到目标数据库表中的格式、以及用被提取的数据填充数据库表的应用。因此,来自外部源的数据被数据库内部化,并且被转换为符合数据库的内部组织的格式。这种方法允许DBMS能够在来自外部数据源的数据被加载到数据库之后对数据执行查询。但是加载过程涉及较高的处理和存储开销,特别是在外部源包括大量连续更新的数据的情况中。
另一个用于评估外来数据的方法是将查询评估卸载到外来数据的外部源。例如,当指向外来数据的数据库查询被接收时,DBMS可以将数据库查询发送到外部源以用于评估。外部源然后可以评估查询并且将查询结果返回到DBMS。这种方法增大了外部数据源的处理开销,并且要求外部数据源能够处理从DBMS接收到的查询。
在此部分中描述的方法是可以寻求的方法,但不一定是之前已经被构想或寻求的方法。因此,除非以其他方式表明,不应当假定仅仅由于在此部分中包含这些方法,在此部分中所述的方法中的任一方法适合作为现有技术。
附图说明
在附图中,以示例的方式而不是以限制的方式说明各种实施例,其中相同的引用数字指代相同的元件,其中:
图1是描绘根据一个实施例的用于处理外部数据源的示例的系统架构的框图;
图2是说明根据一个实施例的用于评估访问外来数据的查询的进程的流程图;
图3是说明根据一个实施例的示例的数据库查询和结果缓存的结果状态的图表;
图4是描绘可以在其上实施实施例的计算机系统的框图。
具体实施方式
用于为SQL处理缓存外来数据的技术在这里被描述。在以下描述中,为了解释的目的,许多特定的细节被阐释以便提供对本发明深入的理解。但是显而易见的是,本发明可以在没有这些特定细节的情况下被实施。在其他情况中,熟知的结构和设备以框图的形式被示出以便避免不必要地使本发明难以理解。
总体概述
根据这里所述的实施例,数据库系统被配置为按需要缓存外来数据,而不用将外来数据加载到数据库的持久存储设备中。对外来数据的缓存在这里被称为“外部数据缓存”。通过缓存这样的数据,可以对外来数据执行SQL分析和其他数据分析,而不用重复地从外部源提取最经常使用的外来数据。同时,因为数据仅仅被缓存而不是被持久存储在数据库中,因此数据库不被潜在地无关的外来数据过载。因此,对外来数据的查询处理速度可以增大,而不增大数据库的存储开销。另外,查询评估可以被数据库系统完全内部化,而不用将计算卸载到外来数据的外部源。
在实施例中,即使生成外来数据的外部数据库可以以不同的格式存储数据,DBMS也可以以一种数据库系统内在的格式缓存外来数据。例如,外来数据可以存在于外部数据源中任意的数据文件中。当查询被接收时,适合的数据可以从数据文件被映射到由数据库系统定义的一个或多个数据库对象。格式可以对应于数据库的内部结构和组织以促进使用外来数据的查询评估。当访问外来数据的随后的查询被接收时,DBMS可以访问被缓存的外来数据,而不必从外部源重新提取数据或重新格式化数据以符合数据库的内部组织。
在实施例中,DBMS根据一个或多个缓存管理策略管理外部数据缓存。例如,DBMS可以从缓存中清除已经变冷的外来数据。DMBS还可以使已经变陈旧的外来数据无效。
在其他实施例中,外部数据缓存分布在多个节点上,DBMS可以将外来数据分布到不同的节点。当访问外来数据的查询被接收时,多个节点可以用于并行地执行查询。
系统概述
图1是描绘根据实施例的示例的系统架构的框图。数据库系统100通常包括数据库管理器110,外部数据缓存120,以及数据库130。数据库管理器110是包括一个或多个数据库服务器的DBMS,并且控制对存储在数据库130中的内部数据的访问,所述数据库130包括元数据存储库132和结构化数据134。依赖于实施方式,数据库管理器110可以分布在多个计算系统中、或单个计算机中。数据库管理器110包括数据库查询处理逻辑器112、无效逻辑器114、以及访问驱动器116。包括数据库管理器110、外部数据缓存120、以及数据库130的数据库系统100可以包括出于简洁的目的而不被示出的其他元件。
查询处理逻辑器112包括用于编译和执行由数据库用户140提交的数据库查询142的逻辑器。数据库用户140可以是能够将数据库查询142提交到数据库系统100的任何人、应用、或其他机构。查询处理逻辑器112可以处理和执行指向诸如外来数据152之类的存在于数据库130外部的数据的SQL查询、指向诸如结构化数据134之类的数据库130内部的数据的SQL查询、或指向两者的任何组合的SQL查询。查询处理逻辑器112可以包括但不限于,用于从查询表达式提取数据库操作以及生成查询执行计划的语言引擎,用于优化查询执行计划的查询优化器,以及用于对适合的数据库对象执行被优化的查询执行计划的数据库操作的数据库引擎。
外部数据缓存120是由数据库管理器110使用的用于存储从外部数据源提取的外来数据的存储器缓存。外部数据缓存可以存在于在单个数据库节点上的系统存储器,或可以分布到多个数据库节点。数据库节点可以包括针对数据库管理器110的一个实例实施数据库服务器的任何主机。数据库系统100可以包括出于简洁的目的而不被示出的其他数据缓存。示例包括但不限于,元数据(或数据字典)缓存,缓冲区缓存,结果缓存,以及库缓存。在实施例中,外部数据缓存120是数据库结果缓存的一部分,如下详细所述。针对外部数据缓存的存储器可以在数据库实例被启动时被分配,并且在数据库实例终止时被释放。外部数据缓存120可以被属于单个数据库实例的多个进程分享。如果外部数据缓存120不具有用于缓存外来数据的更多有效空间,则外来数据中的一些数据可以被移动到盘中,如下详细所述。
访问驱动器16是解释针对数据库系统100的外来数据152的应用程序接口(API)。当数据库查询142中的一个数据库查询请求访问外来数据时,数据库管理器110可以使用访问驱动器116读取和格式化来自外部数据源150的外来数据152。在实施例中,访问驱动器116对外来数据152执行变换,以使得外来数据152与数据库系统100的内部结构和组织相匹配。
缓存管理逻辑器114根据一个或多个缓存替换策略管理外部数据缓存120。例如,缓存管理逻辑器114可以从外部数据缓存120中清除最近最少使用的外来数据对象,以针对到来的外来数据生成空间。缓存管理逻辑器114还可以在外来数据变陈旧时使外来数据无效。用于无效外来数据的技术在下面详细地被描述。
外来数据152可以包括存在于数据库130外部的任何数据。在实施例中,外来数据152被一个或多个外部数据源150管理,并且不受制于数据库系统100对存在于数据库130中的数据施加的相同的约束。例如,由外部数据源150生成、更新和存储外来数据152的结构和方式可以不同于数据库管理器110管理结构化数据134的方式。外部数据源的示例包括但不限于网络馈送、扁平文件、经由数据库链路访问的远程表、由程序函数生成的数据、以及由不受DBMS控制的独立应用管理的其他数据文件。
数据库130是诸如盘之类的、持久地存储元数据存储库132中的元数据和结构化数据存储库134中的结构化数据的非易失性存储器。在实施例中,存储在元数据存储库132中的元数据包括定义结构化数据存储库134中的数据库对象的数据字典。例如,元数据可以识别诸如存储在结构化数据中的表、分区和子分区之类的表段。结构化数据存储库134可以根据包括但不限于关系数据模型的一个或多个数据模型存储数据。依赖于特定的实施方式,其他数据模型也可以被使用。
对外部数据的按需格式化和缓存
在实施例中,数据库管理器110执行对外部数据的按需格式化和缓存。例如,当首次请求访问目标外来数据时,数据库管理器110从外部数据源中提取目标外来数据、格式化目标外来数据、并且将数据存储在外部数据缓存120中。
为了确定如何格式化外来数据,数据库管理器110可以维持定义如何将外来数据映射到数据库系统100的内部结构的映射数据。
在实施例中,数据库管理器维持外部表映射数据。这里所使用的外部表是其结构在数据库130和/或数据库查询中被定义、但其数据被存储在数据库130以外的表。例如,通过诸如CREATE…ORGANIZATION EXTERNAL语句之类的DDL语句,外部表可以被创建,并且其结构可以被定义。在另一示例中,外部表可以通过诸如PL/SQL语句之类的程序函数或其他表函数被创建。表函数可以包括将外来数据源作为输入并且产生可以被查询的行或列的集合的任何函数。
创建外部表不在数据库130中创建实际的表。即是,当要创建外部表的请求被接收时,没有外来数据被加载并且被持久存储在数据库130中。在一些实施例中,创建外部表可以使得表定义能够被存储在数据库130中。例如,当外部表首次被创建时,数据库130可以存储描述外部表层如何将数据呈现给数据库系统的外部表元数据。元数据可以定义外部表的列的数目和类型,以及外部数据如何映射到外部表中的列。在其他实施例中,外部表可以通过脚本或其他程序函数,或通过到远程表的数据库链接,被链接到外部数据源。因此,表的结构被定义;但是没有数据被加载到数据库130中的表。
在实施例中,当外来数据被加载到外部数据缓存120时,访问驱动器116使用由数据库管理器110维持的映射数据将外来数据从外部数据源自有的格式转换为符合数据库系统100的内部结构和组织的格式(这里被称为“目标格式”)。例如,在外部数据源150中的文件的每一个单独行可以被映射到外部表元数据所定义的不同的表行。在另一个实施例中,被包括在外部文件中的外来数据可以基于数据被生成时的日期而映射到某些列。外来数据可以以任何其他适合的方式被映射。
在实施例中,外部数据缓存120以目标格式存储外来数据以用于查询处理。目标格式可以因实施方式而异。例如,外来数据可以被加载到表的一个或多个列的集合。所述列可以以列主要的格式、行主要的格式、或两者的组合格式被存储。外来数据还可以不同于外来系统地被压缩和/或被编码。
处理访问外来数据的查询
图2是说明根据实施例的用于评估访问外来数据的查询的进程的流程图。在步骤202处,数据库管理器110接收至少部分地指向存在于外部源的数据的数据库查询。在示例的实施例中,数据库查询引用外部表中的一列。如上所示,针对外部表的数据不存在于数据库中;而外部表包括定义从外来数据到外部表列的映射的元数据。在其他实施例中,数据库查询可以通过PL/SQL表函数或将外来数据映射到内部数据库对象的其他类型的函数来引用外部数据。在另一个实施例中,数据库查询可以通过到远程表的数据库链接引用外部数据。
在步骤204中,数据库管理器110处理查询并且检查外部数据缓存120中查询所要求的外来数据。在实施例中,数据库管理器110使用查询处理逻辑器112,以清除查询和识别引用外部数据源的查询表达式,并且生成查询执行计划。用于生成查询执行计划的技术在下面被详细地描述。
在步骤206中,数据库管理器110确定接收的查询所要求的外来数据是否当前存在于外部数据缓存120中。例如,数据库管理器110可以查询外部数据缓存120以得到由查询引用的特定的外部表列。如果外来数据不存在于缓存,则进程继续到步骤210。在另一方面,如果查询具有外来数据,则进程继续到步骤208。在一些实例中,查询所要求的外来数据中的一部分可以被缓存到外部数据缓存120,而其他部分可能之前已经被缓存或可能已经被删除。在这样的实例中,针对被缓存的那些部分进程继续到步骤208,针对没有被缓存的那些部分进程继续到210。
在步骤208中,数据库管理器110确定所缓存的数据是否有效。如果无效逻辑器114已经确定外来数据陈旧或无效,则进程继续到步骤210。在另一方面,如果所缓存的数据有效,则进程继续到步骤214。在一些实例中,所缓存的数据中的一部分可能是有效的,而另一部分可能是无效的。在这样的实例中,针对无效的那些部分进程继续到步骤210,而针对有效的那些部分进程继续到214。在实施例中,步骤208涉及无效逻辑器114通过访问驱动器116查询外部数据源150确定外来数据是否仍然有效。在其他实施例中,当所缓存的外来数据已无效时,外部数据源150可以主动地通知无效逻辑器114。在这样的情况下,每当外部数据源发送无效请求时,无效逻辑器114可以删除所缓存的数据,而当有效的外来数据仅仅存在于外部数据缓存120时步骤208可以被省略。
在步骤210中,数据库管理器110从外部数据源提取查询所要求的外来数据。在实施例中,访问驱动器116从外部表元数据和在数据库查询中引用的外部列,确定要从外部数据源中提取哪些外来数据。访问驱动器116从外部数据源检索此外来数据,并且将外来数据映射到外部表的列和/或列颗粒(granule)。
在步骤212中,数据库管理器110将外来数据以促进查询处理的格式存储到外部数据缓存120中。例如,外来数据可以以列格式被存储,所述列格式中列的每个行被连续地存储在存储器中。即使外来数据被外部数据源150以不同的格式存储,外来数据也可以以列格式被存储。在另一个实施例中,外来数据被加载到缓存,而不用将数据存储到数据库130的持久性存储设备中。
在步骤214中,数据库管理器110在查询执行期间从外部数据缓存120中检索外来数据,而在步骤216中,数据库管理器110使用外来数据执行查询以生成查询结果。数据库管理器110可以结合外来数据和内部数据以生成查询结果。例如,结构化数据134可以存储与针对其已经生成基因数据的各种个体相关的信息,而实际的基因数据存在于外部文件中。数据库管理器110可以基于接收的数据库查询提取基因数据中的某些部分,并且将此外来数据与针对此基因数据所属的对应个体的选择信息结合起来。一旦查询结果被生成,查询结果可以被存储在外部数据缓存120和/或数据库130中。因此,即使用于生成查询结果的外来数据可以仅仅存在于存储器缓存中,查询结果也可以被存储在数据库系统内的持久性存储中。
缓存列颗粒以及并行查询
在实施例中,外部数据缓存120缓存外部表的列颗粒。列颗粒可以包括列的任何范围的行。例如,列颗粒可以存储针对表分区中的列或针对行id(rowid)范围的颗粒的一组行。因此,列颗粒可以是整个列或查询所请求的整个列的一部分。列颗粒甚至可以包括外部表列的单一行。在实施例中,列颗粒可以存储针对表或表分区中的多个列的一组行。
在实施例中,通过并行化进程生成列颗粒。并行化进程将外部表列分割为用于并行执行的多个部分,以使得可以在多处理器的数据库系统中不同的处理器上执行查询执行。构成列颗粒的方式可以依赖于实施方式而变化。例如,每个列颗粒可以对应于在外部文件中不同的偏移量。
如上所述,数据库管理器110可以分布在多个数据库节点上。数据库节点中的每个节点可以包括实施数据库服务器的不同的计算设备,每个数据库服务器具有它自有的存储列中的不同部分(即,不同的列颗粒)的外部数据缓存。存在于不同的数据库节点中的列在这里被称为并行查询(“PQ”)列颗粒。每个缓存的PQ颗粒可以独立于相同列中的其他颗粒被管理。例如,从一个数据库服务器的外部数据缓存中对列颗粒的清除(eviction)不影响对存储在不同或相同的数据库服务器的外部数据缓存中的相同列的不同列颗粒的清除。
将外部数据缓存到结果缓存
在实施例中,外部数据缓存120可以是数据库系统100使用以用于存储用于在随后的执行中再使用的查询结果的结果缓存的一部分。例如,第一次查询被接收时,如果查询所使用的数据块没有已经存在于缓冲区缓存中,则数据块从数据库130中被读取,并且被加载到缓冲区缓存中。DBMS执行查询以生成存储在结果缓存中的查询结果。存储在结果缓存中的结果数据可以包括针对在执行查询时执行的特定操作的结果数据,诸如表扫描或表连接的结果,和/或可以包括执行查询的整个最终结果。与缓冲区缓存或数据块的缓存相比,在数据块从数据库中被读取时,结果缓存不缓存整个数据块,而是缓存针对各个查询的结果集数据。当相同的查询再次被DBMS接收时,可以从结果缓存检索查询结果,而不用或从缓冲区缓存或从数据库再次访问查询所要求的数据块。根据这里进一步描述的技术,外部数据缓存120可以是也缓存从外部数据源加载的外来数据的结果缓存的一部分。即使外来数据可能不是所执行的查询的最终结果而是得到最终结果所需要的数据,外来数据也可以被看作结果缓存中的结果数据。
在查询间分享外来数据
存在于外部数据缓存120中的外来数据可以在不同的数据库查询中被分享以最小化冗余缓存。图3是说明根据一个实施例的示例的数据库查询以及结果查询的结果状态的图表。虽然在此实施例中说明了结果缓存,但依赖于实施方式也可以使用其他存储器缓存。
查询302到310代表数据库管理器110所接收的不同的SQL查询。这些查询中的每个查询指向当处理对应的查询时造成的结果缓存的状态。
在初始状态中,结果缓存是空的。数据库管理器110接收引用外部表SALES_1995的各列的查询302。这些列包括PROD_ID列,CHANNEL_ID列,以及QUANTITY_SOLD列。在结果缓存为空时,这些列最初不存在于外部数据缓存120中。因此,数据库管理器110从外部源中提取外来数据,并且将外来数据映射到适合的列颗粒。针对PROD_ID、CHANNEL_ID和QUANTITY_SOLD列中的每列,PQ列颗粒然后被添加到结果缓存中。数据库管理器110使用存储在结果缓存中的外来数据评估查询302并且生成查询结果。
数据库管理器110随后接收引用PROD_ID和CHANNEL_ID列的查询304。数据库管理器110不需要再次提取这些列,因为它们已经存在于结果缓存中。数据库管理器110再使用针对PROD_ID和CHANNEL_ID列的缓存数据以评估查询304并且生成查询结果。因此,即使这些查询使用这些列生成不同的结果,这些列也被查询302和查询304分享。查询304不需要QUANTITY_SOLD列。但是,只要有足够的存储空间,此列继续存在于外部数据缓存120中。
查询306引用外部表SALES_1995中的PROD_ID列和PROMO_ID列。PQ PROD_ID列颗粒被再使用,但PROMO_ID列之前没有从外部数据源中被提取。因此,数据库管理器110提取外来数据、将外来数据加载到PO PROMO_ID列颗粒中,并且将此列颗粒存储到外部数据缓存120。PQ CHANNEL_ID和PQ QUANTITY_SOLD列颗粒还继续存在于外部数据缓存120中,但在处理查询306中不被使用。
SQL语句(STATEMENT)308改变针对外部表SALES_1995的外部源的位置。因此,当前存在于针对外部表SALES_1995的外部数据缓存120中的PQ列颗粒被无效并从缓存中被移除。数据库管理器110随后接收引用CHANNEL_ID列的查询310。由于此列已经被无效,因此针对此列的外来数据从外部数据源中被再次提取,并且此列被重新加载到外部数据缓存120。
生成查询执行计划以用于缓存外部数据
在实施例中,查询处理逻辑器通过将针对每次外部表扫描的缓存操作符添加到查询执行计划中,生成查询执行计划。在执行外部表扫描之前,缓存操作符检查外部数据缓存120中有效的外部表列。如果所需要的所有的外部表列都在缓存中,则外部表扫描操作被跳过。否则,执行外部表扫描操作以提取针对缺少的列的外来数据。然后缓存操作符使得这些缺少的列能够被缓存到外部数据缓存120中。
在实施例中,缓存操作符和表扫描操作符是行源,而下层表扫描行源按照rowid次序从外部数据源中取出行。这确保了分开加载的列具有相同的行排序。由于外部数据源可能没有将外来数据组织为行格式,因此可以从外部表元数据中确定rowid次序。
控制外来数据的结果缓存
在实施例中,对外来数据的缓存可以被诸如数据库管理员(DBA)之类的数据库用户启动或禁用。可以在每个外部表的基础上指定控制或可以针对外部表的特定视图指定控制。因此,可以仅仅针对特定的外来数据文件启动结果缓存,并且针对在相同的外部数据源中的其他数据文件禁用结果缓存。相似地,可以针对某些外部数据源启动结果缓存并且针对其他禁用结果缓存。
在实施例中,数据库用户通过(间接地)注释外部表来启动结果缓存。为了注释外部表,数据库用户可以在访问外部表的DDL语句中使用RESULT_CACHE数据库提示。示例语句包括CREATE和ALTER VIEW语句。数据库管理器110在执行上述的结果缓存进程之前,确定外部表是否被注释。当注释指示结果缓存被启动时,数据库管理器110缓存外来数据并且使得缓存的数据能够在不同的数据库查询之间分享。
下面的表1说明了数据库语句可以被用于针对访问外部表SALES_EXTERNAL的特定的表视图启动结果缓存:
表1:加注释的视图
如上所示,视图基于时间范围定义外部数据源的水平片段。数据库提示“RESULT_CACHE”注释用于结果缓存的视图。被注释的视图使用结果缓存初始地存储并且然后接着访问由视图定义的表、分区、或rowid范围颗粒的列。不属于被注释的外部表的数据,诸如由表1的加注释视图定义的时间范围以外的数据,不被缓存到结果缓存中,和/或不被在不同的数据库查询之间分享。
像任何其他结果缓存对象,被缓存的列(或列颗粒)可以被DBA管理。DBA可以使用会清楚地对每个缓存的列命名的视图来跟踪被缓存的列和列颗粒。另外,所有被缓存的列可以被存储在分开的命名空间中。在另一个实施例中,DBA可以直接地选择被缓存的列或其他结果缓存对象的内容。
将列颗粒加载到外部数据缓存
在实施例中,列按需地被缓存并且独立于表中的其他列。例如,PROD_ID、CHANNEL_ID列和QUANTITY_SOLD列按照查询302的要求,被加载到外部数据缓存120,并且独立于SALES_1995表中的其他列被加载。因此,诸如PROMO_ID列之类的其他列的外来数据响应于查询302不被加载到外部数据缓存120。
在另一个实施例中,多个数据库服务器针对相同的外部表并行地加载外来数据。当并行地加载表时,服务器进程在它所需要的列正在被另一个服务器进程加载时,等待此列,但如果它所需要的所有列都存在并且另一个服务器进程正在加载此外部表的一些其他列,则它不等待。
编码
在实施例中,具有与行的数量相比少量不同值的列以编码的形式被存储在外部数据缓存120中。对于这些编码的列,独特的位模式被保持在符号表中,后面是此表的索引的向量。编码这样的列减少对存储器的使用,并且使得更大数量的对象能够被缓存,这可以改善性能。编码还可以允许进行更有效的查询执行的机会。
使用的编码算法可以因实施方式而异。在实施例中,使用的编码算法提供原地(in-place)解码。这使得列缓冲区指针能够直接地指向所存储的值。在另一个实施例中,用于将编码的数据存储在外部数据缓存120的编码算法不同于产生数据的外来系统中使用的编码算法(如果有的话)。
缓存统计数据
在实施例中,外部数据缓存还缓存关于外部表列的统计数据。当外来数据从外部数据源中被提取并且被映射到适合的列颗粒时,可以由数据库管理器110确定统计数据。
例如,当外来数据被映射到外部表列的行时,数据库管理器110可以对外部表列的行的总数目进行计数。外部数据缓存120可以存储这些统计数据,所述统计数据可以通过COUNT(*)查询表达式被访问。当查询请求这些统计数据时,统计数据不需要通过重新分析相关的列颗粒而被重新计算。反而是,可以从外部数据缓存120中直接地检索结果。
在另一个实施例中,外部数据缓存120可以存储最小/最大统计数据。最小/最大统计数据识别在列颗粒内的最小值和最大值。这些统计数据可以使得针对某些查询可以避免扫描全部列颗粒。
谓词计算(PREDICATE EVALUATION)
在实施例中,外部表上的谓词被推入到外部数据缓存服务,其接着使用缓存的谓词用于可能情况下的高效访问。例如,可以通过将值转换为整数(通过在每列符号表中查找它们),然后针对给定的整数扫描固定宽度的列向量而处理“CUST IN('CORP A’,‘CORPB’,'CORP C')”。
使缓存中的外部数据无效
由于数据库管理器110不管理外来数据152,因此外来数据152在没有来自数据库管理器110的许可的情况下可以被改变。当外来数据152被改变时,在外部数据缓存120中的缓存数据可能不再有效。为了确保外部数据缓存120中的数据是最新的,无效逻辑器114确定针对特定的外部表列颗粒的外来数据何时改变,并且在改变被检测到时使来自外部数据缓存120的适合的列颗粒无效。检测改变的方式可以因实施方式而异。
在实施例中,当事务已修改外部表或使用此外部表的视图的定义时,列颗粒被无效。例如,无效逻辑器114响应于接收SQL语句308,使针对外部表SALES_1995的所有PQ列颗粒无效。
在另一个实施例中,无效逻辑器114对外部表执行状态检查。例如,每当查询处理逻辑器112从外部数据缓存120请求缓存的外部表列颗粒时,不论针对此列颗粒的外来数据是否已经改变,无效逻辑器114通过在访问驱动器116中提供的API检查外部数据源。如果外来数据已经改变,则列颗粒被无效并且被重新加载到外部数据缓存120中。
在另一个实施例中,外部数据源包括每当外来数据改变时通知无效逻辑器114的逻辑器。无效逻辑器接收有关哪些外来数据已经改变的信息,并且确定在外部数据缓存中的哪些缓存项应当被无效。
在另一个实施例中,一个期满时间与外部数据缓存对象相关联。所述期满时间针对缓存在外部数据缓存120中的每个列颗粒指定一个生存时间。当生存时间期满时,对应的外部表列被无效(即,被标记为无效或从缓存中被删除)。
为了确定在外部数据源中外来数据是否已经改变,外来数据来自其中的数据文件的时间戳可以被比较。例如,当列颗粒首次被缓存时,无效逻辑器114可以存储文件的时间戳。当随后的查询使用此列颗粒或外部数据源发送一个状态更新时,无效逻辑器检查底层文件的时间戳以查看时间戳是否已经改变。如果时间戳被改变,则列被无效并且被从外部数据源中重新提取。
根据实施例,如果在不改变预先存在的外来数据的情况下,外来数据被添加到外部数据源,则无效逻辑器114不无效任何列颗粒。相反,当随后的查询被接收时,附加的数据被提取并且被加载到外部表列。针对引用的列、已经被缓存的列颗粒继续存在于对应的外部数据缓存中。
缓存清除
由于外部数据缓存不具有无限制的存储器,因此缓存项被清除以为进入项释放空间。在实施例中,每个外部表列颗粒是相对于此外部表中的其他列独立地上移或下移最近最少使用(LRU)列表的缓存对象。最近最少使用的外部表列颗粒从缓存中被清除,并且被最近最多使用的列颗粒代替。依赖于实施方式,其他缓存清除算法也可以被使用。示例包括但不限于基于哪项最不经常被使用来清除缓存项。
当多个列颗粒被存储在分布式数据库系统的不同节点处时,某些列颗粒可以在相同列中的其他列颗粒之前变冷。例如,第一数据库服务器可以从第一数据库服务器的外部数据缓存中清除特定外部表的列颗粒,而另一个数据库服务将来自相同的外部表的列颗粒维持在第二数据库服务器的外部数据缓存中。
在实施例中,当有效的列颗粒被选择用于从外部数据缓存120被清除时,所有存储器块被释放。被清除的列颗粒不被存储在数据库130中,并且因此在下次它被查询要求时,它会从外部数据源中被再次提取。
在替代实施例中,结果被写入在数据库实例启动时间处指定的交换文件。当结果被清除时,针对列颗粒外部数据缓存从存储器释放除第一块或报头块之外的全部。报头块存储对应于交换文件中列颗粒被写入的位置的偏移的盘指针。针对此被交换出的列颗粒的随后的查询使得它能够通过使用此盘指针被加载到外部数据缓存120。因此,步骤210可以包括当外来数据被重新加载到外部数据缓存时,从交换文件而不是外部源中提取外来数据。为了减小输入/输出(IO)开销量,列颗粒可以在被写入交换文件之前被压缩。不仅仅针对列颗粒,还可以针对诸如SQL和PL/SQL结果之类的所有其他的缓存对象,使用交换文件。依赖于实施方式,交换文件可以被实施为交换表或可以以任何其他格式被写入。
硬件概述
根据一个实施例,通过一个或多个专用的计算设备实施这里描述的技术。专用的计算设备可以被硬布线以执行所述技术,或可以包括诸如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)之类的、被持久地编程以执行所述技术的数字电子设备,或者可以包括被编程以按照固件、存储器、其他存储或它们的组合中的程序指令执行所述技术的一个或多个通用的硬件处理器。这样的专用计算设备还可以将定制硬布线逻辑器、ASIC、或FPGA与定制编程结合以实现所述技术。专用计算设备可以是桌面计算机系统、便携式计算机系统、手持式设备、网络设备或包含硬接线和/或程序逻辑器以实施所述技术的任何其他设备。
例如,图4是说明可以在其上实施本发明的实施例的计算机系统400的框图。计算机系统400包括总线402或用于通信信息的其他通信机构,以及与总线402耦接、用于处理信息的硬件处理器404。硬件处理器404可以是例如通用的微处理器。
计算机系统400还包括主存储器406,诸如随机存取存储器(RAM)或其他动态存储设备,所述主存储器406耦接到总线402以用于存储要被处理器404执行的信息和指令。主存储器406还可以被用于在执行要被处理器404执行的指令的期间存储临时的变量或其他中间信息。当这样的指令被存储在处理器404可访问的非暂时性存储介质时,这样的指令将计算机系统400呈现为被定制以执行指令所指定的操作的专用机器。
计算机系统400还包括耦接到总线402、用于存储针对处理器404的静态信息和指令的只读存储器(ROM)408或其他静态存储设备。诸如磁盘、光盘或固态驱动器之类的存储设备410被提供,并且耦接到总线402以用于存储信息和指令。
计算机系统400可以经由总线402被耦接到显示器412,诸如阴极射线管(CRT),用于向计算机用户显示信息。包括字母数字和其他键的输入设备414耦接到总线402以用于将信息和命令选择通信给处理器404。另一种类型的用户输入设备是光标控制416,诸如鼠标、轨迹球、或光标方向键,以用于将方向信息和命令选择通信给处理器404并且用于控制显示器412上的光标移动。此输入设备通常具有在第一轴(例如,x)和第二轴(例如,y)的两个轴上的两个自由度,这使得设备能够指定平面上的位置。
计算机系统400可以使用与计算机系统结合使得计算机系统400或对其编程使得计算机系统400能够成为专用机器的定制的硬布线逻辑器、一个或多个ASIC或PGGA、固件和/或程序逻辑器来实施这里描述的技术。根据一个实施例,由计算机系统400响应于处理器404执行包含在主存储器406中的一个或多个指令中的一个或多个序列,执行这里的技术。这样的指令可以从诸如存储设备410之类的另一个存储介质被读取到主存储器406。对包含在主存储器406中的指令序列的执行使得处理器404能够执行这里描述的进程步骤。在替代实施例中,替代软件指令或与软件指令结合的硬接线的电路可以被使用。
这里使用的术语“存储介质”指代存储数据和/或使得机器能够以特定方式运行的指令的任何非暂时性介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如,光盘、磁盘、或固态驱动器,诸如存储设备410。易失性介质包括动态存储器,诸如主存储器406。存储介质的常见形式包括例如,软盘、柔性盘、硬盘、固态驱动器、磁带、或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有穿孔图案的任何物理介质、RAM、PROM以及EPROM、FLASH-EPROM、NVRAM、任何其他存储芯片或盒。
存储介质与传输介质不同,但可以与传输介质联合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括组成总线402的线。传输介质还可以采取声波或光波的形式,诸如那些在无线电波和红外线数据通信期间生成的那些波。
各种形式的介质可以涉及将一个或多个指令的一个或多个序列运载到处理器404以用于执行。例如,指令最初可以被运载在远程计算机的磁盘或固态驱动器上。远程计算机可以将指令加载到它的动态存储器中并且使用调制解调器通过电话线发送指令。计算机系统400本地的调制解调器可以接收电话线上的数据,并且使用红外发射器以将数据转换为红外信号。红外检测器可以接收红外信号中运载的数据,并且适合的电路可以将数据置于总线402上。总线402将数据运载到主存储器406,处理器404从主存储器406中检索和执行指令。由主存储器406接收的指令可以在处理器404的执行之前或之后可选地被存储在存储设备410上。
计算机系统400还可以包括耦接到总线402的通信接口418。通信接口418提供耦接到网络链路420的双向的数据通信,所述网络链路410连接到局域网络422。例如,通信接口418可以是综合业务数字网络(ISDN)卡、光缆调制解调器、卫星调制解调器、或提供与对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口418可以是局域网络(LAN)卡,以提供连接到兼容LAN的数据通信。无线链路还可以被实施。在任何这样的实施方式中,通信接口418发送和接收运载表示各种类型的信息的数字数据流的电气、电磁或光信号。
网络链路420通常通过一个或多个网络提供到其他数据设备的数据通信。例如,网络链路420可以提供经由局域网络422到主计算机424或到由网络服务提供商(ISP)426操作的数据装置的连接。ISP 426进而通过目前通常被称为“因特网”428的世界范围的分组数据通信网络提供数据通信。局域网422和因特网428均使用运载数字数据流的电气、电磁或光信号。将数字数据运载到计算机系统400以及从计算机系统400运载数字数据的、通过各种网络的信号以及网络链路420上和通过通信接口418的信号,是传输介质的示例形式。
计算机系统400可以通过网络、网络链路420以及通信接口418,发送消息以及接收数据,包括程序代码。在因特网示例中,服务器430可以通过因特网428、ISP426、局域网422和通信接口418发送针对应用程序的请求代码。
所接收的代码可以在被接收时被处理器404执行,和/或被存储在存储设备410、或其他非易失性存储中以用于之后的执行。
延伸或替代
在以上的说明书中,参考可能因实施方式而异的许多特定细节,本发明的实施例已经被描述。说明书和附图被相应地看作说明性的,而不是限制性的。本发明的范围的唯一且排他的指标,以及申请人意图作为本发明的范围的是,本申请以特定的形式呈现的、包括任何随后的修正的一组权利要求的字面以及等效范围。

Claims (30)

1.一种用于优化查询处理的方法,所述方法包括:
在数据库系统处存储用于外部表的元数据;
其中所述用于外部表的元数据定义所述外部表的一个或多个列,以及来自外部数据源的数据如何映射到所述外部表的所述一个或多个列;
在所述数据库系统处接收需要来自于所述外部数据源的外来数据的查询;
响应于接收所述查询,确定所述外来数据当前是否存在于所述数据库系统的缓存中;
响应于确定所述外来数据当前不存在于所述缓存中:
从所述外部数据源检索所述外来数据;其中所述外部数据源具有与所述数据库系统不同的结构和格式,并且所述外来数据被按照与所述外部数据源相关联的特定格式和结构存储;
基于用于所述外部表的所述元数据,将与所述外部数据源相关联的特定格式和结构的外来数据映射到所述外部表的列颗粒,其中所述列颗粒包括所述外部表的一个或多个列的一组行;以及
将所述列颗粒存储在所述缓存中。
2.如权利要求1所述的方法,其中所述查询是第一查询,所述方法还包括:
在所述数据库系统处接收需要来自于外部数据源的第二外来数据的第二查询;
响应于接收所述第二查询,确定所述第二外来数据当前是否存在于所述数据库系统的所述缓存中;
响应于确定所述第二外来数据当前不存在于所述缓存中:
从所述外部数据源检索所述外来数据;
将所述外来数据映射到表的列颗粒;以及
将所述列颗粒存储在所述缓存中。
3.如权利要求1所述的方法,其中所述列颗粒是所述查询所引用的整个列。
4.如权利要求1所述的方法,其中所述列颗粒是所述查询所引用的列的第一部分,
其中所述缓存是第一数据库服务器的第一结果缓存;
其中第二数据库服务器的第二结果缓存存储第二列颗粒;
其中所述第二列颗粒是所述查询所引用的列的第二部分。
5.如权利要求1所述的方法,其中所述查询是第一查询,所述方法还包括:
在所述数据库系统处接收需要来自于所述外部数据源的所述外来数据的第二查询;
其中所述第二查询包括与所述第一查询不同的表达式;
响应于接收所述第二查询,确定所述外来数据当前是否存在于所述数据库系统的所述缓存中;
响应于确定所述外来数据当前存在于所述缓存中:从所述缓存检索用当前存在于所述缓存中的所述外来数据填充的列颗粒。
6.如权利要求1所述的方法,其中所述查询是第一查询,所述方法还包括:
在所述数据库系统处接收需要来自于所述外部数据源的所述外来数据的第二查询;
响应于接收所述第二查询,确定所述外来数据当前是否存在于所述数据库系统的所述缓存中;
查询所述外部数据源以确定所述外来数据是否仍然有效;
响应于确定所述外来数据不再有效:
从所述外部数据源中检索更新的外来数据;
将所述更新的外来数据映射到所述外部表的所述列颗粒;以及
将具有所述更新的外来数据的所述列颗粒存储在所述缓存中。
7.如权利要求1所述的方法,还包括:
在所述数据库系统处从所述外部数据源接收所述外部数据源中的所述外来数据已经改变的通知;
响应于接收所述通知,使所述缓存中的所述列颗粒无效。
8.如权利要求1所述的方法,还包括:
确定与所述外来数据相关联的统计数据;
在所述缓存中存储与所述外来数据相关联的所述统计数据。
9.如权利要求1所述的方法,还包括:
从所述缓存清除所述外部表的第二列颗粒;
其中清除所述外部表的第二列颗粒包括:
从所述缓存删除所述第二列颗粒;
生成临时文件以存储所述第二列颗粒;
将指向所述临时文件的指针存储到所述缓存。
10.如权利要求1所述的方法,其中所述列颗粒是已经被注释以启动外来数据的缓存的外部表的视图的一部分;
其中不属于已经被注释的外部表的所述视图的第二列颗粒不被存储在所述缓存中。
11.一种用于优化查询处理的装置,所述装置包括:
用于在数据库系统处存储用于外部表的元数据的部件;
其中所述用于外部表的元数据定义所述外部表的一个或多个列,以及来自外部数据源的数据如何映射到所述外部表的所述一个或多个列;
用于在所述数据库系统处接收需要来自于所述外部数据源的外来数据的查询的部件;
用于响应于接收所述查询,确定所述外来数据当前是否存在于所述数据库系统的缓存中的部件;
用于响应于确定所述外来数据当前不存在于所述缓存中,执行以下操作的部件:
从所述外部数据源检索所述外来数据;其中所述外部数据源具有与所述数据库系统不同的结构和格式,并且所述外来数据被按照与所述外部数据源相关联的特定格式和结构存储;
基于用于所述外部表的所述元数据,将与所述外部数据源相关联的特定格式和结构的外来数据映射到所述外部表的列颗粒,其中所述列颗粒包括所述外部表的一个或多个列的一组行;以及
将所述列颗粒存储在所述缓存中。
12.如权利要求11所述的装置,其中所述查询是第一查询,所述装置还包括:
用于在所述数据库系统处接收需要来自于外部数据源的第二外来数据的第二查询的部件;
用于响应于接收所述第二查询,确定所述第二外来数据当前是否存在于所述数据库系统的所述缓存中的部件;
用于响应于确定所述第二外来数据当前不存在于所述缓存中,执行以下操作的部件:
从所述外部数据源检索所述外来数据;
将所述外来数据映射到表的列颗粒;以及
将所述列颗粒存储在所述缓存中。
13.如权利要求11所述的装置,其中所述列颗粒是所述查询所引用的整个列。
14.如权利要求11所述的装置,其中所述列颗粒是所述查询所引用的列的第一部分,
其中所述缓存是第一数据库服务器的第一结果缓存;
其中第二数据库服务器的第二结果缓存存储第二列颗粒;
其中所述第二列颗粒是所述查询所引用的列的第二部分。
15.如权利要求11所述的装置,其中所述查询是第一查询,所述装置还包括:
用于在所述数据库系统处接收需要来自于所述外部数据源的所述外来数据的第二查询的部件;
其中所述第二查询包括与所述第一查询不同的表达式;
用于响应于接收所述第二查询,确定所述外来数据当前是否存在于所述数据库系统的所述缓存中的部件;
用于响应于确定所述外来数据当前存在于所述缓存中:从所述缓存检索当前存在于所述缓存中的所述列颗粒的部件。
16.如权利要求11所述的装置,其中所述查询是第一查询,所述装置还包括:
用于在所述数据库系统处接收需要来自于所述外部数据源的所述外来数据的第二查询的部件;
用于响应于接收所述第二查询,确定所述外来数据当前是否存在于所述数据库系统的所述缓存中的部件;
用于查询所述外部数据源以确定所述外来数据是否仍然有效的部件;
用于响应于确定所述外来数据不再有效,执行以下操作的部件:
从所述外部数据源中检索更新的外来数据;
将所述更新的外来数据映射到所述外部表的所述列颗粒;以及
将用所述更新的外来数据填充的所述列颗粒存储在所述缓存中。
17.如权利要求11所述的装置,还包括:
用于在所述数据库系统处从所述外部数据源接收所述外部数据源中的所述外来数据已经改变的通知的部件;
用于响应于接收所述通知,使所述缓存中的所述列颗粒无效的部件。
18.如权利要求11所述的装置,还包括:
用于确定与所述外来数据相关联的统计数据的部件;
用于在所述缓存中存储与所述外来数据相关联的所述统计数据的部件。
19.如权利要求11所述的装置,还包括:
用于从所述缓存清除所述外部表的第二列颗粒的部件;
其中用于清除所述外部表的第二列颗粒的部件包括:
用于从所述缓存删除所述第二列颗粒的部件;
用于生成临时文件以存储所述第二列颗粒的部件;
用于将指向所述临时文件的指针存储到所述缓存的部件。
20.如权利要求11所述的装置,其中所述列颗粒是已经被注释以启动外来数据的缓存的外部表的视图的一部分;
其中不属于已经被注释的外部表的所述视图的第二列颗粒不被存储在所述缓存中。
21.一种数据库系统,包括:
缓存;和
数据库管理器,其中所述数据库管理器耦接到所述缓存,并且被配置为:
存储用于外部表的元数据;
其中所述用于外部表的元数据定义所述外部表的一个或多个列,以及来自外部数据源的数据如何映射到所述外部表的所述一个或多个列;
接收需要来自于所述外部数据源的外来数据的查询;
响应于接收所述查询,确定所述外来数据当前是否存在于所述数据库系统的缓存中;
响应于确定所述外来数据当前不存在于所述缓存中:
从所述外部数据源检索所述外来数据;其中所述外部数据源具有与所述数据库系统不同的结构和格式,并且所述外来数据被按照与所述外部数据源相关联的特定格式和结构存储;
基于用于所述外部表的所述元数据,将与所述外部数据源相关联的特定格式和结构的外来数据映射到所述外部表的列颗粒,其中所述列颗粒包括所述外部表的一个或多个列的一组行;以及
将所述列颗粒存储在所述缓存中。
22.如权利要求21所述的数据库系统,其中所述查询是第一查询,所述数据库管理器进一步被配置为:
接收需要来自于外部数据源的第二外来数据的第二查询;
响应于接收所述第二查询,确定所述第二外来数据当前是否存在于所述数据库系统的所述缓存中;
响应于确定所述第二外来数据当前不存在于所述缓存中:
从所述外部数据源检索所述外来数据;
将所述外来数据映射到表的列颗粒;以及
将所述列颗粒存储在所述缓存中。
23.如权利要求21所述的数据库系统,其中所述列颗粒是所述查询所引用的整个列。
24.如权利要求21所述的数据库系统,其中所述列颗粒是所述查询所引用的列的第一部分,其中所述缓存是第一数据库服务器的第一结果缓存;
其中第二数据库服务器的第二结果缓存存储第二列颗粒;
其中所述第二列颗粒是所述查询所引用的列的第二部分。
25.如权利要求21所述的数据库系统,其中所述查询是第一查询,所述数据库管理器进一步被配置为:
接收需要来自于所述外部数据源的所述外来数据的第二查询;
其中所述第二查询包括与所述第一查询不同的表达式;
响应于接收所述第二查询,确定所述外来数据当前是否存在于所述数据库系统的所述缓存中;
响应于确定所述外来数据当前存在于所述缓存中:从所述缓存检索当前存在于所述缓存中的所述列颗粒。
26.如权利要求21所述的数据库系统,其中所述查询是第一查询,所述数据库管理器进一步被配置为:
接收需要来自于所述外部数据源的所述外来数据的第二查询;
响应于接收所述第二查询,确定所述外来数据当前是否存在于所述数据库系统的所述缓存中;
查询所述外部数据源以确定所述外来数据是否仍然有效;
响应于确定所述外来数据不再有效:
从所述外部数据源中检索更新的外来数据;
将所述更新的外来数据映射到所述外部表的所述列颗粒;以及
将用所述更新的外来数据填充的所述列颗粒存储在所述缓存中。
27.如权利要求21所述的数据库系统,其中所述数据库管理器进一步被配置为:
从所述外部数据源接收所述外部数据源中的所述外来数据已经改变的通知;
响应于接收所述通知,使所述缓存中的所述列颗粒无效。
28.如权利要求21所述的数据库系统,其中所述数据库管理器进一步被配置为:
确定与所述外来数据相关联的统计数据;
在所述缓存中存储与所述外来数据相关联的所述统计数据。
29.如权利要求21所述的数据库系统,其中所述数据库管理器进一步被配置为:
从所述缓存清除所述外部表的第二列颗粒;
其中清除所述外部表的第二列颗粒包括:
从所述缓存删除所述第二列颗粒;
生成临时文件以存储所述第二列颗粒;
将到所述临时文件的指针存储到所述缓存。
30.如权利要求21所述的数据库系统,其中所述列颗粒是已经被注释以启动外来数据的缓存的外部表的视图的一部分;
其中不属于已经被注释的外部表的所述视图的第二列颗粒不被存储在所述缓存中。
CN201480030497.XA 2013-04-19 2014-04-18 为sql处理缓存外部数据源 Active CN105283872B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/866,866 2013-04-19
US13/866,866 US9251210B2 (en) 2013-04-19 2013-04-19 Caching external data sources for SQL processing
PCT/US2014/034631 WO2014172622A1 (en) 2013-04-19 2014-04-18 Caching external data sources for sql processing

Publications (2)

Publication Number Publication Date
CN105283872A CN105283872A (zh) 2016-01-27
CN105283872B true CN105283872B (zh) 2019-01-22

Family

ID=50771629

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480030497.XA Active CN105283872B (zh) 2013-04-19 2014-04-18 为sql处理缓存外部数据源

Country Status (4)

Country Link
US (2) US9251210B2 (zh)
EP (1) EP2987096B1 (zh)
CN (1) CN105283872B (zh)
WO (1) WO2014172622A1 (zh)

Families Citing this family (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5999574B2 (ja) * 2013-08-29 2016-09-28 国立大学法人 東京大学 データベース管理システム及び計算機システム
US10311154B2 (en) 2013-09-21 2019-06-04 Oracle International Corporation Combined row and columnar storage for in-memory databases for OLTP and analytics workloads
US10114874B2 (en) * 2014-02-24 2018-10-30 Red Hat, Inc. Source query caching as fault prevention for federated queries
US10019473B2 (en) 2014-06-09 2018-07-10 Oracle International Corporation Accessing an external table in parallel to execute a query
US10936616B2 (en) 2014-06-09 2021-03-02 Oracle International Corporation Storage-side scanning on non-natively formatted data
US20150363435A1 (en) * 2014-06-13 2015-12-17 Cisco Technology, Inc. Declarative Virtual Data Model Management
US10649964B2 (en) * 2015-02-26 2020-05-12 Red Hat, Inc. Incorporating external data into a database schema
US10353893B2 (en) 2015-05-14 2019-07-16 Deephaven Data Labs Llc Data partitioning and ordering
US10868665B1 (en) * 2015-05-18 2020-12-15 Amazon Technologies, Inc. Mitigating timing side-channel attacks by obscuring accesses to sensitive data
US10311229B1 (en) 2015-05-18 2019-06-04 Amazon Technologies, Inc. Mitigating timing side-channel attacks by obscuring alternatives in code
US10061852B1 (en) * 2015-05-19 2018-08-28 Amazon Technologies, Inc. Transparent proxy tunnel caching for database access
US9911001B2 (en) * 2015-06-12 2018-03-06 Pearson Education, Inc. Automatic SQL query modification for data restriction
US10303786B2 (en) 2015-08-05 2019-05-28 International Business Machines Corporation Retrieving and displaying data from a columnar database
US10467243B2 (en) 2015-08-26 2019-11-05 Oracle International Corporation Efficient in-memory DB query processing over any semi-structured data formats
US10726016B2 (en) 2015-10-15 2020-07-28 Oracle International Corporation In-memory column-level multi-versioned global dictionary for in-memory databases
US10678788B2 (en) 2015-10-22 2020-06-09 Oracle International Corporation Columnar caching in tiered storage
US10642831B2 (en) 2015-10-23 2020-05-05 Oracle International Corporation Static data caching for queries with a clause that requires multiple iterations to execute
US20170147652A1 (en) * 2015-11-19 2017-05-25 Institute For Information Industry Search servers, end devices, and search methods for use in a distributed network
US10817512B2 (en) 2016-04-01 2020-10-27 Arista Networks, Inc. Standing queries in memory
US10860568B2 (en) * 2016-04-01 2020-12-08 Arista Networks, Inc. External data source linking to queries in memory
US10783147B2 (en) 2016-04-01 2020-09-22 Arista Networks, Inc. Query result flow control in a network switch
US10284673B2 (en) 2016-04-01 2019-05-07 Arista Networks, Inc. Interface for a client of a network device
US10783144B2 (en) 2016-04-01 2020-09-22 Arista Networks, Inc. Use of null rows to indicate the end of a one-shot query in network switch
US10642844B2 (en) 2016-04-01 2020-05-05 Arista Networks, Inc. Non-materialized tables with standing queries
US10248692B2 (en) * 2016-06-15 2019-04-02 International Business Machines Corporation Cardinality estimation of a join predicate
US11347734B1 (en) * 2016-08-17 2022-05-31 Actian Corporation Processing database queries based on external tables
CN109844730B (zh) 2016-09-12 2023-06-13 甲骨文国际公司 用于评估数据库查询的方法、计算机系统、介质和装置
US10572475B2 (en) 2016-09-23 2020-02-25 Oracle International Corporation Leveraging columnar encoding for query operations
US11874691B1 (en) 2016-09-26 2024-01-16 Splunk Inc. Managing efficient query execution including mapping of buckets to search nodes
US11442935B2 (en) 2016-09-26 2022-09-13 Splunk Inc. Determining a record generation estimate of a processing task
US11580107B2 (en) 2016-09-26 2023-02-14 Splunk Inc. Bucket data distribution for exporting data to worker nodes
US11599541B2 (en) 2016-09-26 2023-03-07 Splunk Inc. Determining records generated by a processing task of a query
US11416528B2 (en) * 2016-09-26 2022-08-16 Splunk Inc. Query acceleration data store
US11321321B2 (en) 2016-09-26 2022-05-03 Splunk Inc. Record expansion and reduction based on a processing task in a data intake and query system
US11593377B2 (en) 2016-09-26 2023-02-28 Splunk Inc. Assigning processing tasks in a data intake and query system
US11586627B2 (en) 2016-09-26 2023-02-21 Splunk Inc. Partitioning and reducing records at ingest of a worker node
US20180089324A1 (en) 2016-09-26 2018-03-29 Splunk Inc. Dynamic resource allocation for real-time search
US11562023B1 (en) 2016-09-26 2023-01-24 Splunk Inc. Merging buckets in a data intake and query system
US10956415B2 (en) 2016-09-26 2021-03-23 Splunk Inc. Generating a subquery for an external data system using a configuration file
US11604795B2 (en) 2016-09-26 2023-03-14 Splunk Inc. Distributing partial results from an external data system between worker nodes
US11620336B1 (en) 2016-09-26 2023-04-04 Splunk Inc. Managing and storing buckets to a remote shared storage system based on a collective bucket size
US11860940B1 (en) 2016-09-26 2024-01-02 Splunk Inc. Identifying buckets for query execution using a catalog of buckets
US11567993B1 (en) 2016-09-26 2023-01-31 Splunk Inc. Copying buckets from a remote shared storage system to memory associated with a search node for query execution
US11550847B1 (en) 2016-09-26 2023-01-10 Splunk Inc. Hashing bucket identifiers to identify search nodes for efficient query execution
US11281706B2 (en) 2016-09-26 2022-03-22 Splunk Inc. Multi-layer partition allocation for query execution
US11461334B2 (en) 2016-09-26 2022-10-04 Splunk Inc. Data conditioning for dataset destination
US11615104B2 (en) 2016-09-26 2023-03-28 Splunk Inc. Subquery generation based on a data ingest estimate of an external data system
US10353965B2 (en) 2016-09-26 2019-07-16 Splunk Inc. Data fabric service system architecture
US11663227B2 (en) 2016-09-26 2023-05-30 Splunk Inc. Generating a subquery for a distinct data intake and query system
US11294941B1 (en) 2016-09-26 2022-04-05 Splunk Inc. Message-based data ingestion to a data intake and query system
KR102590347B1 (ko) * 2016-12-15 2023-10-18 삼성전자주식회사 서버, 전자 장치 및 데이터 관리 방법
US10558663B2 (en) * 2017-03-30 2020-02-11 Sap Se Automated application of query hints
US11803547B2 (en) 2017-05-19 2023-10-31 Oracle International Corporation System and method for query resource caching
US11921672B2 (en) 2017-07-31 2024-03-05 Splunk Inc. Query execution at a remote heterogeneous data store of a data fabric service
US10002154B1 (en) 2017-08-24 2018-06-19 Illumon Llc Computer data system data source having an update propagation graph with feedback cyclicality
US10896182B2 (en) 2017-09-25 2021-01-19 Splunk Inc. Multi-partitioning determination for combination operations
US11675761B2 (en) * 2017-09-30 2023-06-13 Oracle International Corporation Performing in-memory columnar analytic queries on externally resident data
CN110109953B (zh) * 2018-01-19 2023-12-19 阿里巴巴集团控股有限公司 一种数据查询方法、装置及设备
US10402215B2 (en) * 2018-01-23 2019-09-03 Sap Se Find group distribute execute model
US10719508B2 (en) 2018-04-19 2020-07-21 Risk Management Solutions, Inc. Data storage system for providing low latency search query responses
US11334543B1 (en) 2018-04-30 2022-05-17 Splunk Inc. Scalable bucket merging for a data intake and query system
US11170002B2 (en) 2018-10-19 2021-11-09 Oracle International Corporation Integrating Kafka data-in-motion with data-at-rest tables
US11914590B1 (en) * 2018-10-31 2024-02-27 Amazon Technologies, Inc. Database request router improving server cache utilization
US11194795B2 (en) * 2019-04-16 2021-12-07 Snowflake Inc. Automated maintenance of external tables in database systems
WO2020220216A1 (en) 2019-04-29 2020-11-05 Splunk Inc. Search time estimate in data intake and query system
US11715051B1 (en) 2019-04-30 2023-08-01 Splunk Inc. Service provider instance recommendations using machine-learned classifications and reconciliation
CN110297830B (zh) * 2019-06-26 2021-09-14 成都品果科技有限公司 一种Redshift外部表动态列的处理方法及装置
US11494380B2 (en) 2019-10-18 2022-11-08 Splunk Inc. Management of distributed computing framework components in a data fabric service system
CN110837517A (zh) * 2019-11-07 2020-02-25 中盈优创资讯科技有限公司 前后端解耦场景下的后端数据处理方法及装置
US11922222B1 (en) 2020-01-30 2024-03-05 Splunk Inc. Generating a modified component for a data intake and query system using an isolated execution environment image
US11520796B2 (en) * 2020-04-14 2022-12-06 Google Llc Managing real time data stream processing
US11461328B2 (en) 2020-09-21 2022-10-04 Oracle International Corporation Method for using a sematic model to transform SQL against a relational table to enable performance improvements
US11704313B1 (en) 2020-10-19 2023-07-18 Splunk Inc. Parallel branch operation using intermediary nodes
US11947535B2 (en) * 2021-05-04 2024-04-02 Bank Of America Corporation Multicomputer system with machine learning engine for query optimization and dynamic data reorganization
US20230141190A1 (en) * 2021-11-09 2023-05-11 Google Llc Late Materialization of Queried Data in Database Cache
WO2023219733A1 (en) * 2022-05-09 2023-11-16 Google Llc Maintaining transactional consistency in columnar engine

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102200961A (zh) * 2011-05-27 2011-09-28 清华大学 一种动态可重构处理器内子单元的扩展方法
CN102207852A (zh) * 2011-05-27 2011-10-05 清华大学 动态可重构处理器内子单元间进行数据交互的系统和方法
CN103036956A (zh) * 2012-11-30 2013-04-10 航天恒星科技有限公司 一种分布式组态化海量数据归档系统及实现方法

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870743A (en) 1996-06-24 1999-02-09 Oracle Corporation Method and apparatus for parallelizing operations that create a table
EP0913826A1 (en) 1997-10-31 1999-05-06 Hewlett-Packard Company Scratch protection in tape data storage system
US8903846B2 (en) 1999-10-29 2014-12-02 Oracle International Corporation Method and apparatus for integrating data from external sources into a database system
US7249131B2 (en) * 2001-09-06 2007-07-24 Initiate Systems, Inc. System and method for dynamically caching dynamic multi-sourced persisted EJBs
US6785771B2 (en) 2001-12-04 2004-08-31 International Business Machines Corporation Method, system, and program for destaging data in cache
US7293011B1 (en) 2002-11-27 2007-11-06 Oracle International Corporation TQ distribution that increases parallism by distributing one slave to a particular data block
US7685095B2 (en) 2003-12-16 2010-03-23 Oracle International Corporation Executing a parallel single cursor model
US7395258B2 (en) * 2004-07-30 2008-07-01 International Business Machines Corporation System and method for adaptive database caching
US8117153B2 (en) * 2006-03-28 2012-02-14 Oracle America, Inc. Systems and methods for a distributed cache
EP2056815B1 (en) * 2006-08-16 2013-03-20 Amderma Pharmaceuticals, Llc Use of 2,5-dihydroxybenzene derivatives for treating dermatitis
JP4352079B2 (ja) 2007-03-28 2009-10-28 株式会社東芝 分散データベースから情報を検索するシステム、装置、および方法
US10268741B2 (en) 2007-08-03 2019-04-23 International Business Machines Corporation Multi-nodal compression techniques for an in-memory database
US8185546B2 (en) * 2007-08-13 2012-05-22 Oracle International Corporation Enhanced control to users to populate a cache in a database system
US8898181B2 (en) 2010-06-22 2014-11-25 Microsoft Corporation Subscription for integrating external data from external system
US8543554B1 (en) * 2010-08-10 2013-09-24 ScalArc Inc. Method and system for transparent database query caching
US8670470B2 (en) * 2011-02-25 2014-03-11 Photop Aegis, Inc. Tunable Laser
US9122720B2 (en) 2011-06-14 2015-09-01 Microsoft Technology Licensing, Llc Enriching database query responses using data from external data sources
WO2013009503A2 (en) 2011-07-08 2013-01-17 Yale University Query execution systems and methods
US8719271B2 (en) 2011-10-06 2014-05-06 International Business Machines Corporation Accelerating data profiling process
US8762378B2 (en) 2011-12-23 2014-06-24 Sap Ag Independent table nodes in parallelized database environments
US9104839B2 (en) * 2013-01-14 2015-08-11 International Business Machines Corporation De-duplication aware secure delete
US9412092B2 (en) 2013-01-14 2016-08-09 Google Inc. Generating a filtered view of a content stream
US9104726B2 (en) * 2013-02-05 2015-08-11 Smartfocus Holdings Limited Columnar databases
US9720991B2 (en) 2014-03-04 2017-08-01 Microsoft Technology Licensing, Llc Seamless data migration across databases
US10019473B2 (en) 2014-06-09 2018-07-10 Oracle International Corporation Accessing an external table in parallel to execute a query
US10936616B2 (en) 2014-06-09 2021-03-02 Oracle International Corporation Storage-side scanning on non-natively formatted data

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102200961A (zh) * 2011-05-27 2011-09-28 清华大学 一种动态可重构处理器内子单元的扩展方法
CN102207852A (zh) * 2011-05-27 2011-10-05 清华大学 动态可重构处理器内子单元间进行数据交互的系统和方法
CN103036956A (zh) * 2012-11-30 2013-04-10 航天恒星科技有限公司 一种分布式组态化海量数据归档系统及实现方法

Also Published As

Publication number Publication date
EP2987096B1 (en) 2020-01-01
US20160147833A1 (en) 2016-05-26
EP2987096A1 (en) 2016-02-24
CN105283872A (zh) 2016-01-27
US20140317084A1 (en) 2014-10-23
US9916352B2 (en) 2018-03-13
WO2014172622A1 (en) 2014-10-23
US9251210B2 (en) 2016-02-02

Similar Documents

Publication Publication Date Title
CN105283872B (zh) 为sql处理缓存外部数据源
US11238039B2 (en) Materializing internal computations in-memory to improve query performance
CN108369587B (zh) 创建用于交换的表
US10204135B2 (en) Materializing expressions within in-memory virtual column units to accelerate analytic queries
US10678792B2 (en) Parallel execution of queries with a recursive clause
CN104685498B (zh) 聚合/分组操作的硬件实现方式:散列表方法
US8738572B2 (en) System and method for storing data streams in a distributed environment
CN102770849B (zh) 当应用基于用户的安全性时优化数据高速缓存
US20100257181A1 (en) Dynamic Hash Table for Efficient Data Access In A Relational Database System
US8386445B2 (en) Reorganizing database tables
US8073843B2 (en) Mechanism for deferred rewrite of multiple XPath evaluations over binary XML
CN104160398A (zh) 结构化大对象(lob)数据
JP2008234495A (ja) 合成関係演算を利用したマルチオペレーション・プロセッシングを用いたデータベースのクエリー処理システム
JPWO2010084754A1 (ja) データベースシステム、データベース管理方法、及びデータベース構造
US10366067B2 (en) Adaptive index leaf block compression
US10528538B2 (en) Leveraging SQL with user defined aggregation to efficiently merge inverted indexes stored as tables
US11327944B1 (en) Storing and retrieving data in data stores
Rabl et al. Materialized views in cassandra
US10311155B2 (en) Dynamic master record selection

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