CN111279329B - 用于高效地实现可快速复制的数据库的方法和装置 - Google Patents

用于高效地实现可快速复制的数据库的方法和装置 Download PDF

Info

Publication number
CN111279329B
CN111279329B CN201880069335.5A CN201880069335A CN111279329B CN 111279329 B CN111279329 B CN 111279329B CN 201880069335 A CN201880069335 A CN 201880069335A CN 111279329 B CN111279329 B CN 111279329B
Authority
CN
China
Prior art keywords
virtual clone
record
query
records
version identifier
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201880069335.5A
Other languages
English (en)
Other versions
CN111279329A (zh
Inventor
L·C·贝尔德三世
M·哈蒙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hydra Hashitou Co.,Ltd.
Original Assignee
Swirlds Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Swirlds Inc filed Critical Swirlds Inc
Priority to CN202110658830.3A priority Critical patent/CN113377836B/zh
Publication of CN111279329A publication Critical patent/CN111279329A/zh
Application granted granted Critical
Publication of CN111279329B publication Critical patent/CN111279329B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1873Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2474Sequence data queries, e.g. querying versioned data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Computer Security & Cryptography (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种可快速复制的数据库装置,包括处理器和与处理器进行电子通信的存储器。存储器存储具有多个记录的数据库表,每个记录具有包括版本标识符的复合键。存储器还存储指令,该指令能够执行以使处理器生成数据库表的第一虚拟克隆和数据库表的第二虚拟克隆,在第一虚拟克隆处接收查询,并且修改查询以使其包括第一虚拟克隆的版本标识符。处理器可以使用修改后的查询来查询数据库表,以部分地基于来自具有与第一虚拟克隆的版本标识符的祖先路径相关联的版本标识符的记录集合的每个记录来生成响应,并且发送该响应。每个复合键包括版本标识符和数据部分。

Description

用于高效地实现可快速复制的数据库的方法和装置
对相关申请的交叉引用
本申请要求于2017年11月1日提交的标题为“Methods and Apparatus forEfficiently Implementing a Distributed Database within a Network(用于在网络内高效地实现分布式数据库的方法和装置)”的第62/580,056号美国临时申请的优先权和权益,该美国临时申请的公开以其全部被引用的方式并入本文中。
背景技术
本文描述的实施例一般涉及用于实现提高效率的数据库系统的方法和装置。
发明内容
在某些实施例中,可快速复制的数据库装置包括处理器以及与处理器进行电子通信的存储器。存储器存储具有多个记录的数据库表,每个记录具有包括版本标识符的复合键。存储器还存储指令,该指令能够执行以使处理器生成数据库表的第一虚拟克隆和数据库表的第二虚拟克隆,在第一虚拟克隆处接收查询并修改查询以使该查询包括第一个虚拟克隆的版本标识符。处理器可以使用修改后的查询来查询数据库表,以部分地基于来自具有与第一虚拟克隆的版本标识符的祖先路径相关联的版本标识符的记录集合的每个记录来生成响应,并发送该响应。每个复合键包括版本标识符和数据部分。
附图说明
图1是示出了根据实施例的用于实现可快速复制的数据库的系统的框图。
图2A是根据实施例的可查询的层次树和相关联的数据库表的图。
图2B是根据实施例的冲突约束被强制执行的可查询的层次树和相关联的数据库表的图。
图3A是示出了根据实施例的用于生成层次树的虚拟克隆并与层次树的虚拟克隆进行交互的方法的流程图。
图3B包括示出了图3A的层次树的时间演化以及经由图3A的层次树与数据库表的交互的一系列图。
图4A至图4F包括示出了根据实施例的包括虚拟克隆的表示的层次树的时间演化以及相关联的数据库表的图。
图4G包括示出了根据实施例的查询过程的图。
图5包括示出了根据实施例的增量垃圾收集过程的一系列图。
图6是根据实施例的用于快速复制数据库的处理器实现的垃圾收集(或级联删除)方法的过程流程图。
图7是根据实施例的用于快速复制数据库的处理器实现的垃圾收集(或级联删除)方法的过程流程图。
图8A至图8D是示出了根据实施例的可快速复制的数据库系统的实现的图。
图9包括示出了根据实施例的快速复制操作的一系列图。
具体实施方式
本公开的高效数据库系统包括一个或多个物理关系数据库(包括“数据库表”和/或在本文中与“数据库表”可互换使用),每个物理关系数据库存储在非暂时性处理器可读存储器中,并且一个或多个相关联的动态层次树的每一个包括多个虚拟克隆,由此可以在预定条件下和/或在预定时间段内访问和/或修改关系数据库的数据。本文阐述的数据库实现和管理方法比已知的数据库复制和交互方法显著更快并且更高效。本文描述的关系数据库当根据本公开被实现时可以被称为“可快速复制”,因为许多不同的“副本”可以经由新虚拟克隆的实例化来快速创建和/或定义,其中每个不同的“副本”是指“虚拟”副本-如从不同的相关联的虚拟克隆的角度来看的并且从不同的相关联的虚拟克隆访问的内容。换句话说,可以说关系数据库是被“包装”在将关系数据库转换为可快速复制的数据库的类中。
在某些实现中,本公开的高效数据库系统可以被描述为“无领导者”,因为在多个相关联的、地理位置分散的位置处有多个物理关系数据库(即,关系数据库的“实例”)以及相关联的动态层次树,可选地,每个具有不同的相关联的管理员,但是没有关系数据库的集中式的“主”或“领导者”副本。换句话说,可以在多个物理关系数据库的每一个处以不同的顺序和/或在不同的时间应用不同的更改。在分布式数据库系统中没有领导者,可以提高分布式数据库系统的安全性。例如,对于领导者,存在攻击和/或故障的单个点。如果恶意软件感染领导者和/或领导者的数据库表中的值被恶意更改以致其具有不正确的值,则该感染和/或不正确的值可能会在整个数据库实例网络中传播,或被传递到另一个分布式数据库实例。相反,在本公开的无领导者系统中,没有攻击和/或故障的单个点。本文描述的无领导者分布式数据库系统还可以提高一种或多种共识算法的收敛速度,同时减少设备之间传输的数据量。通过生成可以被用于跟踪对数据库表的内容的不同的增量更改的虚拟克隆,本文描述的分布式数据库系统也是“可快速复制的”。如本文所使用的,“快速复制”具有与短语“虚拟克隆”相同的含义。这样,与某些已知的分布式数据库不同,无需使用复制和重复就可以完成更新,其可以是资源密集型的且耗时的,尤其是当被管理的数据语料库庞大时。
在某些实施例中,来自层次树的虚拟克隆组的每个虚拟克隆可以用作“虚拟数据库”,因为关系数据库的数据可以由与该虚拟克隆交互的用户(例如,经由查询)访问,使得对该用户呈现数据是在该虚拟克隆处本地地被存储和/或正在被搜索,尽管其不是(即,存储和查询发生在关系数据库/表上)。对关系数据库的数据表的修改可以被应用在来自虚拟克隆组中的多个虚拟克隆上,并且可以使用“复合键”(例如,使用被添加到数据库表中的属性以及数据库表的遗留键字段)在关系数据库内与该虚拟克隆相关联。复合键可以包括至少两个值:与至少一个虚拟克隆相关联的版本标识符(“版本ID”)、以及表示正在被引用的数据库表的属性的字段(例如,行(即,“记录”或“元组”)标识符或名称、列(即“属性”)标识符或名称、数据标签、数据值等),诸如该数据库表的遗留键字段(在本文中也被称为“虚拟主键字段”)。示例属性包括但不限于虚拟主键名称、值(例如余额、借记、贷记、转账金额)、货币、描述、日期、数量、计数(tally)、版本、持续时间、顺序等。复合键的部分可以被存储为数据库表记录的一部分,使得由一个虚拟克隆做出的编辑从任何其他虚拟克隆的角度来看不会影响数据库表的数据。在某些实施例中,给定复合键的多个实例不被允许在任何给定时间下在数据库表内共存(即,在数据库表内仅能有给定复合键的一个实例)。由特定虚拟克隆对关系数据库的数据表做出的修改经由该虚拟克隆的版本标识符而与该虚拟克隆相关联,使得经由该虚拟克隆做出的后续查询或修改可以被应用于关系数据库的最新形式,如经由该虚拟克隆/版本ID对数据库表做出的累积交互所定义的那样。但是,由特定虚拟克隆对数据库表做出的修改从其他虚拟克隆的角度来看并非明显的或可访问的。归因于根据虚拟克隆的相关联的版本ID对更改的虚拟克隆的相关联的修改的更改,以此分布式方式实现更改将消除复制、分发和本地存储(例如,在托管虚拟克隆的一组服务器节点中的每一个处)每个关系数据库的数据的多个副本的需要。本文阐述的方法可以消除对响应于每台机器在与其进行网络通信中做出的每个更改将关系数据库的整个内容多次发送到许多机器的需要。
可快速复制的数据库系统
图1是示出了根据一些实施例的可快速复制的数据库系统100的组件的系统图。如图1所示,系统100包括与网络105进行无线或有线通信的第一计算设备110、以及也与网络105进行无线或有线通信的一个或多个附加的计算设备120。第一计算设备110包括处理器111,其与板载存储器112和显示器113可操作地通信。存储器112存储一个或多个数据库表114(即,关系数据库的实例(一个或多个))、快速复制器115和共识指令116(例如,其使处理器实现共识算法)。每个数据库表114包括下面更详细描述的一个或多个复合键114A。来自一个或多个另外的计算设备120的每个计算设备包括处理器121,其与板载存储器122以及可选地一个或多个接口(例如,显示器、图形用户界面(GUI)、无线收发器等)(未示出)可操作地通信。存储器122包括一个或多个数据库表124(即,关系数据库的实例(一个或多个))、快速复制器125和共识指令(例如,其使处理器实现共识算法)126。
处理器111和121中的每一个可以包括以下各项中的一个或多个:通用处理器、中央处理器(CPU)、微处理器、数字信号处理器(DSP)、控制器、微控制器、状态机和/或类似物。在某些情况下,如本文所使用的,“处理器”可以指专用集成电路(ASIC)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)等。术语“处理器”可以指处理设备的组合,例如与DSP内核结合的一个或多个微处理器、多个微处理器、DSP和微处理器的组合或任何其他这样的配置。
存储器112和122中的每一个可以包括能够存储诸如数据和代码(例如,指令)的电子信息的任何电子组件。术语存储器可以指各种类型的非暂时性处理器可读介质,诸如随机存取存储器(RAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除PROM(EEPROM)、闪存存储器、磁或光数据存储设备、寄存器等。如果处理器可以从存储器读取信息和/或向存储器写入信息,则存储器被称为是与处理器可操作或电子通信的。与处理器整合的存储器是与处理器进行电子通信的。非暂时性计算机可读介质的示例包括但不限于磁存储介质,诸如硬盘、软盘和磁带;光学存储介质,诸如紧凑盘/数字视频光盘(CD/DVD)、紧凑盘只读存储器(CD-ROM)和全息设备;磁光存储介质,诸如光盘;载波信号处理器;以及专门被配置为存储和执行程序代码的硬件设备,诸如专用集成电路(ASIC)、可编程逻辑设备(PLD)、只读存储器(ROM)和随机存取存储器(RAM)设备。本文描述的其他实施例涉及计算机程序产品,其可以包括例如本文所讨论的指令和/或计算机代码。
在一些实施例中,本公开的可快速复制的数据库系统可被实现为硬件或软件,例如,如以下参考图1所示和所述的“快速复制器”,或存储在非暂时性存储器中的并且包括可与存储器进行可操作通信地由处理器执行的指令的软件的其他形式。存储器可以还存储(和/或处理器可以访问)关系数据库。快速复制器可以是“包装类”(也称为“包装模式”或“包装函数”),其“包装”其与之相关联的关系数据库。例如,当软件正在运行并且结构化查询语言(SQL)查询在处理器处被接收时,处理器可以通过调用包装类中的方法将SQL查询发送/传递到关系数据库,其可以在将查询发送到关系数据库之前修改该查询。然后,由关系数据库响应于SQL查询而返回的结果可以然后通过包装类中的方法被返回/发送。快速复制软件可以被配置为以任何组合执行以下一项或多项:拦截对关系数据库的调用,拦截来自关系数据库的调用,向关系数据库添加字段(例如,如下所述的“版本”),修改关系数据库的字段,删除关系数据库的字段,修改关系数据库的结构(例如,添加或移除记录/行或属性/列)或以下参考图2-7所示和所述的任何功能。
在某些实施例中,可快速复制的数据库系统包括单个机器(或“节点”)或多个机器或“节点”,每个包括可操作地耦合到托管关系数据库的实例和快速复制软件的非暂时性存储器的处理器。最初(即,在应用任何更改之前),关系数据库的每个实例都是相同的。节点可以在地理上彼此分离和/或与不同的管理员个人和/或实体相关联。每个节点可以生成和/或存储包括一个或多个虚拟克隆(在本文中也被称为“对象”或“虚拟对象”)的相关联的层次树和/或层次树的后续部分(或层次树的表示),关系数据库可以通过该虚拟克隆而被修改和/或查询。随着底层层次树被扩展和/或修改,生成层次树可以被多次执行。例如,每个节点可以生成至少两个虚拟克隆-第一虚拟克隆和第二虚拟克隆。第一虚拟克隆可以被用于例如当在该节点处(例如,从另一个节点)接收到活动数据时,将更改应用于关系数据库的字段。例如,可以响应于接收活动数据和/或基于活动数据而自动和/或由管理员应用这些更改。活动数据可以包括与在接收节点是其一方的节点网络内正在发生或意图已经发生的一个或多个事件或交易有关的数据。由第一虚拟克隆应用的更改可以被视为共同表示与一个或多个交易或事件相关联的接收态活动数据的“运行计数”。
在某些实现中,由于由一个或多个节点发起的和/或由快速复制软件自动实现的(例如,由在节点网络内检测到的更改而触发和/或根据预定义的时间调度)“同步”事件,活动数据在给定节点处被接收。在同步期间,来自节点网络的至少两个节点交换来自它们的相关联的数据库表的数据。该数据可以是例如活动数据或其一部分。在至少两个节点之间/它们之中被交换的数据可以表示节点网络内的聚合活动的子集或部分视图。在某些这样的实例下,经由第一虚拟克隆被应用于节点数据库表的更改是“临时更改”,尚未达到其共识排序和/或其有效性,和/或尚未关于中间更改是否正从数据库丢失做出确定(即,对于那些更改,尚未达成/满足共识)。经由第一虚拟克隆在节点处被修改的数据库表内的记录可以包括包含与第一虚拟克隆相关联的第一版本ID复合键。
在某些实现中,同步过程包括:(1)基于一个或多个事件(例如,包括一个或多个交易)或在同步期间接收到的交易,重复更新数据库表的“当前状态”(例如,如由节点定义的数据库状态变量所捕获的);以及(2)每当接收到关于事件或交易的排序的新信息时,就重复重新构建该当前状态(例如,重新配置事件的顺序),例如通过返回到较早状态的副本并且通过以新顺序处理事件或交易来重新计算当前状态来重新构建。因此,例如,每个计算设备可以维护状态的两个版本-一个是在接收到新事件和交易时被更新(例如,如上面讨论的第一虚拟克隆所体现的),而另一个是仅在达成共识之后被更新(例如,如上面讨论的第二虚拟克隆所体现的)。在某个时间点(例如,在预定的时间段之后、在已经定义和/或接收到预定数量的事件之后,等等),随着接收到新的事件和交易而被更新的状态的版本可以被丢弃或从层次树中删除,并且达成共识之后被更新的状态的新副本可以被生成,作为随着接收到新事件和交易而被更新的状态的新版本(例如,如上面讨论的第三虚拟克隆所体现的)。前述方法可以确保两个状态的同步。在某些实例下,状态(包括状态的不同副本)可以存储于任何合适的数据结构,诸如,例如“可快速复制”数组列表(在本文中也被称为快速克隆数组列表、快速克隆数组或可快速复制数组)、“可快速复制”哈希表、可快速复制”关系数据库或“可快速复制”文件系统(在本文中也称为快速克隆文件系统和/或可快速复制的文件系统),可选地具有针对可快速复制的文件系统中的文件的每个N字节(例如4096字节或1024字节)部分在主机操作系统上正被创建和/或定义的单独文件。
如本文中所使用的,“共识”是指使用共识算法达成的确定,即正由共识算法考虑的一个或多个更改被正确排序、没有重复、没有丢失任何中间更改、和/或是合法的(即,并非恶意的或欺诈的)。例如,当所有或至少一个预定义的阈值数量的节点同意、或者根据至少一个预定义的阈值确信度已经得出结论时,可以说达成了共识,即更改被正确地排序、没有重复、没有丢失任何中间更改和/或是有效的。例如,对其已经达成共识的更改序列可以说反映了事件和/或交易的序列的“真”或准确的表示。在某些实现中,在共识算法的预定次数的迭代之后和/或根据预定义的调度,在预定时间范围内在“回合”中达成共识。
在对于经由第一虚拟克隆被应用的更改或更改组已达成共识之后,该更改或更改组可以经由第二虚拟克隆被应用于数据库表,并且数据库表的每个受影响的记录可以对应地包括包含与第二虚拟克隆相关联的第二版本ID复合键。在该更改或更改组可以经由第二虚拟克隆被应用于数据库表之后,并且可选地自动地和/或响应于这些更改被应用,可以删除第一个虚拟克隆,并可以生成作为第二虚拟克隆的后代的至少两个另外的虚拟克隆(例如,第三虚拟克隆和第四虚拟克隆)。然后,快速复制过程可以以与以上描述类似的方式经由第三虚拟克隆对数据库表做出临时更改以及经由第四虚拟克隆对数据库表做出共识后更改而继续进行。
在某些实现中,共识算法或方法可以由平台(即,在计算设备和/或系统的处理器上执行的软件程序,诸如图1的计算设备110的存储在存储器112中并由处理器111执行的共识指令116)实现。平台可以收集、传播、排序交易以及执行与共识过程相关联的其他合适的任务。
在某些实现中,一旦已经生成从属于虚拟克隆和/或其相关联的节点的一个或多个后代节点(即,直接从虚拟克隆和/或其相关联的节点扩展,在层次树中向下移动),即使在一个或多个后代节点从层次树中被删除或移除之后,也不能再经由虚拟克隆和/或其相关联的节点做出查询。
在某些实现中,可以经由一个或多个虚拟克隆来查询本公开的数据库表(一个或多个)。图2A和图2B示出根据实施例的可查询的层次树(在本文中也被称为“版本树”)的图。在某些实现中,层次树(在本文中也被称为“版本树”)和/或层次树的表示被保持和/或存储在非暂时性存储器中。如图2A和2B所示,可查询的层次树包括关系数据库实例230及其多个虚拟克隆V1、V2、V3和V4。虚拟克隆V1、V2和V3的串行表示指示首先虚拟克隆V1被生成(并且可选地,经由V1对数据库230做出更改),其次虚拟克隆V2(V1的“后代”虚拟克隆)被生成(并且可选地,经由V2对数据库230做出更改),然后虚拟克隆V3(V2的“后代”虚拟克隆)被生成(并且可选地,经由V3对数据库230做出更改)。V3是“叶节点”,因为V3没有从V3扩展/从属于V3的子代节点。注意,在某些实现中,一旦已经生成后代虚拟克隆,就不再可以经由直系祖先虚拟克隆做出对数据库230的更改。换句话说,一旦已经生成虚拟克隆V3,就不再可以经由虚拟克隆V2或虚拟克隆V1应用对数据库230的更改。
在实施例中(如图2A所示),可以以顺序的方式实现/执行在V3处接收到的查询,如下:假设数据库230包含具有与记录的祖先版本(也在数据库230中)相同的虚拟主键的该记录。例如,图2A的数据库表包括属性记录ID(RID)(虚拟主键)、名称、级别和版本,并且存在:(1)具有复合键(1001,V3)的数据库230中的记录,(2)具有复合键(1001,V2)的数据库230中的记录,以及(3)具有复合键(1001,V1)的数据库230中的记录。在这样的实现中,如果版本树如图2A所示(其中V3是V2的后代虚拟克隆,并且V2是V1的后代虚拟克隆)并且对于虚拟主键RID=1001经由虚拟克隆V3接收到查询,则处理器将首先搜索具有复合键(1001,V3)的记录。如果找到具有这样的复合键的记录(在图2A的示例中其将找到),则该记录被返回并且查询结束。但是,如果在数据库230中找不到具有复合键(1001,V3)的记录,则基于版本树,处理器将接下来对于复合键(1001,V2)查询数据库230。如果在数据库230中找到具有这样的复合键的记录,则该记录被返回并且查询结束。否则,处理器对于复合键(1001,V1)查询数据库230。因此,可以通过首先引用版本树中编号最高的版本来执行查询,并且如果结果未被返回,则以逐步/顺序的方式沿着版本树向上进行。可以将前述查询过程描述为其中不强制执行冲突约束的查询过程。换句话说,记录可以在具有在层次树的相同祖先链/分枝内具有相同虚拟主键和版本ID的复合键的数据库230内共存。
相反,如果给定图2A中所示的层次树,经由虚拟克隆V4(V1的后代虚拟克隆)接收到对于虚拟主键1001的查询,则处理器将首先搜索具有复合键(1001,V4)的记录。如果找到具有这样的复合键的记录(在图2A的示例中其将找到),则该记录被返回并且查询结束。但是,如果在数据库230中找不到具有复合键(1001,V4)的记录,则基于版本树,由于V1是V4的祖先虚拟克隆,所以处理器将接下来对于复合键(1001,V1)查询数据库230。如果在数据库230中找到具有这样的复合键的记录,则该记录被返回并且查询结束。否则,处理器将返回响应“空值(null)”或“未找到结果”。
尽管前面的描述涉及对于虚拟主键的查询,但是可以以广泛的多种其他方式构造查询。例如,查询可以请求具有指定属性的值的所有记录(例如,具有属性“名称”的值为“史密斯(Smith)”的所有记录),与两个或多个指定属性的值匹配的所有记录(例如,具有属性“名称”的值为“史密斯”且级别为“4”的所有记录),具有指定主虚拟键和指定属性的值的所有记录(例如,具有主虚拟键为“1001”且属性“名称”的值为“史密斯”的所有记录)等。在某些实现中,查询不包括对虚拟主键的引用。
在另一个实施例中(如图2B所示),可以以冲突约束被强制执行而实现/执行在V3处接收到的查询。冲突约束可以包括如下指定的规则和/或如下命令的数据库体系结构:对于包括虚拟主键和虚拟克隆“X”的版本ID的给定复合键,在数据库230中不存在具有相同的虚拟主键和与X的祖先相关联的版本ID的其他复合键。换句话说,当对于任何给定的虚拟主键应用/强制执行/遵循冲突约束时,只有具有该虚拟主键和与层次树的给定“分枝”上的任何虚拟克隆相关联的版本ID的一个复合键可以在给定时间下存储在数据库表内。因此,无法存在每个都沿层次树的祖先路径引用虚拟主键和与虚拟克隆相关联的版本ID的多个复合键。可以以冲突约束被强制执行而实现/执行查询,举例来说,如下所述:假设版本树和数据库230如图2B所示。如果经由虚拟克隆V3接收到针对虚拟主键RID=1001的查询,则处理器搜索并寻找具有RID=1001且(版本=3或版本=2或版本=1)的记录。注意,最初经由V3接收到的查询可能不包含版本ID引用,或者可能仅引用版本ID V3。处理器(例如,运行快速复制软件)可以修改查询,使得包括版本ID V3、V2和V1中的每个。注意,如果数据库满足冲突约束,则结果记录集合将不包含具有相同虚拟主键的两个条目,因为结果具有具有来自版本树中的单个路径的版本的记录,所以如果两个记录具有相同的虚拟主键,则它们将违反冲突约束。可以生成结果表,并且可以在结果表作为搜索结果被返回之前从结果表中(例如,由处理器)删除版本属性(列)。
相反,如果给定图2B中所示的层次树,经由虚拟克隆V4接收到针对虚拟主键1001的查询,则处理器(例如,运行快速复制器)可以修改查询,使得包括版本ID V4和V1中的每个。然后,处理器搜索并寻找具有RID=1001且(版本=V4或版本=V1)的记录。如果处理器找不到与修改后的查询匹配的任何记录,则处理器返回响应“空值”或“未找到结果”。
如上所述,尽管前面的图2B的描述涉及针对虚拟主键的查询,但是可以以广泛的多种其他方式构造查询。例如,查询可以请求具有指定属性的值的所有记录(例如,具有属性“名称”的值为“史密斯”的所有记录),与两个或多个指定属性的值匹配的所有记录(例如,具有属性“名称”的值为“史密斯”且级别为“4”的所有记录),具有指定主虚拟键和指定属性的值的所有记录(例如,具有主虚拟键为“1001”且属性“名称”的值为“史密斯”的所有记录)等。在某些实现中,查询不包括对虚拟主键的引用。
图3A是示出用于生成层次树的虚拟克隆并与其交互的方法的流程图。图3B包括示出了根据图3A的方法的层次树的时间演化以及经由该层次树与数据库表的交互的一系列图。为了帮助理解,可以将图3A和3B一起阅读并理解。如图3B所示,在开始图3A的方法200之前,存在包括一个或多个数据库表的数据库230。在图3A中,在202处,方法200包括生成第一虚拟克隆。对应地并同时地,在(b)处,定义数据库230的至少一个数据库表的第一虚拟克隆,从而发起层次树,如在222处表示为“V1”。随后,在204处,方法200包括生成第二虚拟克隆,对应地并同时地,在(c)处,将第二虚拟克隆“V2”(224)添加到层次树中。尽管在图3B中示出为发源自和/或起源自V1(因此是V1的“子代”或“后代”虚拟克隆,并且使V1成为V2的“祖先”或“前辈”虚拟克隆),但是在其他实例中,V2可以直接发源自和/或起源自数据库230,使得其没有前辈虚拟克隆(在此情况下,V1和V2将被称为层次树内的兄弟虚拟克隆)。继续方法200,在206处,如图3B(d)中所描绘的那样,经由V2接收到查询。查询Q(X)经由V2被接收,并引用记录ID“X”。响应于接收到查询,运行快速复制软件(例如,图1中的快速复制器115)的处理器在图3A的208处修改查询,以生成修改后的查询Q(X,V1或V2),该修改后的查询Q(X,V1或V2)引用记录ID“X”以及一个或多个版本(在此情况下,为如图3B的(e)处所示的V1或V2)。修改后的查询使得针对与所请求的记录ID“X”匹配并且具有与V1或V2相关联的版本标识符的数据库表记录而搜索关系数据库(这是因为两个虚拟克隆都在发源自数据库230的直接祖先线中)。在210处,如图3B中的(f)处所示,执行修改后的Q(X,V1或V2)查询,并且在步骤212处,如图3B的(g)处所示,经由V2返回并发送查询结果(响应)R(X,V1)或R(X,V2)。如(g)处所示,返回与记录ID X和V1相关联的响应或与记录ID X和V2相关联的响应。如果尚未经由虚拟克隆V2对记录ID X做出修改,则将不存在引用记录ID X和V2的记录,并且与记录ID X相关联的记录的最新形式将具有与V1相关联的版本ID。
图4A-4F包括虚拟克隆的表示以及相关联的数据库表,示出了在冲突约束被应用的情况下层次树的时间演化(步骤(a)至(t))。在图4A的开始(300)处,数据库表230a包括属性“FID”(“水果(Fruit)ID”,其用作底层数据库表的记录ID和/或键),“项目(Item)”、“水果”和“版本”,以单个填充的记录(FID=1001,项目=馅饼,水果=苹果(Apple)以及版本=V1)。同样在300处,虚拟克隆V1和V2(V1的直接后代)已经存在(如(a)处所示的层次树所表示的)。随后,在302处,新的虚拟克隆V3(226)被实例化并被添加到层次树,而对数据库表230a尚未做出更改。随后,在304处,经由V3接收到更改馅饼的记录以使得水果的值为“梨(Pear)”的请求。响应于接收到该请求,在306处,具有版本V3的新记录被添加到数据库表230a。如图4A所示,与FID 1001相关联的第二记录保留项目属性的值“馅饼”,包括水果属性的“梨”而非“苹果”,并且具有相关联的版本标识符V3-经由其而更改被请求的虚拟克隆。另外,由于遵循冲突约束,所以数据库表230a中的第一记录中的版本属性的值从V1被更改为V2(如在306处所示),以确保满足冲突约束。注意,如果冲突约束没有生效,则将无需对第一记录做出这样的更改。注意,由于复合键包括FID和版本属性这两者,所以多个记录(如图4A中的306处所示)可以具有相同的FID(或“虚拟主键”)。换句话说,306处的第一记录具有FID=1001且版本=V2的复合键,并且306处的第二记录具有FID=1001且版本=V3的复合键,因此这些复合键仍然是唯一且可彼此区分的。
继续图4B,在306处数据库表230a的修改之后,在308处经由V3接收到引用值“馅饼”的查询Q(馅饼)。在310处,查询被修改为Q(馅饼,V3或V1)以引用值“馅饼”和“V3或V1”这两者,这是因为与上面的讨论类似,虚拟克隆V3和V1共享发源自和/或起源自数据库230的共同祖先线。然后,针对数据库表230a运行修改后的查询。由于在数据库表230中匹配“馅饼”和“V3或V1”这两者的仅有记录是具有FID 1001和版本V3的记录,因此查询返回该记录(如在312处所示)。因此,由于查询起源自V3,所以搜索与V1和V3相关联的记录,但不搜索与不在与V3相同的祖先线中的V2相关联的记录。
注意,在图4B中310处不遵循冲突约束的实现中,查询将不被修改。相反,处理器将首先搜索与值“馅饼”和“V3”匹配的记录。如果找到这样的记录(在图4B的310的示例中其将找到),则该记录(FID=1001;项目=馅饼;水果=梨)被返回,并且查询结束。但是,如果基于版本树在数据库230中找不到与值“馅饼”和“V3”匹配的记录,则处理器将接下来向数据库230查询与值“馅饼”和“V1”匹配的记录(即,将其沿版本树向上进行)。如果在数据库230中找到具有这样的复合键的记录,则该记录被返回并且查询结束。否则,处理器返回响应“空值”或“未找到结果”。
继续图4C,在314处,经由V2接收到引用属性值“馅饼”的另一查询Q(馅饼)。查询再次被修改以引用值“馅饼”和“V2或V1”这两者即Q(馅饼,V2或V1),这是因为虚拟克隆V2和V1共享发源自和/或起源自数据库230的共同祖先线。然后,在316处针对数据库表230a运行修改后的查询。由于在数据库表230a中匹配“馅饼”和“V2或V1”这两者的仅有记录是具有FID1001和版本V2的记录,所以查询返回该记录(如在318处所示)。由于查询起源自V2,所以搜索与V1和V2相关联的记录,但不搜索与不在与V2相同的祖先线中的V3相关联的记录。因此,V2和V3这两者在数据库表230a中可以具有相同记录1001的不同版本。
继续图4D,在320处再次经由V2接收到另一个查询Q(梨),但是这次引用属性值“梨”。再次,查询被修改为Q(梨,V2或V1)以引用值“梨”和“V2或V1”这两者,这是因为虚拟克隆V2和V1共享发源自数据库230的共同祖先线。然后,在322处针对数据库表230a运行修改后的查询。由于在数据库表230a中没有匹配“梨”和“V2或V1”这两者的记录,所以在324处没有结果返回(例如,无法找到与该查询匹配的记录的信号和/或通知被返回)。换句话说,经由V3对数据库表数据做出的修改无法经由V2被访问,并且不会影响V2的可查询数据。
继续图4E的326,在326处经由V2接收到从数据库表230a中删除具有水果属性为苹果且项目属性为馅饼的记录并且添加具有水果属性为香蕉(Banana)且项目属性为面包(Bread)的记录的请求。在328处,响应于在326处经由V2接收到的请求,标识引用属性值“苹果”和“馅饼”的记录,并且执行以下的一个或多个:从数据库表230a中删除引用了属性值“苹果”和“馅饼”的记录,移除其版本ID(确保其将不会随后可经由V2访问),表示“已删除”标志的属性被添加到数据库表230a并对于该记录被设置为“真”。同样在328处,将具有FID为1002、项目属性值为“面包”、水果属性值为“香蕉”且版本ID为V2的新记录添加到数据库表230a。随后,在330处,经由V3接收到搜索具有具有值为面包的项目属性的记录的查询Q(面包)。与上面的讨论类似,查询首先被修改为使得其引用项目属性值为面包和版本ID“V3或V1”这两者、即Q(面包,V3或V1)。由于数据库表230a中没有匹配“面包”和“V3或V1”这两者的记录,所以在332处没有结果返回(例如,无法找到与该查询匹配的记录的信号和/或通知被返回)。
如图4E所示,在某些实现中,通过从记录中消除版本属性来实现从数据库表230a中删除记录(即,使得没有经由与数据库表230a相关联的任何虚拟克隆做出的后续查询将返回该记录或其任何部分)。例如,当正被删除的记录具有在请求该删除的虚拟克隆所属的祖先路径中存在的版本ID时,可以以这种方式完成删除。但是,如果用于删除的请求引用具有由请求的虚拟克隆的祖先路径和未请求删除的另一路径共享的版本ID的记录,则可以通过从数据库表230a中删除所引用的记录并且通过将一个或多个新记录添加到数据库230来实现删除,该一个或多个新记录具有相关联的版本ID,该版本ID引用了未请求删除的其他路径(或多个路径)(即,使得相关联的数据保持可被沿其他路径(一个或多个)的虚拟克隆访问)。
在其他实现中,为了完成数据库表230a中的记录的删除,可以将“已删除”属性(取值为真或假)添加到数据库表230a的每个记录中,使得(1)删除针对仅在请求删除的虚拟克隆的祖先路径上存在的版本ID的记录是通过针对该记录将“已删除”属性更改为“真”来完成的,并且(2)删除具有由请求删除的虚拟克隆的祖先路径和另一路径共享的版本ID的记录是通过以下方式完成的:(i)在数据库表230a中定义具有请求删除的虚拟克隆的版本ID的新记录并且将新创建的记录的“已删除”属性设置为“真”;以及(ii)在数据库表230a中定义在其他路径上具有虚拟克隆的版本ID的新记录并且将新创建的记录的“已删除”属性设置为“假”。
继续图4F,在334处经由V2接收到搜索具有具有值为香蕉的水果属性的记录的请求Q(香蕉)。在336处,查询被修改为使得其引用项目属性值为香蕉且版本ID“V2或V1”这两者、即Q(香蕉,V2或V1),并且针对数据库表230a运行修改后的查询。由于在数据库表230a中匹配“香蕉”和“V2或V1”这两者的仅有记录是具有FID 1002和版本V2的记录,所以(如在338处所示)查询返回该记录。
图4G示出了图4F的版本树以及在340处包括针对虚拟克隆V1、V2和V3中的每一个的记录(并以记录FID=1001和版本=V1未被删除而示出)的数据库表230a。例如,如果数据库表230a未以冲突约束而实现,并且在图4A中的304处开始,则在340处的数据库表230a可能导致:(1)将“馅饼”从“苹果”更改为“梨”的请求导致添加具有FID=1001、“水果”属性的值为“梨”且“版本”属性的值为3的新记录(如306所示)并且保留具有FID=1001、“水果”属性的值为“苹果”且“版本”属性的值为V1的记录(如304所示),以及(2)经由V2做出了添加香蕉面包的请求(使得具有FID=1002、“项目”属性的值为“面包”、“水果”属性的值为“香蕉”且“版本”属性的值为V2的记录被添加到数据库表230a)。
以在340处数据库表230a的实现不遵循冲突约束的假设而继续,在V2处接收到的引用“项目”属性的值为“馅饼”的查询将不会被处理器修改为同时搜索V2和V1这两者。相反,处理器将首先搜索匹配值“馅饼”和“V2”的记录。由于在340处数据库表230a中不存在这样的记录,所以处理器接下来将向数据库230查询匹配值“馅饼”和“V1”的记录(即,沿版本树向上进行)。在数据库表230a中找到单个记录(FID=1001;项目=馅饼;水果=苹果;版本=V1),并且该记录被返回并且查询结束。对V3做出的类似查询将返回记录(FID=1001;项目=馅饼;水果=梨;版本=V3),这是因为将首先搜索V3,并且由于记录被标识,所以查询将结束且将不会沿着祖先路径继续搜索V1。相反,如果在V3处接收到针对“所有馅饼”的查询,则处理器将首先向数据库表230a搜索匹配值“馅饼”和“V3”的记录,并且将由此标识第一记录(FID=1001;项目=馅饼;水果=梨;版本=V3)。然后,处理器将继续通过(沿祖先路径)针对包括“项目”属性的值为“馅饼”的任何另外的记录而搜索V1,并且将标识第二记录(FID=1001;项目=馅饼;水果=苹果;版本=V1)。但是,由于第一记录和第二记录的FID匹配(例如,如由处理器基于记录FID的比较而检测到的),所以由于V3的搜索已经标识了具有FID=1001的记录,具有V1版本的记录将从查询结果中被排除。相反,如果在搜索匹配值“馅饼”但具有与1001不同的FID的V1时附加记录被标识,则这些记录将作为查询响应的一部分被返回。
垃圾收集
在某些实现中,通过由可操作且可通信地耦合到存储器的处理器(例如,诸如图1的运行快速复制器115的处理器111)执行的增量垃圾收集的形式,以简化和/或更优化的方式将层次树(在本文中也被称为“版本树”)和/或层次树的表示保持和/或存储在非暂时性存储器中。在这样的实现中,层次树的每个节点与虚拟克隆和标识多个整数序列ID的字符串的端点的两个序列ID相关联。举例来说,一系列序列ID 10、11、12和13可以由序列ID对(10,13)表示。仅与序列ID 42相关联的节点将被指定为序列ID对(42,42)。如本文所使用的,与版本ID不同地定义序列ID。序列ID与层次树的虚拟克隆被生成的顺序排序有关。这样,特定虚拟克隆的序列ID和版本ID可以具有相同的值,或者它们可以不同。在一些这样的实现中,如图5的图(a)-(g)所示,版本树最初在扩展到(a)处的树之前,仅包含单个节点(1,1)。每当快速复制事件触发版本树中新节点的创建和/或定义时,该新节点按顺序排序被分配下一个整数的序列ID。这样,被添加到版本树的第二个节点被分配序列ID(2,2),并且第N个节点被分配列ID(N,N)。如本文所使用的,如果X被指定为序列ID对(A,B)并且Y被指定为序列ID对(B+1,C),则节点X具有“后继者”节点Y。换句话说,Y表示紧随X的序列ID范围之后的序列ID范围。存储器中(和数据库中)的数据结构可以针对版本树的每个节点,存储对作为其后继者的节点(一个或多个)的引用。后继者关系在图5中被表示为虚线。注意,如本文所使用的,“继承”和“后代”是不同的(尽管不是互斥的)概念。例如,作为较早节点的后继者的节点不一定是该较早节点的后代(例如,在图5中的(a)处,节点(6,6)是节点(5,5)的后继者,但在节点(5,5)的祖先路径中不是后代),并且较早节点的后代节点不一定是该较早节点的直接后继者(例如,在图5中的(a)处,节点(6,6)是节点(3,3)的后代,但不是节点(3,3)的直接后继者)。
在某些实现中,存储在存储器中的节点(例如,涉及节点X及其后继者Y节点)的“序列更新”(例如,从版本树中移除冗余,提高性能和效率,减少存储和/或资源消耗等)是由运行快速复制软件(例如,图1的快速复制器115、125)的处理器执行的,该处理器与存储版本树的存储器可操作地通信。如下完成序列更新:首先,假设具有序列ID范围(A,B)的节点X具有具有序列ID范围(B+1,C)的后继者Y,并且包括节点X和Y的节点序列将被更新。可以定义具有序列ID范围(A,C)(即,具有节点X的第一端点和节点Y的第二端点)的新节点Z。接下来,版本树中其他节点与节点X或节点Y的任何关系(例如,如图5中的实线和虚线所示)被更新,使得它们不再连接到和/或引用到节点X或Y,而是连接到和/或引用到节点Z。然后,节点X和Y可以从版本树中被移除/删除(并且相应地,从相关联的数据库表中被删除或在相关联的数据库表中被注释为已删除),从而完成序列更新事件。在某些实现中,如果序列更新导致节点仅具有也是该节点的后继者的单个子代节点,则可以以类似于前述的方式执行涉及该节点(例如,在检测到节点仅具有也是该节点的后继者的单个子代节点的情况时自动地)及其单个子代节点的另一序列更新。
在某些实现中,如下完成从版本树中删除节点X:首先,如果节点X具有在版本树中存在的父代节点,则节点X与其父代节点之间的关系(例如,如图5所示的版本树中的实线所示)被移除。接下来,如果节点X具有后继者节点,则该后继者节点被分配新的序列ID,并且节点X被删除。可替代地,如果节点X没有后继者节点,则仅节点X被删除。如果节点X的前父代节点现在没有发源自该前父代节点的子代节点,则前父代节点被删除。如果有将节点X作为后继者的节点W,并且节点W现在只有一个子代节点,并且该子代是其后继者,那么节点W的子代节点被分配新的序列ID。
上述的任何删除或序列更新事件可能导致节点新近没有子代,并且因此可能触发另一删除。可替代地或除此以外地,上述的任何删除或序列更新事件可能导致新节点具有是其后继者的单个子代节点,并且因此可能触发另一个序列更新事件。因此,可能存在由单个序列更新或删除引起的序列更新和删除的级联。在某些实现中,本公开的系统被配置为执行级联型垃圾收集,并且不对版本树执行其他形式的垃圾收集。本文所述(并由处理器执行)的增量垃圾收集方法可以自动识别并执行/实现/导致要在版本树中做出的可能/允许的简化(或其预定义子集)(例如,基本上连续地和/或基本上实时地)。然后,可以将修改/简化后的版本树的表示(例如,图5(e)的版本树,其将替代图5(d)的版本树)存储在存储器中以用于以后访问。
在某些实现中,删除事件可以触发增量垃圾收集过程。例如,如果版本树如图5(a)所示的那样表示,则虚线箭头表示对后续者节点的引用。在可快速复制的数据库的某些实现中,仅叶节点可以被删除。换句话说,快速复制软件可以被配置为仅当“版本”与“叶”节点相关联时删除该版本。“叶节点”被定义为没有子代的节点(其中子代节点由在图5中的实线表示)。在识别叶节点期间,虚线将被忽略。
假设用户请求删除图5的(a)处的灰色阴影的叶节点(5,5)。在删除叶节点(5,5)之后,版本树呈现为如图5的(b)处所示。(b)的版本树是序列更新的结果,其中节点(6,6)被分配序列ID对(5,6),然后将节点(4,4)更新为引用节点(5,6))作为其后继者(由连接节点(4,4)与节点(5,6)的虚线表示。注意,前节点(5,5)的父代节点(2,2)仍然具有子代节点(节点(4,4))并且没有其后继者节点(节点(3,3))作为其唯一的子代,因此删除过程以图5的(b)处所示的版本树而停止。
接下来,假设用户请求删除节点(4,4)(图5中的(b)处的灰色阴影)。删除节点(4,4)的该请求可以触发若干动作。首先,由于节点(4,4)具有父代节点(2,2),所以图5的(b)中实线所示的节点(2,2)与节点(4,4)之间的关系被移除。同样,序列更新被执行,使得如图5的(c)所示节点(5,6)被分配序列ID对(4,6),现在在节点(3,3)和节点(4,6)(节点(4,6)是节点(3,3)的后继者)之间具有更新后的后继者关系。作为前述动作的结果,节点(2,2)不再具有任何子代节点(如图5的(c)处所示)。这样和/或响应于该情况,并且由于不能再经由节点(2,2)做出查询的事实(由于节点(2,2)的后代节点在它们被移除之前已经先前被生成),因此删除过程可以通过自动继续删除节点(2,2)而“级联”,导致如图5的(d)处所示的版本树。在此阶段,节点(1,1)只有一个子代(节点(2,3)),并且该子代是其后继者节点。因此,如上所述,序列更新可以被执行,使得子代节点(2,3)被分配新的序列ID对(1,3),导致如图5(e)处所示的版本树,此时级联结束。换句话说,如图5的(e)处所示的版本树是用户的删除节点(4,4)的请求的最终结果。
现在假设用户选择删除叶节点(4,6)(图5的(e)处的灰色阴影)。该删除事件将导致版本树的转换,使得其呈现为如图5的(f)处所示,其本身会自动触发最终的序列更新,使得节点(4,7)(节点(1,3)的子代节点))被分配新的序列ID对(1,7),产生如图5(g)处所示的最终结果(唯一节点(1,7))。随着垃圾收集的继续进行,可以对相关联的数据库表做出相应的更改,例如,使得在图5的(g)处,所有记录都包含相同的版本属性(例如,“7”)。在仅剩余一个节点的阶段(例如,在图5的(g)处)(即,由于版本树被“垃圾收集”且大小被减小)之前,数据库表的记录(例如,诸如图4A-4G的表230a)可以被修改使得它们引用到存活的节点,或者可以被删除(例如,响应于删除与该记录唯一相关联的节点)。
图6是根据实施例的用于快速复制数据库的处理器实现的垃圾收集(或级联删除)方法400的过程流程图。如图6所示,方法400开始于在430处虚拟克隆的层次树的生成。在432处,随后接收到从虚拟克隆的层次树中删除第二虚拟克隆的指令。响应于删除第二虚拟克隆的指令,在434处,修改第三虚拟克隆的后继者关系。同样响应于删除第二虚拟克隆的指令,在436处,删除第二虚拟克隆。在438处,处理器评估在删除第二虚拟克隆之后虚拟克隆的层次树的第一虚拟克隆是否具有剩余的子代虚拟克隆。如果在删除第二虚拟克隆之后虚拟克隆的层次树的第一虚拟克隆确实具有剩余的子代虚拟克隆,但该子代不是其后继者,则过程结束。如果在删除第二虚拟克隆之后虚拟克隆的层次树的第一虚拟克隆确实具有剩余的子代虚拟克隆,并且该子克隆是其后继者,则可以如上所述执行序列更新。如果在删除第二虚拟克隆之后虚拟克隆的层次树的第一虚拟克隆没有剩余的子代虚拟克隆,则在440处从虚拟克隆的层次树中删除第一虚拟克隆。
图7是根据实施例的用于快速复制数据库的另一处理器实现的垃圾收集(或级联删除)方法500的过程流程图。如图7所示,方法500开始于在530处虚拟克隆的层次树的生成。在532处,随后接收到从虚拟克隆的层次树中删除第一虚拟克隆的指令。响应于删除第一虚拟克隆(例如,图5的节点(4,4))的指令,并且在534处,修改第二的后继者虚拟克隆(例如,图5的节点(5,6))的后继者关系。在536处,删除第一虚拟克隆。然后,在538处修改第四虚拟克隆(例如,图5的节点(3,3))的后继者关系,其中第四虚拟克隆是作为第一虚拟克隆的祖先的第三虚拟克隆(例如,图5的节点(2,2))的后继者。然后,在540处删除第三虚拟克隆。
图8A-8D是示出了根据实施例的快速复制数据库系统的示例实现的图。如图8A所示,在800处(并且在初始时间t=0处),节点“简”830A处的数据库的第一实例形成包括从属于数据库实例830A的三个虚拟克隆V1、V2和V3的层次树的一部分。节点简830A处的数据库实例包括具有属性RID、名称、级别和版本的数据库表。在800处,在数据库表中有两条填充的记录-一条具有名称=史密斯并且一条具有名称=琼斯(Jones)。在800处的虚拟克隆V1可以与先前的“第一”共识事件相关联。在800处的虚拟克隆V2可以用于对数据库830A的数据库表做出实时或基本上实时的编辑(例如,使得当新数据(例如交易数据)被接收时数据库表反映正在进行的计数或状态),而在800处的虚拟克隆V3可以被保留以用于对数据库830A的数据库表做出共识后编辑。同样如图8A中所示,在802处(并且在初始时间t=0处)是节点“鲍勃”830B处的数据库的第二实例,其形成另一个层次树的一部分,也包括每个直接从属于数据库实例830B的两个虚拟克隆V1和V2。节点鲍勃830B处的数据库实例也包括具有属性RID、名称、级别和版本的数据库表。在802处,在数据库表中有两条填充的记录-一条具有名称=史密斯并且一条具有名称=琼斯。换句话说,在第一时间t=0,节点简830A和节点鲍勃830B处的数据库实例的数据库表包含相同的记录。注意,节点简830A处和节点鲍勃830B处的数据库表中的每个记录都包括版本属性值V1。在802处的虚拟克隆V1可以与先前的“第一”共识事件相关联,该先前的“第一”共识事件触发了新的子代虚拟克隆V2和V3的生成。在802处的虚拟克隆V2可以用于对数据库830B的数据库表做出实时或基本上实时的编辑,而在802处的虚拟克隆V3可以被保留以用于对数据库830B的数据库表做出共识后编辑。
在图8B中,发生同步事件,在此期间,在节点简830A、节点鲍勃830B以及可选地与节点简830A和/或节点鲍勃830B进行网络通信的一个或多个附加节点的两个或多个节点之间交换数据(在本文中也被称为“事件”,例如交易数据,其可以与和它们有关的交易同时实时地或基本上实时地被接收)。在同步期间,节点简830A在第一时间接收第一事件,该第一事件指定针对具有属性“名称”的值为“史密斯”的记录而属性“级别”的值将被增加1。响应于接收到第一事件,节点简830A处的处理器生成关于“史密斯”的新记录,并且在该记录中包括属性“版本”的值为V2、属性“RID”的值为1001以及属性“级别”的值为2+1=3(未示出)。同样响应于接收到第一事件,节点简830A处的处理器在数据库表中修改第一记录,使得版本属性的值是V3而不是V1。同样在同步期间(在相同的或在单独的同步事件期间),节点简830A在第一时间之后的第二时间接收第二事件,该第二事件指定针对具有属性“名称”的值为“史密斯”的记录而属性“级别”的值将被更改为10。响应于接收到第二事件,节点简830A处的处理器修改具有名称属性的值为“史密斯”和版本属性的值为V2的记录,使得记录具有为10的属性“级别”的值(如图8B中的804处所示)。
在同步期间(与节点简830A相同的或单独的同步事件),节点鲍勃830B接收第一事件和第二事件,但以与简830A接收到事件的顺序相反的顺序接收。更具体地,节点鲍勃830B在第一时间接收第一事件,该第一事件指定针对具有属性“名称”的值为“史密斯”的记录而属性“级别”的值将被更改为10。响应于接收到第一事件,节点鲍勃830B处的处理器生成关于“史密斯”的新记录,并且在该记录中包括属性“版本”的值为V2、属性“RID”的值为1001以及属性“级别”的值为10(未示出)。同样响应于接收到第一事件,节点简830A处的处理器在数据库表中修改第一记录,使得版本属性的值是V3而不是V1。同样在同步期间(在相同的或在单独的同步事件期间),节点鲍勃830B在第一时间之后的第二时间接收第二事件,该第二事件指定针对具有属性“名称”的值为“史密斯”的记录而属性“级别”的值将被增加1。响应于接收到第二事件,节点鲍勃830B处的处理器修改具有名称属性的值为“史密斯”和版本属性的值为V2的记录,使得记录具有为11的属性“级别”的值(如图8B中的806处所示)。
经由V2在节点简处和节点鲍勃处接收到的事件/数据(诸如交易数据)可以例如以分布式无环图(DAG)、哈希图、数据链、区块链或任何其他合适的数据结构或格式分别存储在节点简和节点鲍勃处的相关联的存储器中。包括兼容数据结构的附加实现细节被阐述在第9,646,029号美国专利中,其全部内容以引用的方式并入本文中以用于所有目的。
在同步事件(一个或多个)之后,并且如图8C中的808处所示,节点简830A和鲍勃830B的处理器达成共识(例如,由于实现诸如图1中的共识指令116和126的共识指令)。换句话说,由节点简830A的处理器(运行存储在该节点的存储器中的快速复制软件)实现的共识算法和由节点鲍勃830B的处理器(例如,运行存储在该节点的存储器中的快速复制软件)实现的共识算法检测和/或确定已达成共识。可以在以下情况中的一种或多种情况下通过非限制性示例来达成共识:当由共识算法定义的“回合”已经完成时,当自从层次树被发起以来已经过预定时间量时,当自从先前共识事件以来已经过预定时间量时,当针对该节点的数据库表的给定记录已经从其他节点接收到预定数量的表决时,当预定数量的同步事件已经发生时等。如图8C所示,共识的结果是,接收到的事件的正确排序是:史密斯的级别首先被增加,然后被更改为值10。这样,针对具有名称属性的值为史密斯和版本属性的值为V2的记录,级别属性的正确当前值是“10”。类似地指出,如在808处所示,该记录的级别值经由V3被更新为“10”。由于达成共识,从属于/起源于虚拟克隆V3的一对新的虚拟克隆V4和V5被生成。然后,在808处,新生成的虚拟克隆V4可以随后用于对节点简830A处的数据库实例的数据库表做出实时或基本上实时的编辑,而808处的虚拟克隆V5可以被保留以用于对节点简830A处的数据库实例的数据库表做出共识后编辑。换句话说,新的虚拟克隆V4和V5可以分别执行先前由虚拟克隆V2和V3执行的功能。注意,在某些实现中,一旦生成了虚拟克隆V4和V5,就不能再经由虚拟克隆V3做出对数据库表的编辑(即使虚拟克隆V4和V5随后被删除)。
与图8C的讨论类似,在图8D处,节点鲍勃830B达成共识(例如,由于实现诸如图1中的共识指令116和126的共识指令)。换句话说,由节点简830A的处理器(例如,运行存储在该节点的存储器中的快速复制软件)实现的共识算法和由节点鲍勃830B的处理器(运行存储在该节点的存储器中的快速复制软件)实现的共识算法检测和/或确定已达成共识。如图8D所示,节点鲍勃830B处的数据库实例的数据库表现在反映针对具有名称属性的值为史密斯和版本属性的值为V2的记录而级别属性的正确当前值为“10”。类似地指出,如在810处所示,该记录的级别值经由V3被更新为“10”。与图8C的讨论类似,并且由于达成第二共识,从属于/起源于虚拟克隆V3的一对新的虚拟克隆V4和V5被生成。然后,在808处,新生成的虚拟克隆V4可以随后用于对节点鲍勃830B处的数据库实例的数据库表做出实时或基本上实时的编辑,而808处的虚拟克隆V5可以被保留以用于对节点鲍勃830B处的数据库实例的数据库表做出共识后编辑。换句话说,新的虚拟克隆V4和V5可以分别执行先前由虚拟克隆V2和V3执行的功能。注意,在某些实现中,一旦生成了虚拟克隆V4和V5,就不能再经由虚拟克隆V3做出对数据库表的编辑(即使虚拟克隆V4和V5随后被删除)。
尽管图8A-8D将共识示出并描述为确定事件(例如,交易)的正确排序以确保数据库表中的记录的运行“余额”、“计数”或“状态”的准确性,可替代地或附加地,共识可以用于出于以下中的一项或多项目的而确定事件的正确排序:确定资产的当前所有者,确定数据库表内的记录的正确排序,确定物品所有权的保管链或产权链等。
在本文阐述的某些实施例中,一种装置(例如,图1的计算设备110和/或计算设备(一个或多个)120)包括处理器和与处理器进行电子通信的存储器。存储器(例如,图1的存储器112和/或存储器122)存储包括多个记录的数据库表,来自多个记录的每个记录包括具有版本标识符的复合键。存储器包括指令,该指令能够执行以使处理器生成数据库表的第一虚拟克隆和数据库表的第二虚拟克隆。存储器还包括指令,该指令能够执行以使处理器在第一虚拟克隆处接收查询,并且基于在第一虚拟克隆处接收到查询而修改查询以定义包括与第一虚拟克隆相关联的版本标识符的修改后的查询。存储器还包括指令,该指令能够执行以使处理器使用修改后的查询来查询数据库表以基于以下各项而生成包括来自多个记录的记录集合的响应:(1)来自所述记录集合的每个记录满足所述查询;以及(2)来自所述记录集合的每个记录具有与和第一虚拟克隆相关联的版本标识符的祖先路径相关联的版本标识符。存储器还包括指令,该指令能够执行以使处理器发送包括记录集合的响应作为对查询的响应。在某些这样的实施例中,来自多个记录的每个记录的复合键包括该复合键的版本标识符和数据部分。多个记录可以被配置为使得在任何给定时间下在数据库表中仅存在以下中的一个:(1)包括数据部分的值和与第一虚拟克隆相关联的版本标识符的复合键;或(2)包括数据部分的值和与第二虚拟克隆相关联的版本标识符的复合键。
在某些实施例中,存储器还包括指令,该指令能够执行以使处理器响应于经由第一虚拟克隆接收到的插入指令将记录添加到数据库表。该记录包括具有与第一虚拟克隆相关联的版本标识符和数据的复合键,使得:(1)随后在第一虚拟克隆处接收到且引用该数据的查询返回该记录;以及(2)随后在第三虚拟克隆处接收到的针对该数据的查询不返回该记录。
在某些实施例中,存储器还包括指令,该指令能够执行以使处理器响应于将数据库表的第一记录的字段的值从第一值更新为第二值并经由第三虚拟克隆接收到的指令将第二记录添加到数据库表。第二记录包括具有与第三虚拟克隆相关联的版本标识符和第二值的复合键。指令可以还能够执行以响应于更新第一记录的字段的值的指令,将第一记录的复合键修改为不包括与第三虚拟克隆相关联的版本标识符,使得随后在第三虚拟克隆处接收到且引用该字段的查询返回第二记录,并且在第一虚拟克隆处接收到且引用该字段的查询返回第一记录。
在某些实施例中,存储器还包括指令,该指令能够执行以使处理器响应于从多个记录中删除记录并经由第三虚拟克隆接收到的指令,将记录的复合键的版本标识符修改为不包括与第三虚拟克隆相关联的版本标识符,使得随后在第三虚拟克隆处接收到的针对该记录的查询不返回该记录,并且随后在第一虚拟克隆处接收到的针对该记录的查询返回该记录。
在某些实施例中,所述响应是第一响应,并且所述修改后的查询是第一修改后的查询。指令可以还能够执行以使处理器如果第一响应是空值,则生成包括第二虚拟克隆的版本标识符的第二修改查后的查询,第二虚拟克隆是第一虚拟克隆的祖先。指令可以还能够执行以使处理器使用第二修改后的查询来查询数据库表,以基于以下各项而生成包括来自多个记录的记录集合的第二响应:(1)来自第二响应的记录集合的每个记录满足第二修改后的查询;以及(2)来自第二响应的记录集合的每个记录具有与第二虚拟克隆的版本标识符的祖先路径相关联的版本标识符,并且发送包括记录集合的第二响应作为对所述查询的响应。
在某些实施例中,指令还能够执行以使处理器将第一虚拟克隆是第二虚拟克隆的后代的指示存储在存储器中。
在某些实施例中,指令还能够执行以使处理器生成数据库表的第三虚拟克隆,该第三虚拟克隆既不是第一虚拟克隆的祖先也不是其后代,多个记录包括具有包括数据部分的值和与第三虚拟克隆相关联的版本标识符的复合键的记录。
在某些实施例中,一种装置包括处理器和与处理器进行电子通信的存储器。存储器存储数据库表和处理器可执行指令。处理器可执行指令包括使处理器生成包括数据库表的多个虚拟克隆的表示的层次树的指令,该多个虚拟克隆包括第一虚拟克隆(例如,图5的节点(2,2))、作为第一虚拟克隆的子代虚拟克隆的第二虚拟克隆(例如,图5的节点(4,4))和作为第二虚拟克隆的后继者虚拟克隆的第三虚拟克隆(例如,图5的节点(5,6))。处理器可执行指令还包括使处理器响应于删除第二虚拟克隆的指令而修改与第三虚拟克隆相关联的后继者关系的指令。处理器可执行指令还包括使处理器响应于删除第二虚拟克隆的指令而删除第二虚拟克隆的指令。处理器可执行指令还包括使处理器响应于删除第二虚拟克隆的指令当在删除第二虚拟克隆之后第一虚拟克隆没有子代虚拟克隆时从多个虚拟克隆中删除第一虚拟克隆的指令。
在某些实施例中,多个虚拟克隆还包括第四虚拟克隆,该第四虚拟克隆是第一虚拟克隆的后继者虚拟克隆。指令还能够执行以使处理器响应于以下各项而修改与第四虚拟克隆相关联的后继者关系:删除第二虚拟克隆的指令;以及确定在删除第二虚拟克隆之后第四虚拟克隆是第一虚拟克隆的唯一后代。
在某些实施例中,指令还能够执行以使处理器从多个虚拟克隆中自动标识第四虚拟克隆并且该第四虚拟克隆不具有子代虚拟克隆,并基于该自动标识而删除第四虚拟克隆。可替代地,指令还能够执行以使处理器从多个虚拟克隆中自动标识第四虚拟克隆并且该第四虚拟克隆不具有子代虚拟克隆,并且响应于该自动标识,(1)修改与来自多个虚拟克隆的第五虚拟克隆相关联的后继者关系,并且(2)删除第四虚拟克隆。
在某些实施例中,指令还能够执行以使处理器响应于修改与第三虚拟克隆相关联的后继者关系而触发从多个虚拟克隆中删除至少一个其他虚拟克隆。
在某些实施例中,所述后继者关系是第一后继者关系,并且存储器还存储包括第一后继者关系的多个后继者关系。
在某些实施例中,数据库表包括多个记录,并且来自该多个记录的每个记录包括包括与来自多个虚拟克隆的虚拟克隆相关联的版本标识符的复合键。
在某些实施例中,一种装置包括处理器和与处理器进行电子通信的存储器。存储器存储数据库表和指令,该指令使处理器生成包括数据库表的多个虚拟克隆的表示的层次树。该指令可以还能够执行以响应于从多个虚拟克隆中删除第一虚拟克隆(例如,图5的节点(4,4))的指令来修改与第二虚拟克隆(例如,图5的节点(5,6))相关联的后继者关系,第二虚拟克隆是第一虚拟克隆的后继者虚拟克隆,删除第一虚拟克隆,修改与第四虚拟克隆(例如,图5的节点(3,3))相关联的后继者关系,第四虚拟克隆是第三虚拟克隆(例如,图5的节点(2,2))的后继者虚拟克隆,第三虚拟克隆是第一虚拟克隆的祖先虚拟克隆,并且删除第三虚拟克隆。
在某些实施例中,指令还能够执行以使处理器检测第二虚拟克隆是第四虚拟克隆的唯一后代虚拟克隆和后继者虚拟克隆,并且响应于检测到第二虚拟克隆是第四虚拟克隆的唯一后代虚拟克隆和后继者虚拟克隆而删除第二虚拟克隆。
在某些实施例中,数据库表包括多个记录,并且来自该多个记录的每个记录包括包括与来自多个虚拟克隆的虚拟克隆相关联的版本标识符的复合键。
在某些实施例中,指令还能够执行以使处理器响应于删除第一虚拟克隆的指令而触发从多个虚拟克隆中删除至少一个其他虚拟克隆。
在某些实施例中,指令还能够执行以使处理器从多个虚拟克隆中自动标识第五虚拟克隆并且该第五虚拟克隆不具有后代虚拟克隆。指令可以还能够执行以响应于该自动标识来修改与第六虚拟克隆相关联的后继者关系,并且删除第五虚拟克隆。
在某些实施例中,存储器还存储包括与第二虚拟克隆相关联的后继者关系和与第四虚拟克隆相关联的后继者关系的多个后继者关系。
在某些实现中,冲突约束确保如果表中存在具有给定复合键(诸如(1001,N))的记录,则该表将不包含具有复合键(1001,M)的任何记录,其中M是版本号,它是版本树中N的祖先。例如,如果版本树如图8C所示,并且如果存在具有键(1001,4)的记录,则可以保证不存在具有键(1001,V3)或键(1001,V1)的任何记录)。但是,因为V2在树中不是V4的祖先,所以可能会存在具有键(1001,2)的记录。
在某些实现中,数据库表的每个记录/行最初都包括为1的版本ID。然后,由于如本文所述执行快速复制、添加、删除或修改的操作,数据库表可以增长和收缩。
在某些实现中,可以如下执行删除操作。经由虚拟克隆(或“视图”)接收到的SQL查询可以引用一个或多个记录以用于删除。可以如下删除每个这样的记录:如果记录具有版本N,则该记录被删除。接下来,对于沿着从视图到层次树(即数据库表实例)的“根”的直接祖先路径的每个虚拟克隆,如果存在不在直接祖先路径上的这些虚拟克隆的子代,则将已删除的记录的副本随着其版本被更改为M而被添加到这些子代的数据库表。例如,给定图4B的层次树,如果具有键(馅饼,V2)的记录通过V2而被删除,则该记录从表中被删除。如果具有键(馅饼,V1)的记录通过V2而被删除,则该记录被删除,并且由于V3是V1的子代并且不在从数据库230到V2的直接祖先路径上,具有版本V3的记录的副本被添加到表。注意,此删除操作确保后续的通过V2的读取将不会返回具有虚拟主键馅饼的任何记录,并且一旦版本号从结果中被移除,则后续的通过V3的读取将返回与删除之前相同的结果。另外,当在满足冲突约束的表上执行这样的删除操作时,修改后的表将继续满足冲突约束。
在某些实现中,如果删除指令指示删除一个记录并且添加具有不同版本的K(K>0)个新记录,则其可以通过以下操作来实现:将记录的版本号更改为新版本号中的一个,然后制作K-1个副本(每个副本具有不同的版本号)。此优化节省一个添加,如果对底层数据库执行修改比执行添加更快,那么这可以是有益的(例如,提高数据库的效率)。
在其他实现中,可以将布尔属性“已删除”添加到每个记录。作为示例,给定图4B的层次树,如果要经由V2被删除的记录具有版本V2,则可以将该记录的已删除属性从假更改为真。但是,如果要经由V2被删除的记录具有版本1,则处理器可以创建和/或定义具有版本V2以及被设置为真的已删除属性的记录的新副本。如果表不需要满足冲突约束,则具有版本V1的记录可以随着其已删除属性设置为假而保留。但是,如果该表确实需要满足冲突约束条件,则可以创建和/或定义具有版本V3以及被设置为假的已删除属性的记录的另一个副本,并且可以从表中移除具有版本V1的记录。
在某些实现中,插入操作(即,将记录插入数据库表中)通过如下操作来执行:首先执行与要插入的记录的虚拟主键匹配的记录的删除,然后插入具有通过其接收到触发插入操作的插入指令的虚拟克隆的父代版本号的版本号的新记录。例如,给定图4B的层次树,如果经由V2接收到包括插入指令(例如,指示插入具有虚拟主键值为“黑莓”的新记录)的SQL查询,则可以将该查询修改为首先寻找和删除具有虚拟主键黑莓的可经由V2访问的任何记录(即,具有与V2祖先路径中的虚拟克隆对应的版本属性的值(即V2或V1)的任何记录),然后添加具有复合键(黑莓,V2)的新记录。注意,此添加操作保留对冲突约束的遵循。
在某些实现中,通过首先使用该虚拟主键执行数据库表的读取(或查询)来执行插入操作(即,响应于将记录插入到数据库表中的请求的处理)。如果在读取期间返回与要插入的记录匹配的结果,则可能会响应于插入记录的请求而返回错误消息。另一方面,如果没有返回与要插入的记录匹配的结果,则将具有作为接收到请求的虚拟克隆的父代版本号的版本号的记录插入数据库表中。例如,给定图4B的层次树,如果通过V2的SQL插入操作将插入具有虚拟主键黑莓的记录,则将该插入操作修改为首先使用上述读取操作对具有虚拟主键黑莓和版本属性的值为V2或V1的任何记录执行读取。如果查询返回对读取的任何结果,则处理器响应于插入操作而返回错误消息,因为这是尝试添加与共同祖先路径相关联的重复记录。如果查询未返回对读取的结果,则处理器添加具有复合键(黑莓,V2)的记录。注意,此添加操作保留对冲突约束的遵循。
在某些实现中,对记录X的修改操作可以通过如下操作来实现:首先如上所述删除X的旧版本,然后如上所述添加/插入X的修改后的版本。由于删除和插入这两者都保留对冲突约束的遵循,所以修改操作也保留对冲突约束的遵循。
在某些实现中,可以在被添加到数据库或与数据库相关联的单独的表中描述版本树,诸如图4B的层次树。快速复制数据库系统还可以将版本树信息缓存在存储器中,例如,使得查询可以被快速翻译。
如果版本树是长链,在底部具有小树,则版本比较可以被简化。例如,代替将版本与可接受版本的长列表进行比较,该列表的子集可以被用于比较,例如通过指定“版本<80”而并非指定所有小于80的版本号的长列表。可替代地,范围可以被使用,诸如,例如选择“10<版本且版本<15”而代替明确搜索“版本=11或版本=12或版本=13或版本=14”。例如,可以通过解析表示原始SQL查询的字符串,修改结果解析树,然后在将字符串传递给实际数据库之前转换回字符串来执行上述操作。
可替代地,在其他示例中,底层数据库可以支持视图和存储的过程。如果是这样,则在数据库的快速副本被创建时,视图可以针对每个表而定义,这确保从表的该版本进行选择将如上所定义那样被执行。存储的过程可以被创建,使得对视图的写入将转换为上述的记录复制。
在某些实现中,用于可快速复制的关系数据库(例如,从Java被访问)的系统包括(例如,用Java编写的)用户程序,该用户程序将SQL查询发送到(例如,也用Java编写的)可快速复制数据库平台,该平台在将它们发送到实际数据库之前翻译它们。例如,假设关系数据库具有命名为“人员”的如下表:
人员:
id 名称 年龄 状态
123 爱丽丝 20 AH
456 鲍勃 30 OH
789 卡罗尔 40 CO
虚拟主键是id_,并且还有其他3个属性:名称、年龄和状态。可快速复制数据库系统(例如,经由处理器执行可快速复制数据库处理)可以通过添加一个隐藏属性版本_并将下划线添加到其他属性和表的名称来将其转换为可快速复制表:
人员_:
id_ 名称_ 年龄_ 状态_ 版本_
123 爱丽丝 20 AH 1
456 鲍勃 30 OH 1
789 卡罗尔 40 CO 1
该新表具有复合键(id_,版本_),并且id_可以被称为如上所述的虚拟主键。因此,现在只要两个记录的版本_不同,则这两个记录就可以具有相同的id_。上面的示例遵循冲突约束,并且使用此示例的操作可以保留该遵循。如果某些其他表具有id的外键,则外键将保持不变,除了外键将与命名为id_而并非id的属性匹配。最初,外键被链接到虚拟主键人员.id,这意味着外键最多被链接到人员表中的单个记录。但是现在,当在查询中使用外键时,外键可能匹配多个记录的id_,并且因此外键将被解释为链接到该记录集合外的单个记录,该单个记录具有作为正被用于执行查询的视图的祖先的版本。在遵循冲突约束的实例中,不能存在两个这样的记录,因为其将违反冲突约束。这样,外键的链接可以与可快速复制数据库兼容。
在某些实现中,可以强制执行对由用户创建的表的名称和属性的限制。例如,可以实现指定名称和/或属性具有最多比底层数据库的典型表/属性大小短一个字符的长度(例如,最大大小为79个字符而不是80个字符,或者最大大小为63个字符而不是64个字符)的规则。可替代地或附加地,可以实现指定名称和/或属性不能以下划线结尾的规则。这允许表和属性被重命名。如果这对具体实现是有用的,则这还允许将原始的表的名称被用作具有存储的过程的视图。
现在假设,例如,系统(或处理器)对版本1执行快速复制操作以创建版本2和3(如下所示)。(由处理器执行的)用户代码可以为版本号提供每个SQL查询以用于读取和写入这两者,并且该版本号将是版本树中叶的版本。此时,因为在版本树的叶处完成读取和写入,所以(由处理器执行的)用户代码不能再直接读取或写入版本1。现在,该系统看起来如下,其中操作被描述为通过叶虚拟克隆(圆圈)而发生。
人员_:
Figure BDA0002464742750000351
快速复制操作根本没有更改表。它只是更改了在右侧显示并存储在特殊表中的版本树,在某些实现中,其可以被命名为版本s__(versions__)(例如,结尾处有两个下划线),其未在此处示出,但其包括两个属性:父代和子代。
在某些实现中,用户程序创建字符串,该字符串是要被发送到一个特定版本数据库的SQL查询。系统将解析该字符串,修改结果解析树,然后将其转换回字符串,并将该修改后的字符串作为SQL查询发送到实际数据库。这样,从用户的角度来看,当他们正在实际上对表示快速副本的单个组合数据库进行读取/写入时,呈现为好像他们正在对多个数据库副本中的一个进行读取/写入。
假设用户(例如,使用处理器)经由虚拟克隆3添加关于戴夫的新记录。这将导致以下数据库表:
人员_:
Figure BDA0002464742750000352
现在,通过版本2的查询将忽略(即,不检测)关于戴夫的新创建的记录,但是通过版本3的查询将看到戴夫。假设用户(例如,使用处理器)现在执行版本3的快速复制,则产生以下数据库表:
人员_:
Figure BDA0002464742750000361
戴夫记录包括属性“版本”的值3,因此它将通过经由虚拟克隆4和5做出的查询而被返回,而不是通过对虚拟克隆2的查询而被返回。假设用户(例如,使用处理器)然后通过虚拟克隆2将鲍勃更改为鲍比(Bobbie)。结果数据库表为:
人员_:
Figure BDA0002464742750000362
注意,该“更改”被实现为跟随有两次添加的删除。原始记录(鲍勃,1)被删除,并且记录的副本被添加版本3,这是因为3是从2到1的路径上节点的子代,但其本身不在该路径上。然后,因为该记录正在通过虚拟克隆2被修改,所以带有更改的新记录被添加版本2。
现在,存在具有ID_=456的两个记录。旧记录的副本现在为版本3,并且因此对4和5仍然可见,就像操作之前一样。新记录是版本2,并且仅经由虚拟克隆2可见,这是因为更改是通过版本2做出的。现在,假设用户(例如,使用处理器)通过虚拟克隆4删除卡罗尔(Carol)。结果数据库表如下:
人员_:
Figure BDA0002464742750000371
这删除了原始(卡罗尔,1)记录,然后添加了具有版本2和5的记录的两个副本,这是因为2和5是从4到1的路径上的节点的子代,但不其本身不在该路径上。
总之,在某些实例中,如下执行通过虚拟克隆V执行的操作:
·删除记录:删除具有版本N的原始记录,但是针对虚拟克隆V到虚拟克隆N的路径上的节点的自身不在该路径上的每个子代插入原始记录的副本。
·添加记录:为避免重复的记录与相同的祖先路径相关联,可以首先删除包括与要添加的记录共同的且位于相同的祖先路径内的至少一个值(例如,虚拟主键)的先前的记录,然后添加具有版本V的记录。
·添加记录(可选变体):首先确保读取不会返回具有该虚拟主键的任何记录,如果会返回,则返回错误,否则添加具有版本V的记录。
·修改记录:删除旧记录,然后添加修改后的版本的该记录。
·查询、连接等:对于涉及外键的操作(诸如连接),正常执行它们,但仅连接来自两个表的记录,其中这些记录具有将会位于相同的祖先路径内的版本号,使得它们可经由虚拟克隆V访问。
·创建/删除表:确保用户选择表的合法名称(足够短,且最后一个字符不是下划线),然后将下划线添加到表的名称。添加版本__属性。
·创建/删除属性:确保属性名足够短且不以下划线结尾,然后添加下划线。
数据库表的查询包括版本号。在某些实例中,存在一种快速复制虚拟克隆的(例如,由处理器执行的)方法。在某些实例中,还存在一种删除虚拟克隆的(例如,由处理器执行的)方法。在某些实现中,如果虚拟克隆是叶,则用户仅能删除该虚拟克隆。如果虚拟克隆的删除留下内部虚拟克隆而没有任何子代,则该虚拟克隆也可以被删除。在这种实例中,非叶虚拟克隆不会成为叶。只要其子代被删除,它就会消失。随着时间的推移,这可能会导致该树呈现为从根下行到深层的单个子代虚拟克隆的链,其后存在仅具有几个分枝和几个节点的小树。这些单子代虚拟克隆会浪费空间和时间,而没有任何贡献。
在某些实例中,系统可以周期性地(或偶发地)执行(例如,由处理器执行的)压缩操作以消除这样的单个子代版本。例如,如果虚拟克隆42仅具有作为虚拟克隆99的单个子代,则(例如,由处理器执行的)操作可以在表上被执行,将每个版本__属性值42更改为99,然后可以执行涉及树中两个虚拟克隆的序列更新,结果被表示为具有版本99的单个虚拟克隆。
尽管数据库可以被几个虚拟克隆访问,但使用单个规则保护整个数据库是可接受的,例如指定一次只处理一个虚拟克隆的查询,和/或在压缩操作期间不处理查询。即使在压缩操作被执行(例如,由处理器)之前,查询也可以被优化以反映树内的长链。例如,当对版本V=99执行查询时,并且如果版本V=99的祖先是版本{1,10,12,20,23,32,42},则查询可以被修改(例如,由处理器)以将其自身限制为具有这7个版本中的任何版本的记录。但是,如果树中没有具有低于23的数字的其他顶点数,则查询可以被简化(例如,由处理器)为寻找{<=23,32,42}。换句话说,它将寻找具有版本42或版本32或小于或等于23的任何版本号的记录。类似地,如果版本树中的适用顶点数是{1,10,12,20,23,32,42},但树中没有在10到32之间的其他顶点数,则可以针对{1,10…32,42}进行查询。换句话说,它将匹配等于1、等于42或从10到32(包含10和32)的任何数字的版本。当许多版本已经被创建和删除时,这些优化特别有用。
完整的SQL语言是复杂的,且具有许多强大的命令,恶意用户可能会使用这些命令来访问超出经由他们正在查询的虚拟克隆可访问的范围之外的信息。在某些实现中,通过仅允许完整SQL的小子集被用户使用,并且使节点在该子集外的任何内容被用户接收到时抛出异常,可以减少该脆弱性。例如,在某些实例中,系统可以被配置为不允许查询通过字符串操纵而建立其名称的表或属性,这是因为用户可能会使用它直接访问人员_或版本__或版本s__。系统可以不允许动态SQL,诸如在运行时编译的事务处理-sql(transact-sql)语句。在某些实例中,这些限制可以是暂时的。如果查询对表中的属性名或所有表的名称进行请求,则查询可以被修改为移除属性版本_和表版本s__,并从其他表的名称中移除后续的下划线。
上面的描述假定表和属性是在虚拟克隆1处被创建的,并且随后未被修改。但是,用户可能希望在创建快速副本(本文中也被称为“虚拟克隆”)之后更改数据库系统的模式,使得不同的版本具有不同的模式。在某些实例中,被命名为表s__(tables__)和属性s__(attributes__)(均具有有两个下划线)的两个新表可以被定义(例如,由处理器定义并被存储在存储器中)。表s__表可以记录版本中表的名称。属性s__表可以记录每个版本中每个表中的属性名。
在某些实例中,如果任何两个虚拟克隆都具有具有相同的名称X的表,则两者都可以被存储在被命名为X_的相同的物理表中。该X_表可以包含在这些X表中的任一个表中出现的属性。如果这两个X表的每个都包含属性Y,但是它们具有不同类型的条目,则X__表可以包含具有不同名称的两个不同属性,其通过属性s__表而被映射到相应的Y属性。
如果与两个不同的虚拟克隆相关联的两个不同的被命名为X的表具有不同的属性(或属性集)作为它们的虚拟主键,则这两个表可以被单独存储,并且表s__表可以存储被分配给单独的表的名称。
在某些实例中,系统可以实现一种对单个虚拟克隆进行序列化和反序列化并获得单个虚拟克隆的哈希的(例如,由处理器执行的)方法。序列化可以将可见和/或适用于该虚拟克隆的数据和表转换为字节流,该字节流对该虚拟克隆的模式和数据进行编码。反序列化可以将该流转换回完整的数据库。在某些实现中,序列化和反序列化都可以通过可信代码(例如,由处理器执行)来完成,而不是通过用户代码来完成。在某些实例中,只能在虚拟克隆1被创建的那一刻完成反序列化。通常,虚拟克隆1是没有对用户代码可见的表的空数据库。虚拟克隆的反序列化重新生成在序列化之前可见的数据和表。
在某些实例中,假定数据库是以某种规范顺序创建的,则数据库的哈希可以是该序列化流的SHA2-384哈希。类似地指出,如果数据库是由一定的SQL查询序列创建的,则无论什么计算机执行这些查询,该数据库都会给出相同的哈希。因此,例如,系统可以以表被创建的顺序对表进行序列化,并以表被创建的顺序对表内的属性进行序列化。可替代地,系统可以以字母顺序对表进行序列化,并以字母顺序对表内的字段进行序列化。在其他实现中,其可以通过缓存每个表和每个记录的哈希而被优化。
快速复制与快照
在某些实现中,可以以三种不同的方式复制数据库或数据结构:通过定义和/或创建普通副本,或者通过定义和/或创建“快速副本”(虚拟克隆),或者通过定义和/或创建“快照”。快照由于是不可变的,而不同于普通副本和快速副本。普通副本和快速副本这两者都是可变的,但是在存储的信息量上不同。
在图9中,最初((a)处的左树)可以通过“视图”X访问数据1。能够通过视图X对数据进行读取和写入这两者。稍后,从X(在(b)处)创建快照Y,其创建数据的副本2,此后1成为不可变的(灰色)。此后,2中的数据可以被修改或通过X而被读取,并且Y可以读取1中的数据,但不能修改它。接下来,在(c)处,从X创建快照Z,这会得到可变的副本3,并且2成为不可变的。可以通过使2成为1的完整副本来实现这些快照。可替代地,可以通过使2仅包含在快照被创建之后发生的更改来实现快照。无论哪种方式,视图Y和Z仅允许读取数据,但不允许写入数据。
快照行为不同于普通的复制行为。可以参照图9描述普通复制行为。最初,在图9中的(a)处,可以通过视图X修改或读取数据1。稍后(b),执行普通复制,这会创建视图Y,并还会创建1中的数据的两个副本2和3。此时,可以删除1。之后,2可以通过通过X访问2而被读取或修改,并且3可以通过通过Y访问3而被读取或修改。
该普通复制行为以如下方式不同于快速复制行为,这可以参考图9进行描述。最初(a),可以通过视图X读取或修改数据1。稍后(b),执行快速复制操作,这会创建视图(也称为“快速复制”)Y。该快速复制操作会创建2和3,它们中的每个都初始为空。1中的数据不被删除,但它成为不可变的。如果立即通过X或Y执行读取,其将遍历1并从1读取。如果通过X执行写入,则更改被记录在2中,并且1不会更改。如果通过Y执行写入,则更改被记录在3中,并且1不会更改。如果对X执行读取,并且所请求的信息是记录在2中的更改的一部分,则来自2的该信息被返回。但是,如果2不包含对该数据片段的任何更改,则读取会遍历到1。类似地,通过Y的读取将首先检查3,并且只有在3中找不到答案时继续到1。快速复制时的数据被示出为1,并且由于它是不可变的,而为灰色。稍后仍然(c),视图X被快速复制以产生Z,这导致新的4和5并且2成为不可变的。最后,如果然后视图Y被删除,则结果如图9的(d)处所示。在图9的(d)处,没有3。因为不再存在可以到达3的视图,所以它被删除。在图9中,X、Y和Z中的每一个都被称为“视图”,并且也被称为“快速副本”。
在某些实现中,垃圾收集的形式可以最终针对在图9的(d)处所示的数据结构而被执行。有可能通过取1中的数据并应用2中的更改来合并1和2。然后,有可能用此合并后的数据替换2,并完全删除1。该垃圾回收可以提高将来从X和Z读取的速度。这样的读取可以更快,因为在最坏的情况下从X读取将只需要检查4和2,而不必检查4、2和1。同样,从Z读取将更快,因为在最坏的情况下它们只需要检查5和2,而不必检查5、2和1。
可快速复制的映射
可以以多种方式实现键-值对的集合,诸如哈希表。这样的系统(或处理器)可以在O(1)时间下添加、删除或修改与键相关联的值。它还可以针对每个对在O(1)时间下以未定义的顺序通过键-值对进行迭代。这样的数据结构还可以实现集合,诸如通过将空字符串作为每对中的值来实现。这将为检查元素的集合成员资格提供O(1)时间,尽管如交集和并集这样的操作将会更慢。
可快速复制的映射可以以几种方式实现。一种方式(使用图9作为示例)是创建针对每个圆圈(或虚拟克隆)的对象,每个对象包含例如Java哈希表,并且创建针对表示视图的每个方块的对象。最初,通过X进行的读取操作和写入操作直接传递到1内的底层映射。
在进行Y快速复制之后,创建空映射2和3,并将1标记为不可变的。当将键-值对写入X时,这将导致对2的写入操作。对X的读取将首先导致对2的读取操作。如果在2中找不到键,则执行对1的读取。类似地,在快速复制Z之后,对Z的读取将导致对5的读取操作。如果其失败,则读取2。并且如果其失败,则读取1。因此,对给定方块的写入会导致对相邻的圆圈的更改,并且读取操作将沿树向上,直到找到键或已查询到根为止。在图9(b)中,如果对X的写入操作删除给定的键-值对,则处理器可以使用作为表示键-值对不存在的特殊值的“值”将该键从1复制到2。因此,将来针对该键-值对的对X的读取操作将停止在2处并且报告不存在针对该键的值,而不是继续到1并返回针对该键的原始值。
对Z中的对的迭代可以通过通过1中、然后2中、然后5中的对进行迭代来完成。1中的键-值对例如仅当查询显示其键既不在2中也不在5中时被使用。类似地,2中的键-值对例如仅当查询显示其键不在5中时被使用。因为5是圆圈的树的叶,所以5中的键-值对例如不检查任何其他映射而被使用。
如果底层映射以任意顺序进行迭代,则此方法也将以任意顺序进行迭代。如果底层映射以键-值对上次被修改的顺序通过键-值对进行迭代,则此方法将同样进行。在这两种情况下,对于固定深度的树,针对每个元素的时间为O(1);如果树的深度为d层,则针对每个元素的时间为O(log d)。
如果底层映射以某种其他顺序迭代,诸如通过按字母顺序对键进行排序,则此方法将不会自动同样进行。相反,系统可以首先将键复制到缓冲区,然后对它们进行排序,然后通过该缓冲区进行迭代。这是昂贵的操作,针对n个项目,每个元素的摊销时间从O(1)增加到O(log n)。这对于某些应用仍然是可接受的。
在运行时能够进行其他优化。例如,在图9(c)中,2中的映射可以被替换为合并2和1的新映射。然后,新2将是其自身树的根,而1将失去该子代。当1不再具有任何子代时,1可以被删除。类似地,在图9(c)中,5可以被替换为1、2和5的合并,并且然后成为其自身的根。合并两个不可变的表(如1和2)可能需要一些时间,但是这可以在后台线程中完成。附加地,一旦其完成,则合并后的映射针对旧映射而被交换,并且作为结果的树变得更浅,从而提高了读取和迭代的速度。
另外,如果视图被删除,则某些圆圈变得不可访问并且然后可以从存储器中被删除,并且对于合并它们的任何工作都可以中止。这允许系统反映图9(d)。这可能是由底层语言中的垃圾回收过程触发的。可替代地,该系统可以实现一种用于明确删除视图的方法,并维护引用计数以确定何时孤立一个圆圈、在何时删除该圆圈。
可以通过实际删除键-值对而在根映射中实现键-值对的删除。在除根以外的映射中,可以通过将值更改为特殊的“已删除”对象来完成这样的删除。当合并映射导致新映射成为根时,可以然后完成通过其键-值对进行的迭代以移除具有“已删除”对象的键-值对。
另一种方法是使用诸如特里结构(trie)的单个数据结构,而不是具有哈希表的树。对于特里结构,每个键可以是预定义大小(例如16位、32位或64位)的固定长度哈希。映射由二叉树表示,其第n层表示键的第n位,并且通过向下行进16(或32或64)层来查找键。然后,值被存储在底层的叶处。为了处理键哈希冲突,叶存储键-值对列表,尽管平均而言,该列表预计会很短,特别是如果哈希函数对于可能试图选择导致过多冲突的键的攻击者是未知的。通过使用n叉树而不是二叉树,还有可能提高速度和存取器需求这两者。例如,由于32=25,所以32叉树将仅具有五分之一的层。
前述内容描述了标准特里结构。为了将标准特里结构转换为可快速复制的特里结构,树中的每个边可以被标记上关于其适用于哪些数据版本的信息。因此,在图9(a)中,可以添加给定的键-值对,并且用一个1标记其边。然后,在快速复制Y和Z之后,可以将键-值对添加到Z。这能够涉及将更多的边添加到树,其可以每个用5被标记。当从视图Z读取键时,系统可以从根处开始,并跟随匹配键的位的边,但是只跟随用1、2或5被标记的边。当然,这意味着图9(c)中的图被明确地存储在存储器中,或者至少Z可以标识(例如,通过存储与Z的关联)出其到图9(c)中的图的根的路径通过被标记1、2和5的圆圈。
随着做出更多快速副本,对边的条件检查可能变得更复杂。例如,查询可能最终跟随仅用数字{1,2,5,17,32,65,82,97,99}中的一个数字被标记的边沿特里结构向下进行。但是,在某些应用中,可能会有如下情况:图9中的图从长远来看预计演变成从根到接近底部的细长链,然后其分支成接近底部的许多分枝。如果圆圈中的数字按数字顺序被分配(如图中的情况),则代替检查边是否用长列表{1,2,5,17,32,65,82,97,99}中的任何数字被标记,而是有可能检查该数字是否在列表{<80,82,97,99}中,其中该“<80”条目匹配小于80的任何数字。换句话说,即使图9中的树随着时间变高,只要树是在底部处具有小树的链,布尔条件也不必随着时间变复杂。为了删除键-值对,如上所述,可以使用特殊的“已删除”对象。或者,可以通过将边标记为在一定的版本中正被删除来完成这样的删除。然后,版本可以删除键,其将特里结构中的某些边标记为针对该版本已删除。在此情况下,对于图9(c),如果针对边提到的{1,2,5}的最高数字指示该边已添加而不是已删除,则该边视为正处于针对视图Z的特里结构中。
可快速复制的数组
一旦已经创建可快速复制映射,就可以创建其他数据结构的可快速复制版本。例如,可以通过将实际数组与可快速复制的映射(诸如前面部分中描述的可快速复制的映射)组合来构建可快速复制数组。最初,当仅存在一个虚拟克隆或视图时,读取操作和写入操作直接进入数组。在快速复制之后,写入操作进入映射,并且每个键值对使用数组索引作为键并使用数组元素作为值。读取操作首先检查映射,并且如果其找不到索引,则其从数组读取。多次快速复制操作可以导致映射树。从一个虚拟克隆或视图的读取操作将沿着树向上进行直到其找到具有该键的映射、或者直到其到达作为实际数组的树的根。
如前所述,有可能偶尔压缩版本树。例如,在图9(c)中,将有可能创建反映1、2和5的新数组。一旦新数组被创建,视图Z可以连接到与空映射相关联的该新数组。在这样的压缩之后,读取操作和写入操作这两者将更快,直到存在再次使树变大的其他快速副本。此过程可以被重复/迭代。相同的方法几乎适用于任何收集,而不仅仅是数组。任意收集被包装在包括可快速复制的映射的对象中,并在检查收集之前读取操作和写入操作对映射进行检查。随着多个快速复制操作使版本树变大,读取操作和写入操作可能变得更慢,并且然后在树被压缩时变得更快。
可快速复制的文件系统
在可快速复制的文件系统中,虚拟克隆或视图对象可以表示整个文件系统。对于用户而言,虚拟克隆或视图对象呈现为是包括包含文件的目录树的单独的硬盘驱动器。对用户而言,快速复制操作呈现为创建具有准确的原始副本的新硬盘驱动器。这样,两个驱动器都可以被独立修改,并且对其中任一个的更改将不会影响另一个。这可以通过使一个实际目录包含来自所有版本的文件来实现。如本文所述,可快速复制数据库存储针对每个版本的目录树以及指向每个目录中的文件的指针。如果两个版本都包含相同的文件,则系统在实际硬盘驱动器上仅需要一个实际副本,并且数据库可以存储指向该实际副本的两个指针。当通过从可以看到文件的最近视图中删除文件而删除指向该文件的最近指针时,那么系统在物理硬盘上删除物理文件。这种方法使得复制O(1)操作。这通过仅存储重复文件的单个副本还会节省硬盘驱动器空间。
系统还可以通过将文件划分为小块(诸如,例如2KB块)而被优化。然后,数据库存储指向组成该文件的块的每个文件的指针的列表。这样,如果两个文件对于前2KB具有相同的内容,那么物理上仅存储该块的一个副本,这进一步节省空间。这样,不仅对于两个虚拟克隆或视图可以访问相同的文件的情况,而且对于单个虚拟克隆或视图表示在两个不同的目录中具有相同的文件的目录树的情况,重复都被减少。
如果存在快速计算文件或整个目录子树的哈希的需要,则该信息也可以被存储在数据库中。每个块的哈希可以被存储,并且在块被修改时被修改。实际上,在某些实例中,可以将底层文件系统中块的文件名定义为十六进制文件的哈希。如果仅有一个对于给定块X存在的指针,则该块的修改可以包括对文件名的更改。当有多个指向给定块Y的指针时,则可以通过制作块的副本、修改副本、然后用其哈希来重命名副本来实现块Y的修改。
在这样的实例中,文件的哈希可以是增量哈希,诸如其块的级联的哈希。可替代地,文件的哈希可以被定义为文件中块的对(位置,数据)的哈希的总和。目录的哈希可以是目录中文件的哈希的总和。当文件被更改时,数据库可以更新受影响的哈希,例如在后台线程中。可替代地,直到对方法的调用请求哈希之前,可以不计算哈希。在这样的实例中,可以按需计算哈希。此体系结构有助于实现在传统文件系统中通常不存在的附加特征。可以在数据库意义上实现文件系统“交易”。当系统(例如,经由处理器)调用文件系统方法来操纵文件系统时,系统可以调用方法(例如,由处理器执行)以发起交易,然后进行多次调用以添加、删除或修改文件,然后调用方法(例如,由处理器执行)以提交交易。在某些这样的实现中,即使系统在任何时间下断电,文件系统也将以反映这些操作的所有或任何都没有而结束。此功能通常不会被添加到传统文件系统,因为它会涉及以将会降低系统速度的方式对传统数据库的调用。然而,本文公开的可快速复制的文件系统出于其他原因已经支付了该计算成本,因此添加交易实际上几乎没有附加的/增量的成本。
在某些实现中,文件系统级别下的“交易”可以被实现为数据库级别下的“交易”。如果在操作中间中发生崩溃,则数据库恢复方法(例如,由处理器执行)可以包括将数据库回转到数据库交易的开始。然后,数据库恢复方法可以遍历存储的块,以查看是否任何块都不再被数据库引用,并删除任何这样标识的块。这有助于正确状态的快速恢复,伴随于此进行更长的过程(例如,在后台线程中)以恢复浪费的空间。在此方法中,块文件直到提交已经被发送到数据库之后才被删除,并且数据库被更新。
以下包括针对用于(例如,从Java被访问的)可快速复制的文件系统的系统的详细讨论。用户程序(例如用Java编写并由处理器执行)调用可快速复制的文件系统的平台的方法(例如,也用Java编写并由处理器执行),其支持常见的文件系统操作以及一些不常见的操作。
可快速复制的文件系统可以允许用户代码和/或过程(由处理器执行)访问呈现为卷、目录和文件的内容。与已知的文件系统不同,本文描述的可快速复制的文件系统可以有助于:
-快速复制文件、目录树或卷
-快速计算文件、目录树或卷的哈希
-序列化和反序列化文件、目录树或卷
-序列化和反序列化(用于差异副本的)文件、目录树或卷的子集
-强调读取速度超过写入速度
-冗余目录、文件和文件的部分的自动去重
-仅鉴于其哈希(即哈希是指针)而寻找文件或目录的能力
-文件系统的元数据的数据库上的只读SQL查询
在某些实现中,文件系统实现以下:
卷-虚拟硬盘驱动器,具有/作为其根目录
目录-一些元数据以及0或更多(<263)个文件和目录的排序列表
文件-一些元数据以及0或更多(<263)字节的序列
ACL(访问控制列表)-包含一组标识的文件或目录
身份-表示可能访问文件系统的某人的公共键(存储在ACL中)
实体-文件或目录(可能是或者也可能不是ACL)
块-0到块大小(CHUNK_SIZE)字节的序列(被物理地存储为Java文件)
块树-1或多个块集合,被排列在树中,以表示1个实体
块大小(CHUNK_SIZE)=4096(或不同的常数)
元数据-关于一个实体的信息,包括其名称、大小(通过多种方式计算)、访问权限、用户定义的元数据等。
权限-实体具有对每个人的读取权限,或者其具有具有读取权限的那些人的指定ACL群组。并且对于写入类似。
在某些实现中,文件系统不实现以下:
链接-此文件系统没有链接、硬链接、软链接、符号链接、别名等。但是,快速克隆允许类似的内容:代替在目录中放置连接到库的链接,你可以简单地将整个库复制到你的目录,并且这将像你已经使用链接一样使用少量的存储。
目录.和..-数据结构不反映.或..目录的存在。但是,接口可以正确地解释包含它们(诸如“/here/../there”)的来自用户的路径字符串
压缩/加密目录–不存在如视窗操作系统(Windows)或OSX中的压缩或加密目录的等效物。但是,普遍采用较弱的压缩形式(对块进行去重)。此外,如果目录树对于其文件和子目录中的每一个将读取Acl(readAcl)标志设置为真,则尽管目录树的拓扑结构和文件大小将仍然可见,但数据、文件名和目录名将被加密。
Rsync和时间机器(Time Machine)-在某些实例中,可以在文件系统上实现差异复制和/或差异备份。
Unix样式权限-由于可快速复制的文件系统的性质,对于文件或目录的所有者、群组或用户不存在固有概念。在读取、写入和执行操作之外,只有前两个是有意义的。因此,可快速复制的文件系统可以允许每个文件或文件夹有用于读取的可选访问控制列表(ACL)以及用于写入的另一个ACL。如果用户的应用需要超出此以外的任何内容,则用户可以将其添加为用户元数据的一部分。此外,这里的读取和写入的准确定义与Unix和其他系统中的那些稍有不同。
对于用户,文件系统呈现为作用如下:卷像是外部硬盘驱动器,具有/作为根目录。卷包含目录树。每个目录包含目录和文件的集合。它不包含两个目录.和..或任何等效物(尽管在某些实例中用户界面可以模拟它们的存在)。在某些实例中,用户无法创建或查看硬链接、软链接、符号链接、别名等。可见的目录树(对用户而言)呈现为树,而不是DAG或循环图。用户将可快速复制的文件系统查看为普通文件系统,但是写入操作比平常慢,并且以下操作比平常快:
-快速复制文件、目录或卷
-获得文件或整个目录树的哈希
-获得文件、目录或整个目录树的大小(以字节为单位)
-将文件或目录树序列化/反序列化为流(例如Java流)
-将块集合序列化/反序列化为流(例如Java流)
-获得易于定义差异副本(如rsync)的信息
-对给定卷中的文件的元数据数据库的只读SQL查询
系统(例如,使用处理器)可以执行文件和目录的快速克隆,快速获得文件或目录的哈希,以及序列化/反序列化文件和目录树。在某些实例中,分布式哈希表(DHT)被添加到可快速复制的文件系统平台,并且用户可以鉴于其哈希而从因特网上寻找和下载文件或目录树。在这样的实例中,该下载可以是高效的,仅传输用户尚未拥有的数据。
用户将卷的内容查看为目录的有限树-而不是DAG、循环图或无限树。这些目录中的每个目录可以包含文件和其他目录。文件和目录中的一些可以被标记为ACL,并且通常被隐藏,但是当被请求时可以被用户查看。
在某些实例中,访问权限模型包括读取和写入,但不包括执行(EXECUTE),并且被建立在ID的分层ACL群组上。如果用户的文件或文件夹的读取全部(readAll)为真、或者其读取全部为假且其读取Acl包括该用户,则用户具有对该文件或文件夹的读取权限。类似地定义写入权限(使用写入全部(writeAll)和写入Acl(writeAcl))。
在下表中,如果用户具有在行的开始处列出的权限,则他们被允许对为其列列出的内容执行以色区分的操作(红色=无权,黄色=仅读取权,绿色=读取和修改权)。前4列用于元数据。
Figure BDA0002464742750000511
读取=用户可以读取数据
读取缺失=用户只能读取数据的加密版本,或将文件或目录复制到另一个位置,或对数据进行序列化/反序列化
修改=用户可以更改数据的任何部分。对于目录,其包括更改目录自己的名称以及在该目录内添加/删除文件/目录,但不必须允许读取或修改该目录内的文件或目录的文件名。
在某些实例中,用户可以复制、序列化或反序列化文件或目录树,而不管其权限。在用户这样做时,用户可以可选择地针对文件或针对目录树中所有内容设置写入权限(即,针对它们中的每一个设置写入全部和写入Acl)。
“实体”可以是文件或目录。每个实体具有其自己的元数据和内容。文件的“内容”被定义为该文件内的字节序列。目录的内容被定义为该目录内的文件和目录的哈希的排序序列。在某些实例中,如下所定义的那样,每个实体被物理地存储在由块组成的块树中。
“块”是字节序列,其被物理地存储为底层文件系统(例如,由Java提供)中的单个文件。可快速复制的文件系统中的目录和文件以及ACL可以是虚拟的。在这样的实现中,仅块物理地存在于用户的硬盘驱动器上。当用户不观察块时,底层物理文件系统将操作和/或使用块。
块在硬盘驱动器的物理文件系统(例如,由Java提供)中具有文件名。在某些实例中,该文件名可以是其内容的256位哈希,以小写十六进制表示。因此,块一旦被写入磁盘存储器,块尽管可以被删除,但是不被修改。在某些实例中,块可以在存储器中被存储在物理文件系统(例如,由Java提供)中的单个目录中。在其他实例中,包括子目录的目录可以被用于将块存储在存储器中,其中块根据它们的文件名的前几个字符被划分。
在某些实例中,块不大于块大小字节。可以将该全局常数定义为例如4*1024。在其他实例中,块大小为由OSX稀疏束使用的4*1024与8*1024*1024之间。
一个或多个块可以被组合以形成“块树”,该“块树”用于存储单个实体(文件或目录)。第一块以“深度”字节开始,提供树的深度。所以0x01表示树只是单个块,其既是根又是叶,0x02表示根的子代全部都是叶等。如下面的元数据部分所定义的那样,深度字节后伴随实体的“固定”元数据元素。
对于足够小的实体,其后伴随其余的元数据,然后伴随文件或目录的内容。(目录的“内容”是目录内每个文件和子目录的32字节哈希的排序列表)。作为示例,如果存储的数据最多为块尺寸字节,则数据适应在单个块中,并且该块将具有1(0x01)的深度,并且该块包括该实体的整个块树。
如果实体太大而不能适应在一个块中,则固定元数据后伴随子代块的哈希的序列。对于树中的内部块,子代块中的每一个包括它们的子代块的哈希的序列等等。
叶块当以广度优先的顺序被访问时,包含其余的元数据,然后包含文件或目录的内容。在某些实例中,内容的起始处于从元数据尾端起的单独叶块中。
在某些实例中,如下所示,树形拓扑是唯一定义的。如果树可以适应在单个块中,则它适应在单个块内。否则,系统可以定义树,使得如果节点以广度优先的顺序被访问,则受到没有单个叶节点可以包含来自元数据和内容这两者的字节的限制,而较早的节点尽可能大。
在某些实例中,每个实体(文件或目录)可以按以下顺序包含以下元数据,并且为方便起见,此处被划分为3个类别:(固定、可变、敏感)。
固定:
1.文件系统-2个字节-上次修改时的文件系统版本
2.实体类型-1个字节:
0x00=实体_文件(ENTITY_FILE)=文件
0x0l=实体_DIR(ENTITY_DIR)=目录
0x80=ACL_文件(ACL_FILE)=表示ACL群组的文件
0x81=ACL_DIR=表示ACL群组的目录
3.大小-8个字节-如果不存在任何块去重,此文件或单个目录中的字节数
4.大小S元数据(sizeSMetadata)-8个字节-敏感元数据的字节数
5.大小V元数据(sizeVMetadata)-8个字节-可变元数据的字节数
6.大小树(sizeTree)-8字节-仅对于目录存在:如果不存在去重,此目录树中文件和目录的总大小,
7.读取全部(readAll)-1字节-如果每个人都具有对此文件或目录的读取权限,则为真(0x0l)。否则为假(0x00)以将他们限制到ACL。
8.写入全部(writeAll)-1字节-如果每个人都具有对此文件或目录的写入权限,则为真(0x0l)。否则为假(0x00)以将他们限制到ACL。
敏感:
9.名称-文件名或目录名称是非空字符串(例如Java字符串)且字符串长度(String.length)()<=255。类似地指出,最多255个UTF-16代码单元。在某些实例中,包括斜杠和冒号在内的所有万国码(Unicode)字符被允许。在某些实例中,对路径长度不存在限制。
10.用户元数据(userMetadata)-键-值对的列表,其中键和值这两者都是字符串(例如,任何合法的Java字符串均可),并且对于相同的键可以存在多个对。除非用户调用添加对的方法,否则此字段为空。
可变:
11.读取Acl(readAcl)-32字节-如果读取全部为假,则存在-表示具有读取权限的ID的ACL群组的ACL文件或ACL目录树的哈希。系统可以确保目录的读取Acl是存储在目录内的ACL文件或ACL目录的哈希。文件的读取Acl可以是存储在与该文件相同目录中的ACL文件或ACL目录的哈希。
12.写入Acl哈希(writeAclHash)-32字节-如果写入全部为假,则存在-类似于写入Acl的哈希,尽管可能指向不同的实体。
13.加密键(encryptedKeys)-如果读取全部为假,则存在。在ACL群组中针对每个公共键而一个加密键的列表。该列表按8字节计数存储,以与ACL群组中ID的排序列表相对应的顺序其后伴随每个加密密钥。
在某些实例中,除了存储的4种类型的大小外,还存在未被存储但根据需要而被重新计算(例如,由处理器)的第五种大小。这是“去重后的大小”,它是此文件或目录树中唯一块们的总大小。在忽略文件或目录树之外的块时,如果在此文件或目录树内要发生去重,则这将是磁盘存储器上的大小。
在某些实例中,其读取全部为假的实体可以被部分加密(例如,使用处理器)。“敏感”元数据是加密的,但“固定”和“可变”元数据不是加密的。文件的内容是加密的,但目录的内容不是加密的。
在某些实例中,加密可以是使用随机键的XTS(NIST SP800-38E)。XTS“数据单元”除了包含敏感元数据和可变元数据这两者的、对其而言数据单元只是敏感部分的任何块之外,是每个整块。敏感元数据的加密可以是使用随机键的XTS加密。文件的内容的加密可以是使用相同的键但其位被翻转的单独XTS加密。因此,如果通过延长敏感元数据的长度来修改敏感元数据,则元数据的一部分可以被重新加密,但是由于内容开始于新块的起始,所以内容不被重新加密。
然后,可以使用来自ACL群组的公共键的排序列表中的每个公共键(例如,使用处理器)对随机键进行加密,并且将结果存储为加密键(encryptedKeys)。对于ACL文件,ACL群组是ACL文件中ID的排序列表。对于ACL目录,ACL群组是其根是该目录的目录树内的ACL文件中ID的排序列表。
在某些实例中,当通过添加ID而ACL ID群组更改时,则可以将新加密键添加到加密键列表。当ID被删除后,则新随机键被选择,加密键列表被重新计算,并且敏感元数据和内容这两者使用旧键被解密并使用新键被重新加密。写入缓存可以被用于优化此过程,例如,通过允许快速连续地对ACL进行几次更改,然后对更改进行一次重新加密。
用户元数据可以是(键,值)对的排序列表。每个键是字符串(例如Java字符串),并且每个键是唯一的。每个值可以是Java列表<字节[]>(Java List<byte[]>),并且列表中的顺序是各种值被用户添加的顺序。用户可以添加和删除值。当没有值剩余时,则对被删除。
这些键可以是用户想要的任何字符串。在某些实现中,空字符串是可允许的,但空值(null)并非可允许的。示例包括“创建者应用(creatorApp)”或“打开(openWith)”或“资源(source)”,并且值是目录树的哈希(其中前两种情况具有单个在顶层目录中可执行物)。其他示例包括与小jpg相关联的“略图(thumbnail)”,或与时间和日期相关联的“创建日期(createdDate)”或“修改日期(modifiedDate)”,或与希望此文件继续存在的每个用户的ID相关联的“锁定(pinned)”。取决于用户提供的键,可快速复制文件的系统平台可以使用这些中的一些或全部。
在某些实现中,大小字段可以是有符号的64位整数,给出该实体的块树中每个块的以字节为单位的总大小。如果相同的块在块树中出现两次,则其被计数两次。因此,大小字段是在不存在去重的情况下实体的块树将占用的物理磁盘存储空间量。
存在树大小(treeSize)字段以用于目录,但不用于文件或ACL。树大小字段可以是此目录的大小、以及此目录中每个文件的大小加上此目录中每个子目录的树大小的总和。这是在不存在去重的情况下该目录树将在存储器中占用的空间量。
在某些实例中,可快速复制的文件系统平台还可以跟踪每个用户负责多少字节。对于文件,锁定文件的用户可以按“大小”字节被收费。对于目录,锁定目录的用户可以按“树大小”字节被收费。当文件没有人锁定文件时,则应用可能会决定删除该文件以节省存储器空间。当目录树不包含锁定的文件或目录时,则该整个目录树可以被删除(例如,使用处理器)以节省存储器空间。这意味着,用户为他们导致被使用的空间而被收费,忽略两个用户锁定同一对象时发生的去重。可快速复制的文件系统平台可以确保可快速复制的文件系统平台不在其目录树内锁定目录和实体这两者。
上述文件系统具有快速读取和慢速写入。它还具有快速哈希计算。如果用户请求文件或目录的哈希,则答案仅是其块树的根块的物理文件名。它可以与元数据一起被存储在关系数据库中,并且因此可以被快速返回。在某些实例中,SHAZ-256哈希可以被用在整个文件系统中。在其他实例中,SHAZ-256哈希(或任何其他合适的哈希)可以被用在整个文件系统中。
尽管在某些实现中,文件系统具有慢速写入,但它确实有如下好处:每当在它们的块中的一个中恰好具有相同的字节的两个文件被创建时,则仅该块中的单个副本被物理地存储在存储中,从而减少存储空间的消耗并且使用户有可能制作他们无法以其他方式制作的副本。例如,代替在目录中制作连接到库的链接,用户(例如,使用处理器)可以简单地将整个库复制到该目录中,并且该虚拟副本将使用比实际副本更少的存储。
在某些实例中,如果用户复制文件或目录(即使从一个卷到另一个卷),则在物理上系统(例如,使用处理器)仅复制指向实体的根块的指针,而不是实际块本身。在此,“指针”可以表示实体的哈希,该哈希被存储在其他实体的元数据中并且在数据库中。如果目录/X/和/Y/这两者都包含具有文件名N的文件A,并且用户修改/X/N,则系统将把B作为A的副本,做出对B的请求修改,将指针从/X/N更改为指向B,并且使原始的/Y/N仍指向A。
最初,以上可以如所述那样被编码。这意味着,每次写入操作都可能涉及重新计算哈希并创建新块,它们被存储在新物理文件中。在某些实例中,通过在RAM中缓存写入操作并仅在延迟之后将它们写入磁盘存储器,使得对相同文件的多次写入操作将合并为哈希处理和块创建的单个步骤,可以使系统更快。此外,在某些实例中,单个目录中的多个文件的更改可能会导致对该目录以及目录树中该目录之上的目录进行单个更改。在该情况下,在读取之前查询数据库以查看当前是否存在将影响读取值的任何缓存的写入操作。
在某些实现中,组成文件的块不被用户可见-相反,用户仅查看文件本身。然而,在其他实现中,系统可以被配置为执行与块哈希有关的几种方法(例如,在处理器中执行)。系统可以允许用户寻找文件或目录的根块的哈希。这被定义为该文件或目录的哈希,并且可以在整个系统中用作指向该文件或目录的指针。
在某些实现中,用户可以调用将文件或目录树或块列表(由其哈希引用)序列化为字节流的方法(例如,由处理器执行)。可替代地或除此以外地,在某些实现中,用户可以调用反序列化这样的流并在由用户选择的目录内创建新文件或目录的方法(例如,由处理器执行)。被反序列化的块可以被透明/不可见地添加到文件系统,并且随后被转换为可见的文件和目录树,例如,当整个文件或目录有其块存在时。当用户指示它们完成反序列化,系统可以对未被使用的任何块进行垃圾收集。这样的垃圾收集还可以周期性地(例如,每分钟一次、每小时一次、每天一次等)、偶发地或者以任何其他预定时间或时间间隔发生。
如果用户调用序列化方法(例如,由处理器执行)以用于文件,则处理器可以序列化整个文件(即,整个块树,以深度优先顺序,预排序遍历),并输出每个块的内容。在某些实现中,没有块名被序列化。如果用户请求序列化目录树,则处理器可以序列化整个目录树(即目录树中文件和子目录的块树),对其目录进行深度优先搜索。在这两种情况下,序列化递归地进行,序列化根块、然后是它包含的每个哈希等等。系统存储对到目前为止被序列化的块的指示和/或记住目前为止被序列化的块,因此处理器不会将相同的块序列化两次。
在反序列化时,系统可以根据其内容计算每个块的哈希(例如,以确定用于存储该块的文件名),并且在过程完成后,可以丢弃未以作为完整实体的有效部分而结束的任何块。
如果系统序列化块集合(通过在它们的哈希的集合中传递),则系统仅按照给定的顺序序列化那些块中的字节。该方法返回被块集合引用的块集合。如果用户反序列化这样的块集合,则这些块将被添加到系统,并且系统返回被用户计算机上尚不存在的块集合引用的块集合。
系统(或处理器)还可以执行用于序列化文件或目录树的非叶块的方法。在反序列化时,系统向用户返回用户系统上尚不存在的叶块的哈希。因此,例如,爱丽丝(使用计算设备爱丽丝(Alice)处的处理器)可以将叶、然后是非叶序列化到鲍勃(到计算设备鲍勃(Bob)处的处理器),并且鲍勃将尽可能早地准确地知道多少字节将从爱丽丝被发送到鲍勃。或者,在可替代的系统中,爱丽丝可以将非叶块序列化到鲍勃,然后鲍勃可以向爱丽丝通知鲍勃尚未接收到的叶的哈希,然后爱丽丝可以仅序列化鲍勃尚未收到的叶。
块集合序列化的一个好处是,它允许爱丽丝高效地向鲍勃发送恰好包含鲍勃已经具有的许多文件的目录树。爱丽丝首先仅序列化根块的哈希,然后将其发送。鲍勃将根块的哈希反序列化到他选择的目录中。如果该方法(例如,由鲍勃处的处理器执行)调用返回非空的哈希列表,则他将该列表发送给爱丽丝,然后她发送回到这些块的序列化。然后,鲍勃反序列化这些块,并将它们引用的他仍然没有的块的列表发送给爱丽丝。这持续直到鲍勃拥有整个目录树的副本为止。以此方式,爱丽丝传输整个目录树,而无需发送鲍勃已经拥有的块。
在某些实例中,在反序列化期间,关系数据库可以跟踪和/或存储新的块、文件和目录的元数据。在某些实例中,一旦其块(及其子目录的块,递归地)全部已经被接收,则在任何给定时间下用户可以将文件或目录查看为存在于文件系统中。
在某些实例中,由系统(或处理器)执行的反序列化完成(deserializeDone)方法指示用户已完成反序列化。此时,系统可以丢弃未作为有效实体的一部分而结束的任何块。在反序列化时,用户可以请求新文件或目录树被设置为具有给定的写入权限。也可以在复制时这样进行。
可快速复制的文件系统平台可以周期性地执行包括以下步骤的操作:
-获取文件系统数据库和自从上次签名状态以来的当前事件列表的快照
-将该快照序列化到磁盘存储器
-更改磁盘存储器上的字节以指示这些新文件现在是正式备份
在崩溃之后(即使在正常关机和重新启动之后),可快速复制的文件系统平台能够执行以下操作:
-加载最新的签名状态
-反序列化来自最新的正式备份的事件
-反序列化来自最新的正式备份的数据库
-与同步等一起开始运行正常的可快速复制的文件系统平台。
另外,在某些实现中,可以执行后台线程以进行块垃圾收集。垃圾收集线程可以周期性地遍历块目录,并针对数据库检查那些文件名。如果垃圾收集线程标识未被任何当前卷引用且未被最新的签名状态引用的块,则垃圾收集线程应从硬盘驱动器中删除该块。另外,在某些实例中,垃圾收集线程可以周期性地在存在的块中读取,并检查每一个具有与其内容的哈希匹配的的文件名。如果它们不匹配,则可以从硬盘驱动器中删除该块。如果(根据数据库)仍然需要该块,则可以采取步骤以从DHT或从另一个成员重新下载该块。
本文描述的某些实施例和/或方法可以由(在硬件上执行的)软件、硬件或其组合来执行。硬件可以包括例如通用处理器、现场可编程门阵列(FPGA)和/或专用集成电路(ASIC)。(在硬件上执行的)软件可以以多种软件语言(例如,计算机代码)来表达,包括C、C++、JavaTM、Ruby、Visual BasicTM和/或其他面向对象的过程的或其他编程语言和开发工具。计算机代码的示例包括但不限于微代码或微指令、机器指令(诸如由编译器产生的)、用于产生Web服务的代码以及包含由计算机使用解释器执行的高级指令的文件。例如,实施例可以使用命令式编程语言(例如,C、Fortran等)、功能性编程语言(Haskell、Erlang等)、逻辑编程语言(例如,Prolog)、面向对象的编程语言(例如,Java、C++等)或其他合适的编程语言和/或开发工具来实现。计算机代码的其他示例包括但不限于控制信号、加密代码和压缩代码。
术语“指令”和“代码”应广义地解释为包括任何类型的计算机可读语句(一个或多个)。例如,术语“指令”和“代码”可以指一个或多个程序、例程、子例程、功能、过程等。“指令”和“代码”可以包括单个计算机可读语句或许多计算机可读语句。

