CN110457385B - 多租户环境中的可实体化的数据库对象 - Google Patents
多租户环境中的可实体化的数据库对象 Download PDFInfo
- Publication number
- CN110457385B CN110457385B CN201910375335.4A CN201910375335A CN110457385B CN 110457385 B CN110457385 B CN 110457385B CN 201910375335 A CN201910375335 A CN 201910375335A CN 110457385 B CN110457385 B CN 110457385B
- Authority
- CN
- China
- Prior art keywords
- database
- tenant
- database table
- container
- materialized
- 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
- 238000000034 method Methods 0.000 claims abstract description 87
- 230000008569 process Effects 0.000 claims description 48
- 230000006870 function Effects 0.000 claims description 31
- 238000012545 processing Methods 0.000 claims description 17
- 230000015654 memory Effects 0.000 claims description 16
- 238000003860 storage Methods 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 3
- 238000009826 distribution Methods 0.000 abstract description 2
- 230000008859 change Effects 0.000 description 19
- 238000004891 communication Methods 0.000 description 15
- 238000013515 script Methods 0.000 description 13
- 230000008901 benefit Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- WVCHIGAIXREVNS-UHFFFAOYSA-N 2-hydroxy-1,4-naphthoquinone Chemical compound C1=CC=C2C(O)=CC(=O)C(=O)C2=C1 WVCHIGAIXREVNS-UHFFFAOYSA-N 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
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/26—Visual data mining; Browsing structured data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/06—Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Software Systems (AREA)
- Economics (AREA)
- Entrepreneurship & Innovation (AREA)
- Strategic Management (AREA)
- Human Resources & Organizations (AREA)
- Computational Linguistics (AREA)
- Educational Administration (AREA)
- Game Theory and Decision Science (AREA)
- Computing Systems (AREA)
- Development Economics (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
描述了用于促进共享容器和一个或多个租户容器之间的表和表数据的分布的技术和方案。表可以包括共享指示符,该指示符可以将表(或对于表的视图)指定为具有可实体化的类型。可实体化的类型可以最初部署在共享容器中,且租户容器可以经由视图对表进行读取访问。如果租户试图修改可实体化的表,表可以在租户容器中实体化。可实体化的表的元数据可以包括实体化指令。还提供了用于在共享类型之间进行转换以及用于更新共享容器或表图式的技术和解决方案。
Description
技术领域
本公开总体上涉及在多租户环境中管理表(tables)。具体的实施方式涉及管理如何在可用于多个租户(tenant)的共享容器和租户专用容器之间分布表。
背景技术
多租户数据库系统正变得越来越普遍,特别是在云部署中。多租户环境可以提供许多优势,包括降低用户(租户)的硬件和维护成本。在多租户环境中,一些资源(例如文档、集中式代码库以及至少某些运行时间和配置数据)通常由多个租户共享。但是,其它数据通常专用于个人租户。个人租户数据通常不与其它租户共享,并且多租户环境的管理员可能也无法访问。
其它情景下可能存在类似的情况。例如,大型组织可以具有共享资源(例如,软件栈)的多个系统(例如,开发、测试和生产系统)。系统的其它组件可能不同,并且因此可以类似于多租户架构中的租户。类似地,大型组织可以维护公共资源,但是对于特定区域、操作单元、设施等具有不同的资源,这可以类似于多租户架构中的租户。在管理多租户数据库系统方面存在改进空间。
发明内容
提供该发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。该发明内容不旨在确定所要求保护的主题的关键特征或必要特征,也不旨在用作限制所要求保护的主题的范围。
描述了用于促进共享容器和一个或多个租户容器之间的表和表数据的分布的技术和方案。表可以包括共享指示符,该指示符可以将表(或对于表的视图)指定为具有可实体化的类型。可实体化的类型可以初始部署在共享容器中,且租户容器可以具有经由视图对表的读取访问。如果租户试图修改可实体化的表,表可以在租户容器中实体化。可实体化的表的元数据可以包括实体化指令。还提供了用于在共享类型之间进行转换以及用于更新共享容器或表图式(table schemas)的技术和解决方案。
在一个方面,提供了一种方法,用于在接收到对租户容器的只读数据对象的写入请求时实体化租户容器中的表。从租户接收请求以将数据写入到共享容器的第一数据库表。租户容器可使用租户容器中定义的视图访问第一数据库表。接收消息——例如错误或异常消息,其指示第一数据库表处于只读状态(例如,租户容器具有对位于共享容器中的第一数据库表的只读访问)。
访问第一数据库表的元数据,其可以是用于视图的位于租户容器上的元数据。在特定示例中,元数据可以存储在租户容器的数据字典中。确定第一数据库表具有可实体化的共享类型(例如,通过检查数据字典中的视图或表的共享类型指示符)。调用函式来实体化租户容器中的第一数据库表。在一些情况下,实体化函式可以存储在数据字典或其它元数据库中的条目中,或者通过其(例如,通过路径或位置指示符)访问。通过执行实体化函式,在对应于第一表的租户容器中创建第二数据库表。数据从第一数据库表复制到第二数据库表。第一视图被第二数据库表替换。在特定示例中,可以从数据字典丢弃第一视图,并且可以给第二数据库表赋予视图之前所保持的名称。数据被写入第二数据库表。
在另一方面,另一个公开的方法提供了更新具有可实体化的共享类型的表的表图式。存储用于更新第一表的具有实体化状态的实例的第一DDL语句。存储用于更新第一表的具有非实体化状态的实例的第二DDL语句。对于第一租户容器,确定第一表的第一实例的实体化状态。基于确定执行第一DDL语句或第二DDL语句。
在另一方面,提供了另一种用于改变可实体化表的共享类型的方法。分析租户容器的第一数据库对象的元数据。基于元数据,确定第一数据库对象对应于可实体化的表,例如是位于多租户数据库环境中的共享容器中的实体化的表或对于非实体化的表的视图。确定可实体化的表将变化为的共享类型。一个或多个数据库对象被添加到租户容器或从租户容器移除,以适应共享类型的变化。更新与租户容器的数据库对象相关联的元数据,以指示可实体化的表的共享类型的变化。根据变化的共享类型处理租户的读取和写入请求。
本公开还包括计算系统和有形、非暂时性计算机可读储存介质,其配置为执行或包括用于执行上述方法的指令。如本文所述,可以根据需要将各种其它特征和优点结合到技术中。
附图说明
图1是示出具有共享容器和多个租户容器的多租户数据库环境的图。
图2A-2D是示意性地描绘用于在租户容器中实体化可实体化的表的过程的图。
图3是描绘如何调用存储的实体化脚本或函式以在租户容器中实体化可实体化的表的图。
图4A和4B示出了在租户容器中定义的引用共享容器中的可实体化表的视图如何可以由引用租户容器中的实体化的表的视图替换。
图5呈现了示例元数据表,其可以包括共享类型指示符,以及表是否已实体化或实体化过程是否已启动的指示符。
图6示出了如何更新租户容器以引用新的共享容器来代替原始共享容器。
图7A-7C是用于更新租户容器的数据库对象的操作的流程图,例如改变数据库对象的共享类型或更新对象图式。
图8是在租户容器中实体化可实体化的表的操作的流程图。
图9是更新具有可实体化的共享类型的表的图式的操作的流程图。
图10是将可实体化的表改变为另一个共享类型的操作的流程图。
图11是示例计算系统的图,在其中可以实现一些描述的实施例。
图12是可以与本文描述的技术结合使用的示例云计算环境。
具体实施方式
示例1-概述
多租户数据库系统正变得越来越普遍,特别是在云部署中。多租户环境可以提供许多优势,包括降低用户(租户)的硬件和维护成本。在多租户环境中,一些资源(例如文档、集中式代码库以及至少某些运行时间和配置数据)通常由多个租户共享。但是,其它数据通常专用于个人租户。个人租户数据通常不与其它租户共享,并且多租户环境的管理员可能也无法访问。
其它情景下可能存在类似的情况。例如,大型组织可以具有共享资源(例如,软件栈)的多个系统(例如,开发、测试和生产系统)。系统的其它组件可能不同,并且因此可以类似于多租户架构中的租户。类似地,大型组织可以维护公共资源,但是对于特定区域、操作单元、设施等具有不同的资源,这可以类似于多租户架构中的租户。
在许多情况下,可能难以知道什么用户将需要特定的数据库表。因此,每个租户容器中可能部署非常多的表,即使每个租户可能只使用其中的一小部分。同样,可能难以知道如何在共享系统容器和特定租户之间共享数据,因此,在租户可能写入表的情况下,则仅将数据部署到每个租户容器。这种不必要的数据复制会抵消使用多租户架构的益处。因此,存在改进的空间。
某些数据库系统(包括德国沃尔多夫(Walldorf)的SAP SE的HANA数据库系统)提供可以具有不同共享属性的表。例如,表(或对于表的视图)可以被指定为:“只读”,在这种情况下,租户可以从共享容器读取数据(如果以其它方式授权);“本地”,在这种情况下,表可用于在租户容器中读取和写入;或“写入”或“共享访问”,在这种情况下,表中的某些数据保存在共享容器中,并且是只读的,且其它数据可以由租户修改。租户修改可以存储在保存在租户容器中的表中。因此,每个租户都可以拥有自己的修改的数据。可以在租户容器中创建联合视图,以从本地数据和共享容器中的数据读取数据。
可以以各种方式指定“读取”和“读取/写入”数据。例如,可以为具有不同权限的记录或属性定义键范围,可以定义SQL语句(例如,具有WHERE子句),可以保存包括所有者信息的对象目录,或者可以使用一些其它算法或技术识别不同的许可的数据。
本公开引入了“可实体化的”的新共享指示符。可实体化的表可以初始部署到共享容器,例如多租户环境中的共享容器。至少对于适当的租户或所有租户,可以创建表的只读视图。如果租户尝试写入表或修改表元数据(例如,经由DDL语句,例如向表添加属性或更改其它表元数据),则可能会生成错误,例如SQL异常。可以例如通过数据库接口来捕获异常,并且可以触发实体化过程。在实体化过程中,可以创建共享表的租户-本地副本。可以修改租户容器以访问租户-本地表而不是视图。还提供了用于处理具有“可实体化”类型的表的更新和将“可实体化”的表变化为其它共享类型的技术。
所公开的技术可以提供许多优点。当租户明确指示写入或修改表数据时,只将表复制到租户容器可以大大减少存储器和次级存储器的使用。由于视图通常仅由目录条目表示,在租户不访问数据或以只读方式访问数据的情况下,数据的只读访问所占用的空间是存储基础表所需的一小部分。但是,可以根据需要使数据可用于租户的修改。
可以创建存储的函式或脚本并将其与可实体化的表相关联。当确定租户希望修改可实体化的表时,可以执行所存储的函式或脚本。因此,可以在无需人工干预的情况下完成为租户提供数据的过程。
对于其它类型的数据库对象,可以存储和激活类似的函式。例如,当共享容器上的由视图引用的表中的一个被实体化到租户容器时,可以更新引用共享容器中的视图的租户容器上的同义词(synonym)视图。也就是说,同义词视图可以被引用实体化的、租户-本地表的视图以及来自同义词视图的任何剩余表的各个视图替换。
对可实体化的表使用视图也可以大大简化更新过程。也就是说,租户-本地表可以基于诸如系统版本、系统历史以及可能由租户创建的表的扩展等因素而变化。由于这些原因,租户-本地表的更新通常是针对每个租户单独配置的,这通常必须手动完成。与之相比,对于可实体化的表,可以标准化并使用更新来部署用于丢弃/添加适当视图的语句。即使某些可实体化的表实际上已经实体化,或者还有其它租户-本地表,也可以大大减少为个人租户定制升级所需的工作量。
所公开的技术还有助于相互转换可实体化的表类型和其它共享类型。可以使用存储的函式或脚本来促进这些过程,所述函式或脚本可以基于指示的转换类型自动触发。示例2–示例多租户环境
图1示出了多租户数据库环境100。环境100包括共享容器108,其可以由第一租户112和第二租户114访问。尽管示出了第一租户112和第二114租户,但是环境100可以包括更多或更少数量的租户。
租户112、114与相应的租户容器116、118相关联。每个租户112、114还与应用层122、124和数据库接口126、128相关联。数据库接口126、128可以协调数据库操作,包括执行来自租户112、114的读取和写入请求。数据库接口126、128还可以执行任务,例如处理执行错误(例如SQL异常)、管理更新过程、执行访问限制或共享权限、复制数据、基于管理活动添加、删除或重新排列数据或数据库对象(例如,作为更新、实体化过程,共享类型更改等的一部分),或者创建、移除或改变数据库对象之间的关系。
共享容器108和租户容器116、118可以各自包括相应的数据字典132、134、136。数据字典132、134、136可以包括相应的容器中的数据库对象的条目,以及相关联的元数据。例如,数据字典132、134、136可以存储表定义,包括属性、属性数据类型、共享类型和其它元数据。类似地,数据字典132、134、136可以存储视图定义,包括基础表和操作(例如,SQL操作)以从这些表取回特定数据。
数据字典132、134、136或另一个组件可以包括存储的函式或脚本,其可以在被请求时或在发生触发事件时被执行。共享容器108的数据字典132可以包括元数据,其指示特定租户112、114是否被允许访问共享容器的特定表。附加地或替代地,可以从相应的租户容器116、118的数据字典134、136中省略特定租户112、114不应该访问的任何数据库对象。
共享容器108可包括只读表140中的一个或多个(多个,如图所示)。通常,租户112、114可以访问只读表140的至少一部分。例如,租户容器116、118可以包括映射到只读表140的一个或多个的视图142、144(其可以在数据字典134、136中定义)。
共享容器108可以包括共享访问表(“写入”或“共享”类型表)146中的一个或多个(多个,如图所示)。共享访问表146包括数据元(data element)150(通常,特定记录或特定属性),其可以由租户112、114(并且在一些情况下,还由共享容器108的所有者)修改。共享访问表146还包括不能由租户112、114修改的数据元152(例如,它们可以仅由共享容器108的所有者修改)。
如上所述,可以使用各种技术来指示哪些数据元由共享容器108拥有以及哪些数据元由租户112、114拥有。这些技术可以包括指定与共享容器108或租户112、114相关联的主键范围,定义用于识别租户或共享容器数据(例如,经由WHERE语句)的SQL语句,将指示符放置在数据字典132、134、136中的一个或多个中,或使用另外的技术或算法。在至少一些情况下,共享访问表146可以包括数据元150的值。这些值可以表示最初填充到租户-本地表162、164的默认值,或者由租户112、114读取(例如,经由视图)的默认值,直到租户修改值。
在租户112、114处,相应的租户容器116、118可以包括视图156、158,其被映射(只读)到对应的(多个)共享访问表146中的共享容器数据152。租户容器116、118包括对应于相应的表146的本地表162、164。租户112、114可以将数据写入本地表162、164。可以经由联合视图168、170从本地表162、164和共享容器108的共享访问表146读取数据。
租户容器116、118可以包括一个或多个本地表174、176。租户112、114通常具有对本地表174、176的完全读取/写入访问。在至少一些情况下,本地表174、176中的数据不能经由共享容器108访问,并且通常不被其它租户访问。
示例3–可实体化的表的示例实体化
图2A-2D示出了具有“可实体化”的共享类型的数据库表如何最初经由数据库视图以只读的方式访问,并且在作出写入请求时可以在租户处实例化。图2A示出了数据库环境200,其包括共享容器208和与租户容器214相关联的租户212。尽管示出了单个租户212,但是应当理解,环境200可以根据需要容纳多个租户。
共享容器208包括一个或多个(多个,如图所示)可实体化的表218。尽管未示出,但是共享容器208可以包括其它类型的表,例如共享访问表或只读表,如图1的多租户数据库环境100中所示。类似地,虽然未示出,但租户容器214可包括租户-本地表、共享访问表的租户部分、共享访问表的联合视图、以及映射到共享容器208的只读表的视图。共享容器208和租户容器214包括相应的数据字典222、224。
租户212包括数据库接口228和应用层230,其可以至少大致类似于图1的数据库接口126和应用层122。至少第一可实体化的表218首先以非实体化状态部署。也就是说,可实体化的表218在共享容器208上具有相对于租户212以只读状态保存的所有数据。租户212可以经由数据库视图234以只读方式访问可实体化的表218中的数据,数据库视图234可以在数据字典224中定义。
租户容器214可以包括其它特征,例如实体化脚本或函式的贮存238。当可实体化的表218要在租户容器214中实体化时,可以调用贮存238。在其它实施例中,实体化脚本函式可以以另一种方式存储,例如存储在数据字典224中或经由数据字典224访问。租户容器214还可以包括信号量(semaphore)242。信号量242可用于指示特定可实体化的表218是否处于实体化的过程中。在其它实施例中,信号量242可以以另一种方式存储,例如存储在可实体化的表218的数据字典224中的条目中。
尽管已经描述了信号量242,但是可以使用任何合适的资源使用指示符,例如旗标(flag)、锁定协议、互斥量(mutex)等。这些资源使用指示符可以用于防止实体化过程被多次启动以用于相同的实体化的表218(例如,当来自租户214的第二写入请求被拦截,但该表没有由于较早的写入请求而被实体化时)。
图2B示出了例如通过数据库接口228已被拦截的写入请求248。例如,写入请求248可能生成SQL错误或异常。数据库接口228可以捕获错误或异常。数据库接口228可以调用贮存238中的适当的实体化函式,而不是返回错误,例如到应用层230。在实体化过程完成后,可以重新执行写入请求248。作为实体化过程的一部分,可以设定资源使用指示符以指示可实体化的表218的实体化已经开始。例如,信号量242可以设定为1。
尽管该示例和其它示例公开了当接收到写入操作时的实体化,但是在其它情况下,可以在其它事件时发生实体化。例如,当租户试图修改表元数据(例如添加字段或更改其它表元数据)时,可以发生实体化。除非另有说明,否则在触发表实体化的上下文中的术语“写入”旨在包含修改表数据的DML语句和修改表元数据的DDL语句。
此外,在某些情况下,可以以除租户的修改尝试之外的方式触发实体化过程。如在进一步的示例中所讨论的,实体化可以作为更新或升级过程中共享类型的变化的一部分而发生。或者,可以基于性能度量来触发实体化,例如,如果确定经常访问可实体化的表(例如访问操作的数量、或者在一段时间内的访问操作超过阈值)或者如果来自共享容器的读取操作比阈值慢。也就是说,在某些情况下,来自共享容器的读取性能可能比来自租户-本地表慢,因此可以自动或手动实体化表,以提高性能。可以记录通过任何方式实体化的表(例如,DDL操作、DML操作、手动实体化、或由于性能触发而自动实体化),并且可以用于帮助确定未来的默认共享类型,例如为其它租户提高性能。
图2C示出了在启动实体化过程之后的数据库环境200。此时,租户容器214仍包括对于共享容器208处的可实体化的表218的视图234。来自租户212的读取请求可以用视图234处理,直到实体化过程完成。如果接收到附加的写入252,则数据库接口228可以确定实体化过程已经经由信号量242开始。可以存储附加的写入252,例如在队列或其它数据结构中,直到实体化过程完成(例如,当实体化过程完成时,队列可以被清空)。将写入252存储在数据结构中可以帮助确保当在租户容器214中实体化可实体化的表218时以正确的顺序应用写入。
租户容器214被示出为包括实体化的表256、可实体化的表218的租户-本地版本。此时,实体化的表256处于创建过程中,或者数据字典224尚未更新以引用实体化的表256而不是视图234。
图2D示出了在完成实体化过程时的数据库环境200。视图234已被丢弃,并且替代地,数据字典224引用实体化的表256。实体化的表256可用于被租户212读取和写入。可以重放在实体化过程期间接收的任何写入252以及触发实体化过程的原始写入248。信号量242可以设定为0。可以对数据库环境200进行其它改变。例如,诸如在数据字典222中的条目可以指示已经为该租户实体化了可实体化的表218。
示例4–示例实体化指令
图3示出了数据库环境300,其演示了当接收到写入当前未实体化的表的请求时,如何将实体化指令(例如在脚本或函式中)与可实体化的表相关联并执行。数据库环境300包括具有可实体化的表312(表XYZ)的共享容器308。可实体化的表312目前未在租户容器316中实体化。可以使用在租户容器316中定义的视图320以只读方式访问可实体化的表312。
贮存324可以存储用于可实体化的表312的实体化脚本328。实体化脚本328包括用于创建实体化的表334的指令。最初创建的实体化的表334具有临时名称,具有可实体化的表312的结构(例如,字段和可选的其它元数据)。可以为实体化的表334创建一个或多个标记体(indice)。数据可以从可实体化的表312复制到实体化的表334。一旦复制了数据,就可以丢弃视图320。在丢弃视图320的情况下,实体化的表334可以被重命名为具有与视图/可实体化的表312相同的名称。
如示例4中所讨论的,可以设定诸如信号量340的使用指示符以指示实体化脚本328在被执行。以此方式,多次写入尝试将不会触发多个实体化过程。一旦实体化过程完成,在实体化过程期间接收的写入请求可以排队并在实体化的表334上执行。
尽管该示例4描述了为特定数据库对象(例如,表和视图)预先计算和存储的实体化指令,但是在其它方面,可以以另一种方式确定和应用实体化指令。例如,可以调用实体化方法,其中实体化方法基于与数据库对象相关联的元数据(例如,图式)来确定实体化指令。类似地,可以基于适当的图式数据在运行中(on the fly)计算数据库对象的图式的变化或共享类型的变化。在至少一些情况下,在运行中计算的实体化(或其它)指令可以与上述存储的指令相同或至少执行等效操作。
示例5–对于表实体化的示例视图更新
关于实体化的表描述了实施例2-4中描述的方法。可以扩展所描述的过程以重新配置对于实体化的表和一个或多个附加数据库表或其它对象(例如,其它视图)的数据库视图。
图4A示出了包括共享容器408和租户容器412的数据库环境400。尽管示出了单个租户容器412,但是数据库环境400可以包括多个租户容器(用于多个租户中的每一个)。
共享容器408包括视图420。视图420针对共享容器408的三个表424、426、428定义。表424、426、428中的至少一个是可实体化的表。在所描述的示例中,表428是可实体化的表。其它表424、426可以是可实体化的表、共享表或只读表。
在图4A的数据库环境400中,租户容器412包括引用共享容器408的视图420的同义词视图432。如所配置的,同义词视图432通过视图420提供对表424、426、428的只读访问。可选地,租户容器412可以包括分别映射到表424、426、428的视图436、438、440。
图4B示出了在表428已经作为表444实体化到租户容器408之后(例如在尝试写入表428之后)的数据库环境400。实体化表428的过程可以类似于关于示例2-4所描述的过程。然而,实体化过程包括用引用实体化的表444的视图448替换视图432的操作。如果先前不存在视图436、438,则可以创建视图436、438。
当视图420引用表428时,视图420将不包括与租户容器412相关联的租户对实体化的表444所做的任何修改。因此,视图448引用实体化的表444。通过将视图436、438引用共享容器408的表424、426,将同义词视图432的其余组件并入到视图448中。
如果指示表424、426中的另一个被指示为被实体化,则可以以与实体化的表444类似的方式更新视图448以引用租户容器416中的实体化的表。
示例6–示例元数据
图5示出了用于保持与数据库对象(例如视图和表)相关的元数据的示例表500。示例表500可以是数据字典或另一元数据库或可以包含在数据字典或另一元数据库中。
表500包括用于存储数据库对象的名称或其它标识符的字段508。通常,字段508中的每个名称都是唯一的。因此,数据库表和数据库视图通常不具有相同的名称。如示例5中所述,当要替换视图或表时,可以实例化临时对象(例如,具有稍后将被改变的临时名称的对象)。在实例化之后,至少在某些情况下包括复制数据,可以丢弃原始命名的对象。在丢弃原始命名的对象之后,可以使用原始丢弃的对象的名称重命名临时对象。因此,可以从更高级别的组件(例如,应用程序)中抽象出数据库系统的变化(例如,共享容器、租户容器或两者的变化)。
表500包括用于对象类型的字段512。对象类型可以包括表或视图。如示例2-4中所解释的,在某些情况下,表可以具有对于特定租户在共享容器中是只读的部分,以及租户具有读取/写入访问权限的其它部分,且其存储在租户容器的表中。表500可以包括字段516,其包括与租户相关联的键范围(尽管可以以另一种方式指定所有权,例如指定共享容器所拥有的记录)。
表500可以包括字段520,字段520包括共享类型旗标或指示符。字段520中的指示符可以确定特定对象(例如,与名称508相关联)是可实体化的对象(“M”)、只读对象(“R”)、本地对象(“L”)或共享访问对象(“W”)。具有“可实体化的”共享类型的对象可以与字段524中的条目相关联,该条目指示表是否已在与表500相关联的特定租户容器中实体化。如果未设定旗标,例如在条目526中,则可以指示该表尚未实体化,并且仍然经由424租户容器中的视图以只读方式访问。如果设定了旗标,例如在条目528中,则它可以指示表已被实体化,并且对于租户容器上的读取和写入操作都被访问。
在一些情况下,表500包括用于视图的基于共享容器中的可实体化表的实体化指示符524和共享类型520。这可能是有用的,例如,当表500仅包括每个对象名称的单个条目时,因此该表可能不包括可实体化的表的条目,直到该表已实体化并替换具有相同名称的视图。
具有“可实体化的”共享类型的对象也可以与实体化过程字段532相关联。实体化过程字段532可以存储指示是否已经启动实体化过程的旗标。因此,字段532可以用作示例3中描述的过程的使用指示符/信号量。在响应于尝试写入非实体化的表而生成异常之后,在启动实体化之前,软件组件可以检查表500以确定是否已在实体化过程字段532中设定了相应的旗标。如果是,则不开始另一个实体化过程,并且一旦实体化过程完成,就可以保持并执行写入。如果未设定旗标,则可以启动实体化过程。
表500可以包括比所示更多或更少的字段。或者,字段可以以与所示不同的方式实现。例如,表500可以包括特定数据库对象的字段定义(例如,属性名称和相关联的数据类型)。在一些情况下,可以通过缺少共享类型指示符来指示默认表共享类型,例如可实体化的(例如,不包括字段的值或NULL值)。
可以组合表500的一个或多个字段,例如将实体化过程字段532与指示表是否已实体化的字段524组合。字段540可以包括指示表是否已实体化、尚未实体化或实体化待定的条目。因此,字段540可以用作资源使用指示符/信号量。
表500可以包括字段544,字段544包括当要将表实体化时所要执行的存储的函式/脚本(或者包括可实体化表的改变的视图)。在另一实施方式中,字段548可以包括实体化的存储的函式/脚本所在的位置(例如,URI)。当拦截写入非实体化的表的请求时(例如,通过错误处理例程),可以从字段548中指定的位置调用实体化函式并执行。
示例7–共享容器之间的示例切换
在某些情况下,可能需要改变多租户数据库系统的图式。例如,可能希望改变一个或多个表的结构。或者,可能希望改变一个或多个表的共享类型。如果变化涉及位于共享容器上的数据库对象,则可以使用图6中所示的数据库环境600来执行更新。
数据库环境600包括第一原始共享容器610、租户容器612和第二新的共享容器614。第一共享容器610可以包括一个或多个可实体化的表618(其可以在或可以不在租户容器612中实体化)、一个或多个只读表620,以及一个或多个共享访问表622。虽然未示出,但共享容器614可包括其它数据库对象,例如可由租户容器612访问的视图(例如,经由同义词视图)。
表618、620、622可以经由租户容器612的视图632访问,或者可以具有租户容器中的对应表(counterpart table)630。表630可以包括本地表、实体化的表、或对应于共享访问表622的租户拥有的数据的表。视图632可以是对于表618、620或622的视图,或者可以是对于原始共享容器610的视图的同义词视图。租户容器612还可以包括本地视图634。
在更新过程期间,更新可以反映在新的共享容器614中。新共享容器614可包括可实体化的表640、只读表642和共享访问表644。尽管未示出,但新的共享容器614可以包括其它数据库对象,例如视图。可以对租户容器612进行改变以引用新的共享容器614中的数据库对象,或者以其它方式适应数据库系统的结构的变化。例如,可以创建本地表650。本地表650可以表示可实体化的表618、只读表620、或在新的数据库图式中是本地表的共享访问表622。或者,本地表650可以表示新的共享容器614的共享访问表644中的租户拥有的数据,其可以是第一共享容器612中的只读表620或可实体化的表618。
还可以在租户容器612中创建视图652。视图652可以是用于可实体化的表618或者在新共享容器614中被转换为共享访问表644的只读表620的联合视图。在视图652是联合视图的情况下,视图可以访问新创建的本地表650中的一个以及添加的视图652的一个或多个附加视图——诸如读取共享访问表644的共享容器拥有的数据的视图。本地视图654也可以添加到租户容器612。
尽管未在图6中描绘,但是更新过程可以移除或修改表630、视图632或本地视图634中的一个或多个。例如,表630或视图632、634可以改变其图式。或者,可以基于表的共享类型的变化来移除表630或视图632,例如移除实体化的表、本地表、或者保持共享访问表622的租户拥有的数据的表。
一旦更新过程完成,就可以删除原始共享容器612。另外,可以丢弃租户容器612的不再需要的任何表630或视图632、634。使用新的共享容器614更新数据库环境600可以提供许多优点。例如,新的共享容器614可以具有与原始共享容器612不同的命名空间,其可以允许创建与原始共享容器中具有相同名称的数据对象,并且当更新过程完成时,其可以由租户容器612引用。因此,一旦新的共享容器被激活,就不需要修改对租户容器612的原始共享容器610的引用以访问新的共享容器614。另外,使用第二共享容器614可以减少与租户容器612相关联的租户的停机时间,因为租户可以继续使用原始共享容器610直到新容器准备好被激活。
在至少一些情况下,可以在更新期间将数据写入可实体化的表。如果确定将数据应用于租户,通常可以将其写入共享容器中的可实体化的表(并且由具有视图而不是实体化的表的租户访问)。如果表已针对特定租户实体化,则还可以将其写入适当的租户容器中的实体化的表。
对于租户专用数据,要写入的数据可以由也读取租户数据的应用程序写入。如果应用程序确定租户没有修改数据,例如所有表都是只读或非实体化的表(即对于可实体化表面的视图),则不需要采取任何行动。也就是说,更新可以在共享容器上进行,如果租户没有修改任何数据,则不需要采取租户的专用行动。如果租户修改了正被读取的数据,则可以使用任何租户修改的数据处理写入。在可实体化的表的情况下,其中在更新过程期间从租户接收到写入,在处理写入之前,该表可以在客户端容器中实体化。
示例8–更新包括共享类型的表元数据或图式的示例操作
图7A-7C示出了可以在将表从第一格式转换为第二格式时执行的操作700的流程图。可以使用图1-4和6中描绘的数据库环境来执行操作700,并且可以采用图5的元数据表500。
首先参考图7A,示出了用于改变数据库对象(例如表或视图)的共享类型的操作700。在704处,接收到更新请求。在某些情况下,请求可以间歇性地发生,例如响应于数据库管理员的请求(例如,具有在多租户环境中具有修改共享容器的访问权限的数据库管理员)。在其它情况下,704处的请求可以是执行操作700的请求,其作为升级或转换过程的一部分。例如,对数据库系统的升级或更新可能导致数据库表的共享类型的变化,数据库对象的其它变化(例如,其它图式变化),或者从共享容器、租户容器、或两者中添加或删除数据库对象。作为升级或更新过程的一部分,可以针对共享类型已经变化的表分析一个或多个租户容器,并且可以对租户容器进行适当的改变,如进一步描述的。
在708处,分析租户容器的第一表。在710处,确定第一表是否具有“可实体化的”共享类型。如果不是,则可以在712处使用用于在其它表类型之间进行转换的技术来处理表(例如,本地到只读,本地到可实体化,本地到共享访问,只读到共享访问,只读到本地,只读到可实体化,共享访问到只读,共享访问到本地,或共享访问到可实体化),或者如果表没有改变共享类型,则可以跳过表。在执行任何其它操作之后,可以在714处确定是否要为租户分析任何附加的表。如果是,则过程可以返回708以分析下一个表。如果不是,则可以在716处确定是否要分析更多的租户。如果是,则操作700可以在718处移动到下一个租户,然后返回708以获得下一个租户的第一表。如果没有更多的租户要处理,则操作700可以在720处结束。
如果在710处确定表的共享类型是“可实体化的”,则在722处确定表是否被转换为不同类型。如果表被转换为只读表,则在724处,操作700参考图7B进行。如果表被转换为共享访问表,则在726处,操作700参考图7C进行。
如果在722处确定表被转换为本地表,则在728处确定表是否已实体化。如果表尚未实体化,则可以在730处实体化。例如,如示例2-7中所述,可以进行实体化。在表实体化之后,在732处,其共享类型(例如,如元数据中所指示的,诸如在数据字典中)可以被改变为“本地”。可以在734处从表的元数据中删除“实体化的”属性。然后,操作700可以进行到714以确定是否要处理更多的表。
如果在728处确定表已经实体化,则可选地,在736处,可以将实体化的表的结构更新为新的图式。但是,在某些情况下,表可以从可实体化的类型变化为本地类型(或者,更一般地,任何共享类型到任何其它共享类型),而不会更改图式(共享类型除外),在这种情况下,操作700可以进行到732。在更新图式之后(如果有的话),操作700可以进行到738,其中新内容被部署到新图式中的实体化的表。在部署内容之后,或者如果不部署新内容,则操作可以进行到732。
如果在722处确定表没有从“可实体化”转换为不同的共享类型,则在740处确定表的图式是否正被改变。如果不是,则表不被改变,并且操作700可以进行到714。如果图式正被改变,则在742处确定表是否已在当前租户容器中实体化。
如果在742确定表已经实体化,则租户数据库上的表的结构在744处被改变。可选地,在746处,将任何新内容部署到租户容器上的表的副本。在至少一些情况下,部署到租户容器的内容涉及表的先前版本中不存在的记录或字段,以便不覆写租户所做的数据改变。在其它情况下,表可以包括旗标或其它状态指示符,其指示租户是否修改了特定记录或字段,并且可以将数据部署到表中以用于新字段或新记录,以及没有被租户修改的现有记录或字段。但是,在某些情况下,即使是租户修改也可以作为更新过程的一部分进行覆写。在一些方面,可以省略在738处部署内容。在746处部署任何内容之后,操作700可以进行到714。
如果在742确定可实体化的表未在租户容器中实体化,则可以在748处丢弃对于当前共享容器的当前可实体化的表的视图。在750处在新共享容器中创建具有新结构并使用新版本的可实体化表的新视图。然后,操作700可以进行到714。
参考图7B,示出了操作700的一部分,用于将“可实体化的”共享类型的表转换为“只读”共享类型。操作700从图7A的724开始于752。在754处确定表是否已实体化。如果表已实体化,则表可以在756处丢弃,例如从租户容器的数据字典中丢弃。在758处创建对于共享容器的对应的表的视图。视图的共享类型在760处被设定为“只读”。在762处,操作746然后可以返回到图7A的714。
在某些情况下,在756处丢弃表之前,可以确定该表是否已被租户修改。如果租户已经修改了数据,则可以在756处丢弃表之前将修改的数据移动到另一个表。例如,可以通过为关联的修改或添加的数据设置“脏(dirty)”位或旗标来指示修改的记录或其它表修改。
校验和(checksum)可用于确定表是否已被修改(例如,表的租户版本的校验和可与共享容器版本的表的校验和进行比较)。在特定示例中,可以为两个表确定行计数。如果行计数不匹配,则表已被修改。如果行计数匹配,并且为零,则可以确定表是相同的。如果行计数匹配但大于零,则可以计算和比较关于表的内容的校验和。如果校验和相等,则表相同,否则不同。
如果在754处确定表未实体化,则可以在764处丢弃当前共享容器中的对于可实体化表的视图。然后,操作700可以进行到758。
图7C示出了操作700的一部分,其用于将“可实体化”共享类型的表转换为共享访问(或“写入”)类型。操作从图7A的726开始于766。在768处确定表是否已实体化。如果表已实体化,则在770处创建新的租户表以保持共享表的租户-本地数据。在772处,将与在770处创建的共享访问表的租户拥有的字段相对应的数据从实体化的表复制到共享访问表。如上所述,可以以各种方式指示租户拥有的数据,包括经由键范围指定这样的数据或经由查询语言语句(例如,SELECT语句)定义数据。
一旦复制了任何内容,就可以在774处丢弃实体化的表。可以在776处在租户容器中创建对于共享容器拥有的数据的视图。在778处创建联合视图,其访问在770处创建的租户表和在776处创建的视图。然后,操作700可以在770处继续到图7A的714。
如果在768处确定表未实体化,则在782处创建新的租户表,类似于770处的表创建。来自共享容器的数据可以经由租户容器的现有数据库视图访问,并使用租户拥有的数据的定义在784处复制到新创建的租户表。在786处,可以删除对于共享容器的表的视图。然后,操作700可以进行到776。
虽然在图7A-7C中未示出,但在某些情况下,数据库对象可以从另一个共享类型改变为可实体化的类型。在租户容器中的本地表的情况下,如果是改变到具有实体化的表的可实体化的类型,则可以在与对象相关联的元数据中改变共享类型,并且可以添加实体化的属性。对于被改变为非实体化状态的本地表,可以在共享容器中创建可实体化的表,其可以具有来自本地表的数据或其它数据(例如,共享容器的默认数据)。在要实体化数据库对象的情况下,可以提供实体化函式。可以从租户容器中删除本地表,并且可以在共享容器中添加引用可实体化的表的视图。
在只读数据库对象被改为可实体化的共享类型的情况下,如果表未在租户容器中实体化,则与对于共享容器中的对象的视图相关联的共享类型可以使其共享类型从只读变为可实体化的,并且可以设定指示表未实体化的属性。在要实体化数据库对象的情况下,可以提供实体化函式。在表从只读变化为可实体化的情况下,如果在租户容器中实体化了表,则可以丢弃只读表的视图,表可以在租户容器中实体化,类型可以变化为可实体化,并且可以设定指示表已实体化的属性。
在共享访问表转换为可实体化的表的情况下,如果该表未实体化,则可以丢弃租户拥有的数据或将其复制到共享容器上的可实体化的表。可以对于实体化的表创建视图,将共享类型变化为可实体化的,以及设定指示表未实体化的属性。可以丢弃先前的联合视图,以及可选地丢弃对于共享访问表的视图(如果创建了对于可实体化表的新视图)。
如果共享访问表被转换为可实体化的表,其中表被实体化,则可以将共享容器数据和租户拥有的数据复制到租户容器中的实体化的表。可以丢弃对于实体化的表的先前视图和联合视图。新的租户表可以指示为可实体化的,并且属性设定为指示表已实体化。
示例9–示例实体化操作
图8示出了方法800,用于在接收到对租户容器的只读数据对象的写入请求时实体化租户容器中的表。在808处,从租户接收请求以将数据写入到共享容器的第一数据库表。租户容器可使用租户容器中定义的视图访问第一数据库表。在812处接收消息,例如错误或异常消息,其指示第一数据库表处于只读状态(例如,租户容器具有对位于共享容器中的第一数据库表的只读访问)。
在816处,访问第一数据库表的元数据,其可以是用于视图的位于租户容器上的元数据。在特定示例中,元数据可以存储在租户容器的数据字典中。在820处,确定第一数据库表具有可实体化的共享类型(例如,通过检查数据字典中的视图或表的共享类型指示符)。在824处,调用函式来实体化租户容器中的第一数据库表。在一些情况下,实体化函式可以存储在数据字典或其它元数据库中的条目中,或者通过其(例如,通过路径或位置指示符)访问。在828处,通过执行实体化函式,在对应于第一表的租户容器中创建第二数据库表。在832处,数据从第一数据库表复制到第二数据库表。在836处,第一视图被第二数据库表替换。在特定示例中,可以从数据字典丢弃第一视图,并且可以给第二数据库表赋予视图之前所保持的名称。在840处,数据被写入第二数据库表。
示例10–示例图式更新操作
图9示出了用于更新具有可实体化的共享类型的表的表图式的操作900的流程图。在908处,存储用于更新第一表的具有实体化状态的实例的第一DDL语句。在912处,存储用于更新第一表的具有非实体化状态的实例的第二DDL语句。在916处,对于第一租户容器,确定第一表的第一实例的实体化状态。在920处,基于确定执行第一DDL语句或第二DDL语句。在其它方面,不预先计算和存储用于更新表实例的DDL语句。而是,可以基于描述图式变化的元数据来动态地计算和应用DDL语句。
示例11-改变共享类型的示例操作
图10示出了用于改变可实体化表的共享类型的操作1000的流程图。在1008处,分析租户容器的第一数据库对象的元数据。在1012处,基于元数据,确定第一数据库对象对应于可实体化的表,例如是位于多租户数据库环境中的共享容器中的实体化的表或对于非实体化的表的视图。在1016处,确定可实体化的表将变化为的共享类型。在1020处,一个或多个数据库对象被添加到租户容器或从租户容器移除,以适应共享类型的变化。在1024处,更新与租户容器的数据库对象相关联的元数据,以指示可实体化的表的共享类型的变化。在1028处,根据变化的共享类型处理租户的读取和写入请求。
示例12–计算系统
图11描绘了合适的计算系统1100的一般化示例,在其中可以实现所描述的创新。计算系统1100不旨在对本公开的使用或功能的范围提出任何限制,因为创新可以在不同的通用或专用计算系统中实现。
参考图11,计算系统1100包括一个或多个处理单元1110、1115和存储器1120、1125。在图11中,基本配置1130被包含在虚线内。处理单元1110、1115执行计算机可执行指令,例如用于实现示例1-11中描述的特征。处理单元可以是通用中央处理单元(CPU)、专用集成电路(ASIC)中的处理器、或任何其它类型的处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力。例如,图11示出了中央处理单元1110以及图形处理单元或协同处理单元1115。有形存储器1120、1125可以是易失性存储器(例如,寄存器、高速缓存、RAM),非易失性存储器件(例如,ROM、EEPROM、闪存存储器等),或者两者的某些组合,其可由(多个)处理单元1110、1115访问。存储器1120、1125存储软件1180,其实现本文描述的一个或多个创新,其为适合由(多个)处理单元1110、1115执行的计算机可执行指令的形式。
计算系统1100可以具有附加特征。例如,计算系统1100包括储存器1140、一个或多个输入装置1150、一个或多个输出装置1160、以及一个或多个通信连接1170,包括用于与用户交互的输入装置、输出装置和通信连接。诸如总线、控制器或网络的互连机构(未示出)将计算系统1100的组件互连。通常,操作系统软件(未示出)为在计算系统1100中执行的其它软件提供操作环境,并协调计算系统1100的组件的活动。
有形储存器1140可以是可拆卸的或不可拆卸的,并且包括磁盘、磁带或盒式磁带、CD-ROM、DVD、或可以用于以非暂时方式存储信息并且可以在计算系统1100内被访问的任何其它介质。存储器1140存储用于实现本文描述的一个或多个创新的软件1180的指令。
(多个)输入装置1150可以是触摸输入装置(例如键盘、鼠标、笔或轨迹球)、语音输入装置、扫描装置或向计算系统1100提供输入的其它装置。(多个)输出装置1160可以是显示器、打印机、扬声器、CD刻录机或提供来自计算系统1100的输出的其它装置。
(多个)通信连接1170使得能够通过通信介质与另一计算实体进行通信。通信介质在调制数据信号中传送诸如计算机可执行指令、音频或者视频输入或输出的信息或其它数据。调制数据信号是一种信号,其设定或改变一个或多个特性,以便对信号中的信息进行编码。作为示例而非限制,通信介质可以使用电、光、RF或其它载体。
可以在计算机可执行指令的一般上下文中描述这些创新,例如包含在程序模块中的指令,其在目标真实或虚拟处理器上的计算系统中执行。通常,程序模块或组件包括例程、程序、函数库、对象、类、组件、数据结构等,其执行特定任务或实现特定抽象数据类型。在各种实施例中,可以根据需要在程序模块之间组合或分割程序模块的功能。用于程序模块的计算机可执行指令可以在本地或分布式计算系统内执行。
术语“系统”和“装置”在本文中可互换使用。除非上下文另有明确说明,否则这两个术语均不对任何类型的计算系统或计算装置施加任何限制。通常,计算系统或计算装置可以是本地的或分布式的,并且可以包括专用硬件和/或通用硬件与实现本文描述的功能的软件的任何组合。
在本文描述的各种示例中,模块(例如,组件或引擎)可以被“编码”以执行某些操作或提供某些功能,以指示可以执行用于模块的计算机可执行指令以进行这样的操作,使得这样的操作被执行,或以其它方式提供这样的功能。尽管关于软件组件、模块或引擎描述的功能可以作为分立软件单元(例如,程序、功能、类方法)来执行,但是不需要将其实现为分立单元。也就是说,功能可以合并到更大或更通用的程序中,例如更大或通用程序中的一行或多行代码。
为了便于说明,详细描述使用诸如“确定”和“使用”的术语来描述计算系统中的计算机操作。这些术语是由计算机执行的操作的高级抽象,不应与由人类执行的操作混淆。对应于这些术语的实际计算机操作根据实施方式而变化。
示例13–云计算环境
图12描绘了示例云计算环境1200,在其中可以实现所描述的技术。云计算环境1200包括云计算服务1210。云计算服务1210可以包括各种类型的云计算资源,诸如计算机服务器、数据存储库、网络资源等。云计算服务1210可以定位在中心(例如,由企业或组织的数据中心提供)或为分布式的(例如,由位于不同位置的各种计算资源提供,例如不同的数据中心和/或位于不同的城市或国家中)。
云计算服务1210由各种类型的计算装置(例如,客户端计算装置)使用,诸如计算装置1220、1222和1224。例如,计算置(例如,1220、1222和1224)可以是计算机(例如,台式计算机或膝上型计算机)、移动装置(例如,平板计算机或智能电话)、或其它类型的计算装置。例如,计算装置(例如,1220、1222和1224)可以利用云计算服务1210来执行计算操作(例如,数据处理、数据存储等)。
示例14–实施方式
尽管为了方便呈现,以特定的顺序次序描述了一些所公开的方法的操作,但应该理解,这种描述方式包括重新排列,除非本文所述的特定语言需要特定的排序。例如,在某些情况下,顺序描述的操作可以重新排列或同时执行。此外,为了简单起见,附图可能未示出所公开的方法可以与其它方法结合使用的各种方式。
任何公开的方法都可以实现为计算机可执行指令或计算机程序产品,其存储在一个或多个计算机可读储存介质上并在计算装置(例如,任何可用的计算装置,包括智能电话或包括计算硬件的其它移动装置)上执行。有形计算机可读储存介质是可以在计算环境内访问的任何可用有形介质(例如,一个或多个光学介质盘,诸如DVD或CD,易失性存储器组件(诸如DRAM或SRAM),或非易失性存储器组件(诸如闪存存储器或硬盘驱动器))。作为示例并参考图11,计算机可读储存介质包括存储器1120和1125以及储存器1140。术语“计算机可读储存介质”不包括信号和载波。另外,术语计算机可读储存介质不包括通信连接(例如,1170)。
用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间所创建和使用的任何数据可以存储在一个或多个计算机可读储存介质上。计算机可执行指令可以是例如专用软件应用程序或者经由网络浏览器或其它软件应用程序(诸如远程计算应用程序)访问或下载的软件应用程序的一部分。这样的软件可以例如在单个本地计算机(例如,任何合适的商用计算机)上执行或在网络环境中(例如,经由互联网、广域网、局域网、客户端服务器网络(例如云计算网络或其它此类网络))使用一个或多个网络计算机执行。
为清楚起见,仅描述了基于软件的实施方程的某些选定方面。省略了本领域公知的其它细节。例如,应该理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以通过用C++、Java、Perl、JavaScript、Python、Ruby、ABAP、SQL、Adobe Flash或任何其它合适的编程语言编写的软件来实现,或者在一些示例中,可以通过诸如html或XML的标记语言、或合适的编程语言和标记语言的组合来实现。同样地,所公开的技术不限于任何特定计算机或硬件类型。合适的计算机和硬件的某些细节是众所周知的,并且不需要在本公开中详细阐述。
此外,可以通过合适的通信手段上载、下载或远程访问任何基于软件的实施例(包括例如,用于使计算机执行任何所公开的方法的计算机可执行指令)。这种合适的通信手段包括,例如,互联网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信,或其它此类通信手段。
所公开的方法、设备和系统不应被解释为以任何方式进行限制。相反,本公开内容针对各种公开的实施例的所有新颖和非显而易见的特征和方面,单独地和彼此的各种组合和子组合。所公开的方法、设备和系统不限于任何特定方面或特征或其组合,所公开的实施例也不要求存在任何一个或多个特定优点或解决的问题。
来自任何示例的技术可以与任何一个或多个其它示例中描述的技术组合。鉴于可以应用所公开技术的原理的许多可能的实施例,应该认识到,所示实施例是所公开技术的示例,并且不应该被视为对所公开技术的范围的限制。相反,所公开的技术的范围包括所附权利要求的范围和精神所涵盖的内容。
Claims (15)
1.一种实现表实体化服务的计算系统,所述计算系统包括:
一个或多个存储器;
耦接到所述一个或多个存储器的一个或多个处理单元;以及
存储指令的一个或多个非暂时性计算机可读储存介质,当所述指令被执行时使得所述计算系统执行下列操作:
从租户接收第一请求以将数据写入到共享数据库容器的第一数据库表,该第一数据库表被租户数据库容器中的第一数据库视图引用,使得租户能够通过查询第一数据库视图而从第一数据库表读取数据,该第一数据库表具有指定一个或多个列的第一图式;
接收指示所述第一数据库表处于只读状态的消息;
访问所述第一数据库表的元数据;
从所述元数据确定所述第一数据库表具有可实体化的共享类型;
调用函式以实体化所述租户数据库容器中的第一数据库表,所述函式包括用于创建第二数据库表的数据库语言的语句,该数据库语言的语句包括用于创建第一图式的一个或多个列的语句,该调用导致在租户数据库容器中创建第二数据库表,该第二数据库表至少部分对应于第一数据库表,该第二数据库表包括第二图式,该第二图式包括第一图式的一个或多个列;
将数据从所述第一数据库表复制到所述第二数据库表;
用所述第二数据库表替换所述第一数据库视图;以及
将数据写入所述第二数据库表。
2.如权利要求1所述的计算系统,其中所述函式存储在与所述第一数据库表相关联的元数据中。
3.如权利要求1所述的计算系统,其中所述函式经由存储在与所述第一数据库表相关联的元数据中的URI来访问。
4.如权利要求1所述的计算系统,所述操作还包括:
在第二数据库表的元数据中指示所述第二数据库表已实体化。
5.如权利要求1所述的计算系统,所述操作还包括:
在所述确定之后,设定指示实体化过程待定的资源使用指示符。
6.如权利要求5所述的计算系统,所述操作还包括:
在所述替换之后,设定指示所述实体化过程已完成的资源使用指示符。
7.如权利要求5所述的计算系统,其中所述数据为第一数据,所述操作还包括:
从所述租户接收第二请求以将第二数据写入所述第一数据库表;
访问所述第一数据库表的元数据;以及
确定所述资源使用指示符已被设定。
8.如权利要求7所述的计算系统,所述操作还包括:
响应于确定所述实体化过程已完成,将所述第二数据写入所述第二数据库表。
9.如权利要求1所述的计算系统,其中所述第一数据库表由所述共享数据库容器中的第二数据库视图引用,所述第一数据库视图引用所述第二数据库视图和所述共享数据库容器的至少第三数据库表,所述操作还包括:
在所述租户数据库容器中创建第三数据库视图,所述第三数据库视图引用所述第二数据库表和所述租户数据库容器的至少第四数据库视图,所述第四数据库视图引用所述至少第三数据库表。
10.如权利要求1所述的计算系统,其中所述第二数据库表具有与所述第一数据库视图不同的名称,且所述替换包括:
丢弃所述第一数据库视图;以及
将所述第二数据库表重命名为所述第一数据库视图的名称。
11.如权利要求1所述的计算系统,其中所述函式包括用于创建、复制和替换的指令。
12.如权利要求1所述的计算系统,所述操作还包括:
存储第一DDL语句,用于更新所述第一数据库表的具有实体化状态的实例;
存储第二DDL语句,用于更新所述第一数据库表的具有非实体化状态的实例;
对于第一租户数据库容器,确定所述第一数据库表的第一实例的实体化状态;以及
基于所述确定执行所述第一DDL语句或第二DDL语句。
13.如权利要求12所述的计算系统,其中确定所述第一数据库表的第一实例处于实体化状态且所述DDL语句包括:
改变所述第一数据库表的第一实例的结构;以及
将内容复制到所述第一数据库表的具有所述改变的结构的第一实例。
14.如权利要求12所述的计算系统,其中确定所述第一数据库表的第一实例处于非实体化状态且所述DDL语句包括:
在第一共享容器中丢弃对于所述第一数据库表的第一实例的第一数据库视图;以及
在第二共享容器中创建对于所述第一数据库表的第二实例的第二数据库视图,所述第二实例与所述第一实例相比具有改变的结构。
15.一种在计算系统中实施的方法,该计算系统包括一个或多个存储器和耦接到所述一个或多个存储器的一个或多个处理单元,所述方法包括:
从租户接收第一请求以将数据写入到共享数据库容器的第一数据库表,该第一数据库表正被租户数据库容器中的第一数据库视图引用,使得租户能够通过查询第一数据库视图而从第一数据库表读取数据,该第一数据库表具有指定一个或多个列的第一图式;
接收指示所述第一数据库表处于只读状态的消息;
访问所述第一数据库表的元数据;
从所述元数据确定所述第一数据库表具有可实体化的共享类型;
调用函式以实体化所述租户数据库容器中的第一数据库表,所述函式包括用于创建第二数据库表的数据库语言的语句,该数据库语言的语句包括用于创建第一图式的一个或多个列的语句,该调用导致在租户数据库容器中创建的第二数据库表,该第二数据库表至少部分对应于第一数据库表,该第二数据库表包括第二图式,该第二图式包括第一图式的一个或多个列;
将数据从所述第一数据库表复制到所述第二数据库表;
用所述第二数据库表替换所述第一数据库视图;以及
将数据写入所述第二数据库表。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/973,147 US11061897B2 (en) | 2018-05-07 | 2018-05-07 | Materializable database objects in multitenant environments |
US15/973,147 | 2018-05-07 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110457385A CN110457385A (zh) | 2019-11-15 |
CN110457385B true CN110457385B (zh) | 2024-02-20 |
Family
ID=66483813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910375335.4A Active CN110457385B (zh) | 2018-05-07 | 2019-05-07 | 多租户环境中的可实体化的数据库对象 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11061897B2 (zh) |
EP (1) | EP3567488A1 (zh) |
CN (1) | CN110457385B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11061897B2 (en) | 2018-05-07 | 2021-07-13 | Sap Se | Materializable database objects in multitenant environments |
US11113278B2 (en) | 2019-05-31 | 2021-09-07 | Snowflake Inc. | Data sharing and materialized views in multiple tenant database systems |
US10867063B1 (en) * | 2019-11-27 | 2020-12-15 | Snowflake Inc. | Dynamic shared data object masking |
US20230017295A1 (en) * | 2021-07-16 | 2023-01-19 | Hewlett Packard Enterprise Development Lp | Hitless container upgrade without an orchestrator |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070156849A1 (en) * | 2005-12-30 | 2007-07-05 | Wolfgang Becker | Systems and methods for delivering software upgrades in a provider-tenant environment |
CN102170457A (zh) * | 2010-02-26 | 2011-08-31 | 国际商业机器公司 | 向应用的多租户提供服务的方法和装置 |
US8380667B2 (en) | 2010-08-11 | 2013-02-19 | Sap Ag | Selectively upgrading clients in a multi-tenant computing system |
US9471659B2 (en) | 2012-03-06 | 2016-10-18 | Sap Se | Providing continuous database access during database modification |
US9244951B2 (en) * | 2012-03-08 | 2016-01-26 | International Business Machines Corporation | Managing tenant-specific data sets in a multi-tenant environment |
US8793230B2 (en) | 2012-10-23 | 2014-07-29 | Sap Ag | Single-database multiple-tenant software system upgrade |
CN104079613B (zh) * | 2013-03-29 | 2018-04-13 | 国际商业机器公司 | 用于多租户间共享应用程序对象的方法和系统 |
US10242042B2 (en) * | 2013-10-31 | 2019-03-26 | Hewlett Packard Enterprise Development Lp | Copy-on-write update-triggered consistency |
US9858309B2 (en) | 2014-10-07 | 2018-01-02 | Sap Se | Managing write accesses during database upgrade procedure |
US10311077B2 (en) | 2015-10-22 | 2019-06-04 | Sap Se | Database table conversion |
US10296324B2 (en) | 2015-10-30 | 2019-05-21 | Sap Se | Zero downtime software system upgrade |
US20170161291A1 (en) | 2015-12-03 | 2017-06-08 | Sap Se | Database table conversion |
US10685007B2 (en) | 2016-03-29 | 2020-06-16 | Sap Se | Table content transport and delivery |
US10871962B2 (en) | 2016-05-27 | 2020-12-22 | Sap Se | Zero downtime maintenance in constrained systems |
US9927992B2 (en) | 2016-08-19 | 2018-03-27 | Sap Se | Segmented database migration |
US10380094B2 (en) | 2016-09-30 | 2019-08-13 | Salesforce.Com, Inc. | Custom multi-tenant non-relational platform objects |
US10025568B2 (en) | 2016-11-11 | 2018-07-17 | Sap Se | Database object lifecycle management |
US10891273B2 (en) | 2016-11-11 | 2021-01-12 | Sap Se | Database container delivery infrastructure |
US10558529B2 (en) | 2016-11-11 | 2020-02-11 | Sap Se | Database object delivery infrastructure |
US10909090B2 (en) | 2016-11-11 | 2021-02-02 | Sap Se | Database proxy object delivery infrastructure |
US10268692B2 (en) | 2017-02-15 | 2019-04-23 | Sap Se | Multi-procedure support in data migration |
US10706170B2 (en) | 2017-03-16 | 2020-07-07 | Sap Se | Tenant table sharing with content separation |
US10656933B2 (en) | 2017-03-28 | 2020-05-19 | Sap Se | Zero downtime for frequent software updates |
US10185552B2 (en) | 2017-05-12 | 2019-01-22 | Sap Se | Enforcing content constraints on delivery and end user changes |
US10268472B2 (en) | 2017-05-16 | 2019-04-23 | Sap Se | Upgrading systems with replicated data |
US10419445B2 (en) | 2017-07-03 | 2019-09-17 | Sap Se | Credential change management system |
US10762075B2 (en) | 2017-07-11 | 2020-09-01 | Sap Se | Database interface agent for a tenant-based upgrade system |
US10452646B2 (en) | 2017-10-26 | 2019-10-22 | Sap Se | Deploying changes in a multi-tenancy database system |
US10621167B2 (en) | 2017-10-26 | 2020-04-14 | Sap Se | Data separation and write redirection in multi-tenancy database systems |
US10740315B2 (en) | 2017-10-26 | 2020-08-11 | Sap Se | Transitioning between system sharing types in multi-tenancy database systems |
US10657276B2 (en) | 2017-10-26 | 2020-05-19 | Sap Se | System sharing types in multi-tenancy database systems |
US10482080B2 (en) | 2017-10-26 | 2019-11-19 | Sap Se | Exchanging shared containers and adapting tenants in multi-tenancy database systems |
US10733168B2 (en) | 2017-10-26 | 2020-08-04 | Sap Se | Deploying changes to key patterns in multi-tenancy database systems |
US10713277B2 (en) | 2017-10-26 | 2020-07-14 | Sap Se | Patching content across shared and tenant containers in multi-tenancy database systems |
US10740318B2 (en) | 2017-10-26 | 2020-08-11 | Sap Se | Key pattern management in multi-tenancy database systems |
US10977212B2 (en) | 2018-05-03 | 2021-04-13 | Sap Se | Data partitioning based on estimated growth |
US11061897B2 (en) | 2018-05-07 | 2021-07-13 | Sap Se | Materializable database objects in multitenant environments |
US10686882B2 (en) | 2018-05-18 | 2020-06-16 | Sap Se | Change management using a thing-model on an internet-of-things platform |
US10915551B2 (en) | 2018-06-04 | 2021-02-09 | Sap Se | Change management for shared objects in multi-tenancy systems |
US10936624B2 (en) | 2018-06-12 | 2021-03-02 | Sap Se | Development and productive use of system with parallel use of production data and zero downtime of software changes |
US11232126B2 (en) | 2018-11-21 | 2022-01-25 | Sap Se | Zero downtime upgrade of systems with database-side replication |
-
2018
- 2018-05-07 US US15/973,147 patent/US11061897B2/en active Active
-
2019
- 2019-05-06 EP EP19172718.9A patent/EP3567488A1/en not_active Ceased
- 2019-05-07 CN CN201910375335.4A patent/CN110457385B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
US11061897B2 (en) | 2021-07-13 |
US20190340282A1 (en) | 2019-11-07 |
CN110457385A (zh) | 2019-11-15 |
EP3567488A1 (en) | 2019-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110457385B (zh) | 多租户环境中的可实体化的数据库对象 | |
US11971945B2 (en) | System for synchronization of changes in edited websites and interactive applications | |
Capriolo et al. | Programming Hive: Data warehouse and query language for Hadoop | |
US9646041B2 (en) | Testing of inactive design-time artifacts | |
KR20200093561A (ko) | 클라이언트 동기화 서비스를 위한 원격 트리 업데이트 | |
US10726040B2 (en) | Lossless conversion of database tables between formats | |
US10346150B2 (en) | Computerized system and method for patching an application by separating executables and working data using different images | |
EP2766804B1 (en) | System and method of rolling upgrades of data traits | |
US10747643B2 (en) | System for debugging a client synchronization service | |
CN112540982A (zh) | 具有可更新逻辑表指针的虚拟数据库表 | |
US20230418808A1 (en) | Maintaining data separation for data consolidated from multiple data artifact instances | |
US20230418680A1 (en) | Selective landscape element grouping facilitating landscape element consolidation or content installation | |
US20190361793A1 (en) | System for debugging a client synchronization service | |
US11561976B1 (en) | System and method for facilitating metadata identification and import | |
US11675748B2 (en) | External data repository file integration using a virtual file system | |
EP4290393A1 (en) | Consolidation spaces providing access to multiple instances of application content | |
US20110087642A1 (en) | Memory-Mapped Objects | |
US11010408B2 (en) | Hydration of a hierarchy of dehydrated files | |
US20230418803A1 (en) | Techniques for integrating data for multple instances of a data artifact | |
US11496552B2 (en) | Intent tracking for asynchronous operations | |
Marchioni | MongoDB for Java developers | |
US20230401182A1 (en) | Migrating deployment infrastructure containers across different databases | |
US11941005B2 (en) | Data artifact instances faciliating flexible data access | |
US11940951B2 (en) | Identification and import of metadata for extensions to database artefacts |
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 |