CN109952564B - 数据库系统中测试数据的形成与操纵 - Google Patents
数据库系统中测试数据的形成与操纵 Download PDFInfo
- Publication number
- CN109952564B CN109952564B CN201780069069.1A CN201780069069A CN109952564B CN 109952564 B CN109952564 B CN 109952564B CN 201780069069 A CN201780069069 A CN 201780069069A CN 109952564 B CN109952564 B CN 109952564B
- Authority
- CN
- China
- Prior art keywords
- tenant
- data
- sandbox
- original
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- 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/21—Design, administration or maintenance of 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/24—Querying
- G06F16/245—Query processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
Abstract
提供了用于在一时间点为原始租户创建沙箱的系统和方法,所述原始租户具有存储在与原始租户标识符相关联的不可变存储器中的原始租户数据,沙箱创建时间点起的原始租户数据是沙箱租户能访问的原始租户数据的虚拟快照,其中可以在不改变原始租户数据的情况下改变沙箱租户数据,并且可以在不改变沙箱租户数据的情况下改变原始租户数据。通过将沙箱租户标识符与原始租户数据的虚拟快照以及沙箱租户在沙箱创建时间点之后创建的沙箱租户数据相关联来创建沙箱租户。随后创建原始租户数据并将其与原始租户标识符相关联,并且沙箱租户无法访问该原始租户数据。
Description
背景技术
测试系统通常是为应用而形成的,与生产系统是分开的。这种系统(可称为“沙箱(sandbox)”)可用于测试应用程序的新特征和新版本。在已知系统中,实况生产数据不能用于沙箱化,因为测试会破坏生产数据。因此,制作了客户数据的单独副本用于测试和开发。为典型的沙箱系统创建数据库的单独副本很慢,会消耗大量计算资源,容易出错并且会占用大量数据存储资源。在许多情况下,复制单个事务中所有数据是不切实际的,因此复制的数据会在事务上不一致。在这种情况下,应用程序的测试可能无法成功确定应用程序的特征的操作功能,因为测试中使用的沙箱数据可能不准确。在某些情况下,可以在使用沙箱之前协调不一致的数据,这会比较耗时并且需要大量的处理器和存储器资源。
附图说明
被包括以提供对所公开的主题的进一步理解的附图被并入且构成本说明书的一部分。附图还示出了所公开的主题的实现方式,并且与具体实施方式一起用于解释所公开的主题的实现方式的原理。除了示出对所公开主题的基本理解所需内容及可以实行所公开主题的各种方式之外,并未试图更详细地示出结构细节。
图1示出了根据所公开主题的实现方式的为沙箱租户数据创建沙箱并为原始租户创建后续的不可变原始租户数据的示例方法。
图2A示出了根据所公开主题的实现方式的接收查询并通过动态映射租户标识符对来自不可变存储器的数据进行操作的示例方法。
图2B示出了根据所公开主题的实现方式的从不可变存储器检索数据并对其进行转换,以及对转换的数据执行操作的示例方法。
图3A示出了根据所公开主题的实现方式的使用虚拟化层存储和检索数据的示例系统和方法。
图3B示出了根据所公开主题的实现方式的通过转换数据从数据库系统的沙箱中检索数据。
图4A和图4B示出了根据所公开主题的实现方式的可以与沙箱结合使用的系统架构的示例。
图5示出了根据所公开主题的实现方式的计算机。
图6示出了根据所公开主题的实现方式的网络配置。
具体实施方式
所公开的主题的实现方式可以在不必复制生产数据或不必对复制的生产数据进行操作的情况下,基于来自与数据库系统的一个或更多个租户相关联的一个或更多个授权用户的输入来创建和运行沙箱。在处理器资源、数据存储和持久化资源和/或数据路径(例如,通信网络)资源方面,与已知的沙箱相比,这样的沙箱可以以低得多的成本更快地建立。由于所公开的系统读取生产数据,因此其本质上是准确的,并且不需要针对被测数据采取一致性检查或其他校正措施。所公开的系统也可以为应用程序生成更准确的测试结果,因为被测数据的完整性可以比已知的沙箱实现方式中的更好。
在沙箱的实现方式中,与数据库系统的一个或更多个租户相关联的一个或更多个授权用户可以创建用于数据库的沙箱租户。数据库系统的授权用户可以是对数据库系统的一个或更多个租户具有安全访问权限的用户。例如,用户可以向数据库系统提供密码和/或其他信息(例如,安全代码、生物信息等),数据库系统可以基于所提供的信息确定用户是否为授权用户。如果提供的信息与数据库系统的存储信息匹配,则该用户可以确定为授权用户并且可以被授权访问数据库系统。
沙箱租户可以访问与沙箱租户键相关联的数据,而原始(非沙箱)租户可以访问与原始租户键相关联的数据。与租户(例如,原始租户、沙箱租户等)相关联的键的范围可以是租户命名空间的全部或一部分。通常,一个租户无法访问另一个租户的命名空间。然而,在所描述主题的实现方式中,硬件和软件的组合可以在某些沙箱租户键和原始租户键之间创建对应关系,以向沙箱租户提供对与原始租户相关联的时间点数据的读访问。通过这种方式,沙箱租户可以使用原始租户数据,而无需将原始租户数据复制到沙箱租户的命名空间。沙箱可以使用此时间点数据来测试应用程序。
沙箱租户生成的新事务数据可以写入原始租户无法访问的沙箱租户命名空间。原始租户生成的新事务数据可以写入沙箱租户无法访问的原始租户命名空间。这样,新的沙箱租户数据不会破坏原始租户(生产)数据,并且新的原始租户数据(例如,可以称为后续的不可变原始租户数据)不会破坏由沙箱读取和写入以测试应用程序的测试数据。实现方式可以与例如以日志结构的合并(LSM)树存储了记录的持久化内容的关系数据库一起使用。
根据这种安排,与所公开的实现方式中的数据库系统的一个或更多个租户相关联的授权用户可以更快速地创建和运行沙箱,该沙箱仅使用传统沙箱系统所使用的数据存储和持久化资源、处理器资源和/或数据路径(例如,通信网络)资源的一小部分。
通常,应用程序可以在生产系统的服务器上运行,并且测试系统可以与生产系统分开。测试系统可用于测试应用程序的新特征和/或新版本。生产系统应用程序可以在公司或组织的服务器上运行(即,运行“本地部署的”应用程序),或者通过在基于云的计算环境(例如,服务器远离公司或组织的服务器的地点)中运行应用程序来运行。
所公开的主题的实现方式为与数据库系统的一个或更多个租户相关联的授权用户提供用于创建沙箱的系统和方法,其使用公司数据、组织数据和/或客户数据(即,生产数据)的至少一部分,通过基于生产数据创建沙箱数据来进行测试和开发而无需改变生产数据。全文所使用的客户数据可以指公司数据和/或组织数据的任何部分。
应用程序的一个或更多个特征可以使用沙箱数据进行测试。一旦测试了应用程序的特征,就可以删除沙箱而不会影响生产数据。可以通过移除对沙箱数据的引用(reference)(例如,指针)来删除沙箱。在沙箱删除操作中,移除引用可以是即时的,并且与传统的沙箱系统相比,所使用的处理器、数据存储和/或数据路径资源更少。在一些实现方式中,沙箱数据的引用不会在数据合并操作中向前复制以维持该引用,因此可以有效地移除沙箱,因为不再有对沙箱的任何主动的引用。
在传统的系统和方法中,沙箱化客户数据的过程涉及在目的地数据库实例上为沙箱创建新租户。租户数据被复制到目标数据库实例,而租户在源实例上是“实况的(live)”。在传统的系统和方法中,必须运行一致性检查以确定复制的数据是否在事务上是一致的。在完成一致性检查后,可以在目的地数据库实例上激活租户,该目的地数据库实例可以包括例如沙箱。
所公开的实现方式克服了传统的沙箱化技术中的重要限制。更具体地说,创建传统沙箱的速度很慢,因为复制所有的必要数据并检查复制的数据是否与原始数据集一致需要时间。这种传统系统和方法还消耗很多资源(即,其需要大量的计算、数据路径、网络和/或存储资源来复制整个数据集),并且容易出错。例如,数据可能未被正确复制,可能缺失部分数据,数据可能被破坏等。也就是说,使用传统系统和方法创建沙箱涉及将租户的所有行复制到新的沙箱化租户中。在源数据库和目标数据库上逐行复制可能是缓慢且资源密集的,并且其可以有效地使租户的存储加倍。在单个事务中复制租户的所有数据也是不切实际的,因此在沙箱可供客户使用之前,可能存在协调不一致数据的复杂过程。
在所公开的主题的实现方式中,提供了可以更快速地生成沙箱并且所使用的存储空间基本上比传统的沙箱化系统少得多的系统和方法。所公开的主题的系统和方法生成沙箱,该沙箱具有完全一致的数据而不必执行错误检查,而在使用标准沙箱化方法时可能需要执行错误检查。
如下文详细描述的,所公开的主题的实现方式可以通过使用持久化虚拟化实现沙箱,该沙箱使用诸如LSM树的不可变存储器,以及由租户标识符(即,“租户ID”)寻根(root)的单个键空间。持久化(persistence)可以由扩展(extent)组成。如本领域所理解并且如本文所使用的,“扩展”是指存储区域,在存储介质内通常是连续的,其可以用于存储数据。扩展可以是不可变的(immutable),可以按照键(key)来排序。也就是说,扩展可以是不可变的,因为扩展在创建之后不可以修改,使得与存储介质内的扩展相关联的区域和数据不被更新,但是可以在将来被删除。例如,可以删除沙箱数据中不再引用的扩展,因为在数据合并操作中不会向前复制引用以维持引用。也就是说,沙箱及其扩展可以被有效地移除,因为不再有针对该沙箱的任何主动的引用。可以将新数据添加到数据库中,并可以创建新的扩展。扩展可以存储在类似于分布式文件系统的共享存储器中。
扩展引用可以用作对存储在物理存储器(例如,存储设备)中的物理扩展的逻辑引用,并且可以被用于虚拟化对物理存储器的访问。为了根据所公开的主题的系统和方法创建沙箱,与源租户相关联的数据库系统的授权用户可以使用用于将键范围内的租户ID从源(即原始租户)转换到目标(即新的沙箱租户)的指令,请求可以为包含源租户的键的每个扩展添加新的扩展引用。该转换可以将根据从与新的沙箱租户相关联的用户生成的请求所发布的某些读取操作映射到一时间点起的原始租户数据。时间点数据可以通过键范围来描述。由原始租户写入的后续事务可能对针对该事务引用的时间点数据没有影响。沙箱租户的写入操作可以存储在与原始租户数据不同的键(沙箱租户键)下,因此沙箱写入操作不会破坏任何原始数据。这允许快速形成沙箱,因为其仅需要元数据的改变和元数据的复制,并且不需要复制底层数据。这会比典型的沙箱系统更理想,典型的沙箱系统需要大量资源来复制租户数据并将其存储在沙箱的新位置,并确定数据是否已被准确复制。传统沙箱系统和方法中使用的资源可以包括增加的存储设备容量、管理复制以及确定是否准确执行的处理器开销、复制和检查准确性所需的时间等。
在所公开的主题的实现方式中,为与原始租户相关联的数据库系统的授权用户提供了一种用于在一时间点为原始租户创建沙箱的方法,原始租户具有存储在与原始租户标识符相关联的不可变存储器中的原始租户数据,沙箱创建时间点起的原始租户数据是沙箱租户可访问的原始租户数据的虚拟快照,其中可以在不改变原始租户数据的情况下改变沙箱租户数据,并且可以在不改变沙箱租户数据的情况下改变原始租户数据。该方法可以包括创建沙箱租户标识符。虚拟快照可以使得原始租户数据可用于沙箱租户,从而沙箱租户可以以犹如制作了原始租户数据的副本那样的方式访问原始租户数据,而无需复制底层数据。通过将沙箱租户标识符与原始租户数据的虚拟快照以及沙箱租户在沙箱创建时间点之后创建的沙箱数据相关联,可以在相关联的授权用户的请求下创建沙箱租户。在沙箱创建时间点之后由沙箱租户创建和/或修改的沙箱数据对于原始租户是不可访问的。
在沙箱创建时间点之后,新的或更新后的原始租户数据可以被创建,并且可以与存储在不可变存储器中的原始租户标识符相关联。正在访问沙箱租户的用户不能访问该后续的新的或更新后的原始租户数据。原始租户的用户可以访问在沙箱创建时间点之前和之后创建的存储在不可变存储器中的租户数据。也就是说,与原始租户相关联的授权用户可以如在创建沙箱之前那样读取和写入数据。后续的原始租户数据被写为新的或更新后的原始租户数据,并且该新的或更新后的数据不会改变存储在不可变存储器中的旧的原始租户数据。
在所公开的主题的实现方式中,提供具有至少一个存储设备的系统,使得与数据库系统中的原始租户相关联的一个或更多个授权用户可在一时间点创建原始租户的沙箱。这是通过创建新的沙箱租户标识符来完成的。原始租户可以具有存储在与原始租户标识符相关联的至少一个存储设备的不可变存储器中的租户数据。从沙箱创建时间点起的原始租户数据可用于提供不可变原始租户数据的虚拟快照,该实现方式使得沙箱租户可访问该不可变原始租户数据。也就是说,原始租户数据可以对于沙箱租户可用,使得沙箱租户可以以犹如制作了原始租户数据的副本那样的方式访问原始租户数据。类似地,原始租户也可以访问相同的原始租户数据。两者都不会改变该虚拟快照,因为虚拟快照的底层数据是不可变的。
然而,对原始租户数据或沙箱租户数据提交的改变和/或添加都不被存储以覆写或以其他方式替换原始租户数据。随后,可以存储由与原始租户或快照租户相关联的授权用户进行的改变和/或添加,而无需改变虚拟快照。相反,原始租户的数据可以存储在不可变扩展中,并且沙箱租户的数据可以存储在单独的不可变扩展中,如本文进一步详细公开的那样。用于这些附加扩展的机制(例如指针等)可以允许在不改变沙箱租户数据的情况下改变和/或扩充原始租户数据。系统可以创建沙箱租户标识符,并且可以通过将沙箱租户标识符与对租户数据的虚拟快照的访问以及与由沙箱租户的授权用户在沙箱创建时间点之后创建(例如,在应用程序中和/或用数据库系统等)的数据相关联来创建沙箱租户。原始租户不能访问由沙箱租户和/或与沙箱租户相关联的数据库系统的授权用户在沙箱创建时间点之后创建的数据。在沙箱创建时间点之后,系统可以创建与存储在至少一个存储设备的不可变存储器中的原始租户标识符相关联的不可变租户数据。沙箱租户不能访问该后续的不可变原始租户数据。原始租户和/或与原始租户相关联的数据库系统的授权用户可以访问在沙箱创建时间点之前和之后创建的存储在不可变存储器中的原始租户数据。后续的不可变原始租户数据被创建为新的原始租户数据,该新的原始租户数据不改变存储在不可变存储器中的其他租户数据(例如,原始租户数据和沙箱租户数据)。与数据库系统的原始租户相关联的授权用户可以访问后续的不可变原始租户数据和新的原始租户数据。
图1示出了根据所公开主题的实现方式的创建沙箱并创建后续的不可变租户数据的示例方法10。
具体地,该方法10可以由与数据库系统中的原始租户相关联的授权用户用于在一时间点创建原始租户的沙箱。方法10可以与图3A至图6中所示的系统结合使用,如下面详细描述的。原始租户可以具有存储在与租户标识符相关联的不可变存储器(例如,图3A和图3B中所示的物理存储器、图5中所示的第二计算机800的存储器810、图6中的数据库系统1200a-d等)中的原始租户数据。在方法10中,沙箱创建时间点起的沙箱租户数据可以是原始租户数据的虚拟快照,并且可以由沙箱租户访问。可以在不改变原始租户数据的情况下改变沙箱租户数据,并且可以在不改变沙箱租户数据的情况下改变原始租户数据。快照可以是虚拟的,因为原始租户和沙箱针对数据(或者创建沙箱后存在的数据版本)使用相同的不可变存储器。
沙箱租户标识符可以在操作12中创建。沙箱租户标识符可以由数据库系统(如服务器、云服务器和/或数据库等)创建。例如,沙箱租户标识符可以由如下设备来创建:图3A和图3B中所示的系统100、图4A中所示的服务器502和/或服务器504、图5中示出的中央组件700和/或第二计算机800,和/或图6中所示的数据库系统1200a至1200d。
在操作14中,数据库系统可以通过将沙箱租户标识符与原始租户数据的虚拟快照相关联来创建沙箱租户。沙箱租户可以与数据库系统的授权用户相关联。沙箱租户标识符可以与沙箱租户在沙箱创建时间点之后创建的沙箱数据相关联。沙箱租户在沙箱创建时间点之后创建的沙箱数据是原始租户不可访问的。
在操作16中,在沙箱创建时间点之后,该数据库系统可创建与存储在不可变存储器(例如,在图3A至图3B中所示的物理存储器、图5中示出的第二计算机800的存储器810、图6中的数据库系统1200a至1200d等)中的原始租户标识符相关联的后续的原始租户数据。后续的原始租户数据可以由与原始租户相关联的授权用户通过数据库系统创建。例如,由与原始租户相关联的授权用户控制的一个或更多个应用程序可以执行创建后续的原始租户数据的一个或更多个操作。沙箱租户不能访问后续的不可变原始租户数据。也就是说,原始租户可以访问在沙箱创建时间点之前和之后创建的存储在不可变存储器中的原始租户数据。后续的不可变原始租户数据被写为新的原始租户数据,该新的原始租户数据不会改变存储在不可变存储器中的旧的原始租户数据(例如,原始租户数据和沙箱租户数据),并且原始租户不能访问由沙箱租户创建或扩充的数据。
图2A示出了根据所公开主题的实现方式的接收查询并通过动态映射租户标识符对来自不可变存储器的数据进行操作的示例方法20。在一些实现方式中,方法20可以结合上述图1中所示的方法10使用。在操作21中,数据库系统可以接收包括指示沙箱租户的键的查询。数据库系统可以是服务器、云服务器和/或数据库等。例如,接收查询的数据库系统可以是图3A和图3B所示的系统100、图4A中所示的服务器502和/或服务器504、图5中所示的中央组件700和/或第二计算机800、和/或图6中所示的数据库系统1200a至1200d。可以通过例如图5中所示的计算机600生成查询。
在操作22中,数据库系统可以通过将指示沙箱租户的主键动态地映射到指示原始租户的主键(如果该主键标识了作为虚拟沙箱的一部分的事务,即,所寻找的记录的内容是在创建沙箱之前创建的)而对来自沙箱租户的键所标识的不可变存储器的数据进行操作。不可变存储器可以是图3A和图3B中所示的存储器、图5中所示的第二计算机800的存储器810、图6的数据库系统1200a至1200d等。
图2B示出了根据所公开主题的实现方式的从不可变存储器检索数据并对其进行转换、以及对所转换的数据执行操作的示例方法。特别地,图2B示出了可以是图2A中所示的且如上所述的方法20的操作22的一部分的示例操作。在操作24中,如图2B所示,数据库系统可以基于所映射的键从不可变存储器检索数据。如上所述,数据库系统可以是图3A和图3B中所示的系统100、图4A中所示的服务器502和/或服务器504、图5中所示的中央组件700和/或第二计算机800、和/或图6中所示的数据库系统1200a至1200d,并且不可变存储器可以是图3A和图3B所示的物理存储器、图5所示的第二计算机800的存储器810、图6的数据库系统1200a至1200d等。
在操作26中,数据库系统可以将来自原始租户的键所指示的不可变存储器的数据的键转换为指示沙箱租户的键。对于此转换操作,数据保留在不可变存储器中且不被复制,但该数据与沙箱租户相关联。也就是说,原始租户的键被映射到沙箱租户的键,以便沙箱租户可以访问在创建沙箱之前创建的数据(其可以被沙箱的用户访问)。但是,沙箱租户创建的数据的键不会被转换,并且可指向只能由沙箱租户访问且不能供原始租户使用的扩展中的数据。
数据库系统可以在操作28中对转换的数据执行操作,并且可以在操作30中将执行操作得到的数据存储在与沙箱租户的键相关联的不可变存储器中。在一些实现方式中,数据库系统可使用LSM树数据结构将数据存储在不可变存储器中。对与沙箱相关联的数据的操作可以包括例如基于被测试的应用程序的一个或更多个功能来操纵数据。也就是说,可以基于正在测试的应用程序的版本和/或已经添加到要测试的应用程序的新功能来操纵数据。但是,仅与原始租户相关联的用户不能访问对正在测试的数据的修改。被操纵的数据与沙箱租户的键相关联,并存储在不可变存储器中。在一些实现方式中,图2B中示出的示例方法20可以包括基于对指示沙箱租户的键进行的动态映射将来自沙箱租户的不可变存储器的数据返回。
在执行图2A所示的方法10时,在一些实现方式中,数据库系统可以接收包括指示沙箱租户的键的查询,并且可以对来自沙箱租户的键所标识的不可变存储器的数据进行操作。可以从与沙箱租户相关联的数据库系统的授权用户接收查询。可以基于对指示沙箱租户的键进行的动态映射,将来自沙箱租户的不可变存储器的数据返回。
在一些实现方式中,与方法10结合使用的数据库系统可接收用于删除沙箱租户的操作。例如,与沙箱租户相关联的授权用户可以向数据库系统提供删除请求。在接收到请求时,数据库系统可以从不可变存储器中移除与沙箱租户相关联的至少一个键而不改变原始租户数据。可以通过在不移除存储在不可变存储器中的物理数据的情况下从不可变存储器中移除键范围来执行对至少一个键的移除。也就是说,可以移除对用于键范围的一个或更多个键的不可变存储器的引用,但是如果还存在用于原始租户的该数据的键,则先前与所移除的引用相关联的数据可以保留在不可变存储器中。
当执行用于删除沙箱租户的操作时,移除与沙箱租户相关联的至少一个键可以包括从不可变存储器移除对于沙箱租户数据的扩展引用,该沙箱租户数据具有与其相关联的原始租户键映射。当在沙箱创建时间点之后不可变存储器中的沙箱租户数据没有改变时,可以对沙箱租户执行该删除操作。
在执行用于删除沙箱租户的操作的另一实现方式中,由数据库系统移除至少一个键可以包括从不可变存储器移除用于沙箱租户数据的键范围的扩展引用。与上述实现方式相反,当不可变存储器中的沙箱租户数据已经发生变化时,可以执行该删除操作。此操作可以用于替换原始租户数据的现有扩展引用以便不包括已移除的沙箱租户数据的扩展引用。
图3A示出了根据所公开主题的实现方式的使用虚拟化层存储和检索数据的示例系统和方法。系统100可以是单个计算设备,或者可以包括多个连接的计算设备,并且可以是例如膝上型计算机、台式计算机、个体服务器、服务器集群、服务器农场或分布式服务器系统,或者可以是虚拟计算设备或系统,或物理系统和虚拟系统的任何合适的组合。为简单起见,未示出诸如处理器、短期和长期存储器、操作系统、大部分数据库管理系统的组件。服务器系统100可以是计算系统和网络基础设施的一部分,或者可以以其他方式连接到计算系统和网络基础设施,包括更大的服务器网络(其可以包括类似于服务器系统100的其他服务器系统)。在一些实现方式中,系统100可以是图5中所示的计算机600、中央组件700和/或第二计算机800、和/或图6中所示的数据库系统1200a至1200d中的一个或更多个。
系统100可以将事务存储为给定记录的不可变版本。已经存储在服务器系统上的记录的内容的不可变版本可以保持不变,直到从服务器系统删除(如果有的话)该内容。也就是说,所接收的事务可以创建要存储在服务器系统中的记录的内容的新版本,而不是改变记录的内容。因此,如本文所公开的记录(例如,具有不同内容的记录)的多个版本可以具有相同的键。对给定记录的版本使用相同的键可以允许改变存储在关系数据库中的数据。因此,物理记录的每个版本可以是不可变的,即,其可以不被删除或者在数月、数年或数十年的任意长时间内不被删除。例如,与早期版本的记录具有相同的键的记录的后期版本可以指示该记录的数据值的变化(即,记录的内容的变化)。或者,事务可以创建记录或删除记录(即,创建内容或删除内容),但删除记录不会移除事务。
系统100的访问层105可以具有数据库存储引擎110,数据库存储引擎110可以从计算设备(例如,图5中所示的计算机600和/或第二计算机800)接受对数据库系统(例如,图5所示的中央组件700和/或图6所示的数据库系统1200a至1200d)的查询。例如,数据库存储引擎110可以接收对数据库系统内的数据的第一命名空间内的组织的查询。数据库存储引擎110可以是服务器系统100上的硬件和软件的任何合适的组合,用于接收对数据库系统的查询以及检索与所接收的查询有关的数据。
系统100可以包括虚拟化层115,虚拟化层115可具有扩展引用120。在一些实现方式中,扩展引用120可以是图5中所示的中央组件700和/或图6中所示的数据库系统1200a至1200d的一部分。扩展引用120可以是服务器系统100上的硬件和软件的任何合适的组合,用于执行为数据库存储引擎110和物理存储器127之间的虚拟化层115(例如,其中扩展可以被存储为扩展130的一部分,如下所述)。物理存储器127可以是半导体存储器、固态驱动器(SSD)、硬盘驱动器、光学存储器、光学存储设备或任何其他合适的物理数据存储介质或其某种组合。
如图3A所示,扩展引用120可以用于第一命名空间。扩展引用120可以经由虚拟化层115从数据库存储引擎110接收查询以找到数据。可以从与至少一个租户相关联的数据库系统的授权用户接收查询。虚拟化层115可以解释该查询,以便在系统100的可以存储扩展的物理存储器127中定位该查询所请求的数据。也就是说,虚拟化层115可以从扩展130检索该查询所请求的数据,并且可以将数据返回到数据库存储引擎110,数据库存储引擎110可以将该数据提供给查询数据库系统的计算设备。
图3B示出了根据所公开主题的实现方式的通过转换数据的键从数据库系统的沙箱中检索数据。图3B的系统100可以与图3A中所示的类似,但图3B可以包括扩展引用125作为虚拟化层115的一部分,如下面详细描述的。
可为第一(原始)租户(即,第一命名空间)创建沙箱。例如,与至少第一(原始)租户相关联的数据库系统的授权用户可以向数据库系统发出命令以创建沙箱(即,第二命名空间)。也就是说,通过使用第一命名空间的数据,可以创建第二命名空间,第二命名空间可以形成扩展引用125。第一命名空间和第二命名空间的数据都可以存储在系统100的物理存储器127中。第一命名空间和第二命名空间可以完全或部分地指代相同的存储数据。
在图3B所示的例子中创建沙箱之后,数据库存储引擎110可以从授权用户接收对与第二命名空间相关联的数据的查询。可以用于第二命名空间的扩展引用125可以接收对与第二命名空间相关联的数据的查询。在该示例中,尽管已经为第二命名空间创建了沙箱,但是存储在物理存储器127中的数据是相同的数据。因此,虚拟化层115可以基于从数据库系统的授权用户接收的查询在扩展130中找到第一命名空间的数据。返回到扩展引用125的数据是第一命名空间的数据。虚拟化层115可以通过将来自第一命名空间的键映射到第二命名空间中的键来将第一命名空间数据转换为第二命名空间数据。如图3B所示,所转换的第二命名空间数据可以经由虚拟化层115从扩展引用125提供给数据库存储引擎110。数据库存储引擎110可以将第二命名空间数据返回到从其接收到查询的经授权的数据库用户的计算设备。
在图3A和图3B所示的示例中,扩展引用可用于确定是否响应于查询来检索前沙箱数据或后沙箱数据。如全文所公开的,虚拟快照是扩展引用的集合。在沙箱之前创建的数据可能具有指向具有原始租户数据的扩展的扩展引用。新沙箱数据(即,在创建沙箱之后创建的后续的沙箱租户数据)可以与指向包括沙箱键(即,沙箱的键范围)的扩展的扩展引用相关联。沙箱租户数据(即,在创建沙箱时与沙箱相关联的数据)可以与指示其包含沙箱键范围的扩展引用相关联。沙箱租户数据的扩展引用可以指向具有原始键(即,用于在创建沙箱时存在的原始租户数据的键)以及附加的转换信息的扩展。
例如,如图3A所示,访问层105可以接收查询。访问层105可以基于查询中的谓词(predicate)确定查询是针对组织的第一命名空间(即,针对与原始租户相关联的原始租户数据)。在图3的示例中,假设代表租户的查询包括指定租户的谓词。指示租户的谓词可以是显式的,其中可以在该查询从数据库(例如,图6中所示的数据库1200a、1200b、1200c和/或1200d)检索信息之前包括谓词,或者谓词可以是隐式的(以与采用数据库建立连接的方式)。如果查询基于指向具有原始租户数据的扩展的扩展引用在原始租户数据的键范围内(如图3A所示),则访问层105可以请求虚拟化层115检索由查询从物理存储器127请求的数据。为了检索数据,虚拟化层115的扩展引用120可指向物理存储器127中的扩展130。如上文结合图3A所描述的,可以基于所指向的扩展来检索存储在物理存储器127中的数据,并且响应于该查询提供该数据。
如果查询中的谓词与沙箱(例如,第二命名空间)的键范围相关联,如图3B的示例中所示,访问层105可以基于确定查询中的谓词与第二命名空间(即,与沙箱租户相关联的数据)相关联来请求虚拟化层115从物理存储器127检索该查询所请求的数据。包括查询(即,针对沙箱键范围)中的谓词的扩展引用125可以指向物理存储器127中的扩展130,其具有原始键(例如,用于第一命名空间的数据)。通过使用与扩展引用125一起包括的转换信息来转换来自扩展130的第一命名空间的返回数据。也就是说,可以将第一命名空间的返回数据转换为第二命名空间数据,该第二命名空间数据具有与扩展引用125一起包括的转换信息。第二命名空间的数据(例如,与扩展引用125相关联的数据)可以响应于由访问层105接收的查询而返回给访问层105,如上文结合图3B所详细描述的。
图4A和图4B示出了根据所公开主题的实现方式的可以与形成沙箱结合使用的系统500的示例。特别地,图4A和图4B示出了根据所公开主题的实现方式的具有多个键的租户的重映射。系统500可以是数据库系统、服务器系统、云服务器系统等。系统500可以包括服务器502、服务器504、储存器510和目录520。服务器502、504可以具有相同的持久性,或者可以具有彼此不同的持久性。可以由服务器502和504共享的储存器510可以是系统500上的硬件和软件的任何合适的组合,用于存储与服务器502和/或服务器504相关联的扩展中的数据的键范围。储存器510可以包括与服务器502相关联的扩展511以及与服务器504相关联的扩展512。目录520可以是系统500上用于存储数据扩展(data extent)和数据扩展引用的硬件和软件的任何合适组合。
在图4A所示的例子中,服务器502可以与储存器510中的扩展511相关联,扩展511具有租户ID 10、11、62和98,其中每个租户ID号具有以租户ID号开头的键。例如,租户ID 62可以在键范围内具有都以62开头的多个键。也就是说,在该示例中,62可以是键的前导部分,其中完整的键由不同的部分组成,并且可以是租户ID。服务器504可以与扩展512相关联,扩展512具有租户ID 33、34、44和66,其中每个租户ID号具有以租户ID号开头的键。也就是说,与服务器502相关联的扩展511的键的键范围([第一键],[最后键])可以是键(10,98),并且与第二服务器504相关联的扩展512的键的键范围可以是键(33,66)。
在目录520中,数据扩展522可以映射到服务器502和504的数据扩展511和512。例如,在数据扩展522中,扩展511的ID可以是0x21,并且键起始可以是10(即,匹配储存器510中的扩展511的键起始),并且键结束可以是98(即,匹配储存器510中的扩展511的键结束)。类似地,数据扩展522中的服务器504的扩展512的ID可以是0x88,键起始可以是33(即,匹配储存器510中的扩展512的键起始),并且键结束可以是66(即,匹配储存器510中的扩展512的键结束)。数据扩展引用524可以是对数据扩展(例如,数据扩展522)的引用,并且可以包括关于关联服务器(例如,服务器502或504)的信息。数据扩展引用524的行525可以包括数据扩展522的ID0x21的类似信息,但可以包括EID(扩展ID)0x21,并且可以指示键起始为10且键结束为98的服务器是服务器502。
在图4A所示的例子中,数据扩展引用524示出了在将与服务器502相关联的扩展511的租户ID 62沙箱化为租户ID 63之前的扩展的状态。要将与服务器502相关联的扩展511的租户ID 62映射为要添加的租户ID 63,数据扩展引用524可以将该改变反映给服务器504。具体地,如图4B所示,在行526和528中,扩展512(即,EID为0x88的扩展)可以被分成两个键范围。可以更新数据扩展引用524,使得行526的扩展(即,扩展512)可以具有键起始为33和键结束为44(即,键范围(33,44)),并且行528的扩展(即,扩展512)可以具有键起始为66和键结束为66(即,键范围(66,66))。即,扩展512的键范围33-44在第一段(segment)中,并且以键66开始和结束的键范围是第二段。如图4B所示,服务器504可以在扩展512中指向键范围(33,44)以及键范围(66,66)。
如图4B所示,可以在数据扩展引用524的行526和行528之间插入行527。行527可以具有扩展511(即,具有扩展ID 0x21的扩展,非常类似于服务器502的行525),并且可以具有键起始63和键结束63,并且可以指示租户ID 62到租户ID 63的映射。数据扩展引用524可以包括与服务器502相关联的键范围(10,98),以及与服务器504相关联的键范围(33,44)、(63,63)和(66,66)。也就是说,图4A可以示出在将租户62映射到租户63之前的数据扩展引用524的状态,并且图4B可以示出映射之后的数据扩展引用的状态。如图4B所示,服务器504可以指向扩展512的键范围(33,44)和键范围(66,66),以及扩展511的键范围(62,62)。
本发明公开的主题的实现方式可实现于各种组件和网络体系结构并与其一同使用。图5是适于实施本公开主题的实现方式的示例计算机600。如本文进一步详细讨论的,计算机600可以是多个计算机的网络中的单个计算机。如图5所示,计算机600可以与中央或分布式组件700(例如,服务器、云服务器、数据库、集群、应用服务器等)通信。中央组件700可以与诸如第二计算机800的一个或更多个其他计算机通信,第二计算机800可以包括存储设备810。第二计算机800可以是服务器、云服务器等。存储器810可以使用任何合适的易失性和非易失性物理存储介质的任何合适的组合,该易失性和非易失性物理存储介质包括例如硬盘驱动器、固态驱动器、光学介质、闪存、磁带驱动器、寄存器和随机存取存储器等或其任何组合。
数据可以使用任何合适的文件系统或存储方案或层级以任何合适的格式存储在例如存储器810中。例如,存储器810可以使用具有多个级别的日志结构的合并(LSM)树来存储数据。此外,如果图5和图6中所示的系统是多租户系统,对于租户的数据库的每个实例,存储器可以被组织成单独的日志结构的合并树。或者,特定服务器或系统上的所有记录的内容可以存储在单个日志结构的合并树中,在这种情况下,与记录的版本相关联的唯一租户标识符可以用于区分这里公开的每个租户的数据。较新的事务可以存储在树的最高层或最顶层,并且较旧的事务可以存储在树的较低层。或者,每个记录(即,每个记录的内容)的最新事务或版本可以存储在树的最高层并且先前版本或先前事务可以存储在树的较低层。
可以针对每个计算机隔离获得的至中央部件700和/或从中央部件700获得的信息,使得计算机600可以不与计算机800共享信息。可选地或另外地,计算机600可以与第二计算机800直接通信。
计算机(例如,用户计算机、企业计算机等)600包括总线610,总线610互连计算机600的主要组件,例如中央处理器640、存储器670(通常为RAM,但也可包括ROM、闪存等)、输入/输出控制器680、用户显示器620(例如经由显示适配器的显示器或触摸屏)、用户输入接口660(其可包括一个或更多个控制器和相关联的用户输入设备,例如键盘、鼠标、WiFi/蜂窝无线电、触摸屏、麦克风/扬声器等,并且可以紧密地耦合到I/O控制器680)、固定存储器630(例如硬盘驱动器、闪存、光纤信道网络、SAN设备、SCSI设备等)、以及可操作用于控制和接收光盘、闪存驱动器等的可移除介质组件650。
总线610使能中央处理器640和存储器670之间的数据通信,存储器670可以包括只读存储器(ROM)或闪存(均未示出)、以及随机存取存储器(RAM)(未示出),如前文提及的。RAM可以包括加载了操作系统和应用程序的主存储器。除了其他代码之外,ROM或闪存可以包含基本输入输出系统(BIOS),BIOS控制基本硬件操作,例如与外围组件的交互。驻留在计算机600中的应用程序可以存储在计算机可读介质上并经由计算机可读介质访问,计算机可读介质例如是硬盘驱动器(例如,固定存储器630)、光盘驱动器、软盘或其他存储介质650。
固定存储器630可以是与计算机600一体的或可以是单独的并且通过其他接口访问。网络接口690可以经由电话链路提供到远程服务器的直接连接、经由因特网服务提供商(ISP)提供到因特网的直接连接、或者经由直接网络链路提供到远程服务器的直接连接、经由POP(point of presence,入网点)或其他技术提供到因特网的直接连接。网络接口690可以使用无线技术提供这种连接,该无线技术包括数字蜂窝电话连接、蜂窝数字分组数据(CDPD)连接、数字卫星数据连接等。例如,网络接口690可以使计算机能够经由一个或更多个局域网、广域网或其他网络与其他计算机通信,如图6所示。
很多其他装置或组件(未示出)(例如,数据高速缓冲存储器系统、应用服务器、通信网络交换机、防火墙设备、认证和/或授权服务器、计算机和/或网络安全系统等等)可以以类似的方式进行连接。相反,并非图6中所示的所有组件都需要存在以实践本公开。组件可以以不同于所示方式的方式互连。诸如图10所示的计算机的操作在本领域中是公知的并且在本申请中不再详细讨论。用于实现本公开的代码可以存储在计算机可读存储介质中,诸如存储器670、固定存储器630、可移除介质650中的一个或更多个,或者存储在远程存储位置上。
图6示出了根据所公开主题的实现方式的示例网络布置。由云1202表示的网络中的不同节点处的四个单独的数据库系统1200a至1200d通过网络链路1204彼此通信并与用户(未示出)通信。每个数据库系统1200可操作用于主管数据库的多个实例,其中每个实例仅可由与特定租户相关联的用户访问。每个数据库系统可以与存储区域网络(未示出)、负载平衡器和备用服务器以及防火墙、其他安全系统和认证系统一起构成计算机集群。系统1200中的任何系统的一些实例可以是实况的,或是处理和提交从用户或从计算元件(未示出)接收的事务的生产实例,以获取和提供实例中的数据进行存储。
数据库系统1200a至1200d中的一个或更多个可以在任何时间创建原始租户的沙箱。例如,与原始租户相关联的数据库系统1200a至1200d的一个或更多个授权用户可以请求由数据库系统1200a至1200d之一创建沙箱。该系统(例如1200c)可以包括例如图6中的至少一个存储设备。例如,存储器可以包括存储器670、固定存储器630、可移除介质650、与中央组件700和/或第二计算机800一起被包括的存储设备、和/或与数据库系统1200a至1200d中的一个或更多个相关联的一个或更多个存储设备。原始租户可以具有存储在与原始租户标识符相关联的至少一个存储设备的不可变存储器中的原始租户数据。沙箱创建时间点起的原始租户数据可用于创建沙箱租户可访问的原始租户数据的虚拟快照。新的或更新后的沙箱租户数据可以存储在存储设备中或其他地方(例如,诸如高速缓存存储系统、网络存储设备等),并且可以在不改变沙箱创建时间之后存在的原始租户数据的情况下进行改变,而且可以在不改变沙箱租户数据的情况下改变或更新原始租户数据。此外,沙箱租户和原始租户都不会改变虚拟快照中的数据,因为沙箱租户和原始租户的后续更新可以分别存储在LSM存储器的不同部分中。
可以在创建沙箱租户之后通过记录时间戳或其他时间标识符创建虚拟快照。此后,沙箱租户和原始租户都将通过基于在时间戳之前存储的数据池中的键访问适当的版本来解释在时间戳之前的数据版本的主键请求。访问在时间戳之后创建或更新的数据的相应租户的键将被解释为访问仅由沙箱租户或原始租户创建的适当数据。或者,数据库中的每个事务可以具有与其相关联的唯一事务号(对于每个后续事务单调递增),而不是使用时间戳,并且系统可以记录最近创建的事务标识符来代替时间戳。
诸如图5和图6中所示的一个或更多个服务器可以创建沙箱租户标识符,并且可以通过将沙箱租户标识符与原始租户数据的虚拟快照以及由沙箱租户在沙箱创建时间点之后创建的沙箱数据相关联来创建沙箱租户。沙箱租户在沙箱创建时间点之后创建的沙箱数据是原始租户不可访问的。在沙箱创建时间点之后,图5和图6中所示的系统可以创建与存储在存储设备的不可变存储器中的原始租户标识符相关联的后续的原始租户数据。沙箱租户不能访问后续的原始租户数据。原始租户可以访问在沙箱创建时间点之前和之后创建的存储在不可变存储器中的原始租户数据,并且可以将后续的沙箱租户数据创建为新的租户数据,新的租户数据不改变存储在不可变存储器中的其他租户数据。
图5和图6中所示的系统的一个或更多个服务器可以接收包括指示沙箱租户的键的查询,并通过将指示沙箱租户的键动态映射到指示原始租户的键,对来自沙箱租户的键所标识的不可变存储器的数据进行操作。例如,键可以包括如上所述的时间戳或序列指示符。对于沙箱租户,数据库系统可以检查时间戳或序列指示符以确定时间戳或序列标识符是否指示沙箱租户正在寻求访问在创建沙箱租户之前创建的数据。在这种情况下,将键动态映射到原始租户和沙箱租户均可以访问的适当数据。另一方面,如果请求中的时间戳或序列标识符指示数据是在创建租户之后创建或更新的,则不会对请求进行该映射,而是访问仅可由沙箱租户访问的适当事务。图5和图6中所示系统的一个或更多个服务器可以基于对指示沙箱租户的键进行的动态映射,从至少一个存储设备(例如,与中央组件700、第二计算机800和/或数据库系统1200a-1200d相关联的存储设备)接收来自沙箱租户的不可变存储器的数据。
图5和图6中所示系统的一个或更多个服务器可以对数据进行操作,以便基于所映射的键从不可变存储器中检索数据。服务器可以将来自原始租户的键所指示的不可变存储器的数据转换为指示沙箱租户的键的数据,并对转换的数据执行操作。通过执行操作产生的数据可以存储在与沙箱租户的键相关联的设备的不可变存储器中,例如与中央组件700、第二计算机800和/或一个或更多个数据库系统1200a至1200d相关联的存储设备。
图5和图6中所示的系统的一个或更多个服务器可以接收包括指示原始租户的键的查询(例如,来自图5中所示的计算机600等),并且可以对来自原始租户的键所标识的至少一个存储设备的不可变存储器的数据进行操作。该一个或更多个服务器基于对指示沙箱租户的键进行的动态映射,从沙箱租户的至少一个存储设备接收来自不可变存储器的数据。
图5和图6的服务器可以接收(例如,从图5中所示的计算机600等)用于删除沙箱租户的操作。图5和图6的一个或更多个服务器可以从至少一个存储设备(例如,与中央组件700、第二计算机800和/或数据库系统1200a至1200d相关联的存储设备)的不可变存储器中移除与沙箱租户相关联的键而不会改变原始租户数据。
在一些实现方式中,图5和图6的服务器可以从不可变存储器(例如,与中央组件700、第二计算机800和/或数据库系统1200a至1200d相关联的存储设备)移除键范围,而不移除存储在不可变存储器中的物理数据。当沙箱创建时间点之后不可变存储器中的沙箱租户数据没有变化时,图5和图6的服务器可以从不可变存储器中移除具有与其关联的租户映射的沙箱租户数据的扩展引用。当不可变存储器中的沙箱租户数据发生变化时,图5和图6的服务器可以从不可变存储器中移除沙箱租户数据的键范围的扩展引用,以便替换原始租户数据的现有的扩展引用,从而不包括已移除的沙箱租户数据的扩展引用。
在一些实现方式中,在图5和图6中所示的一个或更多个服务器可以使用日志结构的合并树数据结构将数据存储在至少一个存储设备(例如,与中央组件700、第二计算机800和/或数据库系统1200a至1200d相关联的存储设备)的不可变存储器中。
所公开的主题的系统和方法可用于单租户和/或多租户系统。多租户系统可以允许各种租户(例如可以是用户、用户组或组织)通过服务器系统上的软件工具或实例访问他们自己在服务器系统上的记录,这些工具或实例可以在各种租户之间共享。每个租户的记录的内容可以是该租户的数据库的一部分。多个租户的记录的内容可以全部存储在同一服务器系统中,但是每个租户只能访问属于该租户或由该租户创建的记录的内容。这可以允许服务器系统启用多租户而不必分别将每个租户的记录的内容存储在例如单独的服务器或服务器系统上。租户的数据库可以是例如关系数据库、层级数据库或任何其他合适的数据库类型。存储在服务器系统上的所有记录可以以任何合适的结构(包括例如LSM树)存储。
如本文所公开的记录可以通过在多租户系统的实例中的键-值对来标识。在上面讨论的实现方式中,数据库可以没有租户的概念。可以通过一个或更多个虚拟叠加网络(overlay)来创建数据库中的租户,使得用户可以查看、访问和/或执行与数据库系统的授权用户相关联的租户的操作。该值可以是例如关系数据库表的行内容、关系数据库表中的行标识、或任何其他合适的值。键可以是记录的标识符,并且可以是任何合适的形式,例如字母数字序列。键的一部分可以提供关于记录的内容的信息。例如,键的一部分可以是租户标识符,其可以唯一地标识记录的内容所属于的租户。例如,当记录的值是行内容时,键的其他部分可以标识例如表号和行标识,当记录的值是行标识时,键的其他部分可以标识表号、表的索引号以及索引列标识。
另外,多租户系统可以具有服务器系统上的各种租户实例,服务器系统通过网络分布,该网络中每个节点处有计算系统。每个租户的实况或生产数据库实例可只在一个计算机系统上处理其事务。用于处理该实例的事务的计算系统还可以处理其他租户的其他实例的事务。
更一般地,本发明公开的主题的各种实现方式可以包括计算机实现过程和用于实践这些过程的设备或以计算机实现过程和用于实践这些过程的设备的形式实现。实现方式还可以以计算机程序产品的形式实现,该计算机程序产品具有包含在非暂时性和/或有形介质(例如软盘、CD-ROM、硬盘驱动器、USB(通用串行总线)驱动器,或者任何其他机器可读存储介质)中实现的指令的计算机程序代码,其中,当计算机程序代码被加载到计算机中并由计算机执行时,该计算机变为用于实践所公开主题的实现方式的装置。各实现方式也可以以计算机程序代码的形式实现,计算机程序代码例如存储在存储介质中、加载到计算机中和/或由计算机执行、或者通过一些传输介质(例如通过电线或电缆,通过光纤光学器件,或通过电磁辐射)传输,其中当计算机程序代码被加载到计算机中并由计算机执行时,计算机变成用于实践所公开主题的实现方式的装置。当在通用微处理器上实现时,计算机程序代码段配置该微处理器以创建特定的逻辑电路。在一些配置中,存储在计算机可读存储介质上的计算机可读指令集可以由通用处理器实现,该通用处理器可以将通用处理器或包含通用处理器的设备转换为被配置用于实现或执行这些指令的专用设备。可以使用硬件来实现各实现方式,硬件可包括处理器,诸如通用微处理器和/或专用集成电路(ASIC),其以硬件和/或固件来实现根据所公开的主题的实现方式的所有或部分技术。处理器可以耦合到存储器,例如RAM、ROM、闪存、硬盘或能够存储电子信息的任何其他设备。存储器可以存储适于由处理器执行以执行根据所公开主题的实现方式的技术的指令。
前面的描述中,出于解释的目的,参考具体实现方式进行了描述。然而,上面的说明性讨论并非旨在穷举或将所公开的主题的实现方式限制为所公开的精确形式。鉴于上述教导,许多修改和变化都是可能的。选择和描述这些实现方式是为了解释所公开的主题的实现方式的原理及其实际应用,从而使得本领域的其他技术人员能够利用这些实现方式以及具有各种修改的各种实现方式,这些修改可能适合于预期的特定用途。
Claims (23)
1.一种用于在一时间点为数据库系统的原始租户创建沙箱的计算机化方法,所述原始租户具有存储在与原始租户标识符相关联的所述数据库系统的不可变存储器中的原始租户数据,沙箱创建时间点起的原始租户数据是使沙箱租户能访问的所述原始租户数据的虚拟快照,其中,沙箱租户数据能在不改变或不扩充所述原始租户数据的情况下进行改变或扩充,并且所述原始租户数据能在不改变或不扩充所述沙箱租户数据的情况下进行改变或扩充,所述方法包括:
经由所述数据库系统创建沙箱租户标识符;
通过将所述沙箱租户标识符与所述原始租户数据的所述虚拟快照以及所述沙箱租户在所述沙箱创建时间点之后创建的沙箱租户数据相关联来创建沙箱租户,其中所述沙箱租户在所述沙箱创建时间点之后创建的所述沙箱租户数据不能被所述原始租户访问;
在所述沙箱创建时间点之后,创建与存储在所述不可变存储器中的所述原始租户标识符相关联的后续的原始租户数据,所述后续的原始租户数据不能被所述沙箱租户访问,其中所述原始租户能访问在所述沙箱创建时间点之前和之后创建的存储在所述不可变存储器中的原始租户数据,并且其中所述后续的原始租户数据被写为新的原始租户数据,所述新的原始租户数据不会改变存储在所述不可变存储器中的旧的原始租户数据。
2.如权利要求1所述的方法,还包括:
接收包括指示所述沙箱租户的键的查询;和
通过将指示所述沙箱租户的所述键动态地映射到指示所述原始租户的键,对来自所述沙箱租户的由所述键标识的所述不可变存储器的数据进行操作。
3.如权利要求2所述的方法,还包括:
基于对指示所述沙箱租户的所述键进行的所述动态映射,将来自所述沙箱租户的所述不可变存储器的所述数据返回。
4.如权利要求2所述的方法,其中,对数据进行的操作包括:
基于所映射的键从所述不可变存储器检索数据;
将来自所述原始租户的所述键所指示的所述不可变存储器的数据转换为指示所述沙箱租户的所述键的数据;
对所转换的数据执行操作;和
将执行操作得到的数据存储在与所述沙箱租户的所述键相关联的所述不可变存储器中。
5.如权利要求1所述的方法,还包括:
接收包括指示所述沙箱租户的键的查询;和
对来自所述沙箱租户的由所述键标识的所述不可变存储器的数据进行操作。
6.如权利要求5所述的方法,还包括:
基于对指示所述沙箱租户的所述键进行的动态映射,将来自所述沙箱租户的所述不可变存储器的所述数据返回。
7.如权利要求1所述的方法,还包括:
接收用于删除所述沙箱租户的操作;和
在不改变或不扩充所述原始租户数据的情况下从所述不可变存储器中移除与所述沙箱租户相关联的至少一个键。
8.如权利要求7所述的方法,其中,移除所述至少一个键包括:
在不移除存储在所述不可变存储器中的物理数据的情况下从所述不可变存储器中移除键范围。
9.如权利要求7所述的方法,其中,移除所述至少一个键包括:
当在所述沙箱创建时间点之后所述不可变存储器中的所述沙箱租户数据没有改变时,从所述沙箱租户数据的所述不可变存储器中移除扩展引用,所述沙箱租户数据具有与其相关联的原始租户映射。
10.如权利要求7所述的方法,其中,移除所述至少一个键包括:
当所述不可变存储器中的所述沙箱租户数据发生改变时,所述改变替换所述原始租户数据的现有扩展引用,则从所述不可变存储器中移除所述沙箱租户数据的键范围的扩展引用,以便不包括所述沙箱租户数据的已移除的扩展引用。
11.如权利要求1所述的方法,还包括:
使用日志结构的合并树数据结构将所述数据存储在所述不可变存储器中。
12.一种用于在一时间点为原始租户创建沙箱的系统,所述系统包括:
至少一个存储设备,所述原始租户具有存储在与原始租户标识符相关联的所述至少一个存储设备的不可变存储器中的原始租户数据,沙箱创建时间点起的原始租户数据是沙箱租户能访问的所述原始租户数据的虚拟快照,其中沙箱租户数据能被存储在所述至少一个存储设备中,并且能在不改变或不扩充所述原始租户数据的情况下进行改变或扩充,并且所述原始租户数据能在不改变或不扩充所述沙箱租户数据的情况下进行改变或扩充;和
用于所述原始租户和所述沙箱租户的一个或更多个服务器,其通信地耦连到所述至少一个存储设备,所述一个或更多个服务器用于创建沙箱租户标识符,用于通过将所述沙箱租户标识符与所述原始租户数据的所述虚拟快照以及与沙箱租户在沙箱创建时间点之后创建的数据相关联来创建沙箱租户,其中所述沙箱租户在所述沙箱创建时间点之后创建的所述数据不能被所述原始租户访问;以及在所述沙箱创建时间点之后,用于创建与存储在所述至少一个存储设备的所述不可变存储器中的所述原始租户标识符相关联的后续的原始租户数据,所述后续的原始租户数据不能被所述沙箱租户访问,其中所述原始租户能访问在沙箱创建时间点之前和之后创建的存储在所述不可变存储器中的租户数据,并且其中所述后续的原始租户数据被写为新的原始租户数据,所述新的原始租户数据不会改变存储在所述不可变存储器中的旧的原始租户数据。
13.如权利要求12所述的系统,其中,所述一个或更多个服务器接收包括指示所述沙箱租户的键的查询,通过将指示所述沙箱租户的所述键动态地映射到指示所述原始租户的键,对来自所述沙箱租户的由所述键标识的所述不可变存储器的数据进行操作。
14.如权利要求13所述的系统,其中,所述一个或更多个服务器基于对指示所述沙箱租户的所述键进行的所述动态映射,从所述至少一个存储设备接收来自所述沙箱租户的所述不可变存储器的所述数据。
15.如权利要求13所述的系统,其中,所述一个或更多个服务器对数据进行操作,以基于所映射的键从所述不可变存储器中检索数据,将来自所述原始租户的所述键所指示的不可变存储器的数据转换为指示所述沙箱租户的所述键的数据,对所转换的数据执行操作,并将执行操作得到的数据存储在与所述沙箱租户的所述键相关联的所述至少一个存储设备中的所述不可变存储器中。
16.如权利要求12所述的系统,其中,所述一个或更多个服务器接收包括指示所述沙箱租户的键的查询,并对来自所述沙箱租户的由所述键标识的所述至少一个存储设备的所述不可变存储器的数据进行操作。
17.如权利要求16所述的系统,其中,所述一个或更多个服务器基于对指示所述沙箱租户的所述键进行的动态映射,从所述至少一个存储设备接收来自所述沙箱租户的所述不可变存储器的所述数据。
18.如权利要求12所述的系统,其中
所述一个或更多个服务器接收用于删除所述沙箱租户的操作,并在不改变或不扩充所述原始租户数据的情况下从所述至少一个存储设备的所述不可变存储器中移除与所述沙箱租户相关联的键。
19.如权利要求18所述的系统,其中,所述一个或更多个服务器在不移除存储在所述不可变存储器中的物理数据的情况下从所述不可变存储器中移除键范围。
20.如权利要求18所述的系统,其中,当在沙箱创建时间点之后所述不可变存储器中的所述沙箱租户数据没有改变时,所述一个或更多个服务器从所述沙箱租户数据的所述不可变存储器中移除扩展引用,所述沙箱租户数据具有与其相关联的原始租户映射。
21.如权利要求18所述的系统,其中,当所述不可变存储器中的所述沙箱租户数据发生改变,替换所述原始租户数据的现有扩展引用时,所述一个或更多个服务器从所述不可变存储器中移除所述沙箱租户数据的键范围的扩展引用,以便不包括已移除的所述沙箱租户数据的扩展引用。
22.如权利要求12所述的系统,其中,所述一个或更多个服务器使用日志结构的合并树数据结构将所述数据存储在所述至少一个存储设备的所述不可变存储器中。
23.一种计算机可读存储介质,包括指令,所述指令当由计算机执行时,使所述计算机执行根据权利要求1至11之一的方法的步骤。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/345,914 US10241896B2 (en) | 2016-11-08 | 2016-11-08 | Formation and manipulation of test data in a database system |
US15/345,914 | 2016-11-08 | ||
PCT/US2017/060352 WO2018089344A1 (en) | 2016-11-08 | 2017-11-07 | Formation and manipulation of test data in a database system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109952564A CN109952564A (zh) | 2019-06-28 |
CN109952564B true CN109952564B (zh) | 2022-06-21 |
Family
ID=60473640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780069069.1A Active CN109952564B (zh) | 2016-11-08 | 2017-11-07 | 数据库系统中测试数据的形成与操纵 |
Country Status (7)
Country | Link |
---|---|
US (2) | US10241896B2 (zh) |
EP (1) | EP3539021B1 (zh) |
JP (1) | JP7090606B2 (zh) |
CN (1) | CN109952564B (zh) |
AU (1) | AU2017356901B2 (zh) |
CA (1) | CA3043001A1 (zh) |
WO (1) | WO2018089344A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10841392B2 (en) | 2018-04-12 | 2020-11-17 | Pearson Management Services Limited | System and method for redundant API linked microservice communication |
US11663207B2 (en) * | 2018-09-24 | 2023-05-30 | Salesforce, Inc. | Translation of tenant identifiers |
US11151110B2 (en) | 2018-09-24 | 2021-10-19 | Salesforce.Com, Inc. | Identification of records for post-cloning tenant identifier translation |
US10963454B2 (en) | 2018-09-24 | 2021-03-30 | Salesforce.Com, Inc. | System and method for bulk removal of records in a database |
US11238174B2 (en) | 2019-01-31 | 2022-02-01 | Salesforce.Com, Inc. | Systems and methods of database encryption in a multitenant database management system |
US11409904B2 (en) * | 2019-04-18 | 2022-08-09 | Microsoft Technology Licensing, Llc | User interface for building a data privacy pipeline and contractual agreement to share data |
US11321294B2 (en) | 2019-09-09 | 2022-05-03 | Salesforce.Com, Inc. | Database index repair |
US11442960B2 (en) * | 2019-12-17 | 2022-09-13 | Verizon Patent And Licensing Inc. | Edge key value store for a distributed platform |
US11526465B2 (en) * | 2019-12-18 | 2022-12-13 | Salesforce.Com, Inc. | Generating hash trees for database schemas |
US11483150B2 (en) | 2020-06-01 | 2022-10-25 | Salesforce.Com, Inc. | Private key cache in secure enclave |
US11361106B2 (en) | 2020-09-01 | 2022-06-14 | Microsoft Technology Licensing, Llc | Chaining, triggering, and enforcing entitlements |
CN112434284B (zh) * | 2020-10-29 | 2022-05-17 | 格物钛(上海)智能科技有限公司 | 一种基于沙箱环境的机器学习训练平台实现 |
KR102411806B1 (ko) * | 2020-11-17 | 2022-06-23 | 쿠팡 주식회사 | 데이터베이스 쿼리 효율 향상을 위한 시스템 및 방법 |
US11741050B2 (en) | 2021-01-29 | 2023-08-29 | Salesforce, Inc. | Cloud storage class-based variable cache availability |
US11625386B2 (en) | 2021-01-29 | 2023-04-11 | Salesforce.Com, Inc. | Fast skip list purge |
US11922145B2 (en) | 2022-03-01 | 2024-03-05 | Microsoft Technology Licensing, Llc | Initiating data privacy pipelines using reusable templates |
CN114595159B (zh) * | 2022-05-10 | 2022-09-02 | 太平金融科技服务(上海)有限公司 | 测试数据生成方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103283209A (zh) * | 2011-04-18 | 2013-09-04 | 北京新媒传信科技有限公司 | 一种应用服务平台系统及其实现方法 |
CN105893228A (zh) * | 2009-12-15 | 2016-08-24 | 迈克菲股份有限公司 | 用于行为沙箱化的系统和方法 |
CN106027545A (zh) * | 2016-06-27 | 2016-10-12 | 西安空间无线电技术研究所 | 一种基于虚拟数据的鲁棒信息隐藏方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05224992A (ja) * | 1992-02-13 | 1993-09-03 | Hitachi Ltd | プログラムテスト装置 |
JP3497053B2 (ja) * | 1996-11-13 | 2004-02-16 | 株式会社日立製作所 | オンラインデータベース管理システムにおける処理方法及びオンラインデータベース管理システム |
US6038639A (en) * | 1997-09-09 | 2000-03-14 | Storage Technology Corporation | Data file storage management system for snapshot copy operations |
US7101172B2 (en) * | 2002-08-30 | 2006-09-05 | Emerson Electric Co. | Apparatus and methods for variable furnace control |
KR100439675B1 (ko) * | 2002-10-24 | 2004-07-14 | 한국전자통신연구원 | 대용량 공유 저장장치를 위한 효율적인 스냅샷 수행방법 |
US20050091658A1 (en) | 2003-10-24 | 2005-04-28 | Microsoft Corporation | Operating system resource protection |
US9208188B2 (en) * | 2009-02-17 | 2015-12-08 | Microsoft Technology Licensing, Llc | Tenant management of a hosted multi-tenant application |
US8150808B2 (en) * | 2009-10-21 | 2012-04-03 | Delphix Corp. | Virtual database system |
US8161077B2 (en) * | 2009-10-21 | 2012-04-17 | Delphix Corp. | Datacenter workflow automation scenarios using virtual databases |
US8793291B2 (en) * | 2010-03-15 | 2014-07-29 | Salesforce.Com, Inc. | System, method and computer program product for deploying an update between environments of a multi-tenant on-demand database system |
US8706772B2 (en) * | 2010-12-30 | 2014-04-22 | Sap Ag | Strict tenant isolation in multi-tenant enabled systems |
US9367431B2 (en) * | 2011-07-01 | 2016-06-14 | Salesforce.Com, Inc. | Testing data silo |
US9721116B2 (en) | 2013-06-24 | 2017-08-01 | Sap Se | Test sandbox in production systems during productive use |
US10860237B2 (en) * | 2014-06-24 | 2020-12-08 | Oracle International Corporation | Storage integrated snapshot cloning for database |
US20160048844A1 (en) | 2014-08-15 | 2016-02-18 | Salesforce.Com, Inc. | Techniques, architectures and mechanisms for management of electronic licensure |
WO2016117007A1 (ja) | 2015-01-19 | 2016-07-28 | 株式会社日立製作所 | データベースシステム及びデータベース管理方法 |
KR102378367B1 (ko) * | 2015-03-20 | 2022-03-24 | 한국전자통신연구원 | 분산 파일 시스템 |
US9904538B2 (en) * | 2015-08-24 | 2018-02-27 | International Business Machines Corporation | Maintenance of multi-tenant software programs |
-
2016
- 2016-11-08 US US15/345,914 patent/US10241896B2/en active Active
-
2017
- 2017-11-07 CA CA3043001A patent/CA3043001A1/en active Pending
- 2017-11-07 CN CN201780069069.1A patent/CN109952564B/zh active Active
- 2017-11-07 JP JP2019523038A patent/JP7090606B2/ja active Active
- 2017-11-07 EP EP17804736.1A patent/EP3539021B1/en active Active
- 2017-11-07 WO PCT/US2017/060352 patent/WO2018089344A1/en unknown
- 2017-11-07 AU AU2017356901A patent/AU2017356901B2/en active Active
-
2019
- 2019-01-31 US US16/263,067 patent/US20190163613A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893228A (zh) * | 2009-12-15 | 2016-08-24 | 迈克菲股份有限公司 | 用于行为沙箱化的系统和方法 |
CN103283209A (zh) * | 2011-04-18 | 2013-09-04 | 北京新媒传信科技有限公司 | 一种应用服务平台系统及其实现方法 |
CN106027545A (zh) * | 2016-06-27 | 2016-10-12 | 西安空间无线电技术研究所 | 一种基于虚拟数据的鲁棒信息隐藏方法 |
Non-Patent Citations (1)
Title |
---|
王衡.PaaS平台上Python沙箱研究.《 中国优秀硕士论文电子期刊(信息科技辑)》.2014, * |
Also Published As
Publication number | Publication date |
---|---|
AU2017356901B2 (en) | 2020-12-24 |
JP2020502626A (ja) | 2020-01-23 |
CN109952564A (zh) | 2019-06-28 |
US10241896B2 (en) | 2019-03-26 |
CA3043001A1 (en) | 2018-05-17 |
AU2017356901A1 (en) | 2019-05-23 |
WO2018089344A1 (en) | 2018-05-17 |
JP7090606B2 (ja) | 2022-06-24 |
US20180129585A1 (en) | 2018-05-10 |
EP3539021A1 (en) | 2019-09-18 |
EP3539021B1 (en) | 2022-06-01 |
US20190163613A1 (en) | 2019-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109952564B (zh) | 数据库系统中测试数据的形成与操纵 | |
CN110799960B (zh) | 数据库租户迁移的系统和方法 | |
US10901861B2 (en) | Systems and methods of restoring a dataset of a database for a point in time | |
US10621071B2 (en) | Formation and manipulation of test data in a database system | |
US20200201745A1 (en) | Formation and manipulation of test data in a database system | |
CN110799961B (zh) | 在数据库中创建和删除租户的系统和方法 | |
US10732840B2 (en) | Efficient space accounting mechanisms for tracking unshared pages between a snapshot volume and its parent volume | |
WO2016117007A1 (ja) | データベースシステム及びデータベース管理方法 |
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 | ||
CP01 | Change in the name or title of a patent holder |
Address after: California, USA Patentee after: Shuo Power Co. Address before: California, USA Patentee before: SALESFORCE.COM, Inc. |
|
CP01 | Change in the name or title of a patent holder |