Claims (21)

1.一种用于实现可快速复制的数据库的装置,包括:
处理器;以及
与所述处理器进行电子通信的存储器,所述存储器存储包括多个记录的数据库表,来自所述多个记录的每个记录具有包括版本标识符的复合键,
所述存储器包括指令,所述指令能够执行以使所述处理器:
生成所述数据库表的第一虚拟克隆和所述数据库表的第二虚拟克隆;
在所述第一虚拟克隆处接收查询,所述查询不包括与所述第一虚拟克隆相关联的版本标识符;
基于在所述第一虚拟克隆处接收到所述查询,通过将与所述第一虚拟克隆相关联的版本标识符添加到所述查询来修改所述查询,从而定义修改后的查询;
使用所述修改后的查询来查询所述数据库表,以基于以下各项生成包括来自所述多个记录的记录集合的响应:(1)来自所述记录集合的每个记录满足所述查询;以及(2)来自所述记录集合的每个记录具有与和所述第一虚拟克隆相关联的所述版本标识符的祖先路径相关联的版本标识符,其中与所述祖先路径相关联的版本标识符包括:与所述第一虚拟克隆相关联的所述版本标识符,或者在版本树的包括所述第一虚拟克隆的分支中位于与所述第一虚拟克隆相关联的版本标识符之前的版本标识符;
发送包括所述记录集合的所述响应作为对所述查询的响应;
来自所述多个记录的每个记录的复合键包括该复合键的所述版本标识符和数据部分,所述多个记录被配置使得在任何给定时间在数据库表中仅存在以下中的一个:(1)包括所述数据部分的值和与所述第一虚拟克隆相关联的所述版本标识符的复合键;或(2)包括所述数据部分的值和与所述第二虚拟克隆相关联的版本标识符的复合键,其中所述第二虚拟克隆包括在所述第一虚拟克隆的祖先路径中。
2.如权利要求1所述的装置,其中所述存储器还包括指令,所述指令能够执行以使所述处理器:
响应于经由所述第一虚拟克隆接收到的插入指令,将记录添加到所述数据库表,所述记录包括具有与所述第一虚拟克隆相关联的版本标识符的复合键和数据,使得:(1)随后在所述第一虚拟克隆处接收到的并引用所述数据的查询返回所述记录;以及(2)随后在第三虚拟克隆处接收到的针对所述数据的查询不返回所述记录。
3.如权利要求1所述的装置,其中,所述指令还能够执行以使所述处理器:
响应于经由第三虚拟克隆接收到的将所述数据库表的第一记录的字段的值从第一值更新为第二值的指令,将第二记录添加到所述数据库表,所述第二记录包括具有与所述第三虚拟克隆相关联的版本标识符的复合键和所述第二值;以及
响应于更新所述第一记录的所述字段的所述值的所述指令,将所述第一记录的复合键修改为不包括与所述第三虚拟克隆相关联的所述版本标识符,使得:
随后在所述第三虚拟克隆处接收到的并引用所述字段的查询返回所述第二记录,以及
在所述第一虚拟克隆处接收到的并引用所述字段的查询返回所述第一记录。
4.如权利要求1所述的装置,其中,所述指令还能够执行以使所述处理器:
响应于经由第三虚拟克隆接收到的用于从所述多个记录中删除记录的指令,将所述记录的所述复合键的所述版本标识符修改为不包括与所述第三虚拟克隆相关联的版本标识符,使得:
随后在所述第三虚拟克隆处接收到的针对所述记录的查询不返回所述记录,以及
随后在所述第一虚拟克隆处接收到的针对所述记录的查询返回所述记录。
5.如权利要求1所述的装置,其中,所述响应是第一响应,并且所述修改后的查询是第一修改后的查询,所述指令还能够执行以使处理器:
如果所述第一响应是空值,则生成包括所述第二虚拟克隆的版本标识符的第二修改后的查询,所述第二虚拟克隆是所述第一虚拟克隆的祖先;
使用所述第二修改后的查询来查询所述数据库表,以基于以下各项生成包括来自所述多个记录的记录集合的第二响应:(1)来自所述第二响应的所述记录集合的每个记录满足所述第二修改后的查询;以及(2)来自所述第二响应的所述记录集合的每个记录具有与所述第二虚拟克隆的所述版本标识符的祖先路径相关联的版本标识符;以及
发送包括所述记录集合的所述第二响应作为对所述查询的响应。
6.如权利要求1所述的装置,其中所述指令还能够执行以使所述处理器:将所述第一虚拟克隆是所述第二虚拟克隆的后代的指示存储在所述存储器中。
7.如权利要求1所述的装置,其中,所述指令还能够执行以使所述处理器:生成所述数据库表的第三虚拟克隆,所述第三虚拟克隆既不是所述第一虚拟克隆的祖先也不是所述第一虚拟克隆的后代,所述多个记录包括具有包括与所述第三虚拟克隆相关联的版本标识符和所述数据部分的值的复合键的记录。
8.一种用于实现可快速复制的数据库的方法,包括:
经由处理器,生成数据库表的第一虚拟克隆以及所述数据库表的第二虚拟克隆,所述数据库表包括多个记录,来自所述多个记录的每个记录具有包括版本标识符的复合键;
经由所述处理器,在所述第一虚拟克隆处接收查询,所述查询不包括与所述第一虚拟克隆相关联的版本标识符;
经由所述处理器,基于在所述第一虚拟克隆处接收到所述查询,通过将与所述第一虚拟克隆相关联的版本标识符添加到所述查询来修改所述查询,从而定义修改后的查询;
经由所述处理器,使用所述修改后的查询来查询所述数据库表,以基于以下各项生成包括来自所述多个记录的记录集合的响应:(1)来自所述记录集合的每个记录满足所述查询;以及(2)来自所述记录集合的每个记录具有与和所述第一虚拟克隆相关联的所述版本标识符的祖先路径相关联的版本标识符,其中与所述祖先路径相关联的版本标识符包括:与所述第一虚拟克隆相关联的所述版本标识符,或者在版本树的包括所述第一虚拟克隆的分支中位于与所述第一虚拟克隆相关联的版本标识符之前的版本标识符;以及
经由所述处理器,发送包括所述记录集合的所述响应作为对所述查询的响应;
来自所述多个记录的每个记录的复合键包括该复合键的所述版本标识符和数据部分,所述多个记录被配置使得在任何给定时间在数据库表中仅存在以下中的一个:(1)包括所述数据部分的值和与所述第一虚拟克隆相关联的所述版本标识符的复合键;或(2)包括所述数据部分的值和与所述第二虚拟克隆相关联的版本标识符的复合键,其中所述第二虚拟克隆包括在所述第一虚拟克隆的祖先路径中。
9.如权利要求8所述的方法,还包括:
响应于经由所述第一虚拟克隆接收到的插入指令,将记录添加到所述数据库表,所述记录包括具有与所述第一虚拟克隆相关联的版本标识符的复合键和数据,使得:(1)随后在所述第一虚拟克隆处接收到的并引用所述数据的查询返回所述记录;以及(2)随后在第三虚拟克隆处接收到的针对所述数据的查询不返回所述记录。
10.如权利要求8所述的方法,还包括:
响应于经由第三虚拟克隆接收到的将所述数据库表的第一记录的字段的值从第一值更新为第二值的指令,将第二记录添加到所述数据库表,所述第二记录包括具有与所述第三虚拟克隆相关联的版本标识符的复合键和所述第二值;以及
响应于更新所述第一记录的所述字段的所述值的所述指令,将所述第一记录的复合键修改为不包括与所述第三虚拟克隆相关联的所述版本标识符,使得:
随后在所述第三虚拟克隆处接收到的并引用所述字段的查询返回所述第二记录,以及
在所述第一虚拟克隆处接收到的并引用所述字段的查询返回所述第一记录。
11.如权利要求8所述的方法,还包括:
响应于经由第三虚拟克隆接收到的用于从所述多个记录中删除记录的指令,将所述记录的所述复合键的所述版本标识符修改为不包括与所述第三虚拟克隆相关联的版本标识符,使得:
随后在所述第三虚拟克隆处接收到的针对所述记录的查询不返回所述记录,以及
随后在所述第一虚拟克隆处接收到的针对所述记录的查询返回所述记录。
12.如权利要求8所述的方法,其中,所述响应是第一响应,并且所述修改后的查询是第一修改后的查询,所述方法还包括:
如果所述第一响应是空值,则生成包括所述第二虚拟克隆的版本标识符的第二修改后的查询,所述第二虚拟克隆是所述第一虚拟克隆的祖先;
使用所述第二修改后的查询来查询所述数据库表,以基于以下各项生成包括来自所述多个记录的记录集合的第二响应:(1)来自所述第二响应的所述记录集合的每个记录满足所述第二修改后的查询;以及(2)来自所述第二响应的所述记录集合的每个记录具有与所述第二虚拟克隆的所述版本标识符的祖先路径相关联的版本标识符;以及
发送包括所述记录集合的所述第二响应作为对所述查询的响应。
13.如权利要求8所述的方法,还包括存储所述第一虚拟克隆是所述第二虚拟克隆的后代的指示。
14.如权利要求8所述的方法,还包括生成所述数据库表的第三虚拟克隆,所述第三虚拟克隆既不是所述第一虚拟克隆的祖先也不是所述第一虚拟克隆的后代,所述多个记录包括具有包括与所述第三虚拟克隆相关联的版本标识符和所述数据部分的值的复合键的记录。
15.一种非暂时性有形的处理器可读的介质,包括用于以下操作的处理器可执行的指令:
经由处理器,生成数据库表的第一虚拟克隆以及所述数据库表的第二虚拟克隆,所述数据库表包括多个记录,来自所述多个记录的每个记录具有包括版本标识符的复合键;
经由所述处理器,在所述第一虚拟克隆处接收查询,所述查询不包括与所述第一虚拟克隆相关联的版本标识符;
经由所述处理器,基于在所述第一虚拟克隆处接收到所述查询,通过将与所述第一虚拟克隆相关联的版本标识符添加到所述查询来修改所述查询,从而定义修改后的查询;
经由所述处理器,使用所述修改后的查询来查询所述数据库表,以基于以下各项生成包括来自所述多个记录的记录集合的响应:(1)来自所述记录集合的每个记录满足所述查询;以及(2)来自所述记录集合的每个记录具有与和所述第一虚拟克隆相关联的所述版本标识符的祖先路径相关联的版本标识符,其中与所述祖先路径相关联的版本标识符包括:与所述第一虚拟克隆相关联的所述版本标识符,或者在版本树的包括所述第一虚拟克隆的分支中位于与所述第一虚拟克隆相关联的版本标识符之前的版本标识符;以及
经由所述处理器,发送包括所述记录集合的所述响应作为对所述查询的响应;
来自所述多个记录的每个记录的复合键包括该复合键的所述版本标识符和数据部分,所述多个记录被配置使得在任何给定时间在数据库表中仅存在以下中的一个:(1)包括所述数据部分的值和与所述第一虚拟克隆相关联的所述版本标识符的复合键;或(2)包括所述数据部分的值和与所述第二虚拟克隆相关联的版本标识符的复合键,其中所述第二虚拟克隆包括在所述第一虚拟克隆的祖先路径中。
16.如权利要求15所述的非暂时性有形的处理器可读的介质,还包括用于以下操作的处理器可执行的指令:
响应于经由所述第一虚拟克隆接收到的插入指令,将记录添加到所述数据库表,所述记录包括具有与所述第一虚拟克隆相关联的版本标识符的复合键和数据,使得:(1)随后在所述第一虚拟克隆处接收到的并引用所述数据的查询返回所述记录;以及(2)随后在第三虚拟克隆处接收到的针对所述数据的查询不返回所述记录。
17.如权利要求15所述的非暂时性有形的处理器可读的介质,还包括用于以下操作的处理器可执行的指令:
响应于经由第三虚拟克隆接收到的将所述数据库表的第一记录的字段的值从第一值更新为第二值的指令,将第二记录添加到所述数据库表,所述第二记录包括具有与所述第三虚拟克隆相关联的版本标识符的复合键和所述第二值;以及
响应于更新所述第一记录的所述字段的所述值的所述指令,将所述第一记录的复合键修改为不包括与所述第三虚拟克隆相关联的所述版本标识符,使得:
随后在所述第三虚拟克隆处接收到的并引用所述字段的查询返回所述第二记录,以及
在所述第一虚拟克隆处接收到的并引用所述字段的查询返回所述第一记录。
18.如权利要求15所述的非暂时性有形的处理器可读的介质,还包括用于以下操作的处理器可执行的指令:
响应于经由第三虚拟克隆接收到的用于从所述多个记录中删除记录的指令,将所述记录的所述复合键的所述版本标识符修改为不包括与所述第三虚拟克隆相关联的版本标识符,使得:
随后在所述第三虚拟克隆处接收到的针对所述记录的查询不返回所述记录,以及
随后在所述第一虚拟克隆处接收到的针对所述记录的查询返回所述记录。
19.如权利要求15所述的非暂时性有形的处理器可读的介质,其中,所述响应是第一响应,并且所述修改后的查询是第一修改后的查询,所述处理器可读的介质还包括用于以下操作的处理器可执行的指令:
如果所述第一响应是空值,则生成包括所述第二虚拟克隆的版本标识符的第二修改后的查询,所述第二虚拟克隆是所述第一虚拟克隆的祖先;
使用所述第二修改后的查询来查询所述数据库表,以基于以下各项生成包括来自所述多个记录的记录集合的第二响应:(1)来自所述第二响应的所述记录集合的每个记录满足所述第二修改后的查询;以及(2)来自所述第二响应的所述记录集合的每个记录具有与所述第二虚拟克隆的所述版本标识符的祖先路径相关联的版本标识符;以及
发送包括所述记录集合的所述第二响应作为对所述查询的响应。
20.如权利要求15所述的非暂时性有形的处理器可读的介质,还包括用于以下操作的处理器可执行的指令:存储所述第一虚拟克隆是所述第二虚拟克隆的后代的指示。
21.如权利要求15所述的非暂时性有形的处理器可读的介质,还包括用于以下操作的处理器可执行的指令:生成所述数据库表的第三虚拟克隆,所述第三虚拟克隆既不是所述第一虚拟克隆的祖先也不是所述第一虚拟克隆的后代,所述多个记录包括具有包括与所述第三虚拟克隆相关联的所述版本标识符和所述数据部分的值的复合键的记录。
CN201880069335.5A 2017-11-01 2018-10-31 用于高效地实现可快速复制的数据库的方法和装置 Active CN111279329B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110658830.3A CN113377836B (zh) 2017-11-01 2018-10-31 用于高效地实现可快速复制的数据库的方法和装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762580056P 2017-11-01 2017-11-01
US62/580,056 2017-11-01
PCT/US2018/058432 WO2019089742A1 (en) 2017-11-01 2018-10-31 Methods and apparatus for efficiently implementing a fast-copyable database

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202110658830.3A Division CN113377836B (zh) 2017-11-01 2018-10-31 用于高效地实现可快速复制的数据库的方法和装置

