CN112470141B - 数据库中的数据共享和实例化视图 - Google Patents
数据库中的数据共享和实例化视图 Download PDFInfo
- Publication number
- CN112470141B CN112470141B CN202080004138.2A CN202080004138A CN112470141B CN 112470141 B CN112470141 B CN 112470141B CN 202080004138 A CN202080004138 A CN 202080004138A CN 112470141 B CN112470141 B CN 112470141B
- Authority
- CN
- China
- Prior art keywords
- account
- view
- shared object
- data
- instantiation
- 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 124
- 238000012545 processing Methods 0.000 claims description 68
- 238000013475 authorization Methods 0.000 claims description 55
- 230000004048 modification Effects 0.000 claims description 26
- 238000012986 modification Methods 0.000 claims description 26
- 230000004044 response Effects 0.000 claims description 18
- 238000005192 partition Methods 0.000 description 84
- 238000013500 data storage Methods 0.000 description 50
- 230000008569 process Effects 0.000 description 42
- 238000010586 diagram Methods 0.000 description 39
- 230000006870 function Effects 0.000 description 18
- 238000004891 communication Methods 0.000 description 17
- 230000014509 gene expression Effects 0.000 description 15
- 230000008859 change Effects 0.000 description 8
- 230000008520 organization Effects 0.000 description 6
- 238000000926 separation method Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 5
- 230000009466 transformation Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000013138 pruning Methods 0.000 description 3
- 238000000844 transformation Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000013479 data entry Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000001172 regenerating effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000037406 food intake Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000004557 technical material Substances 0.000 description 1
- 230000001052 transient effect Effects 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/2393—Updating materialised views
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/256—Integrating or interfacing systems involving database management systems in federated or virtual databases
-
- 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
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
用于在多租户数据库系统中生成和更新跨账户实例化视图的系统、方法和设备。一种方法包括在第一账户中定义共享对象,其中,该共享对象包括与第一账户相关联的数据。该方法包括向第二账户授予对共享对象的跨账户访问权限,使得第二账户有权访问共享对象而无需复制共享对象。该方法包括根据共享对象生成实例化视图。该方法包括更新与第一账户相关联的数据。该方法包括通过合并实例化视图和共享对象来识别实例化视图相对于共享对象是否过时。
Description
优先权申请的交叉引用
本申请要求在2019年5月31日提交的美国专利申请序列号16/428,367的优先权,其内容在此通过引用以其整体并入本文。
技术领域
本公开涉及数据库,并且更具体地涉及数据库系统中的数据共享和实例化视图(materialized views)。
背景
数据库被广泛用于计算应用中的数据存储和访问。数据库存储的目标是以有组织的方式提供大量信息,以便可以对其进行访问、管理和更新。在数据库中,数据可以组织成行、列和表。不同的数据库存储系统可以用于存储不同类型的内容,诸如书目、全文、数字和/或图像内容。此外,在计算中,可以根据数据库的组织方法对不同的数据库系统进行分类。有许多不同类型的数据库,包括关系数据库、分布式数据库、云数据库、面向对象的数据库和其他数据库。
各种实体和公司都使用数据库来存储可能需要访问或分析的信息。在一个示例中,零售公司可以将所有销售交易的清单存储在数据库中。数据库可以包括关于交易何时发生、交易发生在哪里、交易的总成本、在交易中购买的所有物品的标识符和/或描述等信息。同一家零售公司还可能在同一数据库中存储例如员工信息,该信息可能包括员工姓名、员工联系信息、员工工作历史记、员工薪酬率等。根据该零售公司的需求,员工信息和交易信息可以存储在同一数据库的不同表中。当零售公司想要得知存储在数据库中的信息时,可能需要“查询”其数据库。该零售公司可能希望找到有关例如在特定商店工作的所有员工的姓名、在特定日期工作的所有员工的姓名、在特定时间范围内针对特定产品进行的所有交易的数据,等等。
当零售商店要查询其数据库以从数据库中提取某些组织的信息时,将针对数据库数据执行查询语句。该查询根据一个或更多个查询谓词返回某些数据,这些查询谓词指示该查询应返回哪些信息。该查询从数据库中提取特定数据,并将该数据格式化为可读形式。可以用数据库理解的语言(诸如结构化查询语言(“SQL”))编写查询,由此数据库系统可以确定应定位哪些数据以及应如何返回数据。该查询可以请求存储在数据库内的任何相关信息。如果可以找到适当的数据来响应查询,则数据库有可能揭示复杂的趋势和活动。只能通过使用成功执行的查询来利用此功能。
在某些情况下,不同的组织、个人或公司可能希望共享数据库数据。例如,组织可能在数据库中存储了有价值的信息,可以将该信息出售或销售给第三方。该组织可能希望使第三方能够查看数据,搜索数据和/或对数据运行报告。在传统方法中,通过将数据复制到第三方可访问的存储资源中来共享数据。这使第三方能够读取、搜索和运行有关数据的报告。然而,复制数据是耗费时间和资源的,并且会消耗大量存储资源。此外,当原始数据由数据所有者更新时,这些修改将不会传播到复制的数据。
鉴于前述内容,本文公开了用于多租户数据库系统中的即时和零拷贝数据共享的系统、方法和设备。本文公开的系统、方法和设备提供了用于查询共享数据、根据共享数据生成和刷新实例化视图以及共享实例化视图的装置。
附图简述
参考以下附图描述了本公开的非限制性和非穷举性的实施方式,其中,除非另外指明,否则贯穿各个视图,相似的参考数字指代相同或相似的部分。通过以下描述和附图,将更好地理解本公开的优点,其中:
图1是示出根据一个实施例的多租户数据库中的账户的示意性框图;
图2是示出根据一个实施例的用于提供和访问数据库服务的系统的示意图;
图3是示出根据一个实施例的具有分离的存储资源和计算资源多租户数据库的示意图;
图4是示出根据一个实施例的对象层次结构的示意性框图;
图5是示出根据一个实施例的基于角色的访问的示意图;
图6是示出根据一个实施例的角色之间的使用授权的示意图;
图7是示出根据一个实施例的共享对象的示意图;
图8是示出根据一个实施例的跨账户授权的示意图;
图9是示出根据一个实施例的共享部件的部件的示意性框图;
图10是根据一个实施例的用于根据共享数据生成实例化视图的系统和处理流程的示意图;
图11是根据一个实施例的用于生成和刷新实例化视图的处理流程的示意图;
图12是根据一个实施例的用于更新实例化视图的源表并相对于其源表刷新该实例化视图的处理流程的示意图;
图13是根据一个实施例的实例化视图的示意图;
图14是根据一个实施例的包括计算服务管理器的数据处理平台的示意性框图;
图15是根据一个实施例的计算服务管理器的示意性框图;
图16是根据一个实施例的执行平台的示意性框图;
图17是根据一个实施例的数据库处理环境的示意性框图;
图18是根据一个实施例的用于在多租户数据库系统中跨账户生成和刷新实例化视图的方法的示意性流程图;
图19是根据一个实施例的用于在多租户数据库系统中跨账户共享实例化视图的方法的示意性流程图;以及
图20是描绘与本文公开的一个或更多个实施例一致的示例计算设备或系统的框图。
详细描述
本文公开了用于在多租户数据库系统中跨账户生成实例化视图并进一步用于跨账户共享实例化视图的系统、方法和设备。数据库系统可以具有多个账户或客户端,每个账户或客户端都在数据库系统内存储唯一的数据集。在示例实施方式中,数据库系统可以存储和管理用于多个企业的数据,并且多个企业中的每个企业可以在数据库系统内具有其自己的账户。在某些情况下,可能希望允许两个或更多个不同的账户共享数据。数据可以在拥有数据并共享数据的提供者账户与接收者账户之间共享。如果接收者账户可以查询数据以基于数据生成报告或分析数据,则该数据可能对接收者账户更有价值。如果接收者账户经常对数据运行相同的查询,则接收者账户可能希望为该查询生成实例化视图。实例化视图使接收者账户能够在每次运行同一查询时快速生成关于数据的查询结果,而无需读取或处理所有数据。
鉴于前述内容,本文公开的系统、方法和设备使得能够在多租户数据库系统的账户之间进行数据共享。本文公开的系统、方法和设备进一步使得能够根据共享数据跨账户生成和刷新实例化视图。本文公开的系统、方法和设备进一步使得能够跨账户共享和刷新实例化视图,使得可以在账户之间共享有限范围的数据。
在本公开的示例实施方式中,多租户数据库的一个账户可以与出售由制造商提供的商品的零售商店相关联。制造商和零售商店在多租户数据库系统内可以各自拥有它们自己的账户。零售商店可以存储有关由制造商供应的哪些物品被售出以及售出了多少物品的数据。零售商店可以存储其他数据,诸如物品的销售地点、物品的销售价格、物品是在线购买还是在零售商店中购买、购买物品的人员的人口统计信息等等。零售商店存储的数据可能对制造商具有重要价值。零售商店和制造商可以签订协议,使得制造商可以访问有关零售商店已经出售的物品的数据。在此示例实施方式中,零售商店是提供者账户,因为零售商店拥有物品的销售数据。制造商是接收者账户,因为玩具制造商将查看零售商店拥有的数据。零售商店的数据存储在多租户数据库系统内。零售商店向制造商提供允许制造商读取有关制造商的物品销售的数据的跨账户访问权限。零售商店可以限制制造商查看任何其他数据,诸如员工数据、其他物品的销售数据等等。制造商可以查看和查询零售商店拥有的、已提供给制造商的数据。制造商可以根据数据生成实例化视图。实例化视图存储查询结果,因此制造商可以更快地查询数据。实例化视图可以自动刷新以反映对其源表(即零售商店拥有的表)所做的任何更新。制造商可以针对制造商通常要求的多个不同查询做出多个实例化视图。实例化视图可以由制造商私下生成,使得零售商店无法看到制造商已生成了哪些实例化视图。
在本公开的进一步实施方式中,以及进一步与上述相同的示例情形中,零售商店可能希望与制造商共享摘要信息,而不允许制造商查看存储在多租户数据库的零售商店账户中的所有信息。在这样的实施方式中,零售商店可以生成实例化视图,并且仅与制造商共享该实例化视图。在示例情形中,零售商店可以生成实例化视图,该视图指示零售商店提供了制造商生产的多少种不同的物品供销售、在特定时间段内已经售出了制造商生产的多少件物品、零售商店出售的制造商生产的物品的平均价格,等等。应当理解,实例化视图可以根据数据库客户端的需求提供任何相关的摘要信息。在示例实施方式中,零售商店可以仅与制造商共享实例化视图,因此制造商可以查看摘要信息,但不能查看基础数据、模式(schema)、元数据、数据组织结构等。在该示例实施方式中,当实例化视图的源表已被修改或更新时,零售商店可以使实例化视图自动刷新。
本文公开的系统、方法和设备提供了用于共享数据、共享实例化视图、根据共享数据生成实例化视图以及根据共享数据自动更新实例化视图的改进的装置。如本文公开的这样的系统、方法和设备为希望共享数据和/或读取另一方拥有的数据的数据库客户端提供了显著的益处。
实例化视图是一种存储查询结果的数据库对象。实例化视图基于供应查询结果的源表(source table)生成。实例化视图可以本地存储在执行节点的高速缓存资源中,使得在处理查询时可以快速访问它。实例化视图通常是出于性能原因而生成的,以便可以更快地获取查询结果,并且可以使用更少的处理资源来计算查询结果。可以将实例化视图作为具体表而不是视图进行高速缓存,以便可以更新实例化视图以反映对源表所做的任何更改。可以通过插入、删除、更新和/或合并命令来修改源表,并且这些修改可导致实例化视图相对于源表过时。当已对源表中的数据进行了更改,但是这些更改尚未传播到实例化视图时,实例化视图相对于其源表是“过时的”。当实例化视图相对于源表是过时的时,则不再仅依靠实例化视图来确定准确的查询结果。本文公开的实施例提供了用于生成、存储和刷新实例化视图的改进的装置,使得即使实例化视图相对于其源表是过时的,也可以对实例化视图执行查询。
本公开的实施例使得能够使用安全视图进行跨账户数据共享。当一个视图被专门指定用于数据隐私或限制对不应公开给基础表的所有账户的数据的访问时,可以将其定义为安全视图。例如,当一个账户只具有对数据的子集的访问权时,数据可能会在安全视图中公开。安全视图允许数据库账户向其他账户或用户公开受限制的数据集,而不会向这些其他账户或用户公开基础的无限制数据。在实施例中,提供者账户可以授权接收者账户对其数据的跨账户访问权。提供者账户可以将接收者账户限制为仅查看某些数据,并且可以限制接收者账户查看任何有关数据的基础组织模式或统计信息。
在实施例中,与常规视图相比,安全视图提供了多个安全保证。在实施例中,安全视图不向视图的非所有者公开视图定义。这会影响访问数据字典的各种操作。在实施例中,安全视图不公开有关该视图的任何基础数据的信息,包括该视图处理的数据量、该视图访问的表等等。这会影响显示的统计信息,这些统计信息涉及查询中扫描的字节数和分区数,以及在针对涉及安全视图的查询中在查询概要文件中显示那些内容。在实施例中,安全视图不公开来自该视图访问的表的、被该视图过滤掉的数据。在这样的实施例中,与非安全视图相关联的客户端账户可以访问将通过利用查询优化而被过滤掉的数据,该查询优化可以使用户表达式在安全表达式(例如,过滤和合并)之前被评估。在这样的实施例中,为了达到该要求,可以限制可以应用于包含安全视图的查询的一组查询优化,以保证在过滤视图之前不会评估可能泄漏数据的用户表达式。
在实施例中,多租户数据库系统中的数据跨多个共享存储设备存储。数据可以存储在表中,并且单个表中的数据可以进一步分区或分离为多个不可变的存储设备(本文称为微分区(micro-partition))。微分区是不可变的存储设备,其无法就地更新,并且在修改存储在其中的数据时必须重新生成。表的微分区的类似物可以是存储仓库区(storagecompound)内的不同存储建筑物。以此类推,存储仓库区类似于表,并且每个单独的存储建筑物均类似于微分区。整个存储仓库区中存储了成千上万的物品。由于存储仓库区中放置了许多物品,因此有必要在多个单独的存储建筑物中组织这些物品。这些物品可以通过任何有意义的方式跨多个单独的存储建筑物进行组织。例如,一个存储建筑物可以存储衣物,另一存储建筑物可以存储家庭用品,另一存储建筑物可以存储玩具,等等。每个存储建筑物都可以贴上标签,以便更容易找到物品。例如,如果一个人想找到一个毛绒玩具熊,那么他会知道去存储玩具的存储建筑物。存储玩具的存储建筑物可以进一步组织为成排的货架。可以对玩具存储建筑物进行组织,以使所有毛绒动物玩具都放在一排货架上。因此,寻找毛绒玩具熊的人可能知道访问存储玩具的建筑物,并且可能知道访问存储毛绒动物玩具的排。进一步类似于数据库技术,存储仓库区的存储建筑物中的每一排货架可以类似于表的微分区内的数据库数据列。对于每个存储建筑物和对于每排货架的标签类似于数据库上下文中的元数据。
在表上执行事务时,将重新创建表中所有受影响的微分区,以生成反映该事务所做修改的新微分区。在事务完全执行后,可以从数据库中移除重新创建的所有原始微分区。在表上执行每次事务之后,都会生成该表的新版本。如果表中的数据经历了许多更改(诸如插入、删除、更新和/或合并),则该表可能会在一段时间内经历许多版本。该表的每个版本可以包括元数据,该元数据指示什么事务生成该表、何时该事务被执行、何时完全执行该事务以及该事务如何改变表中的一行或更多行。可以利用所公开的用于低成本表版本控制的系统、方法和设备来提供一种用于在表上发生一个或更多个更改(事务)后更新表元数据的有效装置。
可以将微分区视为批处理单元,其中每个微分区都具有连续的存储单元。举例来说,每个微分区可以包含50MB到500MB之间的未压缩数据(请注意,存储中的实际大小可能较小,因为数据可能会被压缩存储)。表中的行的组可被映射到以列形式组织的个体微分区中。这种大小和结构允许对待扫描的微分区进行极细粒度选择,该微分区可以包括数百万甚至数亿个微分区。该粒度选择过程在本文中可以被称为基于元数据的“修剪”。修剪涉及使用元数据来确定表的哪些部分(包括表中的哪些微分区或微分区组)与查询无关,然后在响应查询时避免那些无关的微分区且只扫描相关微分区以对查询进行响应。可以自动收集关于微分区中存储的所有行的元数据,包括:微分区中每个列的值范围;不同值的数量;和/或用于优化和高效查询处理的其他属性。在一个实施例中,可以在所有表上自动执行微分区。例如,可以使用插入/加载数据时发生的排序对表进行透明分区。
多租户数据库或多租户数据仓库一次支持多个不同的客户账户。作为示例,图1是示出支持许多不同的客户账户A1、A2、A3、An等的多租户数据库或数据仓库的示意性框图。客户账户可以由多个安全控件分开,该安全控件包括用于连接到不同的访问凭证的不同统一资源定位符(URL)、不同的数据存储位置(诸如Amazon网页服务S3存储桶)和不同的账户级加密密钥。因此,每个客户只能被允许查看、读取和/或写入客户自己的数据。通过设计,客户可能无法看到、读取或写入另一客户的数据。在某些情况下,严格分隔客户账户是多租户数据仓库或数据库系统的主干。
在某些情况下,可能希望允许跨账户数据共享和/或跨账户生成和更新实例化视图。然而,没有当前多租户数据库系统允许以瞬时、零拷贝、易于控制的方式在不同客户账户之间共享数据。
基于前述内容,本文公开了在一个实施例中可以实现用于根据共享数据生成、更新和/或查看实例化视图的系统、方法和设备。本文公开的系统、方法和设备进一步提供用于共享实例化视图的装置。可以共享数据,使得无需复制数据即可立即访问。实例化视图可以被多方访问,而无需复制实例化视图。一些实施例使用细粒度控件提供对数据的访问,以在允许访问客户希望共享的数据的同时保持期望数据的分离。
本文公开的实施例提供了用于在数据库系统中的提供者账户与一个或更多个其他账户之间共享“共享对象”或“数据库对象”的系统、方法和设备。提供者账户与一个或更多个其他“接收者”账户共享该共享对象或数据库对象。提供者账户可以使一个或更多个接收者账户能够查看实例化视图和/或根据提供者的数据生成实例化视图。在一个实施例中,共享对象或数据库对象可以包括数据库数据,诸如存储在数据库表中的、提供者账户所拥有的数据。共享对象或数据库对象可以包括有关数据库数据的元数据,诸如数据库的表或微分区的最小/最大值、数据库数据的基础结构或体系结构详细信息,等等。共享对象可以包括所有其他账户的列表,这些列表可以接收对共享对象的元素的跨账户访问权限。该列表可以指示例如第二账户可以使用共享对象的程序逻辑,而不会看到定义该程序逻辑的任何基础代码。该列表可以进一步指示例如第三账户可以使用一个或更多个表的数据库数据,而不会看到关于该数据库数据的任何结构信息或元数据。该列表可以指示共享对象的元素的使用特权的任何组合,包括辅助账户是否可以查看数据库数据或程序逻辑的元数据或结构信息。该列表可以指示接收者账户是否有权限根据提供者的数据库数据生成或更新实例化视图。
下面提供与本公开的各个实施例一致的系统和方法的详细描述。尽管描述了几个实施例,但是应当理解,本公开不限于任何一个实施例,而是包括许多替代、修改和等同形式。另外,尽管在以下描述中阐述了许多具体细节以提供对本文公开的实施例的透彻理解,但是可以在没有这些细节中的一些或全部细节的情况下实施一些实施例。此外,为了清楚起见,没有详细描述相关技术中已知的某些技术材料,以避免不必要地使本公开模糊。
现在参考附图,图1是示出支持许多不同的客户账户A1、A2、A3、An等的多租户数据库或数据仓库的示意性框图。客户账户可以由多个安全控件分开,该安全控件包括用于连接到不同的访问凭证的不同统一资源定位符(URL)、不同的数据存储位置(诸如Amazon网页服务S3存储桶)和不同的账户级加密密钥。因此,每个客户只能被允许查看、读取和/或写入客户自己的数据。通过设计,客户可能无法看到、读取或写入另一客户的数据。在某些情况下,严格分隔客户账户是多租户数据仓库或数据库系统的主干。
图2是用于提供和访问数据库数据或服务的系统200的示意图。系统200包括数据库系统202、一个或更多个服务器204和客户端计算系统206。数据库系统202、一个或更多个服务器204和/或客户端计算系统206可以通过诸如因特网的网络208彼此通信。例如,一个或更多个服务器204和/或客户端计算系统206可以通过网络208访问数据库系统202以查询数据库和/或从数据库接收数据。来自数据库的数据可由一个或更多个服务器204或客户端计算系统206用于任何类型的计算应用。在一个实施例中,数据库系统202是托管用于多个不同账户的数据的多租户数据库系统。
数据库系统202包括共享部件210和存储装置212。存储装置212可以包括用于存储数据的存储介质。例如,存储装置212可以包括一个或更多个用于存储数据库表、模式、加密密钥、数据文件或任何其他数据的存储设备。共享部件210可以包括用于实现数据或服务的跨账户共享和/或用于将查看特权与数据或服务相关联的硬件和/或软件。例如,共享部件210可以实现根据共享数据的实例化视图的跨账户生成和更新。共享部件210可以定义数据库数据的安全视图,使得两个或更多个账户可以确定公共数据点,而无需揭示数据点本身或账户之间不共有的任何其他数据点。进一步例如,共享部件210可以处理从远程设备接收到的查询/指令以访问共享的数据或共享数据。可以从一个或更多个服务器204或客户端计算系统206接收查询/指令。在一个实施例中,共享部件210被配置为允许在账户之间共享数据而无需在共享账户外部创建表、数据等的重复副本。例如,共享部件可以允许分配给共享账户的计算机资源执行由外部账户提供的任何查询或指令。
在一个实施例中,用于多租户数据库100的存储和计算资源在逻辑上和/或物理上是分开的。在一个实施例中,存储是所有账户之间的公共共享资源。计算资源可以按账户独立设置为虚拟仓库。在一个实施例中,虚拟仓库是访问存储层中的数据并计算查询结果的一组计算节点。将计算节点或资源与存储分开允许独立扩展每个层。存储和计算的分离还允许共享数据可以由不同账户独立处理,而一个账户中的计算不会影响其他账户中的计算。也即,在至少一些实施例中,当在共享数据上运行查询时,计算资源之间不存在争用。
图3是示出了存储和计算资源的分离的多租户数据库300的示意性框图。例如,多租户数据库300可以是托管有多个不同账户(A1、A2、A3到An)的数据仓库。在图3中,账户A1具有运行中的三个虚拟仓库,账户A2具有运行中的一个虚拟仓库,账户A3没有运行中的虚拟仓库。在一个实施例中,所有这些虚拟仓库都具有对与虚拟仓库的计算节点分开的存储层的访问权。在一个实施例中,可以基于账户的当前工作负荷来动态地提供或移除虚拟仓库。
在一个实施例中,多租户数据库系统300使用账户中的对象层次结构。例如,每个客户账户可包含对象层次结构。对象层次结构通常植根于数据库中。例如,数据库可以包含模式,而模式继而可以包含诸如表、视图、序列、文件格式和函数的对象。这些对象中的每个对象都具有特殊目的:表存储关系或半结构化数据;视图定义对存储数据的逻辑抽象;序列提供用于生成不断增加的数字的装置;文件格式定义解析摄取的数据文件的方式;以及函数包含用户定义的执行程序。在本文所公开的实施例中,视图可以与安全的用户定义的函数定义相关联,使得与该视图相关联的基础数据被对具有对该视图的访问权的非所有者账户隐藏。
图4是示出了客户账户内的对象层次结构的示意性框图。具体而言,账户可以包括可以在数据库中引用的对象的层次结构。例如,客户账户A1包含两个数据库对象D1和D2。数据库对象D1包含模式对象S1,该模式对象继而包含表对象T1和视图对象V1。数据库对象D2包含模式对象S2,该模式对象S2包含函数对象F2、序列对象Q2和表对象T2。客户账户A2包含具有模式对象S3和表对象T3的数据库对象D3。对象层次结构可以控制如何访问或引用账户或数据库系统的对象、数据、函数或其他信息或服务。
在一个实施例中,数据库系统实现基于角色的访问控制以管理对客户账户中的对象的访问。通常,基于角色的访问控制包含两个基本原则:角色和授权。在一个实施例中,角色是客户账户中分配给用户的特殊对象。角色和数据库对象之间的授权定义了角色对这些对象的特权。例如,在执行命令“显示数据库”时,对数据库具有使用授权的角色可以“查看”该数据库;在表上具有选择授权的角色可以从该表读取但不能写入该表。该角色将需要在表上具有修改授权,才能对其进行写入。
图5是示出了对客户账户中的对象的基于角色的访问的示意性框图。客户账户A1包含角色R1,角色R1具有对对象层次结构中的所有对象的授权。假设这些授权是R1与D1、D2、S1、S2之间的使用授权以及是在R1和T1、V1、F2、Q2、T2之间的选择授权,则具有激活角色R1的用户可以查看所有对象并从所有表、视图和序列中读取数据,并可以在账户A1内执行函数F2。客户账户A2包含角色R3,该角色R3具有对对象层次结构中的所有对象的授权。假设这些授权是R3与D3,S3之间的使用授权并且是在R3与T3之间选择授权,则具有激活角色R3的用户可以查看所有对象并从账户A2内的所有表、视图和序列中读取数据。
图6示出了角色之间的使用授权。使用基于角色的访问控制,还可以将使用权从一个角色授予另一个角色。具有对另一角色的使用授权的角色“继承”该另一角色的所有访问特权。例如,角色R2中具有对角色R1的使用授权。具有激活角色R2的用户(例如,具有相应的授权详细信息)可以查看所有对象并从所有对象进行读取,因为角色R2继承了角色R1的所有授权。
图7是示出共享对象SH1的示意性框图。在实施例中,共享对象是跨一个或更多个表的一列数据,并且跨账户访问权限被授予共享对象,使得一个或更多个其他账户可以根据共享对象中的数据生成、查看和/或更新实例化视图。客户账户A1包含共享对象SH1。共享对象SH1在客户账户A1中具有唯一名称“SH1”。共享对象SH1包含角色R4,角色R4具有对数据库D2、模式S2和表T2的授权。对数据库D2和模式S2的授权可以是使用授权,并且对表T2的授权可以是选择授权。在这种情况下,数据库D2中的模式S2中的表T2将被只读共享。共享对象SH1包含对其他客户账户(包括账户A2)的引用的列表。
在创建了共享对象后,共享对象可以由共享对象中列出的接收者账户导入或引用。例如,从提供者账户导入共享对象也可能是从其他客户账户导入。接收者账户可以运行命令以列出所有可用于导入的共享对象。仅当使用包括接收者账户的引用创建共享对象时,接收者账户才能列出共享对象并随后将其导入。在一个实施例中,对另一个账户中的共享对象的引用始终由账户名限定。例如,接收者账户A2将引用提供者账户A1中具有示例限定名称“A1.SH1”的共享SH1。
在一个实施例中,处理或导入共享对象可以包括:在接收者账户中创建别名对象(alias object);将别名对象与对象层次结构中的提供者账户中最顶部的共享对象链接;授予接收者账户中的角色对别名对象的使用特权;并授予接收者账户角色对共享对象中所包含的角色的使用特权。
在一个实施例中,导入共享对象或数据的接收者账户创建别名对象。别名对象类似于客户账户中的普通对象。别名对象具有其自己的唯一名称,该名称用于识别别名对象。别名对象可以链接到在每个对象层次结构中被共享的最顶部对象。如果共享多个对象层次结构,则可以在接收者账户中创建多个别名对象。每当使用别名对象时(例如,从别名对象读取,写入别名对象),别名对象在内部都将被提供者账户中的与其链接的普通对象替换。这样,别名对象仅仅是普通对象的代理对象,而不是副本对象(duplicate object)。因此,在从别名对象读取或向别名对象写入时,这些操作会影响别名所链接到的原始对象。与普通对象一样,当创建别名对象时,会将其授予给用户的激活角色。
除了别名对象之外,还将在接收者账户中的角色和共享对象中包含的角色之间创建授权。这是跨客户账户从角色到角色的使用授权。现在,基于角色的访问控制允许接收者账户中的用户访问提供者账户中的对象。
图8是示出了不同账户之间的逻辑授权和链接的示意性框图。在账户A2中创建数据库别名对象D5。数据库别名D5经由链接L1引用数据库D2。角色R3在数据库D5上具有使用授权G1。角色R3对客户账户A1中的角色R4具有第二使用授权G2。授权G2是账户A1和A2之间的跨账户授权。在一个实施例中,基于角色的访问控制允许账户A2中具有激活角色R3的用户访问账户A1中的数据。例如,如果账户A2中的用户想要读取表T2中的数据,则基于角色的访问控制将允许这样做,因为角色R3具有角色R4的使用授权,角色R4继而具有对表T2的选择授权。举例来说,具有激活角色R3的用户可以通过运行针对“D5.S2.T2”的查询或选择来访问T2。
使用对象别名和从接收者账户中的角色到提供者账户中的角色的跨账户授权允许接收者账户中的用户访问提供者账户中的信息。以这种方式,数据库系统可以以瞬时、零拷贝、易于控制的方式实现不同客户账户之间数据的共享。共享可以是瞬时的,因为别名对象和跨账户授权可以在几毫秒内创建。共享可以是零拷贝的,因为在此过程中不必须复制任何数据。例如,可以直接对提供者账户中的共享对象进行所有查询或选择,而无需在接收者账户中创建副本。共享还易于控制,因为它利用了基于角色的访问控制的易于使用的技术。另外,在具有分开的存储和计算的实施例中,当在共享数据上执行查询时,在计算资源之间没有争用。因此,不同客户账户中的不同虚拟仓库可以单独处理共享数据。例如,用于第一账户的第一虚拟仓库可以使用提供者账户共享的数据来处理数据库查询或语句,而用于第二账户或提供者账户的第二虚拟仓库可以使用提供者账户的共享数据处理数据库查询或语句。
图9是共享部件210的示意性框图。共享部件210包括跨账户权限部件902、别名部件904、请求部件906、访问部件908、处理部件910、安全视图部件912和实例化视图部件914。部件902-914仅通过示例的方式给出,并且可能不全部包括在所有实施例中。例如,部件902-914中的每个部件可以被包括在单独的设备或系统中或者可以被实现为单独的设备或系统的一部分。
跨账户权限部件902被配置为创建和管理账户之间的权限或授权。跨账户权限部件902可以在提供者账户中生成共享对象。例如,提供者账户的用户可以提供指示应该与另一个账户共享一个或更多个资源的输入。在一个实施例中,用户可以选择创建新的共享对象的选项,以便可以与外部账户共享资源。响应于用户输入,跨账户权限部件902可以在提供者账户中创建共享对象。共享对象可以包括可被授予对资源的访问权限以与外部账户共享的角色。外部账户可以包括客户账户或与提供者账户分开的其他账户。例如,外部账户可以是托管在多租户数据库系统上的另一个账户。
在创建时,共享对象可以被授予对提供者账户内的一个或更多个资源的权限。资源可以包括提供者账户的数据库、模式、表、序列或函数。例如,共享对象可以包含一个角色(即,共享角色),该角色被授予读取、选择、查询或修改诸如数据库的数据存储对象的权限。可以以类似于使用基于角色的访问控制将权限授予其他角色的方式将权限授予共享对象或共享对象中的共享角色。用户能够访问账户并向共享角色授予权限,以便共享角色可以访问应与外部账户共享的资源。在一个实施例中,共享对象可以包括共享角色对其具有权限的对象列表和访问级。
共享对象也可以变得可用或链接到特定的外部账户。例如,共享对象可以在提供者账户中存储对共享角色或共享对象具有权限的账户列表。具有提供者账户的用户可以在账户列表中添加或移除账户。例如,用户能够修改列表以控制哪些账户可以访问经由共享对象共享的对象。在共享对象中列出或识别的外部账户可以被给予对资源的访问权,并且授予共享对象的共享角色访问权限。在一个实施例中,特定账户可以执行搜索以识别已经与该特定账户共享的共享对象或提供者账户。接收者或特定账户的用户可以查看可用共享对象的列表。
别名部件904被配置为生成由单独账户共享的数据或数据对象的别名。例如,别名对象可以在接收者账户中创建与提供者账户共享的共享资源相对应的别名对象。在一个实施例中,响应于接收者账户接受共享资源或尝试首次访问共享资源来创建别名对象。别名对象可以充当由提供者账户共享的最高对象层次结构的数据对象的别名(例如,参见图8,其中D5是D2的别名)。别名部件904还可以在别名对象和共享对象之间生成链接(例如,参见图8,其中L1是D5和D2之间的链接)。可以以原始或“真实”对象的标识符或名称的形式创建和/或存储链接。例如,图8中的链接L1可以包括用于存储在别名对象D5中的D2的标识符,该标识符包括唯一的系统范围名称(system wide name),诸如“A1.D2”。
别名部件904还可以向接收者账户(提供者账户与其共享数据或资源的账户)中的角色授予对别名对象的访问权限(例如,参见图8的G1)。另外,别名部件904还可以将接收者账户中的角色授予提供者账户的共享对象中的共享角色(例如,参见图8的G2)。利用所创建的别名对象、别名对象与提供者账户中的对象之间的链接以及对接收者账户中的角色授权,接收者账户可以自由运行查询、声明或“查看”提供者账户中的共享数据或资源。
请求部件906被配置为从账户接收访问不同账户中的共享资源的请求。该请求可以包括数据库查询、选择语句等以访问资源。在一个实施例中,请求包括针对请求账户的别名对象的请求。请求部件906可以识别与别名对象相链接的资源,诸如提供者账户中的数据库或表。请求部件906可以基于别名对象的标识符来识别链接的对象。
请求部件906可以进一步被配置为从账户接收请求以对两个账户之间的公共数据点进行计数。请求部件906可以与第一账户相关联,并且可以从第二账户接收请求以在两个账户之间生成安全连接并确定在两个账户之间共享多少数据点以及哪些数据点被共享。数据点可以是单个主题或列标识符,也可以是多个主题。
访问部件908被配置为确定账户是否具有对不同账户的共享资源的访问权。例如,如果第一账户请求对不同的第二账户的资源的访问权,则访问部件908可以确定第二账户是否已被授权对第一账户的访问权。访问部件908可以通过确定共享对象是否识别请求账户来确定请求账户是否具有访问权。例如,访问部件908可以检查请求账户是否存在于由共享对象存储的账户列表中。访问部件908还可以检查识别请求账户的共享对象是否具有对提供者账户中的接收者数据资源的访问权限(例如,授权)。
在一个实施例中,访问部件908可以检查从提供者账户中的共享角色到请求账户中的请求角色的授权的存在。访问部件908可以检查在数据库请求或语句所针对的别名对象之间是否存在链接,或者在请求角色与别名对象之间是否存在授权。例如,访问部件908可以检查图8所示的L1、G1和G2中的一者或更多者的存在或存在。此外,访问部件908可以检查共享对象中的角色与提供者账户的对象(诸如表或数据库)之间的授权。例如,访问部件908可以检查图8中的角色R4和数据库D2之间是否存在授权。如果访问部件908确定请求账户具有对共享资源的访问权,则共享部件210或处理部件910可以满足该请求。如果访问部件908确定请求账户不具有对所请求的数据或对象的权限,则该请求将被拒绝。
处理部件910被配置为处理数据库请求、查询或语句。处理部件910可以处理并提供对来自一个账户的访问或使用另一个账户中的数据或服务的请求的响应。在一个实施例中,处理部件910通过使用不同于请求账户的提供者账户中的原始数据来处理请求来提供对请求的响应。例如,该请求可以被定向到存储在第一账户中或用于第一账户的数据库或表,并且处理部件910可以使用第一账户的数据库或表来处理该请求,并将响应返回给请求的第二账户。
在一个实施例中,处理部件910执行共享数据的处理,而无需在请求账户中创建复制表或其他数据源。通常,必须首先将数据摄取到希望处理该数据或对该数据执行操作的账户中。处理部件910可以通过允许接收者账户访问提供者账户中的共享资源而不在接收者账户中创建数据资源的副本来节省处理时间、延迟和/或存储资源。
处理部件910可以使用针对不同账户的不同处理资源来执行相同数据的处理。例如,用于第一账户的第一虚拟仓库可以使用提供者账户共享的数据来处理数据库查询或语句,而用于第二账户或提供者账户的第二虚拟仓库可以使用提供者账户的共享数据处理数据库查询或语句。使用单独的处理资源来处理相同数据可能会阻止账户之间对处理资源的争用。处理资源可以包括动态提供的处理资源。在一个实施例中,共享数据的处理使用请求账户的虚拟仓库来执行,即使该数据可能在不同账户的存储中。
安全视图部件912被配置为定义共享对象、共享对象的数据字段、数据库对象的数据字段等的安全视图。在实施例中,安全视图部件912在视图字段中使用安全(SECURE)关键字定义安全视图,并且可以使用改变视图(ALTER VIEW)命令在视图上设置或取消设置安全(SECURE)属性。在各种实施例中,安全视图部件912可以仅在客户端账户的手动指导下实现这样的命令,或者可以被配置为自动实现这样的命令。安全视图部件912可以改变解析器以支持视图名称前的安全关键字和新的改变视图规则。在实施例中,改变视图规则可以更通用以包含其他视图级属性。在元数据支持方面,可将竞争有效地存储为表,并且更改可能涉及改变表数据持久化对象,该对象包括指示该视图是否是安全视图的安全标志(这可以在包括安全标志的视图文本之外实现)。安全的用户定义的函数定义(即表数据持久化对象)可对不是视图所有者的用户隐藏。在这样的实施例中,显示视图的命令将照常将结果返回给视图的所有者,但是不会将安全的用户定义的函数定义返回给有权访问该视图的非所有者第二账户。
安全视图部件912可以改变解析树的变换,例如查看合并和谓词信息。规范实现可以包括注释查询块,使得查询块被指定为来自安全视图。在这样的实施方式中,查询块不能与外部查询块结合(例如,视图合并)或与表达式结合(例如,经由过滤器下推(via filterpushdown))。
安全视图部件912可以在优化期间(例如在过滤器上拉和/或过滤器下推期间)重写查询计划树。安全视图部件912可以被配置为确保没有源自安全视图的表达式不能被下推到视图边界以下。安全视图部件912可以被配置为通过实现行为与标准投影相同的新型投影来实现此目的,但是由于它不是标准投影,因此无法匹配任何重写规则前提条件。因此,相关的重写不被应用。安全视图部件912可以被配置为在查询块已经被指定为来自安全的用户定义的函数定义或不是来自安全的用户定义的函数定义之后,识别将要生成哪种类型的投影(例如,标准投影或安全投影)。
安全视图部件912被配置为优化对于零拷贝数据共享系统中的安全视图的性能。在本领域中已知的各种实施例中,已知安全视图导致性能损失,该性能损失可能有效地削弱了优化器应用某些变换的能力。这样的实施例可以通过将某些变换认为是安全的来进行改进,其中安全性指示正在变换的操作将不会对系统产生任何副作用。此类副作用可能是由执行无法轻易识别不安全操作的操作或者是可能无法揭示有关导致故障的数据值的信息的操作(例如,除以零或某些类似的操作)的用户定义的函数(UDF)引起的。安全视图部件912可以使用表达式的安全属性来注释表达式,然后启用允许在表达式被视为安全的情况下将表达式推入安全视图边界的变换。如果已知该表达式不会产生错误并且该表达式不包含用户定义的函数(UDF),则可以将该表达式视为安全的。安全视图部件912可以通过利用表达式属性框架来确定表达式是否产生错误,其中,表达式属性存储表达式是否可能产生错误的指示。
实例化视图部件914被配置为生成和/或更新共享数据的实例化视图。实例化视图部件914进一步被配置为共享可以具有安全视图定义的实例化视图。实例化视图部件914可以集成在分配给提供者账户和/或接收者账户的执行资源中。在实施例中,提供者账户授权接收者账户查看提供者账户的数据。提供者账户可以给予接收者账户无限制访问权,以查看提供者账户的数据,或者提供者账户可以授予接收者账户对利用安全视图定义来查看其数据的授权。安全视图定义可以确保接收者账户仅可见部分数据和/或确保接收者账户不可见有关数据的基础模式。在实施例中,提供者账户向接收者账户提供授权以生成根据提供者的数据生成的特定实例化视图。提供者账户可以授予此授权,并且仍然禁止接收者账户查看任何实际数据。
实例化视图部件914生成并刷新实例化视图。在实施例中,提供者账户根据其自身的数据生成实例化视图。实例化视图部件914可以为提供者账户生成实例化视图。实例化视图部件914可以进一步向接收者账户授予跨账户访问权限,使得接收者账户可以查看实例化视图。在实施例中,接收者账户请求实例化视图,并且实例化视图部件914生成实例化视图。在这样的实施例中,实例化视图部件可以被集成到接收者账户的执行平台中。
实例化视图部件914相对于其源表刷新实例化视图。在实施例中,实例化视图由接收者账户生成和存储,而实例化视图的源表由提供者账户存储和管理。当对源表中的数据进行更新时,实例化视图部件914被配置为刷新实例化视图,以将更新传播到实例化视图。如果源表已经更新,并且那些更新尚未传播到实例化视图,则该实例化视图相对于其源表是过时的。根据本文公开的系统、方法和设备,通过将实例化视图与其源表合并以识别实例化视图与源表之间的任何差异,仍然可以使用过时的实例化视图执行查询。实例化视图部件914被配置为将实例化视图与其源表合并,以识别自实例化视图的最后一次刷新以来是否对源表进行了任何更新。
实例化视图部件914被配置为共享实例化视图。在实施例中,实例化视图部件914与多租户数据库中的另一个账户共享实例化视图。实例化视图部件914可以使实例化视图相对于其源表自动刷新,以使实例化视图的共享版本相对于源表中的数据是最新的。可以与另一个账户共享该实例化视图,使得该另一个账户仅对该实例化视图中包含的摘要信息具有可见性,而对该实例化视图或任何基础模式、数据、元数据等的源表没有可见性。
图10是用于根据共享数据生成实例化视图的系统1000的示意图。实例化视图根据与提供者1002账户关联的存储的数据生成。提供者1002账户包括被配置用于对提供者1002数据执行任务的提供者执行平台1004。通过接收者执行平台1008借助于共享对象1010由接收者1006账户访问提供者1002数据。应当理解,术语“提供者”和“接收者”仅是说明性的,并且可以可替代地被称为第一账户和第二账户、提供者和消费者等等。提供者1002或接收者1006中任一个可以根据共享对象1010数据中的数据生成实例化视图1012。基于实例化视图1014的分析可以由提供者1002或接收者1006中任一个执行。
在实施例中,提供者1002和接收者1006是与同一基于云的数据库管理员相关联的不同账户。在实施例中,提供者1002和接收者1006与不同的基于云的和/或传统的数据库系统相关联。提供者1002包括提供者执行平台1004,提供者执行平台1004具有一个或更多个能够对提供者1002的数据库数据执行处理任务的执行节点,其中,数据库数据被存储在与提供者1002相关联的数据存储装置中。接收者1006包括接收者执行平台1008,接收者执行平台1008具有一个或更多个能够对接收者1006的数据库数据执行处理任务的执行节点,其中,数据库数据被存储在与接收者1006相关联的数据存储装置中。数据存储装置可包括基于云的可扩展存储装置,使得数据库数据分布在由诸如1004或1008的执行平台可访问的多个共享存储设备上。实例化视图1012由提供者1002或接收者1006中的任一个生成。当提供者1002生成实例化视图1012时,提供者执行平台1004可以直接访问提供者1002数据。当接收者1006生成实例化视图1012时,接收者执行平台1008可以通过读取共享对象1010中的数据来生成实例化视图1012。共享对象1010中的数据由提供者1002拥有,并对接收者1006可访问。共享对象1010中的数据可以具有安全视图定义。
在实施例中,共享对象1010由提供者1002定义,并且可用于接收者1006。共享对象1010是用于接收者1006访问提供者1002拥有的数据或其他对象的瞬时且零拷贝的装置。共享对象1010可以是数据、表、表的一个或更多个微分区、实例化视图、函数、用户定义的函数、模式等等。共享对象1010可以由提供者执行平台1004定义,并且对接收者执行平台1008可访问。共享对象1010可以提供对提供者1002数据的只读(而不是写)访问,使得接收者执行平台1008可以读取提供者1002数据,但是不能更新提供者1002数据或向提供者1002数据进行添加。共享对象1010可以包括安全视图定义,使得接收者执行平台1008不能查看提供者1002拥有的基本表中的基础数据。
实例化视图1012由提供者1002和/或接收者1006中的任一者生成。提供者1002可以直接根据其存储在磁盘或高速缓存存储中的数据生成实例化视图。提供者1002可以直接和/或通过共享对象1010使实例化视图1012对接收者1006可用。实例化视图1012可以具有安全视图定义,使得基础数据无法被其他账户(包括接收者1006)看到,但是可以看到实例化视图的结果。接收者1006可以根据共享对象1010中的数据生成实例化视图。在实施例中,当诸如接收者1006的另一个账户根据提供者1002数据生成实例化视图1012时,通知提供者1002。在实施例中,如果授权的接收者1006账户根据共享对象1010内的数据生成实例化视图1012,则不通知提供者1002。
图11示出了用于实例化视图的增量更新的处理流程1100的示意性框图。处理流程1100可以由任何适当的计算设备(包括例如计算服务管理器1402(参见图14)和/或共享部件210)执行。处理流程1100包括在1102处创建实例化视图,其中,该实例化视图基于源表。处理流程1100包括在1104处更新源表,这可以包括在1106处将新的微分区插入到源表中和/或在1108处从源表中移除已删除的微分区。处理流程1100包括在1110处查询实例化视图和源表。在1110处的查询包括检测源表上是否发生了未反映在具体化视图中的任何更新。例如,新的微分区可能被添加到源表,该新的微分区尚未被添加到实例化视图。已删除的微分区可从源表中移除,但其仍保留在实例化视图中。处理流程1100包括在1112处将更新应用于实例化视图。应用更新1112可以包括在1114处通过将新的微分区插入到实例化视图中来刷新实例化视图,和/或在1116处通过移除已删除的微分区来压缩实例化视图。
图12示出了用于实例化视图的增量更新的示例处理流程1200的示意性框图。处理流程1200可以由任何适当的计算设备(包括例如计算服务管理器1402(参见图14)和/或共享部件210)执行。处理流程1200包括在1202处基于源表生成实例化视图。处理流程1200包括在1204处更新源表,这可以包括在1206处插入微分区和/或在1208处移除微分区。处理流程包括在1210处查询实例化视图和源表以检测对源表的未反映在实例化视图中的任何更新。处理流程1200包括在1212处将更新应用于实例化视图。
在实施例中,源表由提供者账户拥有,并且实例化视图由接收者账户在1202处生成。源表可以跨在多租户数据库系统中的多个账户之间共享的多个共享存储设备中的一个或更多个共享存储设备存储。提供者账户和接收者账户可以各自在数据库系统内存储和管理数据库数据。提供者账户可以在数据库系统内存储和管理数据库数据,并且接收者账户可以仅与数据库系统连接以查看和/或查询其他账户拥有和/或管理的数据,而无需存储其自己的任何数据。可以将单独的执行资源与提供者账户和接收者账户中的每者相关联。在实施例中,源表与提供者账户相关联。提供者账户向接收者账户提供跨账户访问权限,使得接收者账户可以查看源表中的数据,可以查看源表中的部分数据,可以根据源表生成实例化视图,可以查询源表,和/或可以在源表上运行用户定义的函数。提供者账户可以生成包括任何前述访问权限的“共享对象”。
共享对象可以具有安全视图定义,使得源表的某些部分对接收者账户隐藏。接收者账户可以具有对源表的无限制访问权,使得接收者账户可以查看基础数据、模式、组织结构等。接收者账户可能具有对源表的有限访问权,使得接收者账户只能查看查询结果或实例化视图,而不能查看任何基础数据、模式、组织结构等。提供者账户可以确定授予接收者账户的访问级别,并且可以根据源表中存储的数据类型和提供者账户的需求来定制访问权的特定参数,以保持被隐藏以免被查看的数据的某些方面。
在实施例中,在1202处通过分配给接收者账户的执行资源来生成实例化视图,和/或由与接收者账户相关联的用户请求实例化视图。接收者账户从提供者账户接收到共享对象后,接收者账户可以访问以根据源表生成实例化视图。接收者账户生成的实例化视图可以存储在分配给接收者账户的磁盘存储或高速缓存存储中。接收者账户生成的实例化视图可以存储在磁盘存储或高速缓存存储中,该磁盘存储或高速缓存存储已分配给提供者账户,并且对接收者账户可访问。
在实施例中,在1202处通过分配给提供者账户的执行资源来生成实例化视图,和/或由与提供者账户相关联的用户请求实例化视图。实例化视图可以由提供者账户生成和管理,并对一个或更多个接收者账户可访问。在实施例中,实例化视图本身是可以由一个或更多个接收者账户访问的共享对象。
不管提供者账户或接收者账户是生成还是请求实例化视图,都由提供者账户在1203处更新源表。源表可以由提供者账户拥有和管理,并且一个或更多个接收者账户可以对源表具有只读访问权。与提供者账户关联的用户可以输入数据操纵语言(DML)命令来更新源表。这样的DML命令可以使新数据被插入到源表中,可以使数据从源表中删除,可以使数据被合并,和/或可以使数据在源表中被更新或更改。在实施例中,针对源表发生的任何更改,重新生成源表的一个或更多个微分区。例如,插入命令可以仅仅导致生成一个或更多个新的微分区而无需改变任何现有的微分区。删除命令可以从源表中移除行,并且可以通过重新生成一个或更多个微分区来执行删除命令,使得从一个或更多个微分区中移除已删除的行。更新命令可以更改源表中的数据输入项,并且可以通过重新生成一个或更多个微分区来执行更新命令,使得修改后的行被删除并利用更新的信息被重新生成。当提供者账户在1204处更新源表时,可以向接收者账户提供关于实例化视图现在相对于源表是过时的通知。实例化视图可以自动刷新以反映对源表所做的任何更新。
在图12所示的示例中,在1202处通过扫描源表来生成实例化视图。如所示,源表包括数据集{1 2 3 4 5 6}。每个参考数字{1 2 3 4 5 6}可以表示源表内的微分区。应当理解,源表可以具有任何数量的微分区,并且可以具有数百或数千个微分区。相应的实例化视图包括数据集[1(1 2 3)]和[2(4 5 6)],这些数据集可指示数据库中的微分区,其中微分区是数据库中的不可变存储对象。实例化视图可以分为第一数据集[1(1 2 3)]和第二数据集[2(4 5 6)],因为实例化视图包括太多数据而无法存储在单个数据集中。在实施例中,基于将车辆实例化视图的执行节点中的高速缓存存储容量来确定数据集的大小。实例化视图的每个数据集(包括[1(1 2 3)]和[2(4 5 6)])本身都可以是在本文中称为微分区的不可变存储设备。在实施例中,源表数据集{1 2 3 4 5 6}跨分配给提供者账户的一个或更多个存储设备存储。在各个实施例中,实例化视图数据集[1(1 2 3)]和[2(4 5 6)]可以跨分配给提供者账户或接收者账户的一个或更多个存储设备存储。当实例化视图数据集被存储在分配给提供者账户的存储设备中时,实例化视图数据集可以对一个或更多个接收者账户可访问,而无需复制实例化视图数据集。反之亦然,使得当实例化视图数据集被存储在分配给接收者账户的存储设备中时,实例化视图数据集可以对提供者账户和/或一个或更多个另外的接收者账户可访问,而无需复制实例化视图数据集。
在图12所示的示例中,在1204处,通过添加(+7)和移除(-2)来更新源表(请参见Δ1)。在1204处对源表的更新可以由分配给提供者账户的执行资源来执行。在实施例中,仅提供者账户具有将数据写入源表的能力。在1206处,通过添加(+8)和添加(+9),将两个微分区插入到源表中(请参见Δ2)。在1208处,通过移除(-1)和(-3),从源表中移除两个微分区(请参见Δ3)。如Δ(增量)所示,对源表的整体更新包括{+7+8+9-1-2-3},其中包括在源表上进行的各个更新(请参见Δ1,Δ2和Δ3)中的每个更新。对源表的整体更新将添加编号为7、8和9的微分区,并删除编号为1、2和3的微分区。
在图12所示的示例中,在1210处查询实例化视图和源表。可以由提供者账户或接收者账户中的任一者请求查询。仅当接收者账户具有使接收者账户能够查询源表中的数据的访问权限时,接收者账户才可以对源表发出查询。可以通过使用实例化视图来加快查询的处理时间。然而,由于源表在1204处进行更新,因此实例化视图相对于源表不再是新鲜的。查询的执行包括合并实例化视图和源表,以识别对源表进行的、未反映在实例化视图中的任何修改。在实例化视图和源表合并后,扫描实例化视图,并扫描源表。扫描源表,并在源表中检测到编号为{7 8 9}的微分区,而在实例化视图中未检测到这些微分区。扫描实例化视图,实例化视图数据集[1(1 2 3)]在实例化视图中被检测到但在源表中未被检测到。此实例化视图数据集包括有关源表中的微分区(1 2 3)的信息,而微分区(1 2 3)不再存在于源表中,因为通过1204处的更新命令以及1208处的删除命令移除了这些微分区。
在图12所示的示例中,在1212处对实例化视图应用更新。可以通过分配给请求和/或生成的实例化视图的账户的执行资源来执行实例化视图的更新。如果实例化视图存储在分配给提供者账户的存储资源中,则可以通过分配给提供者账户的执行资源来更新实例化视图。如果实例化视图存储在分配给接收者账户的存储资源中,则可以通过分配给接收者账户的执行资源来刷新实例化视图。扫描实例化视图,并且系统检测到实例化视图数据集[1(1 2 3)]和[2(4 5 6)],并且系统检测到数据集[1(1 2 3)]存在于实例化视图中,但不存在于源表中。系统确定应从实例化视图中移除实例化视图数据集[1(1 2 3)]。系统删除数据集[1(1 2 3)],使得保留实例化视图数据集[2(4 5 6)]。系统扫描源表并发现源表中存在微分区{7 8 9},但在实例化视图中不存在有关这些微分区的信息。系统将更新实例化视图以包括有关微分区{7 8 9}的信息。实例化视图现在相对于源表刷新并且包括有关微分区{4 5 6 7 8 9}的信息。实例化视图现在包括两个数据集,即[2(4 5 6)]和[3(7 89)]。
图13示出了源表1302的示例微分区和基于源表生成的示例实例化视图1304。源表1302经过线性变换以生成多个微分区(参见7号分区、12号分区和35号分区)。在如图13所示的一个实施例中,多个微分区可以生成实例化视图1304的单个微分区。微分区是数据库系统中的不可变存储对象。在实施例中,微分区被表示为微分区的显式列表,并且在某些实施例中,这可能是特别昂贵的。在替代实施例中,微分区被表示为一系列微分区。在优选实施例中,微分区被表示为DML版本,该DML版本指示源表1302的最后一次刷新和最后一次压缩。
示例源表1302被标记为“243号源表”,以说明可以利用任何数量的源表来生成实例化视图1304,实例化视图1304可以索引多个源表中的每个源表(请参见实例化视图1304中的“表”列),和/或可以为许多可能的源表生成任何数量的许多实例化视图。如图13中的示例实施例所示,源表1302包括三个微分区。源表1302的三个微分区包括7号分区、12号分区和35号分区。图13示出了在“分区”列下的实例化视图1304中对微分区进行索引。图13进一步示出了实例化视图1304包括基于源表1302的三个微分区的单个微分区。当对实例化视图1304进行增量更新时,另外的微分区可以被添加到实例化视图1304和/或从实例化视图1304中移除。
如图13中的示例实施方式所示,对于源表的实例化视图1304包括四列。分区列指示源表的哪个微分区适用于实例化视图1304的该行。如图13中的示例所示,分区列具有针对7号分区、12号分区和35号分区的行。在一些实施例中,这些分区可以指构成不能就地更新的不可变存储设备的微分区。实例化视图1304包括表列,该表列指示源表的标识符。在图13所示的示例中,源表的标识符是数字243。实例化视图1304包括一个“列2”列,该列与源表中的“列2”相对应。在图13所示的示例中,源表的列2可以具有“M”输入项或“F”输入项,以指示在该行中识别的人是男性还是女性。应当理解,示例性列2中的数据可以包括任何合适的信息。可能感兴趣的公共数据输入项包括:例如,姓名、地址、识别信息、价格信息、统计信息、人口统计信息、描述符信息等。应当理解,对列中存储什么数据没有限制,并且图13所示的男性/女性标识符仅出于示例目的。实例化视图1304进一步包括总数(SUM)列。总数列指示每个分区中有多少输入项在列2中具有“男性”或“女性”标识符。在示例实施方式中,分区7包括50,017个男性标识符和37,565个女性标识符;分区12包括43,090个男性标识符和27,001个女性标识符;以及分区35包括34,234个男性标识符和65,743个女性标识符。应当理解,示例实例化视图1304中的总数列仅用于说明目的。实例化视图1304不一定提供源表的数据总数,而是可以提供任何所需的度量。实例化视图1304中显示的计算将基于请求实例化视图的一方的需求逐案确定。
如图13所示,源表1302和实例化视图1304之间的元数据是一致的。实例化视图1304的元数据被更新以反映对源表1302的元数据的任何更新。
图14是描绘数据处理平台1400的示例实施例的框图。如图14所示,计算服务管理器1402与队列1404、客户端账户1408、元数据1406和执行平台1416通信。在实施例中,计算服务管理器1402不从客户端账户1408接收任何直接通信,而仅从队列1404接收与作业有关的通信。在特定实施方式中,计算服务管理器1402可以支持任意数量的客户端账户208,诸如提供数据存储和检索请求的最终用户、管理本文所述系统和方法的系统管理员以及与计算服务管理器1402交互的其他部件/设备。如本文所用,计算服务管理器1402也可以被称为执行本文所讨论的各种功能的“全局服务系统”。
计算服务管理器1402与队列1404通信。队列1404可以响应于触发事件而将作业提供给计算服务管理器1402。可以按接收顺序和/或优先级顺序将一个或更多个作业存储在队列1404中,并且可以将这些一个或更多个作业中的每个作业传送到计算服务管理器1402以进行调度和执行。队列1404可以基于触发事件(诸如数据的摄取、删除表中的一个或更多个行、更新表中的一个或更多个行、实例化视图相对于其源表已过时、表达到指示该表应重新聚类的预定义的聚类阈值等等)来确定要执行的作业。在实施例中,队列1404包括用于刷新实例化视图的输入项。队列1404可以包括用于刷新根据本地源表(即,对于操作计算服务管理器1402的同一账户在本地的)生成的实例化视图的输入项和/或刷新根据由不同账户管理的共享源表生成的实例化视图的输入项。
计算服务管理器1402还耦合到元数据1406,该元数据与整个数据处理平台1400中存储的完整数据相关联。在一些实施例中,元数据1406包括存储在远程数据存储系统中的数据以及从本地高速缓存可获得的数据的摘要。另外,元数据1406可以包括有关在远程数据存储系统和本地高速缓存中如何组织数据的信息。元数据1406允许系统和服务确定是否需要访问数据段,而无需从存储设备加载或访问实际数据。
在实施例中,计算服务管理器1402和/或队列1404可以基于元数据1406确定应该执行作业。在这样的实施例中,计算服务管理器1402和/或队列1404可以扫描元数据1406并且确定应当执行作业以提高数据组织或数据库性能。例如,计算服务管理器1402和/或队列1404可以确定已生成用于实例化视图的源表的新版本,并且尚未刷新实例化视图以反映源表的新版本。元数据1406可以包括事务性变化跟踪流(transactional change trackingstream),该事务性变化跟踪流指示何时生成源表的新版本以及何时最后一次刷新实例化视图。基于该元数据1406事务流,计算服务管理器1402和/或队列1404可以确定应该执行作业。在实施例中,计算服务管理器1402基于触发事件来确定应执行作业,并将该作业存储在队列1404中,直到计算服务管理器1402准备好调度和管理该作业的执行为止。
计算服务管理器1402可以从客户端账户1408接收规则或参数,并且这样的规则或参数可以指导计算服务管理器1402调度和管理内部作业。客户端账户1408可以指示内部作业应该仅在特定时间执行或者应该仅利用设定最大量的处理资源。客户端账户1408可以进一步指示应当提示计算服务管理器1402确定应当执行作业的一个或更多个触发事件。客户端账户1408可以提供关于任务可以被重新执行多少次和/或任务应该在何时被重新执行的参数。
计算服务管理器1402进一步耦合到执行平台1416,执行平台1416提供执行各种数据存储和数据检索任务的多个计算资源,如下面更详细地讨论的。执行平台1416耦合到作为存储平台1410的一部分的多个数据存储设备1412a、1412b和1412n。尽管在图14中示出了三个数据存储设备1412a、1412b和1412n,但是执行平台1416能够与任何数量的数据存储设备进行通信。在一些实施例中,数据存储设备1412a、1412b和1412n是位于一个或更多个地理位置的基于云的存储设备。例如,数据存储设备1412a、1412b和1412n可以是公共云基础设施或私有云基础设施的一部分。数据存储设备1412a、1412b和1412n可以是硬盘驱动器(HDD),固态驱动器(SSD),存储集群、Amazon S3TM存储系统或任何其他数据存储技术。另外,存储平台1410可以包括分布式文件系统(诸如,Hadoop分布式文件系统(HDFS))、对象存储系统等。
在特定实施例中,经由一个或更多个数据通信网络来实现计算服务管理器1402、队列1404、元数据1406、客户端账户1408与执行平台1416之间的通信链路。类似地,执行平台1416与存储平台1410中的数据存储设备1412a-1412n之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在替代实施例中,使用任何类型的通信介质和任何通信协议来实现这些通信链路。
如图14所示,数据存储设备1412a、1412b和1412n从与执行平台1416关联的计算资源分离。该体系结构支持基于变化的数据存储/检索需求以及访问数据处理平台1400的用户和系统的变化的需求,对数据处理平台1400进行动态更改。动态更更的支持允许数据处理平台1400响应于对数据处理平台1400内的系统和部件的变化的需求而快速缩放。计算资源与数据存储设备的分离支持大量数据的存储,而无需相应的大量计算资源。类似地,资源的这种分离支持在特定时间使用的计算资源的显著增加,而无需相应增加可用数据存储资源。
计算服务管理器1402、队列1404、元数据1406、客户端账户1408、执行平台1416和存储平台1410在图14中被示为单独的部件。然而,计算服务管理器1402、队列1404、元数据1406、客户端账户1408、执行平台1416和存储平台1410中的每者可以被实现为分布式系统(例如,分布在多个地理位置处的多个系统/平台)。另外,计算服务管理器1402、元数据1406、执行平台1416和存储平台1410中的每者都可以根据对从队列1404和/或客户端账户208接收到的请求的更改和数据处理平台1400变化的需求进行扩展或缩减(彼此独立)。因此,在所描述的实施例中,数据处理平台1400是动态的并且支持定期改变以满足当前数据处理需求。
在典型操作期间,数据处理平台1400处理从队列1404接收到的或由计算服务管理器1402确定的多个作业。这些作业由计算服务管理器1402调度和管理,以确定何时以及如何执行该作业。例如,计算服务管理器1402可以将作业划分为多个离散任务,并且可以确定需要什么数据来执行多个离散任务中的每个离散任务。计算服务管理器1402可以将多个离散任务中的每个离散任务分配给执行平台1416的一个或更多个节点以处理任务。计算服务管理器1402可以确定需要哪些数据来处理任务,并且进一步确定执行平台1416内的哪些节点最适合于处理该任务。一些节点可能已经高速缓存了处理任务所需的数据,因此是用于处理任务的不错的候选者。元数据1406协助计算服务管理器1402确定执行平台1416中的哪些节点已经高速缓存了处理任务所需的数据的至少一部分。执行平台1416中的一个或更多个节点使用由节点高速缓存的数据以及必要时从存储平台1410检索到的数据来处理任务。期望从执行平台1416内的高速缓存中检索尽可能多的数据,因为检索速度通常比从存储平台1410中检索数据快得多。
如图14所示,数据处理平台1400将执行平台1416与存储平台1410分开。在这种布置中,执行平台1416中的处理资源和高速缓存资源独立于存储平台1410中的数据存储资源1412a-1412n进行操作。因此,计算资源和高速缓存资源不限于特定的数据存储资源1412a-1412n。相反,所有计算资源和所有高速缓存资源都可以从存储平台1410中的任何数据存储资源中检索数据并将数据存储到其中。另外,数据处理平台1400支持向执行平台1416添加新的计算资源和高速缓存资源,而无需对存储平台1410进行任何更改。类似地,数据处理平台1400支持向存储平台1410添加数据存储资源,而无需对执行平台1416中的节点进行任何更改。
图15是描绘计算服务管理器1402的实施例的框图。如图15所示,计算服务管理器1402包括耦合到数据存储设备1506的访问管理器1502和密钥管理器1504。访问管理器1502处理针对本文描述的系统的认证和授权任务。密钥管理器1504管理在认证和授权任务期间使用的密钥的存储和认证。例如,访问管理器1502和密钥管理器1504管理用于访问存储在远程存储设备(例如,存储平台1410中的数据存储设备)中的数据的密钥。如本文所用,远程存储设备也可以被称为“永久存储设备”或“共享存储设备”。请求处理服务1508管理接收到的数据存储请求和数据检索请求(例如,将对数据库数据执行的作业)。例如,请求处理服务1508可以确定处理接收到的数据存储请求或数据检索请求所需的数据。必要的数据可以存储在执行平台1416内的高速缓存内(如下文更详细讨论),也可以存储在存储平台1410中的数据存储设备中。管理控制台服务1510支持管理员和其他系统管理员对各种系统和进程的访问。另外,管理控制台服务1510可以接收执行作业并监视系统上的工作负荷的请求。
计算服务管理器1402还包括作业编译器1512、作业优化器1514和作业执行器1510。作业编译器1512将作业解析为多个离散任务,并为多个离散任务中的每个离散任务生成执行代码。作业优化器1514基于需要处理的数据来确定执行多个离散任务的最佳方法。作业优化器1514还处理各种数据修剪操作和其他数据优化技术,以提高执行作业的速度和效率。作业执行器1516执行从队列1404接收到的或由计算服务管理器1402确定的作业的执行代码。
作业调度程序和协调器1518将接收到的作业发送到适当的服务或系统,以进行编译、优化并分派到执行平台1416。例如,可以按该优先顺序对作业进行优先考虑和处理。在实施例中,作业调度程序和协调器1518确定由计算服务管理器1402与其他“外部”作业(诸如可以由数据库中的其他系统调度但可以利用执行平台1416中的相同处理资源的用户查询)调度的内部作业的优先级。在一些实施例中,作业调度程序和协调器1518识别或分配执行平台1416中的特定节点以处理特定任务。虚拟仓库管理器1520管理在执行平台1416中实现的多个虚拟仓库的操作。如下所述,每个虚拟仓库都包括多个执行节点,每个执行节点都包括一个高速缓存和一个处理器。
另外,计算服务管理器1402包括配置和元数据管理器1522,其管理与存储在远程数据存储设备和本地高速缓存(即,执行平台1416中的高速缓存)中的数据有关的信息。如下面更详细地讨论的,配置和元数据管理器1522使用元数据来确定需要访问哪些数据文件以检索用于处理特定任务或作业的数据。监视器和工作负荷分析器1524监督由计算服务管理器1402执行的进程,并管理跨执行平台1416中的虚拟仓库和执行节点的任务(例如,工作负荷)的分配。监视器和工作负荷分析器1524还根据需要基于整个数据处理平台1400的变化的工作负荷重新分配任务并基于也可以由执行平台1416处理的用户(即“外部”)查询工作负荷进一步重新分配任务。配置和元数据管理器1522以及监视器和工作负荷分析器1524耦合到数据存储设备1526。图15中的数据存储设备1506和1526表示数据处理平台1400内的任何数据存储设备。例如,数据存储设备1506和1526可以表示执行平台1416中的高速缓存、存储平台1410中的存储设备或任何其他存储设备。
计算服务管理器1402还包括如本文公开的共享部件210。共享部件210被配置为提供跨账户访问权限,并且可以进一步被配置为生成和更新跨账户实例化视图。
图16是描绘执行平台1416的实施例的框图。如图16所示,执行平台1416包括多个虚拟仓库,其包括虚拟仓库1、虚拟仓库2和虚拟仓库n。每个虚拟仓库都包括多个执行节点,每个执行节点都包括一个数据高速缓存和一个处理器。虚拟仓库可以通过使用多个执行节点并行执行多个任务。如本文中所讨论的,执行平台1416可以基于系统和用户的当前处理需求实时地添加新的虚拟仓库并丢弃现有的虚拟仓库。这种灵活性允许执行平台1416在需要时快速部署大量计算资源,而不必在不再需要它们时继续为那些计算资源付费。所有虚拟仓库都可以访问任何数据存储设备(例如,存储平台1410中的任何存储设备)中的数据。
尽管图16中所示的每个虚拟仓库包括三个执行节点,但是特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中执行节点的数量是动态的,使得在存在额外需求时创建新的执行节点,并在不再需要现有执行节点时将其删除。
每个虚拟仓库都能够访问图14中所示的任何数据存储设备1412a-1412n。因此,虚拟仓库不必分配给特定的数据存储设备1412a-1412n,而是可以从存储平台1410内的任何数据存储设备1412a-1412n访问数据。类似地,图16中所示的每个执行节点可以访问来自任何数据存储设备1412a-1412n的数据。在一些实施例中,可以将特定的虚拟仓库或特定的执行节点临时分配给特定的数据存储设备,但是该虚拟仓库或执行节点可以稍后从任何其他数据存储设备访问数据。
在图16的示例中,虚拟仓库1包括三个执行节点1602a、1602b和1602n。执行节点1602a包括高速缓存1604a和处理器1606a。执行节点1602b包括高速缓存1604b和处理器1606b。执行节点1602n包括高速缓存1604n和处理器1606n。每个执行节点1602a、1602b和1602n与处理一个或更多个数据存储和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(诸如,聚类服务、实例化视图刷新服务、文件压缩服务、存储程序服务或文件升级服务)相关联的数据存储和数据检索任务。在其他实施方式中,特定虚拟仓库可以处理与特定数据存储系统或特定类别的数据相关联的数据存储和数据检索任务。
类似于以上讨论的虚拟仓库1,虚拟仓库2包括三个执行节点1612a、1612b和1612n。执行节点1612a包括高速缓存1614a和处理器1616a。执行节点1612n包括高速缓存1614n和处理器1616n。执行节点1612n包括高速缓存1614n和处理器1616n。另外,虚拟仓库3包括三个执行节点1622a、1622b和1622n。执行节点1622a包括高速缓存1624a和处理器1626a。执行节点1622b包括高速缓存1624b和处理器1626b。执行节点1622n包括高速缓存1624n和处理器1626n。
在一些实施例中,相对于执行节点正在高速缓存的数据,图16所示的执行节点是无状态的。例如,这些执行节点不存储或以其他方式维护有关执行节点的状态信息或由特定执行节点高速缓存的数据。因此,在执行节点发生故障的情况下,可以用另一个节点透明地替换发生故障的节点。由于没有与发生故障的执行节点相关联的状态信息,因此新的(替换)执行节点可以轻松替换发生故障的节点,而无需考虑重新创建特定状态。
尽管图16所示的执行节点各自包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可能有所不同。图16中所示的高速缓存在本地执行节点中存储从存储平台1410中的一个或更多个数据存储设备检索到的数据。因此,高速缓存减小或消除了在从远程存储系统中不断检索数据的平台中出现的瓶颈问题。代替从远程存储设备重复访问数据,本文描述的系统和方法从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用提供对高速缓存的数据的快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以存储来自存储平台1410中的任何存储设备的数据。
此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可包含大量的计算资源和最少的高速缓存资源,从而使该执行节点可用于需要大量计算资源的任务。另一个执行节点可包含大量的高速缓存资源和最少的计算资源,从而使该执行节点可用于需要高速缓存大量数据的任务。又一个执行节点可包含提供更快的输入-输出操作的高速缓存资源,这对于需要快速扫描大量数据的任务很有用。在一些实施例中,基于执行节点将要执行的预期任务,在创建执行节点时确定与特定执行节点相关联的高速缓存资源和计算资源。
另外,与特定执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的改变的任务而随时间改变。例如,如果执行节点执行的任务变得更加处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。
尽管虚拟仓库1、2和n与同一执行平台1416相关联,但是可以使用在多个地理位置处的多个计算系统来实现虚拟仓库。例如,虚拟仓库1可以由第一地理位置处的计算系统来实现,而虚拟仓库2和n由第二地理位置处的另一计算系统来实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同的实体维护的基于云的计算系统。
另外,每个虚拟仓库在图16中被示为具有多个执行节点。可以使用位于多个地理位置处的多个计算系统来实现与每个虚拟仓库相关联的多个执行节点。例如,虚拟仓库1的实例在一个地理位置处的一个计算平台上实现执行节点1602a和1602b,并在另一地理位置处的不同计算平台处实现执行节点1602n。选择特定的计算系统以实施执行节点可以取决于各种因素,诸如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力以及哪些计算系统已在虚拟仓库中实现其他执行节点。
执行平台1416也是容错的。例如,如果一个虚拟仓库发生故障,那么该虚拟仓库将很快被位于不同地理位置处的不同虚拟仓库替换。
特定执行平台1416可以包括任意数量的虚拟仓库。另外,特定执行平台中虚拟仓库的数量是动态的,使得在需要附加的处理和/或高速缓存资源时创建新的虚拟仓库。类似地,当不再需要与虚拟仓库关联的资源时,可以删除现有的虚拟仓库。
在一些实施例中,虚拟仓库可以在存储平台1410中的相同数据上操作,但是每个虚拟仓库具有其自己的具有独立处理和高速缓存资源的执行节点。此配置允许对不同虚拟仓库上的请求进行独立处理,并且请求之间不会相互干扰。这种独立的处理与动态添加和移除虚拟仓库的能力相结合,支持为新用户添加新的处理能力,而不会影响现有用户观察到的性能。
在实施例中,将不同的执行平台1416分配给多租户数据库100中的不同账户。这可以确保存储在不同的执行平台1416中的高速缓存中的数据仅对关联账户可访问。每个不同的执行平台1416的大小可以被定制以适应多租户数据库100中每个账户的处理需求。在实施例中,提供者账户具有其自己的执行平台1416,而接收者账户具有其自己的执行平台1416。在实施例中,接收者账户从提供者账户接收共享对象,该共享对象使接收者账户能够根据提供者账户拥有的数据生成实例化视图。接收者账户的执行平台1416可以生成实例化视图。当对实例化视图的源表(即,提供者账户拥有的数据)进行更新时,提供者账户的执行平台1416将执行更新。如果接收者账户生成了实例化视图,则接收者账户的执行平台1416可以负责相对于其源表刷新该实例化视图。
图17是描绘示例操作环境1700的框图,其中在虚拟仓库管理器1702下,队列1404与多个虚拟仓库进行通信。在环境1700中,队列1404可以通过多个虚拟仓库1704a、1704b和1704n访问多个数据库共享存储设备1706a、1706b、1706c、1706d、1706e和1706n。尽管在图17中未示出,但是队列1404可以通过计算服务管理器1402访问虚拟仓库1704a、1704b和1704n(请参见图1)。在特定实施例中,数据库1706a-1706n包含在存储平台1410中,并且由执行平台1416中实现的任何虚拟仓库可访问。在一些实施例中,队列1404可以使用诸如因特网的数据通信网络访问虚拟仓库1704a-1704n之一。在一些实施方式中,客户端账户可以指定队列1404(配置用于存储要完成的内部作业)应在特定时间与特定虚拟仓库1704a-1704n交互。
在实施例中(如所示),每个虚拟仓库1704a-1704n可以与所有数据库1706a-1706n通信。在一些实施例中,每个虚拟仓库1704a-1704n被配置为与所有数据库1706a-1706n的子集通信。在这样的布置中,与数据集相关联的个体客户端账户可以通过单个虚拟仓库来发送所有数据检索和数据存储请求和/或将其发送到数据库1706a-1706n的某个子集。此外,在某个虚拟仓库1704a-1704n被配置为与数据库1706a-1706n的特定子集通信的情况下,该配置为动态的。例如,虚拟仓库1704a可以被配置为与数据库1706a-1706n的第一子集通信,并且可以稍后被重新配置为与数据库1706a-1706n的第二子集通信。
在实施例中,队列1404将数据检索、数据存储和数据处理请求发送到虚拟仓库管理器1702,虚拟仓库管理器1702将请求路由到适当的虚拟仓库1704a-1704n。在一些实施方式中,虚拟仓库管理器1702向虚拟仓库1704a-1704n提供作业的动态分配。
在一些实施例中,容错系统响应于虚拟仓库的故障而创建新的虚拟仓库。新的虚拟仓库可以在同一虚拟仓库组中,或者也可以在不同地理位置的不同虚拟仓库组中创建。
本文所述的系统和方法允许将数据作为与计算(或处理)资源分开的服务来存储和访问。即使尚未从执行平台1416分配任何计算资源,数据也可用于虚拟仓库,而无需从远程数据源重新加载数据。因此,数据是独立于与数据相关联的计算资源的分配而可用的。所描述的系统和方法对于任何类型的数据都是有用的。在特定实施例中,数据以结构化的优化格式存储。数据存储/访问服务与计算服务的分离也简化了不同用户和组之间的数据共享。如本文所述,每个虚拟仓库都可以访问其具有访问许可的任何数据,即使同时其他虚拟仓库正在访问相同的数据也是如此。该体系结构支持运行查询,而无需在本地高速缓存中存储任何实际数据。本文所述的系统和方法能够进行透明的动态数据移动,该动态数据移动根据需要以对系统用户透明的方式将数据从远程存储设备移动到本地高速缓存。此外,由于任何虚拟仓库都可以由于数据存储服务与计算服务的分离而访问任何数据,因此该体系结构无需事先进行数据移动即可支持数据共享。
图18是用于在多租户数据库系统中跨账户生成实例化视图的方法1800的示意性框图。方法1800可以由任何合适的计算设备(诸如计算服务管理器1402、共享部件210和或实例化视图部件914)来执行。方法1800可以通过处理分配给第一账户和/或第二账户的资源来实现。
方法1800开始,并且计算资源在1802处定义第一账户中的共享对象。共享对象包括与第一账户相关联的数据。方法1800包括在1804处向第二账户授予对共享对象的跨账户访问权限,使得第二账户有权访问共享对象而无需复制共享对象。方法1800包括在1806处根据共享对象生成实例化视图。方法1800包括在1808处更新与第一账户相关联的数据。方法1800包括在1810处通过合并实例化视图和共享对象来识别实例化视图相对于共享对象是否过时。
图19是用于在多租户数据库系统中跨账户共享实例化视图的方法1900的示意性框图。方法1900可以由任何合适的计算设备(诸如计算服务管理器1402、共享部件210和或实例化视图部件914)来执行。方法1900可以通过处理分配给第一账户和/或第二账户的资源来实现。
方法1900开始,并且在1902处,计算资源根据与多租户数据库的第一账户相关联的源表定义实例化视图。方法1900继续,并且在1904处,计算资源针对第二账户定义了对实例化视图的跨账户访问权限,使得第二账户可以读取实例化视图而无需复制实例化视图。方法1900继续,并且在1906处,计算资源修改用于实例化视图的源表。方法1900继续,并且在1908处,计算资源通过合并实例化视图和源表来识别该实例化视图相对于源表是否过时。
图20是描绘示例计算设备2000的框图。在一些实施例中,计算设备2000用于实现本文所讨论的一个或更多个系统和部件。此外,计算设备2000可以与本文描述的任何系统和部件进行交互。因此,计算设备2000可以用于执行各种程序和任务,诸如本文所讨论的那些程序和任务。计算设备2000可以用作服务器、客户端或任何其他计算实体。计算设备2000可以是多种计算设备中的任何一种,诸如台式计算机、笔记本计算机、服务器计算机、手持式计算机、平板计算机等。
计算设备2000包括一个或更多个处理器2002、一个或更多个存储器设备2004、一个或更多个接口2006、一个或更多个大容量存储设备2008以及一个或更多个输入/输出(I/O)设备2010,它们都耦合到总线2012。一个或更多个处理器2002包括执行存储在一个或更多个存储设备2004和/或一个或更多个大容量存储设备2008中的指令的一个或更多个处理器或控制器。一个或更多个处理器2002还可以包括各种类型的计算机可读介质,诸如高速缓冲存储器。
一个或更多个存储器设备2004包括各种计算机可读介质,诸如易失性存储器(例如,随机存取存储器(RAM))和/或非易失性存储器(例如,只读存储器(ROM))。一个或更多个存储器设备2004还可以包括可重写ROM,诸如闪存。
一个或更多个大容量存储设备2008包括各种计算机可读介质,诸如磁带、磁盘、光盘、固态存储器(例如,闪存)等等。一个或更多个大容量存储设备2008中还可包括各种驱动器,以使得能够从各种计算机可读介质读取和/或写入各种计算机可读介质。一个或更多个大容量存储设备2008包括可移动介质和/或不可移动介质。
一个或更多个I/O设备2010包括允许将数据和/或其他信息输入到计算设备2000或从计算设备1800检索的各种设备。示例I/O设备2010包括光标控制设备、键盘、小键盘、麦克风、监视器或其他显示设备、扬声器、打印机、网络接口卡、调制解调器、镜头、CCD或其他图像捕获设备等。
一个或更多个接口2006包括允许计算设备2000与其他系统、设备或计算环境交互的各种接口。一个或更多个示例接口2006包括任意数量的不同网络接口,诸如到局域网(LAN)、广域网(WAN)、无线网络和因特网的接口。
总线2012允许一个或更多个处理器2002、一个或更多个存储器设备2004、一个或更多个接口2006、一个或更多个大容量存储设备2008和一个或更多个I/O设备2010彼此通信以及与耦合到总线2012的其他设备或部件通信。总线2012代表几种类型的总线结构中的一种或更多种,诸如系统总线、PCI总线、IEEE 1394总线、USB总线等等。
为了说明的目的,程序和其他可执行程序部件在本文中被示为离散块,尽管应当理解,这样的程序和部件可以在不同时间驻留在计算设备2000的不同存储部件中并且由一个或更多个处理器2002执行。可替代地,本文描述的系统和过程可以以硬件或硬件、软件和/或固件的组合来实现。例如,可以对一个或更多个专用集成电路(ASIC)进行编程,以执行本文所述的系统和过程中的一个或更多个系统和过程。如本文中所用,术语“模块”或“部件”旨在传达用于执行诸如通过硬件或硬件、软件和/或固件的组合的过程的实现装置,以便执行本文公开的全部或部分操作。
示例
以下示例涉及其他实施例。
示例1是一种用于在多租户数据库中进行跨账户数据共享的系统。该系统包括用于在第一账户中定义共享对象的装置,该共享对象包括与第一账户相关联的数据。该系统包括用于向第二账户授予对共享对象的跨账户访问权限的装置,使得第二账户有权访问共享对象而无需复制共享对象。该系统包括用于根据共享对象生成实例化视图的装置。该系统包括用于更新与第一账户相关联的数据的装置。该系统包括用于通过合并实例化视图和共享对象来识别实例化视图相对于共享对象是否过时的装置。
示例2是根据示例1的系统,其中,用于识别实例化视图相对于共享对象是否过时的装置包括:用于合并实例化视图和共享对象的装置;用于识别自实例化视图的最后一次刷新以来共享对象中的数据是否已被修改的装置,其中,可以通过更新、删除或插入中的一个或更多个来修改共享对象中的数据;以及用于响应于识别到自实例化视图的最后一次刷新以来对共享对象的修改而相对于共享对象刷新实例化视图的装置。
示例3是根据示例1-2中任一项的系统,还包括用于查询共享对象的装置,该用于查询的装置包括:用于合并实例化视图和共享对象的装置;以及用于基于实例化视图中的信息以及自实例化视图的最后一次刷新以来对共享对象所做的任何修改来执行查询的装置。
示例4是根据示例1-3中任一项的系统,还包括:用于在多个共享存储设备中的一个或更多个共享存储设备当中存储与第一账户相关联的数据的装置;用于定义与第一账户相关联的执行平台的装置,该第一账户具有对与第一账户相关联的数据的读访问权和写访问权;以及用于定义与第二账户相关联的执行平台的装置,该第二账户具有对共享对象的读访问权。
示例5是根据示例1-4中任一项的系统,其中:用于根据共享对象生成实例化视图的装置被结合到与第二账户相关联的执行平台中;用于更新与第一账户相关联的数据的装置被结合到与第一账户相关联的执行平台中;以及用于识别实例化视图相对于共享对象是否过时的装置被结合到与第二账户相关联的执行平台中。
示例6是根据示例1-5中任一项的系统,还包括用于针对实例化视图定义安全视图定义的装置,用于定义安全视图定义的装置包括以下一种或更多种装置:用于授予第二账户对实例化视图的读访问权和写访问权的装置;用于授予第一账户对实例化视图的读访问权的装置;或用于对第一账户隐藏实例化视图使得第一账户无法查看是否生成了实例化视图的装置。
示例7是根据示例1-6中任一项的系统,还包括用于针对对共享对象的跨账户访问权限定义查看特权的装置,使得共享对象的基础详细信息包括安全视图定义,其中,共享对象的基础详细信息包括以下一项或更多项:共享对象中的数据字段;共享对象中的一列数据;共享对象的基础表的结构元素;或共享对象中的大量数据。
示例8是根据示例1-7中任一项的系统,其中,用于针对对共享对象的跨账户访问权限定义查看特权的装置包括用于对第二账户隐藏查看特权的装置以及用于使查看特权对第一账户可见的装置。
示例9是根据示例1-8中任一项的系统,其中,用于定义共享对象的装置包括以下一种或更多种:用于定义对于第一账户唯一的对象名称的装置;用于定义对象角色的装置;或用于生成参考列表的装置,该参考列表包括有资格接收对该共享对象的跨账户访问权限的一个或更多个账户的列表。
示例10是根据示例1-9中任一项的系统,还包括:用于从第二账户接收请求以根据与第一账户相关联的特定数据生成实例化视图的装置;用于识别共享对象中是否包括特定数据的装置;用于授予第二账户根据特定数据生成实例化视图的授权的装置;以及用于向第一账户提供通知,该通知指示第二账户接收到根据特定数据生成实例化视图的授权。
示例11是一种用于在多租户数据库中进行跨账户数据共享的方法。该方法包括在第一账户中定义共享对象,该共享对象包括与第一账户相关联的数据。该方法包括向第二账户授予对共享对象的跨账户访问权限,使得第二账户有权访问共享对象而无需复制共享对象。该方法包括根据共享对象生成实例化视图。该方法包括更新与第一账户相关联的数据。该方法包括通过合并实例化视图和共享对象来识别实例化视图相对于共享对象是否过时。
示例12是根据示例11的方法,其中,识别实例化视图相对于共享对象是否过时包括:合并实例化视图和共享对象;识别自实例化视图的最后一次刷新以来共享对象中的数据是否已被修改,其中,可以通过更新、删除或插入中的一者或更多者来修改共享对象中的数据;以及响应于识别到自实例化视图的最后一次刷新以来对共享对象的修改而相对于共享对象刷新实例化视图。
示例13是根据示例11-12中任一项的方法,还包括通过以下方式查询共享对象:合并实例化视图和共享对象;以及基于实例化视图中的信息以及自实例化视图的最后一次刷新以来对共享对象所做的任何修改来执行查询。
示例14是根据示例11-13中任一项的方法,还包括:在多个共享存储设备中的一个或更多个共享存储设备当中存储与第一账户相关联的数据;定义与第一账户相关联的执行平台,该第一账户具有对与第一账户相关联的数据的读访问权和写访问权;以及定义与第二账户相关联的执行平台,该第二账户具有对共享对象的读访问权。
示例15是根据示例11-14中任一项的方法,其中:根据共享对象生成实例化视图由与第二账户相关联的执行平台处理;更新与第一账户相关联的数据由与第一账户相关联的执行平台处理;以及识别实例化视图相对于共享对象是否过时由与第二账户相关联的执行平台处理。
示例16是可配置为执行存储在非暂时性计算机可读存储介质中的指令的处理器,该指令包括:在第一账户中定义共享对象,该共享对象包括与第一账户相关联的数据;向第二账户授予对共享对象的跨账户访问权限,使得第二账户有权访问共享对象而无需复制共享对象;根据共享对象生成实例化视图;更新与第一账户相关联的数据;并且通过合并实例化视图和共享对象来识别实例化视图相对于共享对象是否过时。
示例17是根据示例16的处理器,其中,识别实例化视图相对于共享对象是否过时包括:合并实例化视图和共享对象;识别自实例化视图的最后一次刷新以来共享对象中的数据是否已被修改,其中,可以通过更新、删除或插入中的一者或更多者来修改共享对象中的数据;以及响应于识别到自实例化视图的最后一次刷新以来对共享对象的修改而相对于共享对象刷新实例化视图。
示例18是根据示例16-17中任一项的处理器,其中,该指令还包括通过以下方式查询共享对象:合并实例化视图和共享对象;以及基于实例化视图中的信息以及自实例化视图的最后一次刷新以来对共享对象所做的任何修改来执行查询。
示例19是根据示例16-18中任一项的处理器,其中,该指令还包括通过以下一种或更多种方式为实例化视图定义安全视图定义:授予第二账户对实例化视图的读访问权和写访问权;授予第一账户对实例化视图的读访问权;或对第一账户隐藏实例化视图使得第一账户无法查看是否生成了实例化视图。
示例20是根据示例16-19中任一项的处理器,其中,该指令还包括针对对共享对象的跨账户访问权限定义查看特权,使得共享对象的基础详细信息包括安全视图定义,其中,共享对象的基础详细信息包括以下一项或更多项:共享对象中的数据字段;共享对象中的一列数据;共享对象的基础表的结构元素;或共享对象中的大量数据。
示例21是一种用于在多租户数据库中跨账户共享实例化视图的系统。该系统包括用于根据源表定义实例化视图的装置,该源表与多租户数据库的第一账户相关联。该系统包括用于针对第二账户定义对实例化视图的跨账户访问权限的装置,使得第二账户有权读取该实例化视图。该系统包括用于修改实例化视图的源表的装置。该系统包括用于通过合并实例化视图和源表来识别实例化视图相对于源表是否过时的装置。
示例22是根据示例21的系统,其中,用于定义对实例化视图的跨账户访问权限的装置还包括用于定义跨账户访问权限的装置,使得第二账户无权读取实例化视图的源表或无权写入实例化视图的源表。
示例23是根据示例21-22中任一项的系统,其中,用于识别实例化视图相对于源表是否过时的装置包括:用于合并实例化视图和源表的装置;以及用于识别自实例化视图的最后一次刷新以来源表中的数据是否已被修改的装置,其中,该系统还包括用于响应于识别到自实例化视图的最后一次刷新以来对源表的修改而相对于源表刷新实例化视图的装置。
示例24是根据示例21-23中任一项的系统,还包括:用于在跨多租户数据库共享的多个存储设备中的一个或更多个存储设备当中存储与第一账户相关联的源表的装置;用于定义与第一账户相关联的执行平台的装置,该第一账户具有对实例化视图的源表的读访问权和写访问权;以及用于定义与具有对实例化视图的读访问权的第二账户相关联的执行平台的装置。
示例25是根据示例21-24中任一项的系统,其中:与第一账户相关联的执行平台包括用于定义实例化视图的装置;以及与第一账户相关联的执行平台包括用于修改实例化视图的源表的装置。
示例26是根据示例21-25中任一项的系统,还包括用于针对对实例化视图的跨账户访问权限定义查看特权的装置,使得实例化视图的源表的基础详细信息包括安全视图定义,其中,源表的基础详细信息包括以下一项或更多项:源表中的数据字段;源表中的一列数据;源表的结构元素;源表中的大量数据;源表的元数据;或对源表所做的修改的事务日志。
示例27是根据示例21-26中任一项的系统,其中,用于针对对实例化视图的跨账户访问权限定义查看特权的装置包括用于对第二账户隐藏查看特权的装置以及用于使查看特权对第一账户可见的装置。
示例28是根据示例21-27中任一项的系统,还包括用于定义参考列表的装置,该参考列表包括一个或更多个有资格接收对实例化视图的跨账户访问权限的账户的列表。
示例29是根据示例21-28中任一项的系统,还包括:用于从第二账户接收请求以根据存储在源表中的特定数据生成实例化视图的装置;用于将请求提供给第一账户进行批准或拒绝的装置;以及用于向第二账户提供指示该请求是被第一账户批准还是拒绝的通知的装置。
示例30是根据示例21-29中任一项的系统,还包括:用于响应于识别到实例化视图相对于源表是过时的而向第二账户提供指示该实例化视图相对于源表是过时的通知的装置。
示例31是一种用于在多租户数据库中跨账户共享实例化视图的方法。该方法包括根据源表定义实例化视图,该源表与多租户数据库的第一账户相关联。该方法包括针对第二账户定义对实例化视图的跨账户访问权限,使得第二账户有权读取该实例化视图。该方法包括修改实例化视图的源表。该方法包括通过合并实例化视图和源表来识别实例化视图相对于源表是否过时。
示例32是根据示例31的方法,其中,定义对实例化视图的跨账户访问权限还包括定义跨账户访问权限,使得第二账户无权读取实例化视图的源表或无权写入实例化视图的源表。
示例33是根据示例31-32中任一项的方法,其中,识别实例化视图相对于源表是否过时包括:合并实例化视图和源表;以及识别自实例化视图的最后一次刷新以来源表中的数据是否已被修改;其中,该方法还包括响应于识别到自实例化视图的最后一次刷新以来对源表的修改而相对于源表刷新实例化视图。
示例34是根据示例31-33中任一项的方法,还包括针对对实例化视图的跨账户访问权限定义查看特权,使得实例化视图的源表的基础详细信息包括安全视图定义,其中,源表的基础详细信息包括以下一项或更多项:源表中的数据字段;源表中的一列数据;源表的结构元素;源表中的大量数据;源表的元数据;或对源表所做的修改的事务日志。
示例35是根据示例31-34中任一项的方法,还包括定义参考列表,该参考列表包括有资格接收对实例化视图的跨账户访问权限的一个或更多个账户的列表。
示例36是一种可配置为执行存储在非暂时性计算机可读存储介质中的指令的处理器。该指令包括根据源表定义实例化视图,该源表与多租户数据库的第一账户相关联。该指令包括针对第二账户定义对实例化视图的跨账户访问权限,使得第二账户有权读取该实例化视图。该指令包括修改实例化视图的源表。该指令包括通过合并实例化视图和源表来识别实例化视图相对于源表是否过时。
示例37是根据示例36的处理器,其中,定义对实例化视图的跨账户访问权限还包括定义跨账户访问权限,使得第二账户无权读取实例化视图的源表或无权写入实例化视图的源表。
示例38是根据示例36-37中任一项的处理器,其中,识别实例化视图相对于源表是否过时包括:合并实例化视图和源表;以及识别自实例化视图的最后一次刷新以来源表中的数据是否已被修改,其中,该处理器还包括响应于识别到自实例化视图的最后一次刷新以来对源表的修改而相对于源表刷新实例化视图。
示例39是根据示例36-38中任一项的处理器,其中,该指令还包括针对对实例化视图的跨账户访问权限定义查看特权,使得实例化视图的源表的基础详细信息包括安全视图定义,其中,源表的基础详细信息包括以下一项或更多项:源表中的数据字段;源表中的一列数据;源表的结构元素;源表中的大量数据;源表的元数据;或对源表所做的修改的事务日志。
示例40是根据示例36-39中任一项的处理器,其中,该指令还包括定义参考列表,该参考列表包括有资格接收对实例化视图的跨账户访问权限的一个或更多个账户的列表。
示例41是一种包括用于执行根据示例1-40中任一项的方法或实现上述任一项的装置或系统的装置的装置。
示例42是一种包括机器可读指令的机器可读存储装置,该机器可读指令在被执行时用于实现根据示例1-40中任一项的方法或实现上述任一项的装置。
各种技术或其某些方面或部分可以采用有形介质(诸如软盘、CD-ROM、硬盘驱动器、非暂时性计算机可读存储介质或任何其他机器可读存储介质)中体现的程序代码(即,指令)的形式,其中,当程序代码被加载到诸如计算机的机器中并由其执行时,该机器成为用于实施各种技术的装置。在可编程计算机上执行程序代码的情况下,计算设备可以包括处理器、由处理器可读取的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。易失性和非易失性存储器和/或存储元件可以是RAM、EPROM、闪存、光盘驱动器、磁性硬盘驱动器或用于存储电子数据的另外介质。可以实现或利用本文描述的各种技术的一个或更多个程序可以使用应用编程接口(API)、可重用控件等。这些程序可以用高级程序或面向对象的编程语言实现以与计算机系统通信。然而,如果需要,一个或更多个程序可以用汇编语言或机器语言实现。在任何情况下,语言可以为编译或解释语言,并与硬件实施方式相结合。
应当理解,在本说明书中描述的许多功能单元可以被实现为一个或更多个部件,这是用于更具体地强调其实现独立性的术语。例如,部件可以实现为包括定制的超大规模集成(VLSI)电路或门阵列的硬件电路,诸如逻辑芯片、晶体管或其他分立元件的现成半导体。部件还可以在可编程硬件器件(诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等)中实现。
部件也可以用软件实现,以便由各种类型的处理器执行。可执行代码的所标识部件可以例如包括计算机指令的一个或更多个物理或逻辑块,其可以例如被组织为对象、程序或函数。然而,所标识部件的可执行文件不需要物理上定位在一起,而是可以包括存储在不同位置的不同指令,当逻辑上连接在一起时,这些指令包括部件并实现对于该部件的所述目的。
实际上,可执行代码的部件可以是单个指令或许多指令,甚至可以分布在几个不同的代码段上、不同的程序中以及几个存储设备上。类似地,操作数据可以在本文中在部件内被识别和说明,并且可以以任何合适的形式体现并且被组织在任何合适类型的数据结构内。操作数据可以作为单个数据集收集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号存在。部件可以为无源的或有源的,包括可操作以执行所需功能的代理。
整个本说明书对“示例”的引用意味着结合该示例描述的特定特征、结构或特性包括在本公开的至少一个实施例中。因此,整个本说明书在各个地方出现的短语“在示例中”不一定都指代相同的实施例。
如本文所用,为方便起见,可以在共同列表中呈现多个项、结构元素、组成元素和/或材料。然而,这些列表应该被解释为好像列表中的每个成员都被单独识别为一个独立且独特的成员。因此,仅基于其在共同组中的表述而没有相反的指示,此类列表中的任何个别成员都不应被解释为事实上等同于同一列表中的任何其他成员。另外,本文中可以参考本公开的各种实施例和示例以及其各种部件的替代方案。应当理解,这些实施例、示例和替代方案不应被解释为彼此的事实上的等同物,而是应被视为本公开的单独和自主的表示。
尽管为了清楚起见已经详细描述了前述内容,但是将明显的是,可以在不脱离其原理的情况下进行某些改变和修改。需指出,存在实现本文所述的过程和装置的许多替代方式。因此,本实施例应被认为是说明性的而不是限制性的。
本领域技术人员将理解,可以在不脱离本公开的基本原理的情况下对上述实施例的细节进行许多改变。因此,本公开的范围应仅由所附权利要求确定。
Claims (28)
1.一种系统,包括:
用于在第一账户中定义共享对象的装置,所述共享对象包括与所述第一账户相关联的数据;
用于向第二账户授予对所述共享对象的跨账户访问权限的装置,使得所述第二账户有权访问所述共享对象而无需复制所述共享对象;
用于根据所述共享对象生成实例化视图的装置;
用于由所述第一账户更新与所述第一账户相关联的所述数据的装置;以及
用于由所述第二账户通过合并所述实例化视图和所述共享对象来识别所述实例化视图相对于所述共享对象是否过时的装置。
2.根据权利要求1所述的系统,其中,用于识别所述实例化视图相对于所述共享对象是否过时的装置包括:
用于合并所述实例化视图和所述共享对象的装置;
用于识别自所述实例化视图的最后一次刷新以来所述共享对象中的数据是否已被修改的装置;以及
用于响应于识别出到自所述实例化视图的最后一次刷新以来对所述共享对象的修改而相对于所述共享对象刷新所述实例化视图的装置。
3.根据权利要求1所述的系统,还包括用于查询所述共享对象的装置,用于查询的所述装置包括:
用于合并所述实例化视图和所述共享对象的装置;以及
用于基于所述实例化视图中的信息以及自所述实例化视图的最后一次刷新以来对所述共享对象进行的任何修改来执行所述查询的装置。
4.根据权利要求1所述的系统,还包括:
用于跨多个共享存储设备中的一个或更多个共享存储设备存储与所述第一账户相关联的所述数据的装置;
用于定义与所述第一账户相关联的执行平台的装置,所述第一账户具有对与所述第一账户相关联的所述数据的读访问权和写访问权;以及
用于定义与具有对所述共享对象的读访问权的所述第二账户相关联的执行平台的装置。
5.根据权利要求4所述的系统,其中:
与所述第二账户相关联的执行平台包括用于根据所述共享对象生成所述实例化视图的装置;
与所述第一账户相关联的执行平台包括用于更新与所述第一账户相关联的所述数据的装置;以及
与所述第二账户相关联的执行平台包括用于识别所述实例化视图相对于所述共享对象是否过时的装置。
6.根据权利要求1所述的系统,还包括用于为所述实例化视图定义安全视图定义的装置,用于定义所述安全视图定义的装置包括以下一种或更多种:
用于授予所述第二账户对所述实例化视图的读访问权和写访问权的装置;
用于授予所述第一账户对所述实例化视图的读访问权的装置;或
用于对所述第一账户隐藏所述实例化视图的装置,使得所述第一账户无法查看是否生成了所述实例化视图。
7.根据权利要求1所述的系统,还包括用于针对对所述共享对象的所述跨账户访问权限定义查看特权的装置,使得所述共享对象的基础详细信息包括安全视图定义,其中,所述共享对象的所述基础详细信息包括以下一项或更多项:
所述共享对象中的数据字段;
所述共享对象中的一列数据;
所述共享对象的基础表的结构元素;或
所述共享对象中的大量数据。
8.根据权利要求7所述的系统,其中,用于针对对所述共享对象的所述跨账户访问权限定义所述查看特权的装置包括用于对所述第二账户隐藏所述查看特权的装置以及用于使所述查看特权对所述第一账户可见的装置。
9.根据权利要求1所述的系统,其中,用于定义所述共享对象的装置包括以下一种或更多种:
用于定义对所述第一账户唯一的对象名称的装置;
用于定义对象角色的装置;或
用于生成参考列表的装置,所述参考列表包括有资格接收对所述共享对象的跨账户访问权限的一个或更多个账户的列表。
10.根据权利要求1所述的系统,还包括:
用于从所述第二账户接收请求以根据与所述第一账户相关联的特定数据生成实例化视图的装置;
用于识别所述共享对象中是否包括所述特定数据的装置;
用于授予所述第二账户根据所述特定数据生成所述实例化视图的授权的装置;以及
用于向所述第一账户提供通知的装置,所述通知指示所述第二账户接收到根据所述特定数据生成所述实例化视图的授权。
11.一种方法,包括:
在第一账户中定义共享对象,所述共享对象包括与所述第一账户相关联的数据;
向第二账户授予对所述共享对象的跨账户访问权限,使得所述第二账户有权访问所述共享对象而无需复制所述共享对象;
根据所述共享对象生成实例化视图;
由所述第一账户更新与所述第一账户相关联的所述数据;以及
由所述第二账户通过合并所述实例化视图和所述共享对象来识别所述实例化视图相对于所述共享对象是否过时。
12.根据权利要求11所述的方法,其中,识别所述实例化视图相对于所述共享对象是否过时包括:
合并所述实例化视图和所述共享对象;
识别自所述实例化视图的最后一次刷新以来所述共享对象中的数据是否已被修改,其中,通过更新、删除或插入中的一者或更多者能够修改所述共享对象中的所述数据;以及
响应于识别到自所述实例化视图的最后一次刷新以来对所述共享对象的修改而相对于所述共享对象刷新所述实例化视图。
13.根据权利要求11所述的方法,还包括通过以下方式查询所述共享对象:
合并所述实例化视图和所述共享对象;以及
基于所述实例化视图中的信息以及自所述实例化视图的最后一次刷新以来对所述共享对象进行的任何修改来执行所述查询。
14.根据权利要求11所述的方法,还包括:
跨多个共享存储设备中的一个或更多个共享存储设备存储与所述第一账户相关联的所述数据;
定义与所述第一账户相关联的执行平台,所述第一账户具有对与所述第一账户相关联的所述数据的读访问权和写访问权;以及
定义与具有对所述共享对象的读访问权的所述第二账户相关联的执行平台。
15.根据权利要求14所述的方法,其中:
根据所述共享对象生成所述实例化视图由与所述第二账户相关联的执行平台处理;
更新与所述第一账户相关联的所述数据由与所述第一账户相关联的执行平台处理;以及
识别所述实例化视图相对于所述共享对象是否过时由与所述第二账户相关联的执行平台处理。
16.根据权利要求11所述的方法,还包括:
为所述实例化视图定义安全视图定义,其中,定义所述安全视图定义包括以下一项或更多项:
授予所述第二账户对所述实例化视图的读访问权和写访问权;
授予所述第一账户对所述实例化视图的读访问权;或
对所述第一账户隐藏所述实例化视图,使得所述第一账户无法查看是否生成了所述实例化视图。
17.根据权利要求11所述的方法,还包括:
针对对所述共享对象的所述跨账户访问权限定义查看特权,使得所述共享对象的基础详细信息包括安全视图定义,其中,所述共享对象的所述基础详细信息包括以下一项或更多项:
所述共享对象中的数据字段;
所述共享对象中的一列数据;
所述共享对象的基础表的结构元素;或
所述共享对象中的大量数据。
18.根据权利要求17所述的方法,其中,针对对所述共享对象的所述跨账户访问权限定义所述查看特权还包括对所述第二账户隐藏所述查看特权以及使所述查看特权对所述第一账户可见。
19.根据权利要求11所述的方法,其中,定义所述共享对象包括以下一项或更多项:
定义对所述第一账户唯一的对象名称;
定义对象角色;或
生成参考列表,所述参考列表包括有资格接收对所述共享对象的跨账户访问权限的一个或更多个账户的列表。
20.根据权利要求11所述的方法,还包括:
从所述第二账户接收请求以根据与所述第一账户相关联的特定数据生成实例化视图;
识别所述共享对象中是否包括所述特定数据;
授予所述第二账户根据所述特定数据生成所述实例化视图的授权;以及
向所述第一账户提供通知,所述通知指示所述第二账户接收到根据所述特定数据生成所述实例化视图的授权。
21.一种可配置为执行存储在计算机可读存储介质中的指令的处理器,所述指令包括:
在第一账户中定义共享对象,所述共享对象包括与所述第一账户相关联的数据;
向第二账户授予对所述共享对象的跨账户访问权限,使得所述第二账户有权访问所述共享对象而无需复制所述共享对象;
根据所述共享对象生成实例化视图;
由所述第一账户更新与所述第一账户相关联的所述数据;以及
由所述第二账户通过合并所述实例化视图和所述共享对象来识别所述实例化视图相对于所述共享对象是否过时。
22.根据权利要求21所述的处理器,其中,识别所述实例化视图相对于所述共享对象是否过时包括:
合并所述实例化视图和所述共享对象;
识别自所述实例化视图的最后一次刷新以来所述共享对象中的数据是否已被修改,其中,通过更新、删除或插入中的一者或更多者能够修改所述共享对象中的所述数据;以及
响应于识别到自所述实例化视图的所述最后一次刷新以来对所述共享对象的修改而相对于所述共享对象刷新所述实例化视图。
23.根据权利要求21所述的处理器,其中,所述指令还包括通过以下方式查询所述共享对象:
合并所述实例化视图和所述共享对象;以及
基于所述实例化视图中的信息以及自所述实例化视图的最后一次刷新以来对所述共享对象进行的任何修改来执行所述查询。
24.根据权利要求21所述的处理器,其中,所述指令还包括通过以下一项或更多项为所述实例化视图定义安全视图定义:
授予所述第二账户对所述实例化视图的读访问权和写访问权;
授予所述第一账户对所述实例化视图的读访问权;或
对所述第一账户隐藏所述实例化视图,使得所述第一账户无法查看是否生成了所述实例化视图。
25.根据权利要求21所述的处理器,其中,所述指令还包括针对对所述共享对象的所述跨账户访问权限定义查看特权,使得所述共享对象的基础详细信息包括安全视图定义,其中,所述共享对象的所述基础详细信息包括以下一项或更多项:
所述共享对象中的数据字段;
所述共享对象中的一列数据;
所述共享对象的基础表的结构元素;或
所述共享对象中的大量数据。
26.根据权利要求25所述的处理器,其中,针对对所述共享对象的所述跨账户访问权限定义所述查看特权还包括对所述第二账户隐藏所述查看特权以及使所述查看特权对所述第一账户可见。
27.根据权利要求21所述的处理器,其中,定义所述共享对象包括以下一项或更多项:
定义对所述第一账户唯一的对象名称;
定义对象角色;或
生成参考列表,所述参考列表包括有资格接收对所述共享对象的跨账户访问权限的一个或更多个账户的列表。
28.根据权利要求21所述的处理器,其中,所述指令还包括:
从所述第二账户接收请求以根据与所述第一账户相关联的特定数据生成实例化视图;
识别所述共享对象中是否包括所述特定数据;
授予所述第二账户根据所述特定数据生成所述实例化视图的授权;以及
向所述第一账户提供通知,所述通知指示所述第二账户接收到根据所述特定数据生成所述实例化视图的授权。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/428,367 US11113278B2 (en) | 2019-05-31 | 2019-05-31 | Data sharing and materialized views in multiple tenant database systems |
US16/428,367 | 2019-05-31 | ||
PCT/US2020/034941 WO2020243317A1 (en) | 2019-05-31 | 2020-05-28 | Data sharing and materialized views in databases |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112470141A CN112470141A (zh) | 2021-03-09 |
CN112470141B true CN112470141B (zh) | 2024-03-12 |
Family
ID=70284888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080004138.2A Active CN112470141B (zh) | 2019-05-31 | 2020-05-28 | 数据库中的数据共享和实例化视图 |
Country Status (6)
Country | Link |
---|---|
US (6) | US11113278B2 (zh) |
EP (1) | EP3942427A4 (zh) |
KR (2) | KR102440082B1 (zh) |
CN (1) | CN112470141B (zh) |
DE (1) | DE202020005687U1 (zh) |
WO (1) | WO2020243317A1 (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11048815B2 (en) * | 2018-08-06 | 2021-06-29 | Snowflake Inc. | Secure data sharing in a multi-tenant database system |
US11113278B2 (en) | 2019-05-31 | 2021-09-07 | Snowflake Inc. | Data sharing and materialized views in multiple tenant database systems |
US11113273B2 (en) | 2019-11-29 | 2021-09-07 | Amazon Technologies, Inc. | Managed materialized views created from heterogeneous data sources |
US11544286B2 (en) * | 2019-11-29 | 2023-01-03 | Amazon Technologies, Inc. | Replicating materialized views across heterogeneous target systems |
US11308079B2 (en) | 2019-11-29 | 2022-04-19 | Amazon Technologies, Inc. | Maintaining data stream history for generating materialized views |
US11899659B2 (en) * | 2019-11-29 | 2024-02-13 | Amazon Technologies, Inc. | Dynamically adjusting performance of materialized view maintenance |
US10949402B1 (en) * | 2020-05-26 | 2021-03-16 | Snowflake Inc. | Share replication between remote deployments |
US20220171759A1 (en) * | 2020-11-28 | 2022-06-02 | Amazon Technologies, Inc. | Detecting schema incompatibilities for generating views at target data stores |
US11609910B1 (en) | 2020-12-10 | 2023-03-21 | Amazon Technologies, Inc. | Automatically refreshing materialized views according to performance benefit |
US11526501B2 (en) * | 2021-03-19 | 2022-12-13 | International Business Machines Corporation | Materialized views assistant |
CN113190529B (zh) * | 2021-04-29 | 2023-09-19 | 电子科技大学 | 一种适用MongoDB数据库的多租户数据共享存储系统 |
US11797518B2 (en) | 2021-06-29 | 2023-10-24 | Amazon Technologies, Inc. | Registering additional type systems using a hub data model for data processing |
US11366920B1 (en) * | 2021-08-26 | 2022-06-21 | Snowflake Inc. | Fine-grained access control via database roles |
US20230169198A1 (en) * | 2021-11-30 | 2023-06-01 | Snowflake Inc. | Dynamic data restriction in a database clean room |
US11593368B1 (en) * | 2021-12-30 | 2023-02-28 | Snowflake Inc. | Maintenance of clustered materialized views on a database system |
US20230244687A1 (en) * | 2022-02-01 | 2023-08-03 | Capital One Services, Llc | Optimization of Virtual Warehouse Computing Resource Allocation |
US20230401200A1 (en) | 2022-06-13 | 2023-12-14 | Snowflake Inc. | Data clean room using defined access via native applications |
US11651287B1 (en) | 2022-06-13 | 2023-05-16 | Snowflake Inc. | Privacy-preserving multi-party machine learning using a database cleanroom |
CN115345335B (zh) * | 2022-08-23 | 2024-03-19 | 中国民航信息网络股份有限公司 | 一种民航开放旅客预订系统中旅客姓名的处理方法及装置 |
CN116127507B (zh) * | 2022-12-27 | 2024-04-26 | 北京菱云科技有限公司 | 一种多方零拷贝的车辆数字档案构建方法及系统 |
CN117319081A (zh) * | 2023-11-15 | 2023-12-29 | 广东保伦电子股份有限公司 | 一种同系统内的数据共享系统及方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499061A (zh) * | 2008-01-30 | 2009-08-05 | 国际商业机器公司 | 面向多租户的数据库引擎及其数据访问方法 |
CN102346744A (zh) * | 2010-07-30 | 2012-02-08 | 国际商业机器公司 | 用于在多租户应用系统中处理物化表的装置 |
CN102651775A (zh) * | 2012-03-05 | 2012-08-29 | 国家超级计算深圳中心(深圳云计算中心) | 基于云计算的多租户共享对象管理的方法、设备及系统 |
CN103080926A (zh) * | 2010-03-04 | 2013-05-01 | 磁体系统公司 | 多租户环境中的个人和社会信息的可移植性 |
CN104079613A (zh) * | 2013-03-29 | 2014-10-01 | 国际商业机器公司 | 用于多租户间共享应用程序对象的方法和系统 |
CN104160381A (zh) * | 2012-03-08 | 2014-11-19 | 国际商业机器公司 | 多租户环境中租户特定数据集的管理 |
CN104866513A (zh) * | 2014-02-26 | 2015-08-26 | 国际商业机器公司 | 用于跨租户数据访问的系统和方法 |
WO2018064375A1 (en) * | 2016-09-30 | 2018-04-05 | salesforce.com,inc. | Multi-tenant non-relational platform objects |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6334128B1 (en) | 1998-12-28 | 2001-12-25 | Oracle Corporation | Method and apparatus for efficiently refreshing sets of summary tables and materialized views in a database management system |
US6546402B1 (en) | 2000-06-05 | 2003-04-08 | International Business Machines Corporation | System and method for asynchronous view maintenance |
US6741997B1 (en) | 2001-06-14 | 2004-05-25 | Oracle International Corporation | Instantiating objects in distributed database systems |
US6882993B1 (en) | 2002-01-28 | 2005-04-19 | Oracle International Corporation | Incremental refresh of materialized views with joins and aggregates after arbitrary DML operations to multiple tables |
US7111020B1 (en) | 2002-03-26 | 2006-09-19 | Oracle International Corporation | Incremental refresh of materialized views containing rank function, and rewrite of queries containing rank or rownumber or min/max aggregate functions using such a materialized view |
US7139783B2 (en) | 2003-02-10 | 2006-11-21 | Netezza Corporation | Materialized view system and method |
US7254574B2 (en) * | 2004-03-08 | 2007-08-07 | Microsoft Corporation | Structured indexes on results of function applications over data |
US7890497B2 (en) | 2004-04-14 | 2011-02-15 | Oracle International Corporation | Using estimated cost to schedule an order for refreshing a set of materialized views (MVS) |
US7685194B2 (en) | 2006-08-31 | 2010-03-23 | Microsoft Corporation | Fine-grained access control in a database by preventing information leakage and removing redundancy |
US8407205B2 (en) * | 2008-09-11 | 2013-03-26 | Salesforce.Com, Inc. | Automating sharing data between users of a multi-tenant database service |
US8452726B2 (en) * | 2010-06-04 | 2013-05-28 | Salesforce.Com, Inc. | Sharing information between tenants of a multi-tenant database |
US10324946B2 (en) | 2011-06-23 | 2019-06-18 | Salesforce.Com Inc. | Methods and systems for caching data shared between organizations in a multi-tenant database system |
US9185078B2 (en) * | 2012-12-18 | 2015-11-10 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for implementing cross organizational data sharing |
US9454572B2 (en) | 2013-03-14 | 2016-09-27 | Oracle International Corporation | Out-of-place materialized view refresh |
US9690832B2 (en) | 2014-10-06 | 2017-06-27 | Netapp, Inc. | Enterprise reporting capabilities in storage management systems |
US9928281B2 (en) | 2015-03-20 | 2018-03-27 | International Business Machines Corporation | Lightweight table comparison |
US10936554B2 (en) | 2016-09-17 | 2021-03-02 | Oracle International Corporation | Incremental rationalization in hierarchical systems |
US10592681B2 (en) * | 2017-01-10 | 2020-03-17 | Snowflake Inc. | Data sharing in a multi-tenant database system |
US10706170B2 (en) * | 2017-03-16 | 2020-07-07 | Sap Se | Tenant table sharing with content separation |
US10762075B2 (en) | 2017-07-11 | 2020-09-01 | Sap Se | Database interface agent for a tenant-based upgrade system |
US11061897B2 (en) | 2018-05-07 | 2021-07-13 | Sap Se | Materializable database objects in multitenant environments |
US11811769B2 (en) | 2019-01-31 | 2023-11-07 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger |
US11113278B2 (en) | 2019-05-31 | 2021-09-07 | Snowflake Inc. | Data sharing and materialized views in multiple tenant database systems |
-
2019
- 2019-05-31 US US16/428,367 patent/US11113278B2/en active Active
- 2019-12-06 US US16/705,664 patent/US10628415B1/en active Active
-
2020
- 2020-04-01 US US16/837,555 patent/US10891288B2/en active Active
- 2020-05-28 DE DE202020005687.1U patent/DE202020005687U1/de active Active
- 2020-05-28 CN CN202080004138.2A patent/CN112470141B/zh active Active
- 2020-05-28 WO PCT/US2020/034941 patent/WO2020243317A1/en unknown
- 2020-05-28 KR KR1020217031175A patent/KR102440082B1/ko active IP Right Grant
- 2020-05-28 KR KR1020227030163A patent/KR20220127341A/ko active Search and Examination
- 2020-05-28 EP EP20815460.9A patent/EP3942427A4/en active Pending
- 2020-07-31 US US16/944,150 patent/US11113279B2/en active Active
- 2020-12-14 US US17/120,546 patent/US11100103B2/en active Active
- 2020-12-17 US US17/125,453 patent/US10997169B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499061A (zh) * | 2008-01-30 | 2009-08-05 | 国际商业机器公司 | 面向多租户的数据库引擎及其数据访问方法 |
CN103080926A (zh) * | 2010-03-04 | 2013-05-01 | 磁体系统公司 | 多租户环境中的个人和社会信息的可移植性 |
CN102346744A (zh) * | 2010-07-30 | 2012-02-08 | 国际商业机器公司 | 用于在多租户应用系统中处理物化表的装置 |
CN102651775A (zh) * | 2012-03-05 | 2012-08-29 | 国家超级计算深圳中心(深圳云计算中心) | 基于云计算的多租户共享对象管理的方法、设备及系统 |
CN104160381A (zh) * | 2012-03-08 | 2014-11-19 | 国际商业机器公司 | 多租户环境中租户特定数据集的管理 |
CN104079613A (zh) * | 2013-03-29 | 2014-10-01 | 国际商业机器公司 | 用于多租户间共享应用程序对象的方法和系统 |
CN104866513A (zh) * | 2014-02-26 | 2015-08-26 | 国际商业机器公司 | 用于跨租户数据访问的系统和方法 |
WO2018064375A1 (en) * | 2016-09-30 | 2018-04-05 | salesforce.com,inc. | Multi-tenant non-relational platform objects |
Also Published As
Publication number | Publication date |
---|---|
KR20220127341A (ko) | 2022-09-19 |
US11113278B2 (en) | 2021-09-07 |
US10997169B2 (en) | 2021-05-04 |
EP3942427A1 (en) | 2022-01-26 |
EP3942427A4 (en) | 2023-01-11 |
WO2020243317A1 (en) | 2020-12-03 |
DE202020005687U1 (de) | 2022-01-24 |
US11113279B2 (en) | 2021-09-07 |
US20200379993A1 (en) | 2020-12-03 |
US10628415B1 (en) | 2020-04-21 |
US11100103B2 (en) | 2021-08-24 |
US20210103587A1 (en) | 2021-04-08 |
US10891288B2 (en) | 2021-01-12 |
US20210097076A1 (en) | 2021-04-01 |
US20200379997A1 (en) | 2020-12-03 |
CN112470141A (zh) | 2021-03-09 |
KR20210134707A (ko) | 2021-11-10 |
KR102440082B1 (ko) | 2022-09-06 |
US20200379996A1 (en) | 2020-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112470141B (zh) | 数据库中的数据共享和实例化视图 | |
US11914591B2 (en) | Sharing materialized views in multiple tenant database systems | |
US10846277B1 (en) | Journaled tables in database systems | |
KR102575007B1 (ko) | 데이터베이스 시스템의 외부 테이블에 대한 질의 | |
US20240020295A1 (en) | Incremental refresh of a materialized view | |
US11354316B2 (en) | Systems and methods for selective scanning of external partitions | |
US11507571B2 (en) | Materialized views over external tables in database systems | |
US11892992B2 (en) | Unique identification management | |
US11086844B2 (en) | Unified instance authorizations with application owned hierarchies | |
US10642756B2 (en) | Database variable size entry container free space handling based on use patterns | |
US20180268363A1 (en) | Single Job Backorder Processing Using Prioritized Requirements | |
US20180336126A1 (en) | Database Variable Size Entry Container Page Reorganization Handling Based on Use Patterns | |
Wellhausen | Highly Scalable, Ultra-Fast and Lots of Choices |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Montana Applicant after: SNOWFLAKE COMPUTING Inc. Address before: California, USA Applicant before: SNOWFLAKE COMPUTING Inc. |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Montana Patentee after: Snowflake Co. Country or region after: U.S.A. Address before: Montana Patentee before: SNOWFLAKE COMPUTING Inc. Country or region before: U.S.A. |