Publications (2)

Publication Number Publication Date
CN111279329A CN111279329A (zh) 2020-06-12
CN111279329B true CN111279329B (zh) 2021-07-06

Family

ID=66244019

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202110658830.3A Active CN113377836B (zh) 2017-11-01 2018-10-31 用于高效地实现可快速复制的数据库的方法和装置
CN201880069335.5A Active CN111279329B (zh) 2017-11-01 2018-10-31 用于高效地实现可快速复制的数据库的方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202110658830.3A Active CN113377836B (zh) 2017-11-01 2018-10-31 用于高效地实现可快速复制的数据库的方法和装置

Country Status (10)

Country Link
US (2) US10489385B2 (zh)
EP (1) EP3679492A4 (zh)
JP (2) JP6798065B2 (zh)
KR (2) KR102188667B1 (zh)
CN (2) CN113377836B (zh)
AU (2) AU2018359417B2 (zh)
CA (1) CA3076257A1 (zh)
RU (1) RU2740865C1 (zh)
SG (2) SG11202002308RA (zh)
WO (1) WO2019089742A1 (zh)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9529923B1 (en) 2015-08-28 2016-12-27 Swirlds, Inc. Methods and apparatus for a distributed database within a network
JP6966544B2 (ja) 2016-11-10 2021-11-17 スワールズ,インコーポレイテッド 匿名エントリを含む分散型データベースのための方法および装置
CN110140116B (zh) 2016-12-19 2023-08-11 海德拉哈希图有限责任公司 用于启用事件删除的分布式数据库的方法和设备
RU2735730C1 (ru) 2017-07-11 2020-11-06 Свирлдз, Инк. Способы и устройство эффективной реализации распределенной базы данных в сети
WO2019089742A1 (en) 2017-11-01 2019-05-09 Swirlds, Inc. Methods and apparatus for efficiently implementing a fast-copyable database
US11551212B2 (en) * 2018-01-10 2023-01-10 Rajeev Malhotra Methods and systems for management of a blockchain-based computer-enabled networked ecosystem
US11436354B2 (en) 2018-01-30 2022-09-06 EMC IP Holding Company LLC Sparse creation of per-client pseudofs in network filesystem with lookup hinting
US11416629B2 (en) 2018-01-30 2022-08-16 EMC IP Holding Company LLC Method for dynamic pseudofs creation and management in a network filesystem
US10261865B1 (en) * 2018-04-27 2019-04-16 Cohesity, Inc. Fast and optimized restore using delta information
US20220109455A1 (en) * 2018-06-29 2022-04-07 Zenotta Holding Ag Apparatus and method for providing authentication, non-repudiation, governed access and twin resolution for data utilizing a data control signature
US11265175B2 (en) * 2018-06-29 2022-03-01 Zenotta Holding Ag Apparatus and method for providing authentication, non-repudiation, governed access and twin resolution for data utilizing a data control signature
GB2590327B (en) * 2018-07-17 2023-02-08 Jpmorgan Chase Bank Na System and method for distributed ledger-based software supply chain management
US11349639B2 (en) * 2018-12-28 2022-05-31 ePIC Blockchain Technologies Inc. Circuit and method for overcoming memory bottleneck of ASIC-resistant cryptographic algorithms
CN110224833B (zh) * 2019-05-20 2023-03-10 深圳壹账通智能科技有限公司 票据数据处理方法和系统
WO2020237140A1 (en) 2019-05-22 2020-11-26 Swirlds, Inc. Methods and apparatus for implementing state proofs and ledger identifiers in a distributed database
WO2020250206A1 (en) * 2019-06-14 2020-12-17 Ailia Sa Method for the execution of an instance of a smart contract by means of a blockchain
US10990879B2 (en) 2019-09-06 2021-04-27 Digital Asset Capital, Inc. Graph expansion and outcome determination for graph-defined program states
US11132403B2 (en) * 2019-09-06 2021-09-28 Digital Asset Capital, Inc. Graph-manipulation based domain-specific execution environment
US11550775B2 (en) * 2019-09-25 2023-01-10 Red Hat, Inc. Time-to-run column for database management systems
CN112685378A (zh) * 2019-10-17 2021-04-20 伊姆西Ip控股有限责任公司 用于垃圾回收的方法、设备和计算机可读存储介质
SG11202010541UA (en) 2019-12-05 2020-11-27 Alipay Hangzhou Inf Tech Co Ltd Performing map iterations in a blockchain-based system
JP7419853B2 (ja) 2020-02-07 2024-01-23 カシオ計算機株式会社 情報処理装置及びプログラム
CN112000671B (zh) * 2020-08-24 2023-09-19 中国银行股份有限公司 基于区块链的数据库表处理方法、装置及系统
CN112035491B (zh) * 2020-09-30 2021-12-28 中山大学 基于区块链的数据存储方法、电子积分处理方法及系统
US11949788B1 (en) * 2020-11-21 2024-04-02 CodeNotary Inc. System and method to shorten cryptographic proofs
CN112651296A (zh) * 2020-11-23 2021-04-13 安徽继远软件有限公司 一种无先验知识数据质量问题自动探查方法及系统
US11573982B2 (en) * 2020-12-14 2023-02-07 Sap Se Efficient real-time hierarchy using change events
US11714573B1 (en) 2021-03-29 2023-08-01 Amazon Technologies, Inc. Storage optimization in a distributed object store
US11709809B1 (en) 2021-03-29 2023-07-25 Amazon Technologies, Inc. Tree-based approach for transactionally consistent version sets
US11886422B1 (en) 2021-03-29 2024-01-30 Amazon Technologies, Inc. Transactional protocol for snapshot isolation without synchronized clocks
US11599514B1 (en) * 2021-03-29 2023-03-07 Amazon Technologies, Inc. Transactional version sets
US11934362B2 (en) * 2021-07-22 2024-03-19 EMC IP Holding Company LLC Granular data migration
US20230109463A1 (en) * 2021-09-20 2023-04-06 Oracle International Corporation Practical method for fast graph traversal iterators on delta-logged graphs
US11809449B2 (en) 2021-09-20 2023-11-07 EMC IP Holding Company LLC Granular data replication
CN113641685B (zh) * 2021-10-18 2022-04-08 中国民用航空总局第二研究所 一种用于引导航空器的数据处理系统
US11704305B1 (en) * 2022-02-02 2023-07-18 Snowflake Inc. Optimizations for long-lived statements in a database system
CN114710444B (zh) * 2022-03-18 2023-11-07 北京大学 基于塔型摘要和可驱逐流表的数据中心流量统计方法和系统
US11940969B2 (en) * 2022-05-25 2024-03-26 International Business Machines Corporation Managing locations of derived storage objects
CN115277680B (zh) * 2022-07-29 2024-04-19 山石网科通信技术股份有限公司 用于提高同步安全性的文件同步方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567453A (zh) * 2010-10-29 2012-07-11 微软公司 在多版本数据库系统中的万圣夜保护
CN102819585A (zh) * 2012-07-31 2012-12-12 上海方正数字出版技术有限公司 一种xml数据库文档控制方法

Family Cites Families (155)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4309569A (en) 1979-09-05 1982-01-05 The Board Of Trustees Of The Leland Stanford Junior University Method of providing digital signatures
US5701480A (en) 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
JPH0798669A (ja) 1993-08-05 1995-04-11 Hitachi Ltd 分散データベース管理システム
US5495607A (en) 1993-11-15 1996-02-27 Conner Peripherals, Inc. Network management system having virtual catalog overview of files distributively stored across network domain
US6446092B1 (en) 1996-11-01 2002-09-03 Peerdirect Company Independent distributed database system
US5991414A (en) 1997-09-12 1999-11-23 International Business Machines Corporation Method and apparatus for the secure distributed storage and retrieval of information
US6728713B1 (en) 1999-03-30 2004-04-27 Tivo, Inc. Distributed database management system
US6594328B1 (en) 1999-07-28 2003-07-15 Motorola, Inc. Method and apparatus for facilitating an estimation of a carrier frequency error in a receiver of a wireless communication system
AU6620000A (en) 1999-08-06 2001-03-05 Frank W Sudia Blocked tree authorization and status systems
US6694328B1 (en) 2000-01-13 2004-02-17 International Business Machines Corporation Method for creating queries on version objects
US6754845B2 (en) 2000-01-14 2004-06-22 International Business Machines Corporation Method of achieving optimistic multiple processor agreement in potentially asynchronous networks
US6584476B1 (en) 2000-04-22 2003-06-24 Oracle Corp. System and method for enforcing referential constraints between versioned database tables
EP1152330A1 (en) 2000-05-04 2001-11-07 Carels Innovative Software, BVBA/SPRL Process for automatically creating and controlling a set of graphical objects in a client server environment
US6966836B1 (en) 2000-11-16 2005-11-22 Ea.Com, Inc. Positive-return gambling
US6931431B2 (en) 2001-01-13 2005-08-16 International Business Machines Corporation Agreement and atomic broadcast in asynchronous networks
US20020143800A1 (en) * 2001-01-24 2002-10-03 Henrik Lindberg Model view controller
US7711122B2 (en) 2001-03-09 2010-05-04 Arcot Systems, Inc. Method and apparatus for cryptographic key storage wherein key servers are authenticated by possession and secure distribution of stored keys
US7062490B2 (en) 2001-03-26 2006-06-13 Microsoft Corporation Serverless distributed file system
US7088821B2 (en) 2001-05-03 2006-08-08 Cheman Shaik Absolute public key cryptographic system and method surviving private-key compromise with other advantages
US8868467B2 (en) 2002-10-23 2014-10-21 Oleg Serebrennikov Method for performing transactional communication using a universal transaction account identifier assigned to a customer
JP2003202964A (ja) 2002-01-09 2003-07-18 Hitachi Ltd 計算機システムの制御方法、計算機システム、記憶装置の制御方法及び記憶装置
US7146009B2 (en) 2002-02-05 2006-12-05 Surety, Llc Secure electronic messaging system requiring key retrieval for deriving decryption keys
US7558883B1 (en) 2002-06-28 2009-07-07 Microsoft Corporation Fast transaction commit
US7107385B2 (en) * 2002-08-09 2006-09-12 Network Appliance, Inc. Storage virtualization by layering virtual disk objects on a file system
RU2376635C2 (ru) 2002-10-23 2009-12-20 Закрытое акционерное общество "МедиаЛингва" Способ и система проведения транзакций в сети с использованием сетевых идентификаторов
US8311980B2 (en) 2002-12-09 2012-11-13 Hewlett-Packard Development Company, L.P. Namespace consistency for a wide-area file system
FI118619B (fi) 2003-05-16 2008-01-15 Jarmo Talvitie Menetelmä ja järjestelmä tiedon salaamiseksi ja tallentamiseksi
US7873684B2 (en) 2003-08-14 2011-01-18 Oracle International Corporation Automatic and dynamic provisioning of databases
JP4189332B2 (ja) 2004-01-30 2008-12-03 株式会社東芝 データベース管理システム、データベース管理方法、データベース登録要求プログラムおよびデータベース管理プログラム
US20090193260A1 (en) 2004-02-06 2009-07-30 Gentry Craig B Method and apparatus for secure and small credits for verifiable service provider metering
US7409511B2 (en) * 2004-04-30 2008-08-05 Network Appliance, Inc. Cloning technique for efficiently creating a copy of a volume in a storage system
CA2469598A1 (en) * 2004-06-01 2005-12-01 Daniel W. Onischuk Computerized voting system
US7844745B1 (en) 2004-08-19 2010-11-30 Nortel Networks Limited Alternate home subscriber server (HSS) node to receive a request if a first HSS node cannot handle said request
US7389314B2 (en) 2004-08-30 2008-06-17 Corio, Inc. Database backup, refresh and cloning system and method
US7778970B1 (en) 2004-10-12 2010-08-17 Oracle America, Inc. Method and system for managing independent object evolution
US7555516B2 (en) 2004-11-23 2009-06-30 Microsoft Corporation Fast Paxos recovery
US7783664B2 (en) 2004-12-17 2010-08-24 Microsoft Corporation Method and system for protecting the consistency of information in a distributed file system
US9361311B2 (en) 2005-01-12 2016-06-07 Wandisco, Inc. Distributed file system using consensus nodes
US7890508B2 (en) 2005-08-19 2011-02-15 Microsoft Corporation Database fragment cloning and management
US7636704B2 (en) 2005-08-26 2009-12-22 Emc Corporation Methods and apparatus for scheduling an action on a computer
US8533169B1 (en) 2005-09-21 2013-09-10 Infoblox Inc. Transactional replication
US7778972B1 (en) * 2005-12-29 2010-08-17 Amazon Technologies, Inc. Dynamic object replication within a distributed storage system
US7797457B2 (en) 2006-03-10 2010-09-14 Microsoft Corporation Leaderless byzantine consensus
JP5211342B2 (ja) 2007-01-12 2013-06-12 国立大学法人山梨大学 秘匿通信方法
US9104962B2 (en) 2007-03-06 2015-08-11 Trion Worlds, Inc. Distributed network architecture for introducing dynamic content into a synthetic environment
US20080256078A1 (en) 2007-04-10 2008-10-16 Venkat Bhashyam Secure distributed computing engine and database system
US7899188B2 (en) 2007-05-31 2011-03-01 Motorola Mobility, Inc. Method and system to authenticate a peer in a peer-to-peer network
WO2009009754A2 (en) 2007-07-12 2009-01-15 Cornell Research Foundation, Inc. Semantic transactions in online applications
US7877331B2 (en) 2007-09-06 2011-01-25 King Fahd University Of Petroleum & Minerals Token based new digital cash protocols with combined blind digital signature and pseudonym authentication
US7849223B2 (en) 2007-12-07 2010-12-07 Microsoft Corporation Virtually synchronous Paxos
US8176497B2 (en) 2008-01-16 2012-05-08 Dell Products, Lp Method to dynamically provision additional computer resources to handle peak database workloads
US8370391B2 (en) 2008-03-25 2013-02-05 Microsoft Corporation Functional updates for tree processing
US8037279B2 (en) * 2008-06-12 2011-10-11 Oracle America, Inc. Method and system for cross-domain data sharing
JP5407209B2 (ja) 2008-07-28 2014-02-05 富士ゼロックス株式会社 文書管理装置、文書管理プログラム、及び文書管理システム
CN101334797B (zh) 2008-08-04 2010-06-02 中兴通讯股份有限公司 一种分布式文件系统及其数据块一致性管理的方法
US8533582B2 (en) 2009-03-20 2013-09-10 Xerox Corporation Trail-based data content discovery, organization, and processing
US8713038B2 (en) 2009-04-02 2014-04-29 Pivotal Software, Inc. Integrating map-reduce into a distributed relational database
US8571519B2 (en) 2009-05-07 2013-10-29 Nokia Corporation Method and apparatus for using pseudonyms
EP2665002A3 (en) 2009-06-19 2014-04-02 Blekko, Inc. A method of counting unique items in a database system
GB0914815D0 (en) 2009-08-25 2009-09-30 Univ City Improvements relating to database replication protocols
EP2348449A3 (en) 2009-12-18 2013-07-10 CompuGroup Medical AG A computer implemented method for performing cloud computing on data being stored pseudonymously in a database
US8862617B2 (en) 2010-02-09 2014-10-14 Google Inc. System and method for replicating objects in a distributed storage system
US8380659B2 (en) 2010-02-09 2013-02-19 Google Inc. Method and system for efficiently replicating data in non-relational databases
US20130145426A1 (en) 2010-03-12 2013-06-06 Michael Wright Web-Hosted Self-Managed Virtual Systems With Complex Rule-Based Content Access
US20110250974A1 (en) 2010-04-07 2011-10-13 Gary Stephen Shuster Simulated gaming using prior game outcome
US8654650B1 (en) 2010-04-30 2014-02-18 Amazon Technologies, Inc. System and method for determining node staleness in a distributed system
JP5431261B2 (ja) 2010-07-23 2014-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報管理システム、方法及びプログラム
US8880486B2 (en) 2010-07-27 2014-11-04 Sap Ag Distributed database system utilizing an extended two-phase-commit process
US20140310243A1 (en) 2010-08-16 2014-10-16 Mr. Steven James McGee Heart beacon cycle
US8600944B2 (en) 2010-09-24 2013-12-03 Hitachi Data Systems Corporation System and method for managing integrity in a distributed database
DE112011103497T5 (de) 2010-11-22 2013-08-14 International Business Machines Corp. Informationsverarbeitungssystem, Informationsverarbeitungsvorrichtung, Lastausgleichsverfahren, Planungsverfahren für die Datenbankbereitstellung und Programm zum Durchführen der Verbindungsverteilung für den Lastausgleich in einer verteilten Datenbank
WO2012071335A1 (en) 2010-11-22 2012-05-31 Bluearc Uk Limited File cloning and de-cloning in a data storage system
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
EP2663928A4 (en) 2011-01-10 2017-10-25 Storone Ltd. Large scale storage system
CN102142015A (zh) * 2011-01-30 2011-08-03 唐凌遥 家族树的节点处理系统及家族树的节点处理方法
US8612386B2 (en) 2011-02-11 2013-12-17 Alcatel Lucent Method and apparatus for peer-to-peer database synchronization in dynamic networks
US8799247B2 (en) 2011-02-11 2014-08-05 Purdue Research Foundation System and methods for ensuring integrity, authenticity, indemnity, and assured provenance for untrusted, outsourced, or cloud databases
US8712975B2 (en) 2011-03-08 2014-04-29 Rackspace Us, Inc. Modification of an object replica
US8799248B2 (en) 2011-04-26 2014-08-05 Brian J. Bulkowski Real-time transaction scheduling in a distributed database
US8732140B2 (en) 2011-05-24 2014-05-20 Red Lambda, Inc. Methods for storing files in a distributed environment
CN103842995A (zh) 2011-08-01 2014-06-04 标记公司 在分布式数据库中的一般化的协调
US20130110767A1 (en) 2011-10-26 2013-05-02 Nec Laboratories America, Inc. Online Transaction Processing
JP5701398B2 (ja) 2011-11-16 2015-04-15 株式会社日立製作所 計算機システム、データ管理方法及びプログラム
CN102622442A (zh) * 2012-03-12 2012-08-01 福建星网视易信息系统有限公司 基于linux系统的目录和文件显示方法及装置
US9244717B2 (en) 2012-03-29 2016-01-26 Vmware, Inc. Method and system for visualizing linked clone trees
US9710501B2 (en) * 2012-03-30 2017-07-18 Kinaxis Inc. Enhanced performance for large versioned databases
RU2510623C2 (ru) 2012-04-19 2014-04-10 Государственное казенное образовательное учреждение высшего профессионального образования Академия Федеральной службы охраны Российской Федерации (Академия ФСО России) Способ репликации информации в распределенных базах данных с конкурентным распределением потоков
WO2014008495A2 (en) 2012-07-06 2014-01-09 Cornell University Managing dependencies between operations in a distributed system
FR2995437B1 (fr) 2012-09-07 2014-10-10 Commissariat Energie Atomique Dispositif de controle nucleaire pour reacteur refroidi au metal liquide de type rnr.
US8775464B2 (en) 2012-10-17 2014-07-08 Brian J. Bulkowski Method and system of mapreduce implementations on indexed datasets in a distributed database environment
CN102999433B (zh) * 2012-11-21 2015-06-17 北京航空航天大学 一种虚拟磁盘的冗余数据删除方法及系统
US9760596B2 (en) 2013-05-13 2017-09-12 Amazon Technologies, Inc. Transaction ordering
US8886601B1 (en) * 2013-06-20 2014-11-11 Palantir Technologies, Inc. System and method for incrementally replicating investigative analysis data
US10354325B1 (en) 2013-06-28 2019-07-16 Winklevoss Ip, Llc Computer-generated graphical user interface
WO2015008377A1 (ja) 2013-07-19 2015-01-22 富士通株式会社 状態復元プログラム、装置、及び支援方法
US9241044B2 (en) 2013-08-28 2016-01-19 Hola Networks, Ltd. System and method for improving internet communication by using intermediate nodes
US9251235B1 (en) * 2013-09-11 2016-02-02 Amazon Technologies, Inc. Log-based synchronization
US9280591B1 (en) 2013-09-20 2016-03-08 Amazon Technologies, Inc. Efficient replication of system transactions for read-only nodes of a distributed database
RU2560810C2 (ru) 2013-11-01 2015-08-20 Илья Самуилович Рабинович Способ и система защиты информации от несанкционированного использования (ее варианты)
CN103605810B (zh) * 2013-12-10 2017-02-01 中国海洋石油总公司 数据仓库的数据处理基础架构
WO2015094329A1 (en) 2013-12-20 2015-06-25 Hitachi Data Systems Engineering UK Limited System for queue based object cloning
US9647832B2 (en) 2014-01-13 2017-05-09 Visa International Service Association Efficient methods for protecting identity in authenticated transmissions
US10212226B2 (en) 2014-01-16 2019-02-19 Hewlett Packard Enterprise Development Lp Node cluster synchronization
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US9519510B2 (en) 2014-03-31 2016-12-13 Amazon Technologies, Inc. Atomic writes for multiple-extent operations
US10334037B2 (en) 2014-03-31 2019-06-25 Yaana Technologies, Inc. Peer-to-peer rendezvous system for minimizing third party visibility and method thereof
US11270298B2 (en) 2014-04-14 2022-03-08 21, Inc. Digital currency mining circuitry
WO2015167496A1 (en) 2014-04-30 2015-11-05 Hewlett-Packard Development Company, L.P. Selecting from computing nodes for correlating events
US9189342B1 (en) 2014-05-29 2015-11-17 Emc Corporation Generic process for determining child to parent inheritance for fast provisioned or linked clone virtual machines
US10111071B2 (en) 2014-09-19 2018-10-23 Avago Technologies General Ip (Singapore) Pte. Ltd. Bluetooth low energy automation mesh network
US10025802B2 (en) 2014-09-19 2018-07-17 Amazon Technologies, Inc. Automated configuration of log-coordinated storage groups
EP3002661A1 (en) 2014-09-30 2016-04-06 Advanced Digital Broadcast S.A. System and method for controlling a virtual input interface
KR101544722B1 (ko) 2014-11-13 2015-08-18 주식회사 엘지씨엔에스 부인 방지 방법, 이를 위한 결제 관리 서버 및 사용자 단말기
US9842031B1 (en) 2014-12-08 2017-12-12 Amazon Technologies, Inc. Incremental updates to user transaction state at read-only nodes of a distributed database
US11012806B2 (en) 2015-01-09 2021-05-18 Ariba, Inc. Multi-adapter support in the cloud
US10461933B2 (en) 2015-01-27 2019-10-29 Visa International Service Association Methods for secure credential provisioning
US9967091B2 (en) 2015-02-12 2018-05-08 Xerox Corporation Method for enhancing security in distributed systems
US20160283920A1 (en) 2015-03-28 2016-09-29 Justin Fisher Authentication and verification of digital data utilizing blockchain technology
US10049121B2 (en) * 2015-03-30 2018-08-14 International Business Machines Corporation Clone file backup and restore
US10140329B2 (en) 2015-04-01 2018-11-27 Ab Initio Technology Llc Processing transactions in a distributed computing system
US9568943B1 (en) 2015-04-27 2017-02-14 Amazon Technologies, Inc. Clock-based distributed data resolution
US10026082B2 (en) 2015-05-21 2018-07-17 Mastercard International Incorporated Method and system for linkage of blockchain-based assets to fiat currency accounts
EP3317775B1 (en) 2015-07-02 2022-02-16 Nasdaq, Inc. Systems and methods of secure provenance for distributed transaction databases
US10033702B2 (en) * 2015-08-05 2018-07-24 Intralinks, Inc. Systems and methods of secure data exchange
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
WO2017040313A1 (en) 2015-08-28 2017-03-09 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9529923B1 (en) 2015-08-28 2016-12-27 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10303887B2 (en) 2015-09-14 2019-05-28 T0.Com, Inc. Data verification methods and systems using a hash tree, such as a time-centric merkle hash tree
US9836366B2 (en) 2015-10-27 2017-12-05 Netapp, Inc. Third vote consensus in a cluster using shared storage devices
US20170300550A1 (en) 2015-11-02 2017-10-19 StoreReduce Data Cloning System and Process
US20170180367A1 (en) 2015-12-16 2017-06-22 ClearChat, Inc. System And Method For Encrypted And Authenticated Electronic Messaging Using A Central Address Book
US11423053B2 (en) 2016-01-30 2022-08-23 Micro Focus Llc Log event cluster analytics management
CN107003893B (zh) * 2016-02-03 2019-11-12 华为技术有限公司 虚拟机备份方法、备份装置及宿主机
JP2019514146A (ja) 2016-04-04 2019-05-30 フォーミュルス ブラック コーポレーション 高速システム状態クローニング
TW201810989A (zh) 2016-05-18 2018-03-16 納格維遜股份有限公司 用以保護密碼指數的方法及系統
US9646029B1 (en) 2016-06-02 2017-05-09 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10445698B2 (en) 2016-06-30 2019-10-15 Clause, Inc. System and method for forming, storing, managing, and executing contracts
US10396991B2 (en) 2016-06-30 2019-08-27 Microsoft Technology Licensing, Llc Controlling verification of key-value stores
US10956400B2 (en) * 2016-07-15 2021-03-23 Sap Se Query processing using primary data versioning and secondary data
US10367637B2 (en) 2016-07-22 2019-07-30 Qualcomm Incorporated Modular exponentiation with transparent side channel attack countermeasures
US20180101777A1 (en) * 2016-10-12 2018-04-12 Anuthep Benja-Athon EM Oracle
JP6966544B2 (ja) 2016-11-10 2021-11-17 スワールズ,インコーポレイテッド 匿名エントリを含む分散型データベースのための方法および装置
CN110140116B (zh) 2016-12-19 2023-08-11 海德拉哈希图有限责任公司 用于启用事件删除的分布式数据库的方法和设备
EP3340084A1 (en) 2016-12-22 2018-06-27 Dassault Systèmes Replica selection
CN106897119B (zh) * 2017-02-28 2021-04-23 郑州云海信息技术有限公司 一种虚拟化平台中磁盘树优化方法及系统
CN106789095B (zh) 2017-03-30 2020-12-08 腾讯科技(深圳)有限公司 分布式系统及消息处理方法
RU2735730C1 (ru) 2017-07-11 2020-11-06 Свирлдз, Инк. Способы и устройство эффективной реализации распределенной базы данных в сети
WO2019089742A1 (en) 2017-11-01 2019-05-09 Swirlds, Inc. Methods and apparatus for efficiently implementing a fast-copyable database
US20210209885A1 (en) 2018-05-23 2021-07-08 Centiglobe Ab A system and a method for achieving consensus between multiple parties on an event
CA3104911A1 (en) 2018-07-09 2020-01-16 Prescient Innovations Inc. Media attribution systems and methods
US11163723B2 (en) 2018-07-19 2021-11-02 Weka.IO Ltd. Pushing a point in time to a backend object storage for a distributed storage system
US11334439B2 (en) 2018-08-29 2022-05-17 International Business Machines Corporation Checkpointing for increasing efficiency of a blockchain
WO2020237140A1 (en) 2019-05-22 2020-11-26 Swirlds, Inc. Methods and apparatus for implementing state proofs and ledger identifiers in a distributed database
KR20230107561A (ko) 2020-10-06 2023-07-17 헤데라 하쉬그라프, 엘엘씨 네트워크 내의 분산 데이터베이스를 위한 방법들 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567453A (zh) * 2010-10-29 2012-07-11 微软公司 在多版本数据库系统中的万圣夜保护
CN102819585A (zh) * 2012-07-31 2012-12-12 上海方正数字出版技术有限公司 一种xml数据库文档控制方法

Also Published As

Publication number Publication date
AU2020204053B2 (en) 2022-04-21
KR20200138450A (ko) 2020-12-09
CN113377836B (zh) 2024-04-30
EP3679492A4 (en) 2021-01-20
CN111279329A (zh) 2020-06-12
US10489385B2 (en) 2019-11-26
KR102452425B1 (ko) 2022-10-06
AU2020204053A1 (en) 2020-07-09
EP3679492A1 (en) 2020-07-15
JP7170701B2 (ja) 2022-11-14
US20200097459A1 (en) 2020-03-26
JP2021501931A (ja) 2021-01-21
SG10202107812YA (en) 2021-09-29
SG11202002308RA (en) 2020-04-29
RU2020134660A3 (zh) 2022-03-22
CN113377836A (zh) 2021-09-10
US20190129893A1 (en) 2019-05-02
CA3076257A1 (en) 2019-05-09
RU2020134660A (ru) 2020-11-06
AU2018359417A1 (en) 2020-04-02
KR102188667B1 (ko) 2020-12-08
RU2740865C1 (ru) 2021-01-21
KR20200062348A (ko) 2020-06-03
JP2021036464A (ja) 2021-03-04
AU2018359417B2 (en) 2020-04-16
JP6798065B2 (ja) 2021-02-03
US11537593B2 (en) 2022-12-27
WO2019089742A1 (en) 2019-05-09

Similar Documents

Publication Publication Date Title
CN111279329B (zh) 用于高效地实现可快速复制的数据库的方法和装置
US11520780B2 (en) Distributed database systems and structures
EP2646923B1 (en) File system backup using change journal
US8200706B1 (en) Method of creating hierarchical indices for a distributed object system
KR20070121664A (ko) 데이터 저장 시스템에서 데이터를 조작하는 시스템 및 방법
JP2007521532A (ja) アイテムベースのストレージプラットフォームにおけるデータモデリングのためのシステムおよび方法
JP2007503050A (ja) ハードウェア/ソフトウェアインタフェースシステムにより管理可能な情報のユニットに対する同期処理サービスを実現するシステムおよび方法
JP4580390B2 (ja) ハードウェア/ソフトウェアインターフェイスシステムによって管理可能な情報単位の拡張および継承のためのシステムおよび方法
Schule et al. Versioning in main-memory database systems: From musaeusdb to tardisdb
Kim Transactional and spatial query processing in the big data era
Schönig Mastering PostgreSQL 12: Advanced techniques to build and administer scalable and reliable PostgreSQL database applications
RU2785613C2 (ru) Способы и устройство для эффективной реализации базы данных, поддерживающей быстрое копирование
Tao Thanh Ensuring availability and managing consistency in geo-replicated file systems
Fynn et al. Robust and fast blockchain state synchronization
Brocco The Document Chain
JP2005032271A (ja) オブジェクト指向データベース管理システム及び方法
Pereira et al. Endowing NoSQL DBMS with SQL Features Through Standard Call Level Interfaces.
Krogh et al. Developing Applications Using SQL with MySQL NDB Cluster
Wang Design and Implementation of a Distributed Snapshot File System.
Song Long-term information preservation and access
CN117425886A (zh) 具有仅添加数据结构的基于列表的数据搜索
Mancas et al. Architecture, Design, Development, and Usage of ODBDetective 1.0
Hupel Development of an associative file system
Brad Data De-Duplication in NoSQL Databases

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40022784

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20230417

Address after: Texas, USA

Patentee after: Hydra Hashitou Co.,Ltd.

Address before: Texas, USA

Patentee before: Swirlds, Inc.

TR01 Transfer of patent right