CN109791538B - 数据存储系统及其执行方法 - Google Patents

数据存储系统及其执行方法 Download PDF

Info

Publication number
CN109791538B
CN109791538B CN201780048968.3A CN201780048968A CN109791538B CN 109791538 B CN109791538 B CN 109791538B CN 201780048968 A CN201780048968 A CN 201780048968A CN 109791538 B CN109791538 B CN 109791538B
Authority
CN
China
Prior art keywords
blob
core
objects
data
collection
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
CN201780048968.3A
Other languages
English (en)
Other versions
CN109791538A (zh
Inventor
盖伊·萨布林
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.)
Hollister Information
Original Assignee
Hollister Information
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 Hollister Information filed Critical Hollister Information
Publication of CN109791538A publication Critical patent/CN109791538A/zh
Application granted granted Critical
Publication of CN109791538B publication Critical patent/CN109791538B/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/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • 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/21Design, administration or maintenance of databases
    • G06F16/214Database migration support
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2219Large Object storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2107File encryption

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)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)
  • Storage Device Security (AREA)

Abstract

一种用于执行数据存储的计算机实现方法。该方法包括以下步骤:从数据源接收要被存储的数据;将数据分段为不可改变的核心对象,每个核心对象被写入集合并被分派唯一的对象ID;将不可改变的对象分组为团块,每个团块包括对象中的至少一个,并且被分派唯一的团块ID,其从包括在其中的对象的至少一个的对象ID导出,其中该集合的最后团块照此是可识别的;限定该集合的状态,通过将集合的核心对象的至少一个子集彼此链接,其中每个子集中的最后对象是对应子集的对象头并且存储头对象的识别信息;并将团块中的每一个存储到至少一个后端上。

Description

数据存储系统及其执行方法
相关申请的交叉引用
本申请要求2016年6月9日提交的第62/347,883号美国临时专利申请在35“美国法典”第119(e)节下的权益。将上述申请整体作为参考并入本文。
发明领域
本发明涉及数据存储领域。更具体地,其涉及用于执行数据存储的系统和涉及用于执行该系统的方法。
背景
已知在本领域中使用云数据存储技术,以便将数据存储在远程的、抽象的位置上,并且随后地检索数据,使用连接到网络的通信设备。为了进行数据存储,客户端(客户)通常通过应用、插件、API、Web浏览器等连接到具有通信设备的云存储提供商,该云存储提供商存储数据(诸如常规文件系统文件(例如NTFS、EXT3/4等)、数据库记录、对象等)在其自身的服务器或数据中心,使用已知的存储技术(诸如镜像、SAN、RAID等)来提供跳回。当使用云数据存储技术时,由云存储提供商完全处理数据的存储和检索,使得用户不用顾虑数据存储的材料和安全方面,诸如,例如但不限于,硬件装备、物理位置、精确的安全措施或其他物理地存储数据的服务器或数据中心的需求。
然而,已知的云数据存储技术趋向于患有若干缺陷。例如,假定客户端数据直接地存储在云存储提供商的基础结构上,则云存储提供商普遍地可以访问数据。因此,客户端必须信任云服务提供商的关于存储数据的机密性的安全实践、技术和人员。在某些情况下,可以使用加密来提高安全,但即使这样,云存储提供商通常需要访问至少一些信息。例如,在某些情况下,云存储提供商需要访问加密密钥以加密和解密数据。即使在提供商理论上从未访问过保护客户端数据的加密/解密密钥的情况下,仍然需要访问一些未加密的元数据(例如文件名、目录结构、修改日期等),其可能包括重要的特权信息(例如客户端列表、合同的性质、正在处理的项目等),以在请求时定位和访问数据。因此,即使当使用加密时,客户端必须对云存储提供商的安全实践具有一定水平的信任。
此外,考虑到每个云数据存储提供商的特殊性,对于客户端从一个云数据存储提供商转换到另一云数据存储提供商或者通过多个云存储数据提供商分发他们的数据是不方便的。例如,为了在多个云数据存储提供商上分发数据,对于客户端通常需要沿着一些已知边界(例如子目录、数据库密钥范围等)手动区分数据,并将特定部分分派到各个提供商。此外,如果客户端随后想要在云数据存储提供商之间转换(对于整体或部分的数据),则通常需要客户端将对应数据从一个提供商手动地复制到其他提供商并确保所有用户访问现在使用新的提供商的数据。在此类数据的复制期间,必须暂停更新或仅定向到两个提供商中的一个以确保完整性。将数据从一个提供商移动到另一提供商还可能由于改变特定的云数据存储提供商的服务和约束而致使元数据的失败和丢失。
本领域技术人员将理解,可以使用聚合器(即,在客户端和云数据存储提供商之间操作的代理)来减轻一些上述短处。然而,聚合器的使用再次引发机密性问题,考虑到聚合器通常需要访问数据,以及因此将需要在与云存储提供商相同的水平上被信任。此外,在这种情况下,云基存储服务的性能取决于聚合器的服务,并且聚合器的任何服务失败或性能问题将导致针对所有的云基存储服务的问题。
将了解到,许多上述问题也适用于本地数据存储或网络数据存储。例如,当用户希望从个人硬盘转换到另一硬盘时,需要用户将所有数据从一个磁盘复制到其他磁盘,而不执行更新。如果使用多个磁盘,则需要用户手动决定应将哪些文件或目录存储在哪个磁盘上。此外,当从不同文件系统移动/复制数据时平台之间变化的文件系统支持常常会致使失败或导致丢失元数据。
鉴于以上,需要一种用于在分布式环境中结构化和存储数据的改进的系统和方法,其将能够克服或至少最小化上述现有技术所顾虑的一些(问题)。
发明内容
根据第一总的方面,提供了一种用于执行数据存储的计算机实现方法。该方法包括以下步骤:从数据源接收要被存储的数据;将数据分段(分割)为不可改变的多个核心对象,核心对象中的每一个被写入集合并被分派唯一的对象ID;将不可改变的对象分组为多个团块(blob),每个包括对象中的至少一个,团块中的每一个被分派唯一的团块ID,从包括在其中的对象中的至少一个的对象ID导出,其中该集合的最后团块照此是可识别的;定义集合的状态,通过将集合的核心对象的至少一个子集彼此链接,其中至少一个子集中的每一个的最后对象是对应子集的对象头,并且存储头对象的识别信息;以及将团块中的每一个存储到至少一个后端上。
在实施方式中,存储头对象的识别信息的步骤包括将头对象的识别信息存储在该集合的最后团块中。
在实施方式中,该方法还包括在请求存储的数据时从至少一个后端中的一个选择性地检索对应的团块的步骤。
在实施方式中,核心对象中的每一个具有对象类型和通过将集合的核心对象的至少一个子集彼此链接,其中至少一个子集中的每一个的最后对象是对象头来维持该集合状态的步骤包括链接每个对象类型的活跃对象,其中每个对象类型的最后对象是用于对应对象类型的头对象。
在实施方式中,将团块中的每一个存储到至少一个后端上的步骤包括将团块存储到分布式后端上。
在实施方式中,该方法还包括在将团块存储到至少一个后端上的步骤之前加密团块的步骤。
在实施方式中,该方法还包括在将团块存储到至少一个后端上的步骤之前加密团块的步骤,以及在从至少一个后端中的一个检索对应团块的步骤之后解密团块的步骤。
在实施方式中,该方法还包括在加密团块的步骤之前压缩团块的步骤。
在实施方式中,该方法还包括在解密团块的步骤之后解压缩团块的步骤。
在实施方式中,该方法还包括通过引入可识别为每个分叉(fork)集合的最后团块的多个最后团块来分叉集合的步骤。
在实施方式中,该方法还包括将分叉的集合合并到集合的另一分叉和集合中的一个的步骤。
根据另一总的方面,还提供了一种计算机可读存储器,其上记录有用于由计算机实行以实施上述方法的表述(语句)和指令。
根据另一总的方面,还提供了一种数据存储系统,该数据存储系统包括:核心引擎模块,被配置为接收要存储的数据,将数据存储到至少一个后端上以及从至少一个后端检索数据。核心引擎模块生成并管理至少一个集合,该集合包括:核心对象,每个包括要存储的数据;团块,每个包括对象中的至少一个和至少一个后端。核心对象中的每一个都是不可改变的,并被分派唯一的对象ID。核心对象中的至少一个子集彼此链接,其中至少一个子集中的每一个的最后对象是对应子集的对象头。团块中的每一个被分派唯一的团块ID,其是从包括的对象中的至少一个的对象ID导出的。该集合的最后团块照此可识别,并且包括至少一个子集中的每一个的头对象的识别信息。至少一个后端在其上存储团块并允许使用对应的团块ID来检索团块。
在实施方式中,核心引擎模块包括:核心API模块,被配置为打开集合并读取、写入和删除核心对象;集合管理器模块,被配置为生成和管理核心对象;以及团块管理器模块,被配置为生成和管理团块。
在实施方式中,核心引擎模块还包括加密器模块,其在存储到至少一个后端上之前加密团块,并且在从至少一个后端检索之后解密团块。
在实施方式中,核心引擎模块还包括压缩器模块,其在由加密器模块加密之前压缩团块,并且在由加密器模块解密之后解压缩团块。
在实施方式中,表示核心对象的至少一个子集中的每一个的核心对象之间的链接的链接数据存储在核心对象的至少一部分中。
在实施方式中,顺序地分派核心对象中的每一个的唯一对象ID。
在实施方式中,团块中每一个的唯一团块ID对应于团块的第一核心对象的对象ID。
在实施方式中,核心对象中的每一个还包括对象别名和虚拟对象ID中的一个。
在实施方式中,数据存储系统还包括索引引擎,其执行索引服务以促进存储在集合中的数据的组织和定位。
在实施方式中,每个集合的至少一个后端包括多个分布式后端,以提供团块的分布式存储。
附图说明
在阅读以下实施方式的非限制性描述时,其他目的、优势和特征将变得更加明显,仅出于举例说明的目的,参考随附附图,在附图中:
图1、图1a和图1b是根据实施方式的用于执行数据存储的计算机实现方法的步骤的流程图表示。
图2是根据图1的方法用于数据存储的对象的实施方式的示意性表示。
图3是根据图1的方法用于数据存储的团块的实施方式的示意性表示。
图4是集合的示例性实施方式的示意性表示,该集合包括多个团块,每个具有对应于团块的第一对象的对象ID的团块ID,其中对象被顺序地编号。
图5是使用图1的方法存储文件的示例性实施方式的示意性表示。
图6是使用最后对象类型和对象链接以及对垃圾集合的影响的集合管理的示例性实施方式的示意性表示。
图7a、图7b、图7c和图7d是集合的分叉的示例性实施方式的示意性表示。
图8是根据实施方式的用于执行数据存储的系统的示意性表示。
图9是根据实施方式的用于执行图8的数据存储的系统的示意性表示,其中应用使用文件系统引擎模块和/或数据库引擎模块来与核心引擎模块通信。
具体实施方式
在以下描述中,相同的附图标记指代相似的元素。此外,尽管用于数据的分布式存储的系统和方法的实施方式由如本文所解释和说明的某些部件组成,但并非所有这些部件都是必要的,并且因此不应采用其限制性意义。应当理解,对于本领域技术人员来说还显而易见的是,可以使用其他合适的部件和它们之间的协作用于数据的分布式存储的系统和方法,如将在本文中简要说明,并且如可以从这里由本领域技术人员容易地推断。
一般而言,用于存储数据的本系统和方法依赖于在本文称为“核心对象”的小的、离散的、独立的存储单元,其被聚集成在本文称为“团块”的较大实体,其中团块被存储在开放式、类似日志的存储结构中,在该存储结构下,不同的文件系统、数据库或其他类型的数据可以被存储和分布在多个、完全不同的和/或另外可能不兼容的存储介质上。在实施方式中,为了增加安全性,团块在被存储之前被压缩和加密,并且在被检索时被解密和解压缩。在可替代的实施方式中,除了团块本身被压缩/解压缩和加密/解密之外,核心对象还可以在对应的团块内单独地被压缩和加密(并且随后被解密和解压缩)。本领域技术人员将理解,诸如“pods”(普通旧数据结构)之类的其他术语可能已经用于指代本文中称为团块的存储单元。
鉴于以下描述将变得显而易见,用于存储数据的系统和方法允许团块在各种和另外可能不兼容的存储提供商和/或设备之间自由移动、复制和共享,而不需要中央协调、跟踪或同步以及甚至当并发更新正在进行时。
在本文献的过程中,术语“核心对象”用于指代可以包括任何任意逻辑数据的基本存储单元,诸如,例如但不限于数据库记录、文件片段、元数据、目录索引等等。术语“团块”用于指代包括多个核心对象的容器,并且其被存储在公认为“后端”(或“存储节点”)的存储器皿上。术语“后端”用于指代自主存储器皿,并且包括例如但不限于,能够存储数据的本地硬盘、闪存、云存储提供商以及区域、桶或其其他隔离单元、网络附接驱动、或任何存储媒介(或其分区)或服务。术语“集合”用于指代一组核心对象、团块和后端,形成可以作为整体进行管理的连贯单元。集合可以表示一个或多个用户可见的文件系统、数据库、对象存储或将相关数据保持在一起所需的任何其他形式的分组。诸如“cosmos”(有限元分析软件)之类的其他指定术语可能已经用于指代形成连贯单元的一组核心对象、团块和后端。
一般地参考图1,提供了用于执行数据存储的方法10的实施方式,其允许数据以高灵活性和安全性自由地分布和托管在各种设备和服务上。在所示的实施方式中,用于执行数据存储的方法10包括以下步骤:从数据源接收要存储的数据(步骤11);将数据分段为核心对象(步骤12);将核心对象分组为团块或二进制大对象(步骤14);压缩团块(步骤16);加密团块(步骤18);将团块存储在至少一个后端(步骤20)以及当请求存储的数据时选择性地从至少一个后端中的一个检索对应的团块(步骤26)。
参考图1和图2,如上所述,保存在步骤12中生成的核心对象50中的数据可以是任何形式的任意二进制数据。在实施方式中,每个核心对象50包括描述核心对象50的内容的头部52和包含用于核心对象的实际数据的净负荷54。例如但不限于,头部52可以包括信息诸如对象ID(OID)52a、对象类型(OType)52b、虚拟ID(VID)52c、名称(或别名)52d、通用唯一ID(UUID)52e、指示对象是否被跟踪为其类型的最后对象的标志(IsLastTracked)52f、到相关对象的链接(链接)52g、被当前对象替换的对象的ID(替换)52h和/或被当前对象删除的其他对象的ID(删除)52i。如下面将更详细描述的,OID 52a是对象的识别符,并且OType识别核心对象50的内容的目的和格式,这有助于解码净负荷。虚拟ID(VID)52c,名称52d,通用唯一ID(UUID)52e或其他类型的识别符可以被称为对象识别信息,其允许使用除官方OID52a之外的可替代的识别符来定位对象50。指示对象是否被跟踪为其类型的最后对象的标志(IsLastTracked)52f、到相关对象的链接(链接)52g、被当前对象替换的对象的ID(替换)52h和/或被当前对象删除的其他对象的ID(删除)52i是可以用于集合管理的集合管理信息,如下面将更详细描述的。然而,本领域技术人员将理解,在可替代的实施方式中,核心对象50可以被不同地结构化和/或包含与所示实施方式中不同的信息。
生成的每个核心对象50是不可改变的,即核心对象的内容是永久性的,并且一旦对象已经被创建、提交并写到集合就不能被更改。鉴于以上,不能更新对象的内容。因此,在需要更新对象的内容的情况下,必须创建新的核心对象50。在实施方式中,旧对象可以被标志为“被替换”,因此可以随后将其从集合中移除,如下面将关于垃圾集合的更详细描述。本领域技术人员还将理解,在实施方式中,代替替换整体对象,还可以通过创建仅包含关于最初核心对象的差异信息的第二核心对象来反映更新的核心对象的内容。
此外,核心对象50中的每一个都由指代为对象ID(OID)52a的主要识别符可识别。OID 52a是在创建核心对象50时分派给它的集合唯一的、不可改变的、任意长度的识别符。OID 52a的集合唯一特性意味着每个OID 52a仅被分派至给定核心对象50一次,并且即使在删除核心对象50之后也不会在集合的生命周期中重复使用。当与不可变性相结合时,集合唯一OID 52a成为给定不可改变核心对象50的事实上的签名。换句话说,OID 52a的集合唯一特性在核心对象50的精确、不变的内容与给定的OID 52a之间创建永久且不可分离的关系。假定核心对象50是不可改变的并且OID 52a是集合唯一的,则当更新与特定核心对象50相关联的数据时,不能更新对象,创建与更新的数据相关联的至少一个新的核心对象50并分派其自己的新的唯一OID 52a。用于管理数据更新的集合管理将在下面更详细地被描述。
在实施方式中,为生成的核心对象50分派集合唯一OID 52a,使用不断增加的任意长度的顺序整数作为OID 52a,即为每个新创建的核心对象50分派具有对应于最后属性化的OID+1的整数值的OID 52a。然而,本领域技术人员将理解,在可替代的实施方式中,可以使用其他OID分派实践来为每个新生成的OID分派集合唯一OID。
参考图1、图3和图4,在实施方式中,在应用压缩和加密之前,核心对象50在步骤14中被组装成原始团块60a,其对应于图3的团块的原始内容。如上所述,在实施方式(未示出)中,核心对象50可以被单独压缩和加密。在所示的实施方式中,原始团块60a包括包含在团块60中的所有核心对象50的流(串流)。在实施方式中,原始团块60a还包括关于当写团块60时的集合的最后核心对象50(或最新核心对象)的信息(最后对象状态)。例如但不受限制的,这样的信息可以包括用于对象的核心对象类型(Otypes)52b和OID 52a的列表,该对象在写团块60时被标记为其类型的最后核心对象50(最后对象类型)。再次,当写团块60时,关于集合的最后对象50的信息(最后对象状态)是用于集合管理的集合管理信息,并且将在下面再次更详细地描述。
在实施方式中,原始团块60a被压缩成压缩的团块60b(步骤16),并且压缩的团块60b被加密(步骤18),从而得到加密的团块60c。本领域技术人员将理解,在实施方式中,原始团块60a或压缩团块60b可以直接用作团块60,而不进行压缩/加密,在存储期间使用压缩/加密来减小团块的大小并增加其安全性。
鉴于以上,在原始团块60a被加密的实施方式中,团块60包含数据和元数据信息两者,并且仅仅由它们的BID识别。因此,数据和元数据在其存储在后端(本地媒介、云存储提供商等)上之前是完全加密的。在实施方式中,每个团块60根据所使用的加密算法被单独标记,这允许使用各种加密算法和密钥对团块60进行单独和自主加密。这种单独的加密增加了使用用于执行数据存储的本方法存储的数据的机密性。
本领域技术人员将理解,在使用本方法存储之前,要存储在核心对象50中的目录、文件或其他数据本身可以用私有加密密钥单独加密,使得可以安全地与其他用户共享数据。换句话说,即使用户已经访问团块解密密钥来读取集合,也可以防止读取数据本身,除非用户具有适当的数据解密密钥。这有效地允许集合与多个用户共享,具有完全的安全性,而不依赖于中央服务器或基于软件的保护。
在实施方式中,所有团块60包括初始链校验和(链校验和)61c,其是在团块60被创建时从其加上先前的团块60的链校验和计算的校验和值。该链校验和61c创建了在集合中曾经创建的所有团块的唯一链值。例如但不限于,在操作中,所有后端的最后团块具有匹配的链校验和61c的证明可以确保所有团块60属于同一集合。所有团块60还可以包括密钥散列消息认证码(HMAC)(认证摘要)61e,其被设计为密码地确认团块60是由授权用户产生并且还没有被伪造,以及完整性校验和值(校验和)61b,其有助于快速检测在团块60的发送或存储期间可能已经引入的错误。
在实施方式中,团块60还可以包括块链确认散列结构(块链确认)61d,其可以用于根据已知的块链确认原理、方法和过程确认(通过对等网络)集合的团块链。例如,在实施方式中,通过使网络确认团块的认证摘要而不是团块本身,可以在不发送或公开团块的内容的情况下执行块链确认。将了解到,如果如上所述认证摘要用于块链确认,则由认证摘要散列的净负荷还应该包括先前的团块的摘要。
团块60中的每一个由集合唯一团块ID(BID)61a识别。为了允许直接从所寻找的核心对象50的OID 52a识别包含给定对象50的团块60,而不使用索引或映射,集合唯一BID61a是包含在特定团块60中的对象50的OID 52a的导数。例如但不限于,在实施方式中,属于团块60中的第一对象50的OID 52a的不断增加的任意长度顺序整数用作用于团块60的BID61a。使用该实现方式,包含特定对象50的团块60可以容易地被识别为具有低于或等于所寻找的OID的最高BID 61a的团块60。本领域技术人员将理解,在可替代的实施方式中,也可以使用其中集合唯一BID 61a是包含在团块60中的对象50的OID 52a的导数的其他实现方式。类似于OID 52a,BID 61a通常也仅被分派给给定的团块60一次,并且在集合的生命周期中保持唯一。在实施方式中,BID 61a可以被加密,以避免公开实际的团块的序列。
在实施方式中,BID 61a也是可预测的,使得可以预测将被写入集合中的下一个BID 61a并识别集合的最后团块。在实施方式中,属于团块60中的第一对象50的OID 52a的不断增加的任意长度的顺序整数用作用于团块60的BID 61a(参见图4),BID 61a是隐式可预测的。在图4中,为四个团块60提供具有BID#1的团块,其包括具有OID#1至#13的对象,具有BID#14的团块,其包括具有OID#14至#44的对象,具有BID#45的团块,其包括具有OID#45至#46的对象和具有BID#47的团块,其包括具有OID#47至#63的对象。在这样的实施方式中,下一个BID对应于最后团块60的最后对象50的OID加1,并且集合的最后团块简单地是具有最高BID的团块60。再次,本领域技术人员将理解,在可替代的实施方式中,还可以使用用于产生集合的可识别的最后团块和可预测的BID的可替代的实现方式。
在实施方式中,随后可以分割生成的团块60,其中分割的团块被分派新的集合唯一BID 61a,其每个是现在被特定的团块60包含的核心对象50的OID 52a的导数。将了解到,当分割团块时,所分派的BID 61a仍然必须允许直接从所寻找的核心对象50的OID 52a识别包含给定对象50的团块60。例如,在实施方式中,属于团块60中的第一对象50的OID的不断增加的任意长度顺序整数被用作用于团块60的BID 61a,分割应总是导致具有相邻的OID的核心对象50被分组在对应的团块60中,其中具有最低OID 52a的核心对象50的OID 52a被用作用于每个新的团块60的BID 61a。
此外,在实施方式中,相邻的团块60(即在集合80中具有相邻的BID 61a的团块60)也可以融合在一起,其中融合的团块被分派新的集合唯一BID 61a,其是现在由特定的团块60包含的核心对象50的OID 52a的导数。再次,所分派的BID 61a仍然必须允许直接从所寻找的核心对象50的OID 52a识别包含给定对象50的团块60。例如,在实施方式中,属于团块60中的第一对象50的OID的不断增加的任意长度的顺序整数被用作用于团块60的BID 61a,融合应总是导致具有最低OID 52a的核心对象50的OID 52a被用作用于由融合得到的新的团块60的BID 61a。
在实施方式中,给定类型(Otype)52b的核心对象50可以被分组在与不同Otype52b的核心对象50分离的团块60中。因此,在这样的实施方式中,团块60还与类型(即,本文分组的核心对象50的类型)相关联,并且不同类型的团块60可以存储在不同的后端70上。这可以用于例如从数据对象隔离元数据以便提高元数据读取性能,基于Otype 52b实现不同的对象加密算法/密钥等。在这样的实施方式中,为了支持类型化核心对象50,团块60和后端70,给定团块60的BID 61a可以在后端水平而不是在集合水平从对应核心对象50的OID52a导出,其中团块60存储具有不连续的OID 52a的核心对象50。换句话说,给定团块60的BID 61a可以从特定Otype 52b的对应核心对象的OID 52a而不是从所有生成的核心对象的OID 52a导出,从而导致具有不连续的OID 52a的核心对象50被存储在团块60中。因此,任何后续请求检索核心对象50应考虑到要检索的核心对象50的Otype 52b,例如通过仅查询与要检索的核心对象50的特定Otype 52b相关联的后端70b。
在另一实施方式中,还可以基于团块60的对象类型(Otype)52b来隔离它们,使得某些Otypes 52b优选地不被写入同一团块中。例如,可以请求从元数据和索引对象隔离大数据对象,从而通过在检索元数据或索引信息的同时防止检索大量数据来提高性能。因此,在实施方式中,在执行核心对象50到团块60的组装之前,可以考虑将要组装到团块60中的核心对象50的Otype 52b以确定是否应该将对象添加到现有团块60或创建在新的团块60中。
现在参考图5,示出了使用用于存储数据的方法10的上述结构存储文件30的示例。在图5所示的实施方式中,使用上述方法10将文件30存储在云中。在所示的实施方式中,文件30被分段为三个对象50,一个包含元数据诸如文件名、创建日期等,而两个包含作为数据片段的文件的内容。前两个对象50被组装进第一团块60,而第三个对象被放置在另一团块60中。团块60被压缩、加密并通过因特网上的安全连接发送到充当后端70的云存储提供商,其中团块60可以存储为文件、数据库记录、对象或原始存储。在所示的实施方式中,团块60的副本也保持在本地高速缓存(也作为后端70操作)中,其也可以用作直接存储介质。将了解到,为了检索存储的数据,可以使用团块60的任何副本来执行反转过程,其中对团块60进行读取、解密、解压缩以及从其分段重新组装文件。
鉴于以上,将了解到,在步骤20处,执行将团块60存储在至少一个后端上的步骤(步骤20),以将团块存储在存储介质上。如上所述,后端70是自主存储器皿,并且仅需要能够查询、存储和检索团块,使用它们的BID 61a,以适合于所支持的服务或设备的形式(例如作为文件、数据库记录、云对象、物理设备块等)。后端70不需要支持元数据、结构、知道如何组织对象或团块,它们的目的等。后端70本质上是完全通用的简单存储附属物,其盲目地存储和检索团块60,基于它们的BID 61a。在所示实施方式中,后端70由云存储提供商和本地高速缓存实施,但是本领域技术人员将理解,在可替代的实施方式中,后端70可以是能够存储数据的任何存储媒介或服务。鉴于上述结构,后端存储的能力和特征的差异基本上没有影响。将了解到,可以使用多个分布式后端70,使得可以通过将团块存储到不同的分布式后端70中来执行分布式数据存储。此外,团块60可以在多个后端70上自由地散开,并且随后在后端70之间移动而不会对数据完整性有任何影响。
如上所述,团块60、核心对象50和后端70被分组在一起作为连贯的单元,其可以作为整体进行管理并且在本文称为集合80。除此之外,集合80确保OID的52a和BID的61a对于集合80始终是唯一的。在实施方式中,对于每个集合80,存储在核心对象50和团块60中并且如上定义的集合管理信息被用作保持整体集合连贯且最新的主要机制。
参考图1至图4,在实施方式中,方法10包括维持集合状态的另外的步骤22,其反映在写团块60的特定时间集合的状态。在操作中,为了允许维持集合状态,每个团块60的集合管理信息包括当写团块60时集合的状态及其核心对象50。在实施方式中,集合的状态包括用于每个Otype 52b的最后核心对象50的对象类型(Otype)52b和OID 52a的列表,其当写团块60时被标记为最后对象(最后对象类型61f)。实际上,如上所述,在实施方式中,核心对象50具有给定类型(OType)52b,其被设计为指示每个核心对象50的一般性质(例如但不限于在目录索引对象和文件数据片段对象之间区分,并相应地解析每个对象)。当创建核心对象50时,可以将其标志为其Otype 52b的“最后”(即最新或最近创建的)核心对象。在实施方式中,用于每个Otype 52b的每个最后核心对象50的OID 52a被记录在最后团块60的集合的状态中,使得随后可以检索给定Otype 52b的最后核心对象50,而不必知道它的OID 52a。显然,为了定位给定Otype 52b的最后核心对象50,还需要识别集合的最后团块60。
此外,集合管理信息包括对象链接信息(即使用OID 52a或其他对象识别信息将对象链接在一起),允许核心对象50彼此参考。特定核心对象50的对象链接信息直接存储在对应的核心对象50中,并且限定结构的大部分,通过其核心对象50、团块60和集合80以彼此链接的核心对象50的树状结构保持在一起。在实施方式中,集合80由“头”对象50限定,其对应于被标志为每个对象类型的最后的核心对象50,并且然后连续地链接到其他核心对象50,将对象50分组为核心对象50的树状链。在这样的实施方式中,集合80的“尾”(即在集合状态中的最后对象类型和最后团块)充当集合80内的所有对象50的“头”。将要了解,在可替代的实施方式中,也可以使用识别和链接对象的可替代的方式。此外,在可替代的实施方式中,可以使用与核心对象类型(Otype)52b不同的子集来将核心对象50彼此链接,其中最后对象是头对象。
在数据更新的情况下(创建与更新的数据相关联的新的核心对象50并分派其自己的新的唯一OID 52a),需要更新核心对象50之间的链接以便反映新的核心对象50现在替换旧的核心对象50。换句话说,先前通过OID 52a链接到旧的核心对象50的核心对象50现在需要通过OID 52a链接到新的核心对象50。取决于对象50的树结构的复杂性,这可能导致连续需要更新的参考核心对象50的长级联。为了减少所需的级联效应,核心对象50可以被结构化:根据限制这种级联的已知数据结构,诸如,例如但不限于,通过在更新的核心对象50内包括关于将需要被应用于父对象的OID链接更新的信息,而不是实际更新父对象本身,或者通过使用非OID链接,如下面所述作为可替代的实施方式,在对象树中的策略点处,以便防止OID链接从级联更新到树的顶部。在可替代的实施方式中,也可以使用对象识别信息,诸如别名、虚拟ID、私有索引等,其是可替代的识别符,也可以通过其指代对象,除了它的OID52a外,并且其可在以后重新分派给较新的核心对象50。例如但不限于,在实施方式中,每个核心对象50可以包括虚拟ID(VID)52c,其与OID 52a是初始地相同的。当创建新的核心对象50并标志为替换较旧的核心对象50时,新的核心对象50可以自动地继承较旧的核心对象50的VID 52c。内在地,VID 52c可以存储在VID/OID对中以允许VID/OID相关联。因此,VID 52c可用于使用识别符将核心对象50链接在一起,其在对象本身被更新和替换时自动地保持最新。在另一可替代的实施方式中,私有索引可用于通过其OID 52a在外部跟踪和链接对象50,而不是在对象内存储链接。
在实施方式中,用于执行数据存储的方法10还可以包括执行垃圾集合的步骤24,以回收被不再有效的核心对象50占用的存储空间,因为它们已被较新的核心对象50替换(即作为数据更新的结果)、删除或者因为它们不再被任何其他核心对象50参考(链接到)。在实施方式中,执行垃圾集合的步骤24包括识别要清理(或标志)的对象的步骤24a,其可以是隐式的或显式的,以及物理地从集合和团块移除对象(清除)的步骤24b。
在实施方式中,在标志的步骤24a期间,当核心对象50丢失来自其他核心对象50的所有参考时,它们可以被隐式标志为不再需要。本领域技术人员将理解,可以使用用于将对象标志为不再被参考的若干方法。例如但不限于,在实施方式中,被标志为未参考的核心对象50可以被添加到在清除步骤24b期间被处理的清除候选列表,其中写入集合中的最后核心对象50从未被添加到清除候选列表,即使它们未被参考,以便保护正在积极更新的集合。此外,在可替代的实施方式中,核心对象50还可以被显式地标志为有资格用于垃圾集合,通过在创建新的核心对象50以替换它们时被标志为“替换”,或者为被核心对象50“删除”以显式地删除它们。在这种情况下,替换/删除的核心对象50OID 52a可以与替换/删除它们的对象的OID 52a一起被添加到内部索引,其中索引被用作清除候选列表。
在清除步骤24b期间,物理地移除在清除候选列表中列出的核心对象50和团块60。本领域技术人员将理解,可以设置各种清除参数,诸如团块使用阈值,应该清除的团块的最小年龄等,以优化清除过程。清除参数是有用的以便限制对象的清除,例如但不限于存档目的,如下面将更详细描述的。将了解到,可以完全或部分地清除团块60。在要物理地移除团块60内的所有对象50的情况下,可以从后端(一个或多个)70完全地删除团块60。然而,仅要在物理上移除团块60的一些对象50的情况下,可以打开(即检索、解密和解压缩)团块60,可以移除特定对象50,并且可以重新压缩、重新加密团块60和写回对应的后端(一个或多个)70,在同一BID 61a下。
本领域技术人员将理解,对于每个后端70,垃圾集合不需要是相同的。换句话说,部分或完全清除团块不需要跨后端70被同步。一些后端70可以继续托管其中具有所有最初对象50的团块60,而其他后端70可以仅具有清理的团块60,而不影响集合80的完整性。本领域技术人员将理解,由于所有团块版本包含确切相同的活跃的不可改变的对象50的副本,因此可以使用任何版本的团块60来反映集合80的当前状态。团块60的版本之间的变化仅影响所使用的存储量,以及历史数据(未参考的核心对象50)的可用性。本领域技术人员将理解,这种不对称性可用于存档目的。
例如但不限于,在实施方式中,可以指定高性能后端70诸如本地硬盘、SSD驱动、SAN和高速缓存的云存储等来托管仅包含最近对象50的完全清除的团块60,而可以指定其他较低性能或较低成本的后端70,诸如WORM设备(即写入一次读取多次媒介,诸如DVD、蓝光光盘等)、低成本和性能的硬盘以及长期存档云存储服务等来托管具有更大数量的最初(未参考)对象50的团块。
现在参考图6,示出了根据实施方式的使用最后对象类型、链接及其对垃圾集合的影响的集合管理的示例。在图6的示例中,集合80的演变遵循团块60接团块60。
初始地,在步骤1处,在团块#1中写入两个核心对象50(其被分派OID#1和#2)。在该初始阶段,核心对象50都不被跟踪为其类型(Otype)52b的最后对象。核心对象50不包含链接且未被链接到。就此,对象#1和对象#2被认为是未参考的对象,但不被视为可清除的核心对象50,因为它们正是集合的最后对象。
在步骤2处,添加另外两个核心对象50(被分派的OID#3和#4)并写入团块#3。核心对象#4被跟踪为其类型(Otype)52b的最后核心对象50,并且包含到核心对象#1、#2和#3的链接,从而生成对象树,其中核心对象#4作为头,并链接所有其他对象,包括写入团块#1的对象。在团块#3的集合状态中,头被记录为类型#1的最后对象(在该示例中为对象#4的对象类型)。
在步骤3处,再添加两个核心对象50(被分派的OID#5和#6)并写入团块#5。核心对象#5链接到对象#4,并被跟踪为Otype#1的最后对象(即对象#5现在是对象树的头)。在此阶段,对象#6与其他核心对象50无关,并且因此处于未参考状态,但不被视为可清除对象,因为它是集合的最后对象。
在步骤4处,再添加三个核心对象(被分派OID#7、#8和#9)并写入团块#7。核心对象#7、#8和#9不会被跟踪为其Otype的最后对象。核心对象#7、#8和#9不包含链接且未被链接到。同样,这些对象被认为是未参考的,但不被认为是可清除的核心对象50,因为它们是集合的最后核心对象50。
在步骤5处,添加核心对象50(分派OID#10)并写入团块#10。核心对象#10替换对象#5。对象#10被跟踪为其Otype(类型#1)的最后核心对象,并链接到对象#4、#6、#7和#8。这会重新构造对象树,其中对象#10现在是头。被对象#10替换的对象#5和现在孤立的对象#9未被参考并被认为是过时的并且可以被添加到清除候选列表。
在步骤6处,再添加两个核心对象50(被分派OID#11和#12)并写入团块#11。对象#12替换对象#10。对象#12被跟踪为其Otype(类型#1)的最后对象,并链接到对象#4、#6和#11。这再重新构造对象树,其中核心对象#12现在是头。核心对象#7、#8和#10变得过时,并且可以被添加到清除候选列表。
图6的示例示出,当核心对象50被添加、链接、替换或丢弃时,每个团块60中的集合状态反映了在每个步骤处集合80中的所有活跃核心对象50的精确状态。这样的示例还允许容易地理解使用用于执行数据存储的方法10产生的结构如何可以容易地用于时间行进(或连续探索),如下面更详细地解释的。在本说明书的过程中,术语“时间行进”是指能够(及时)返回到过去,并检查存储的数据,如在先前状态中存在的那样。使用上述结构,为了在时间中行进(或执行连续探索)并且回顾集合在过去某一点其存在的状态,集合80的“尾”的视图被重新限定为在给定BID 61a或OID 52a(即手动地将最后团块60重新限定到具有给定BID 61a的团块60或与给定OID 52a相关联的团块60是最后团块60的时间点)。因此,所有对象树和核心对象50的视图也反映了它们如何在具有给定BID 61a的团块60是最后团块60的精确时间点存在。因此,本领域技术人员将理解,可以执行时间行进而不需要对所存储的数据进行任何精确的存档处理或“快照”,并且只要过去的对象尚未被清除,就没有对存储数据中的时间行进的约束或限制。本领域技术人员还将认识到,重新限定集合的尾BID或OID视图不会改变集合本身,并且多个用户可以同时保持集合的不同视图。
鉴于以上,时间行进和优化的团块清除参数的组合可以允许使用显著减少的存储资源的升级存档策略。例如但不限于,在实施方式(未示出)中,后端70的连续性也可以用于仿真现有技术存档的“快照”功能的行为,同时允许集合80在存档后端冻结数据之前连续地时间行进在任何单个时间点。在这样的实施方式中,可以对集合的主要后端(存档后端)和次要后端进行分层,使得所有最初的团块在主要后端中被冻结,并且仅较新的或部分清除的团块在次要后端中被记录。因此,虽然主要后端和次要后端两者可以用作用于集合的可能后端70(即主要后端和次要后端两者都可以用于检索数据),更新和删除仅记录在次要后端上。类似的策略可在以后用于主要后端和次要后端(存档后端)相对于第三后端(即次要后端的内容也被冻结,并且引入第三后端,其中较新的或部分清除的团块被记录在第三后端中)。就此,主要、次要和第三后端用作用于集合的可能后端,但只有第三后端经历对象/团块的添加和/或删除。
本领域技术人员还将理解,使用上述团块60和后端70也可以容易地实现完全和增量备份策略,例如,使用镜像分层后端70同时将团块60写入两个或更多个位置。可替代的,可以将团块60从活的后端70在外部复制到备用后端70。将了解到,假定核心对象50是不可改变的并且团块60是日志结构的,则不需要同步团块60或继续确认自最后备份以来哪些团块60被修改,唯一需要备份或复制的团块60是新的那些。
鉴于以上,将了解到,上述结构提供了稳健的布置,其中通常可以恢复对团块60的损失或损坏,而不会致使超出特定丢失的数据的数据的损失或损坏的团块60。实际上,假定每个团块60的集合管理信息包括在写团块60时其核心对象50和集合的状态,则在前的团块60(即在特定丢失或损坏的团块之前创建的团块)通常可以用于继续处理请求,即使损坏或丢失的团块包含重要的结构信息。
在先前的团块60仍然包含所有必要的集合管理信息的情况下,可以容易地执行这种信息的恢复。然而,在已经执行垃圾集合并且已经开始清理信息的情况下,先前的团块60可能不容易地包含重新开始探索集合80所需的所有信息。因此,在实施方式中,垃圾收集可以被配置为保留关键对象,诸如目录索引,即使它们在技术上已经过时,以便避免删除在损坏或损失团块60之后恢复信息的情况下随后可能相关的信息。此外,如果已经执行了垃圾集合并且已经删除了重新开始探索集合所需的信息,则可以从所指代的对象重建包含到其他核心对象50的链接的关键核心对象50。
在实施方式中,用于执行数据存储的方法10还可以包括将集合分叉(或克隆)到两个或更多个不同的子集合中的步骤25,其中每个子集合80可以单独地进化,同时仍然共享相同的物理团块和后端,对于他们共同具有的过去的对象和团块。当集合80被分叉时,基本上相当于采用现有技术“快照”或复制整体集合80,并且然后修改副本,除了没有真正的快照或副本而是在分叉的集合80之间的简单共享部分。在实施方式中,以便继续分叉集合的步骤25,执行分布式数据存储的方法10包括引入多个“最后团块”(即分割集合的“尾”)的步骤。
从多个最后团块60,每个分叉限定它自己的对象树。因此,给定上述结构,其中“最后团块”是将集合的状态和集合的所有核心对象50保持在一起的密钥,每个分叉表示集合80的唯一视图(唯一的子集合)并且可以在该特定子集合中创建/更新核心对象50,而不影响对象或其他分叉或基础集合80的状态。将要了解,方法10还可以包括连接和/或合并分叉的后续步骤,使得由对应的分叉生成的每个子集合中单独执行的更新可以重新组合成单个集合80包含核心对象50和团块60的唯一链。
在实施方式中,可以在每个单独的分叉上并行地执行时间行进。
将要理解,根据实施方式,分叉可以是逻辑的或物理的。如下面将更详细描述的,逻辑分叉在同一后端的界限内创建并与其他分叉共享相同的团块、OID和BID名称空间。物理分叉在分离的后端中实现,并且每个后端都维持他们自己唯一的团块、OID和BID名称空间。本领域技术人员将理解,分叉类型(即逻辑或物理分叉)可用于实现将集合分叉成本方法10的多个子集合的步骤。
本领域技术人员将理解,由于物理分叉使用不同的后端和名称空间,所以创建的物理分叉可以将相同的OID 52a和BID 61a分派给所生成的对象和团块。因此,在合并物理分叉时,需要使用新的唯一OID的52a在目标分叉上重新创建合并对象。换句话说,不可能简单地在生成的分叉之间链接对象,如逻辑分叉可能的那样。鉴于以上,假定物理分叉完全隔离(但通过记录在每个分叉的团块中的唯一分叉识别符(FID)来区分)并且彼此独立地进化,两个或更多个物理分叉可具有冲突的BID 61a OID 52a(即类似的BID 61a和/或OID52a)。因此,在操作中,两个或更多个物理分叉操作类似于仅具有共享部分的不同集合(即在创建物理分叉之前生成的部分)。以便合并两个物理分叉,需要合并助手在目标分叉上创建对应于在其他物理分叉上创建的对象的新的对象,并且因此重新集成应用于另一物理分叉的改变(参见图7d和下面详述的对应示例)。
在实施方式中,物理分叉可以通过链校验和进一步保护。在参与物理分叉的连接或合并之前,这样的校验和值可用于确认物理分叉是基于同一共同团块。
参考图7a,描述了根据实施方式的集合的分叉的示例,其中逻辑分叉被打开、更新并且随后被连结回基础集合。再次,在图7a的示例中,集合80和子集合的演变遵循团块60接团块60。在图7a的示例中,对于集合的核心对象,存在两种对象类型(Otypes)52b:Otype#1对于常规核心对象,和Otype#-5表示逻辑分叉核心对象。
在步骤1处,创建两个核心对象50(分派OID#1和#2)并写入团块#1。对象#2链接到对象#1并被标志为Otype#1的最后对象。具有对象#1和#2的对象树反映在存储在团块#1中的集合的状态中,其中对象#2作为Otype#1的最后对象。
在步骤2处,创建逻辑分叉核心对象(分派FID#3并保留对象OID直到19供其自己使用),并创建对象(分派OID#4)并写入团块#3。对象#4被添加到分叉#3的子集合中的集合中,并链接到对象#2。存储在团块#3中的集合状态反映了团块#3属于分叉#3的子集合,其中对象树以对象#4开始。存储在团块#3中的集合状态也反映了最后分叉对象(OType#-5)是分叉#3。就此,集合80包括两个子集合(最初集合的子集合和分叉#3的子集合),两者共享对象#1和#2,但是其中分叉#3的子集合具有较大的对象树(即还包括对象#4)。
在步骤3处,在分叉#3的子集合中创建两个新的核心对象50(分派OID#5和#6),并存储在团块#5中。对象#6链接到对象#4和#5,并被标志为其Otype(类型#1)的最后对象。这创建了对象树,其中对象#6作为头(即最后对象)仍然与对应于基础集合的子集合共享对象#1和#2。在步骤3处,分叉#3通过写分叉关闭对象#7来关闭,参考分叉#3。团块#5写在分叉#3下,其反映了分叉及其对象的最新状态。
就此,集合具有两个分叉:分叉#0(FID#0),其是基础集合,具有如下状态:显示Otype#1的最后对象是对象#2(OID#2),其形成以下的树:两个对象(对象#1和#2),和分叉#3(FID#3),其是关闭的逻辑分叉的子集合,具有对象#6(OID#6)作为其头的对象树(并且其链接到对象#5、#4、#2和#1)。分叉#3的子集合中的集合状态还显示最后分叉对象(Otype#-5)具有OID#7,从而显示分叉#3已经关闭。
在步骤4处,通过创建分叉基础连结核心对象50(分派OID#20,其对于基础集合是下一个非保留OID(假定直到#19的OID保留给分叉#3),将逻辑分叉#3的子集合连结回基础集合中并写入团块#20。通过更新集合状态以反映分叉#3的子集合的状态来执行连结,从而自动将来自分叉#3的子集合的对象树的所有对象集成到主集合(FID#0)中。因为连结是在基础集合上完成的,所以团块#20也属于基础集合并且具有FID#0。就此,可以通过分叉对象#20(Otype#-5的最后对象)检查分叉历史,但是另外该集合被认为没有分叉并且像任何其他标准集合一样工作。
参考图7b,描述了根据实施方式的集合的分叉的示例,其中两个逻辑分叉被打开、更新并且随后被合并回基础集合。再次,在图7b的示例中,集合80和子集合的演变遵循团块60接团块60。在图7b的示例中,对于集合的核心对象再次存在两种对象类型:Otype#1对于常规核心对象,和Otype#-5表示逻辑分叉核心对象。
在步骤1处,创建两个核心对象50(分派OID#1和#2)并写入团块#1。对象#2链接到对象#1并被标志为Otype#1的最后对象。具有对象#1和#2的对象树反映在存储在团块#1中的集合的状态中,其中对象#2作为Otype#1的最后对象。
在步骤2处,创建逻辑分叉核心对象(分派FID#3并保留对象OID直到#19供其自己使用),并创建核心对象(分派OID#4)并写入团块#3。对象#4被添加到分叉#3的子集合中的集合中,并链接到对象#2。存储在团块#3中的集合状态反映了团块#3属于分叉#3的子集合,其中对象树以对象#4开始。存储在团块#3中的集合状态也反映了最后分叉对象(OType#-5)是分叉#3。就此,集合80包括两个子集合(最初集合的子集合和分叉#3的子集合),两者共享对象#1和#2,但是其中分叉#3的子集合具有较大的对象树(即还包括对象#4)。
在步骤3处,创建第二逻辑分叉核心对象(分派FID#20(下一个可用的OID)并保留对象OID直到#39供其自己使用)并且创建核心对象(分派OID#21)并写入团块#20。对象#21被添加到分叉#20的子集合中的集合中,并链接到对象#2。存储在团块#20中的集合状态反映了团块#20属于分叉#20的子集合,其中对象树以对象#21开始。存储在团块#20中的集合状态也反映了最后分叉对象(OType#-5)是分叉#20。分叉对象#20指示分叉#3此时也是活跃的。就此,集合80包括三个子集合(最初集合的子集合,分叉#3的子集合和分叉#20的子集合),所有共享对象#1和#2,但是另外有不同的对象头和树。
在步骤4处,分叉#3与分叉#20并行进化。创建两个核心对象50(分派OID#5和#6)。对象#6链接到对象#4和#5,并被标志为其Otype(类型#1)的最后对象。这在分叉#3中创建了对象树,其中对象#6作为头(即最后对象)。在步骤4处,分叉#3通过写分叉关闭对象(分派FID#7)来关闭,参考分叉#3。团块#5写在分叉#3下,其反映了分叉及其对象的最新状态。
在步骤5处,分叉#20与分叉#3并行进化。创建三个核心对象50(分派OID#22、#23和#24)并写入团块#22。对象#24链接到对象#21和#23。对象#24被标志为其Otype(类型#1)的最后对象。对象#23链接到对象#22。这在分叉#20中创建了对象树,其中对象#24作为头(即最后对象)。在步骤5处,通过写分叉关闭对象(分派FID#25)来关闭分叉#20,参考分叉#20并且还写入团块#22。团块#22写在分叉#20下,其反映了分叉及其对象的最新状态。
在步骤6处,通过创建主分叉核心对象(分派FID#40(可用的下一个OID,在保留给分叉#20的最后OID之后))将逻辑分叉#3的子集合连结回基础集合中并写入团块#40。通过更新集合状态以反映分叉#3的子集合的状态来执行连结,从而自动将来自分叉#3的子集合的对象树的所有对象集成到主集合中。主分叉对象#40识别已连结的分叉(FID#3),此时仍是活跃的其他分叉(FID#20)和主分叉(FID#40)。
由于主分叉(FID#40)和分叉对象#20反映了集合80的不同演变,因此不能简单地连结这两个分叉的内容(如使用分叉#3所做的那样)。因此,要将两个分叉的演变集成到单个分叉中,必须合并两个分叉。因此,在步骤7处,创建新的逻辑分叉(分派FID#41并保留对象OID直到#50供其自己使用),意图合并分叉#20和#40。创建核心对象50(分派OID#42)。对象#42替换主分叉#40的对象#5并删除分叉#20的对象#21。创建附加核心对象50(分派OID#43)并链接到属于三个对象树的对象:1)到合并分叉#41的新近创建的对象#42;2)到主分叉#40的对象#4(并且因此从主分叉#40到对象#4→#2→#1的链);以及3)到分叉#20的对象#23。对象43现在是合并分叉#41的Otype#1的新头对象。在步骤7处,分叉#41最终通过写分叉关闭核心对象(分派FID#44)来关闭,参考分叉#41,并写入团块#41。团块#41写在分叉#40下,并且集合状态反映了对象树,其合并了来自分叉#20和#40的所有元素。
假定合并分叉#40现在表示集合的状态,其中所有其他分叉合并到一个分叉(分叉#41)中,逻辑分叉#41的子集合通过分叉基础连结核心对象连结回基础集合(分派FID#51(下一个可用的OID))。通过更新集合状态以反映分叉#41的子集合的状态来执行连结,从而自动将来自分叉#41的子集合的对象树的所有对象集成到主集合(FID#0)中。因为连结是在基础集合上完成的,所以团块#51也属于基础集合并且具有FID#0。就此,该集合被认为没有分叉,并且像任何其他标准集合一样工作。
参考图7c,描述了根据实施方式的集合的分叉的示例,其中物理分叉被打开、更新并且随后被连结回基础集合。再次,在图7c的示例中,集合80和子集合的演变遵循团块60接团块60。在图7c的示例中,对于集合的核心对象存在两种对象类型:Otype#1对于常规核心对象,和Otype#-6表示物理分叉核心对象。
在步骤1处,创建两个核心对象50(分派OID#1和#2)并写入团块#1。具有对象#1和#2的对象树反映在存储在团块#1中的集合的状态中,其中对象#2作为Otype#1的最后对象。此外,创建了物理分叉核心对象(分派FID#3)。对于每个Otype的最后对象(对于Otype#1的OID#2和对于Otype#-6的OID#3)被记录在团块#3的集合状态中。假定就此团块#1属于基础集合,其写有FID#0。
分派新的后端以保存新的物理分叉(分叉#3)的所有团块60。将了解到,任何后端类型和/或配置都可以用于保存与新的物理分叉相关联的团块。在实施方式中,后端甚至可以是临时的基于存储器的分叉。
在步骤2处,创建核心对象(分派OID#4)并写入团块#4。对象#4添加到具有FID#3的集合中,并且物理分叉(fork#3)现在表示对象的链,其中OID#4作为头,存储在物理分叉中,并链到存储在基础集合中的OID的#2和#1。存储在团块#3中的集合状态反映了团块#3属于分叉#3的子集合(FID#3),其中对象树以对象#4开始。就此,集合80包括两个子集合(最初集合的子集合和分叉#3的子集合),两者共享对象#1和#2,但是其中分叉#3的子集合具有较大的对象树(即还包括对象#4)。将了解到,物理分叉(分叉#3)不影响基础集合,其仍包括以OID#2为头的对象树。
在步骤3处,在分叉#3的子集合中创建两个新的核心对象50(分派OID#5和#6),并存储在团块#5中。对象#6链接到对象#4和#5,并被标志为其Otype(类型#1)的最后对象。这创建了对象树,其中对象#6作为头(即最后对象)仍然与对应于基础集合的子集合共享对象#1和#2。在步骤3处,通过创建分叉关闭对象(分派FID#7)来关闭分叉#3,参考分叉#3并且写到团块#5。团块#5写在分叉#3下,其反映了分叉及其对象的最新状态。既然fork#3被标记为已关闭,则不能在此物理分叉中写入其他核心对象,从而确保分叉之后不会更新。
在图7c的示例中,假定自创建物理分叉(分叉#3)以来基础集合尚未更新,则可以通过简单连结将物理分叉中所做的改变重新集成回主集合中。在所示的实施方式中,这是在步骤4和5中完成的,通过将与物理分叉(分叉#3)相关联的团块复制回主集合后端。在可替代的实施方式(未示出)中,也可以通过将物理分叉(分叉#3)的后端重新配置为主集合的一部分来实现将物理分叉中的改变重新集成到主集合中。这样的重新配置可以实现如将与物理分叉(分叉#3)相关联的团块重新复制回主集合后端相同的事情,而不会进行团块移动。
最后,在步骤6处,创建分叉连结核心对象(分派FID#8)并写入团块#8,在主集合中。在基础集合中创建分叉连结核心对象确保将使用FID#0(主集合的FID)写将来的团块。
参考图7d,根据实施方式的集合的分叉的示例,其中物理分叉被打开,与基础集合同时更新,并且随后与基础集合合并。再次,在图7d的示例中,集合80和子集合的演变遵循团块60接团块60。在图7d的示例中,对于集合的核心对象存在两种对象类型:Otype#1对于常规核心对象,和Otype#-6表示物理分叉核心对象。
在步骤1处,创建两个核心对象50(分派OID#1和#2)并写入团块#1。对象#2链接到对象#1并被标志为Otype#1的最后对象。具有对象#1和#2的对象树反映在存储在团块#1中的集合的状态中,其中对象#2作为Otype#1的最后对象。此外,创建了物理分叉核心对象(分派FID#3)。对于每个Otype的最后对象(对于Otype#1的OID#2和对于Otype#-6的OID#3)被记录在团块#3的集合状态中。假定就此团块#1属于基础集合,其写有FID#0。
再次,分派新的后端以保存新的物理分叉(分叉#3)的所有团块60。如上表述,将了解到任何后端类型和/或配置都可以用于保存与新的物理分叉相关联的团块。
在步骤2处,创建核心对象(分派OID#4)并写入团块#4。对象#4添加到具有FID#3的集合中,并且物理分叉(fork#3)现在表示对象的链,其中OID#4作为头,存储在物理分叉中,并链到存储在基础集合中的OID#1。存储在团块#3中的集合状态反映了团块#3属于分叉#3的子集合(FID#3),其中对象树以对象#4开始。就此,集合80包括两个子集合(最初集合的子集合和分叉#3的子集合)。分叉#3的子集合具有对象树,该对象树包括链接到对象#1的对象#4)。将了解到,物理分叉(分叉#3)不影响基础集合,其仍包括具有以OID#2为头的对象树。
在步骤3处,在基础集合中创建两个核心对象(分派OID#4和#5),并写入基础集合的团块#4。将了解到,新近创建的核心对象和团块与那些在物理分叉(分叉#3)中的不同,假定物理分叉和基础集合现在已经完全分开(即作为不同的集合类似地操作)。基础集合现在具有拥有OID#5和与在物理分叉(分叉#3)中具有对象OID#4的核心对象不同的OID#4的核心对象树。两个分叉(即物理分叉和基础集合的分叉)具有不同的FID并使用不同的后端,以及因此彼此隔离,而仍然在集合分叉之前共享存在的共同核心对象#1。
在步骤4处,在物理分叉中创建两个核心对象(分派OID#5和#6),并写入物理分叉的团块#5(即具有FID#3)。必须再次理解,物理分叉#3的对象#5不同于基础集合的对象#5。分叉#3的对象#6链接到对象#4和#5,并被标志为其Otype(类型#1)的最后对象。在步骤4处,通过写分叉关闭对象(分派FID#7)来关闭分叉#3,参考分叉#3,并且写入团块#5。团块#5是写在分叉#3下,反映了分叉及其对象的最新状态。团块#5中的集合状态反映对象OID#6(Otype#1)和分叉关闭对象#7(Otype#-6)为其Otypes的最后对象。既然fork#3被标记为已关闭,则不能在此物理分叉中写入其他核心对象,从而确保分叉之后不会更新。
由于基础集合和物理分叉(分叉#3)同时更新,因此不能简单地连结分叉;要将物理分叉中所做的改变重新集成回到基础集合中,需要合并分叉。在步骤5处,使用助手(未示出)合并基础集合和物理分叉(分叉#3)。助手重建新近创建的核心对象中的基础集合中的物理分叉(分叉#3)的核心对象(即核心对象#4、#5和#6)的净负荷。在所示的实施方式中,分叉#3的核心对象#4在基础集合的核心对象#6下重新创建,分叉#3的核心对象#5在基础集合的核心对象#7下重新创建,以及分叉#3的核心对象#6在基础集合的核心对象#8下重新创建,其中每个新近创建的核心对象被链接到基础集合的对应现有对象,或者被替换/删除,根据需要。合并后,对象#1有两个父对象(对象#2和对象#6)。这是有效的构造,并且对象可以作为子对象的链接数没有理论上的限制。物理分叉合并(分派FID#9)写入基础集合中,以记录物理分叉#3合并到基础集合中并且不再使用的事实。在FID#0下写包括所有合并核心对象的团块,因为这些团块现在属于基础集合。
在实施方式(未示出)中,其中合并是复杂的并且涉及许多团块,逻辑分叉初始可以在主集合中创建并用于在连结回主集合之前记录合并过程。逻辑分叉的使用有助于防止合并操作影响对象的主集合的对象,直到集成所有更新。
鉴于以上,核心对象50的不可变性和唯一OID 52a与其包含的核心对象50的OID52a的导数的BID 61a的组合,允许团块60高度稳定,自主且自由移动数据容器而不需要中央控制、跟踪、索引或映射。
因为核心对象50本身是不可改变的并且OID 52a是永久唯一的,所以团块60甚至于本质上是不可改变的。因此,考虑到团块60中的核心对象50不能通过内容或通过OID 52a改变,则不需要限定或存储复制(copied)或拷贝(replicated)到另一位置的包含给定核心对象50的最新版本的团块60的哪个“版本”;具有给定BID 61a的所有团块60是等效的。
因为BID 61a是从团块60的核心对象50的OID 52a导出的,所以可以仅使用所寻找的核心对象50的OID 52a来确定哪个团块60包含给定的核心对象50,从而移除了必须维持关于哪个团块60包含哪个核心对象50的索引或映射的负担。
因为BID 61a不仅传达团块60的身份,而且还甚至于传达团块60内的所有对象50的身份、状态和内容,这防止了需要与后端70共享关于团块60的内容的信息,并允许对整体团块进行加密和完全隐藏,包括任何控制信息或其他元数据。因为团块60是完全密封的、加密的数据容器,所以它们可以被任何机制或代理安全地复制,而不需要它们知道关于团块60的内容或性质的任何信息。因此,即使后端70的基础结构不同,后端70可以在不理解或确认团块60的内容(或使用中央机构检查以理解它们包含什么)的情况下从一个后端自由地移动和复制团块到另一后端。唯一需要交换的事情是团块60的内容和BID 61a。
最后,因为BID 61a是从所寻找的核心对象50的OID 52a导出的,并且可以使用由存储后端70保持的BID 61a的短列表来定位,所以核心对象50的确切位置通过BID导出实时自动公开。不需要跟踪或索引团块60。这允许在后端70之间自由移动或散开团块60,而不通知到中央单元。存储后端70是需要知道它们包含哪些团块60的仅有的部件。只要具有给定BID 61a的团块60在某处可用,数据就容易获得。此外,团块60可以自由地拷贝到任何存储介质或服务,而无需中央协调,以增加数据的可用性和完整性。可以使用团块的任何副本,无论它位于何处。
鉴于以上,所述结构还允许以对等模式在用户之间共享集合80,而不需要使用诸如中央服务器等的中央协调单元,甚至用于更新。通过应用冲突完整性原理,鉴于团块60的结构和日志结构的核心对象50,集合共享是可能的。例如,在两个或更多个用户之间执行集合的对等共享的实施方式中,如果两个或更多个用户尝试同时添加对象并写到相同的团块60,则检测到冲突并且仅用户之一将成功写团块60,其他用户将因冲突而失败。写团块60的这种失败意味着集合80已被更新。因此,对于团块写失败的用户中的每个需要使用集合的新状态刷新其集合视图并在新的团块60下重建对象。随后,它可以然后在新的团块中重新提交更新(在新的BID 61a下写)。当然,如果再次检测到冲突,则重复该过程直到对于精确的用户成功为止。在可替代的实施方式中,可以结合冲突完整性原理使用附加机制,或者分离地使用附加机制,以便限制或减轻冲突的发生。例如但不限于,可以为每个用户使用逻辑分叉来降低冲突的风险和频率。本领域技术人员将认识到,为了使冲突检测起作用,可能冲突的团块必须存储在由所有用户共享的同一后端中。然而,与物理分叉相关联的团块或不能冲突的在逻辑分叉中保留的OID范围,可以存储在不一定被所有用户使用或共享的任何后端中。本领域技术人员还将认识到,在实施方式中,可以使用锁服务器代替冲突检测,以便确保共享完整性。在另一可替代的实施方式中,还可以在不使用任何共享的共同后端70也不依赖于冲突检测的情况下完成对等共享。这被称为拆开后端共享,其中集合被简单地配置,使得每个用户具有其自己的物理后端70,其具有团块60的私有副本,并且因此可以分离地读取和更新它们自己的集合80的副本。当客户端重新连接时,它们的拆开集合可以连结/合并,就像它们是物理分叉一样,以便重新集成在它们被拆开时执行的改变。
上面已经描述了用于执行数据存储的方法10,现在将描述用于执行分布式数据存储的系统100。
参考图8和图9,在实施方式中,系统100包括核心引擎模块110,其与以下进行通信:数据源诸如引擎模块104(诸如文件系统引擎模块132、数据库引擎模块134、索引引擎模块130等)和/或应用106,请求数据存储。一般而言,核心引擎模块110是提供所有其他服务所依赖的基本服务的引擎,以便执行分布式数据存储。换句话说,核心引擎模块110是系统100的主模块,其管理来自集合的对象、团块、集合和后端的创建、更新、删除,执行团块压缩/解压缩(如果需要)、执行团块加密/解密(如果需要)、执行集合管理等。
核心引擎模块110、引擎模块104和/或应用106和/或其子部件可以是本地计算系统的一部分(即,其中每个部件/子部件安装在具有其自己的存储器和处理器的同一计算单元上)。然而,本领域技术人员将理解,在实施方式中,核心引擎模块110、引擎104和/或应用106和/或其子部件可以分布在彼此数据通信的分离的计算单元上,例如通过网络。
在实施方式中,核心引擎模块110包括核心应用编程接口(API)模块112,通过该模块,附加引擎模块104和应用106可以请求存储服务。应用106是使用系统100存储数据的外部程序。在实施方式中,应用106使用核心引擎API模块112将其数据结构化为离散对象。在可替代的实施方式中(参见图9),应用106还可以使用数据库引擎模块134(将在下面更详细地描述)将其数据存储为表记录,或者使用文件系统引擎模块132,其也将在下面更详细地描述,直接地或间接地处理文件。在实施方式中,核心API模块112可操作以打开集合、读、写和删除核心对象等。
在实施方式中,核心引擎模块110还包括与核心API模块112通信的集合管理器模块114。集合管理器模块114处理所有高水平请求并管理核心对象。例如,集合管理器模块114将兼容的OID分派给创建的对象,并且在实施方式中,向对象分派适当的对象识别信息(诸如别名、VID等),如上所述。集合管理器模块114还包括垃圾收集器,可操作以识别和清除过时的对象,即根据限定的清除参数未被参考并且可清除的对象,如上面关于对应方法所讨论的。
集合管理器模块114与团块管理器模块116通信以生成和管理团块。团块管理器模块116生成团块(即将对象组装成团块)并分派BID、定位团块、协调对多个后端的访问,并实现与后端的异步输入/输出(I/O)。
集合管理器模块114和团块管理器模块116实现上述对象和团块的中央特征,即对象不可变性,永久唯一对象ID(OID),导出的团块ID(BID)和可预测的BID,这些允许以下的能力:随后自由地存储、移动、复制和散开数据,从一个后端170(或存储位置)到另一个,而不使用索引、中央控制、跟踪或同步,并以对等模式共享数据,进行更新,无需使用锁或中央协调服务器。
团块管理器模块116转而与独立的压缩器模块118通信以压缩和解压缩团块的内容。在实施方式中,压缩器模块118可以实现多个压缩算法(它可以针对不同的团块使用不同的压缩算法)并且用压缩标记封装每个团块以识别压缩算法,用于当读取回团块解压缩其时后续的解压缩。本领域技术人员将理解,在不对团块应用压缩的实施方式中,核心引擎模块110可以没有压缩器模块118。
核心引擎模块110还包括与压缩器模块118通信的加密器模块120。类似于压缩器模块118,加密器模块120可以实现多个加密算法,并且因此可以对不同的团块应用不同的加密,从而增强整个系统100的安全性。加密器模块120还可以用加密标记来封装团块,该加密标记指示当从后端读取回时每个特定团块如何被解密。再次,本领域技术人员将理解,在不对团块应用加密的实施方式中,核心引擎模块110可以没有加密器模块120。
在所示的实施方式中,加密器模块120与后端170进行数据通信。如上所述,多个后端可以与每个集合相关联,并且团块可以跨多个后端自主地分布和/或散开以用于其存储,以便执行所存储数据的分布式数据存储。在核心引擎模块110没有加密器模块120和/或压缩器模块118的实施方式中,后端170可以直接与团块管理器模块116进行数据通信。
在所示的实施方式中,压缩器模块118、加密器模块120和后端170用作流处理器,在它们之间自由地传递数据以读和写团块。如将容易理解的,在流的末尾,后端170是实际物理地存储团块、在云中和/或在本地物理存储设备上的地方。
仍然参考图8和图9,在实施方式中,系统100包括附加的引擎模块,诸如索引引擎模块130、文件系统引擎模块132和数据库引擎模块134,这将在下面更详细地描述。索引引擎模块130、文件系统引擎模块132和数据库引擎模块134可操作以向用户、操作系统和应用提供文件和数据库服务。
索引引擎模块130向其他引擎模块(诸如文件系统引擎模块132和数据库引擎模块134)和向应用106提供索引服务,使得易于组织和定位存储在集合中的数据。换句话说,索引引擎模块130存储键/值对,以便允许通过键有效地存储和检索值。例如但不限于,在实施方式中,对于索引引擎模块130、索引(即,由二进制键/值对组成的简单通用字典)可以保存为由OID链接在一起的常规核心引擎对象,其中头对象保持对于给定索引的所有对象的树。在实施方式中,索引在内部存储为日志结构的B+树,但是本领域技术人员将理解,在可替代的实施方式中,允许高速搜索、顺序访问、插入和删除的其他数据结构也可以用于存储索引。例如但不限于,在实施方式中,索引引擎模块130,除其他外,由核心引擎模块110用于管理其对象的对象别名和虚拟ID。索引引擎模块130还可用于维持可包含任何形式的键/值对的私有索引。例如但不限于,在实施方式中,私有索引可以由引擎模块(诸如文件系统引擎模块132和数据库引擎模块134,其将在下面更详细地描述)用于有效地管理键/值对,例如保持动态字典、命名项列表等。
文件系统引擎模块132使用上述对象和团块的结构来实现文件存储。在实施方式中,文件系统引擎模块132与核心引擎模块110进行数据通信,并且包括API,通过其,应用、用户计算设备等可以使用公知文件系统基元诸如读取目录项、打开、读/写和关闭等,以存储和检索文件、目录、元数据和相关联的结构。例如但不限于,在实施方式中,文件系统引擎模块132可以直接连接到操作系统接口(例如FUSE),以允许由用户存储文件,就好像它们是本地文件一样。因此,文件系统引擎模块132允许用户将他们的文件存储并安全地散开在多个后端上,诸如云存储提供商或其他介质,而无需中央协调,使用核心引擎模块110。鉴于以上,本领域技术人员将理解,在核心引擎模块110的后端170是物理磁盘或其他本地存储媒介的实施方式中,系统100可以直接用作真实的端到端的用于用户计算设备的文件系统,具有由系统100提供的分布式存储设施的所有特征和优势。
数据库引擎模块134通过发布的接口(例如SQL、CLI、ODBC等)向应用提供数据库服务,并将对应的结构(例如模式、字段、索引、记录等)存储为核心对象和索引引擎私有索引。因此,数据库引擎模块134与索引引擎模块130和核心引擎模块110协作,以便为数据库执行数据存储。使用本系统100的索引引擎模块130和核心引擎模块110允许数据库完全分布并散开在不同的后端170上,诸如多个云存储提供商、共享存储系统和本地媒介,具有上述系统100的所有益处。
上述用于分布式存储数据的方法和系统允许在不使用索引、中央控制、跟踪或同步的情况下从一个存储位置(云存储提供商、网络磁盘、本地媒介等)自由地存储、移动、复制和散开数据到另一个(存储位置),并以对等模式共享该数据,进行更新,无需使用锁或中央协调服务器。这些特性允许数据同时存储在本地磁盘和云存储上,实时更新,从一种介质移动或复制到另一介质而无需通知中央系统,并具有在任何时间以高的完整性自动地定位并检索需要的信息的核心引擎。
本文已经描述和说明了若干可替代的实施方式和示例。以上描述的本发明的实施方式仅旨在是示例性的。本领域技术人员将理解单独的实施方式的特征,以及部件的可能组合和变化。本领域技术人员将进一步理解,可以与本文公开的其他实施方式的任何组合提供任何实施方式。可以理解,在不脱离其中心特征的情况下,本发明可以以其他特定形式实施。因此,本示例和实施方式在所有方面都被认为是说明性的而非限制性的,并且本发明不限于本文给出的细节。因此,虽然已经说明和描述了特定实施方式,但是在不显著脱离所附权利要求限定的本发明的范围的情况下想到许多修改。

Claims (22)

1.一种用于执行数据存储的计算机实现方法,所述方法包括以下步骤:
从数据源接收要存储的数据;
将所述数据分段为不可改变的核心对象,所述核心对象中的每一个被写入集合并被分派唯一的对象ID;
将不可改变的对象分组为团块,每个包括所述对象中的至少一个,所述团块中的每一个被分派从包括在其中的所述对象中的至少一个的所述对象ID导出的唯一团块ID,其中所述集合的最后团块照此是可识别的;
通过以下限定所述集合的状态:将所述集合的所述核心对象的至少一个子集彼此链接,其中所述至少一个子集中的每一个的最后对象是对应子集的头对象,并且存储头对象的识别信息;以及
将所述团块中的每一个存储到至少一个后端上。
2.根据权利要求1所述的方法,其中,存储所述头对象的识别信息的步骤包括将所述头对象的识别信息存储在所述集合的最后团块中。
3.根据权利要求1或2所述的方法,还包括根据对所存储数据的请求,从所述至少一个后端中的一个选择性地检索对应的团块的步骤。
4.根据权利要求1所述的方法,其中,所述核心对象中的每一个具有对象类型,并且其中通过将所述集合的所述核心对象的至少一个子集彼此链接其中所述至少一个子集中的每一个的所述最后对象是所述头对象来维持所述集合的状态的步骤包括:将每个对象类型的活跃对象与是对应对象类型的所述头对象的每个对象类型的所述最后对象链接。
5.根据权利要求1所述的方法,其中,将所述团块中的每一个存储在至少一个后端上的步骤包括将所述团块存储到分布式后端上。
6.根据权利要求1所述的方法,还包括在将所述团块存储到所述至少一个后端上的步骤之前加密所述团块的步骤。
7.根据权利要求3所述的方法,还包括以下步骤:在将所述团块存储到所述至少一个后端上的步骤之前加密所述团块,以及在从所述至少一个后端中的一个检索对应团块的步骤之后解密所述团块。
8.根据权利要求6所述的方法,还包括在加密所述团块的步骤之前压缩所述团块的步骤。
9.根据权利要求7所述的方法,还包括在解密所述团块的步骤之后将所述团块解压缩的步骤。
10.根据权利要求1所述的方法,还包括通过引入可识别为每个分叉集合的最后团块的多个最后团块来分叉所述集合的步骤。
11.根据权利要求10所述的方法,还包括将分叉的集合合并到集合的另一分叉和集合中的一个的步骤。
12.一种计算机可读存储器,其上记录有用于由计算机实行以实施权利要求1至11中任一项所述的方法的表述和指令。
13.一种数据存储系统,包括:
核心引擎模块,被配置为接收要存储的数据,将所述数据存储到至少一个后端,并从所述至少一个后端检索所述数据;所述核心引擎模块生成和管理至少一个集合,包括:
核心对象,每个包括要存储的数据,所述对象中的每一个是不可改变的并且被分派唯一对象ID,以及其中,所述核心对象中的至少一个子集彼此链接,其中所述至少一个子集中的每一个的最后对象是对应子集的头对象;
团块,每个包括所述对象中的至少一个,所述团块中的每一个被分派从所包括的所述对象中的至少一个的对象ID导出的唯一团块ID,所述集合的最后团块照此是可识别的,并且包括所述至少一个子集中的每一个的所述头对象的识别信息;以及
后端中的至少一个,在其上存储所述团块并允许使用对应的团块ID来检索所述团块。
14.根据权利要求13所述的数据存储系统,其中,所述核心引擎模块包括:核心API模块,被配置为打开集合并读、写和删除核心对象;集合管理器模块,被配置为生成和管理所述核心对象;以及团块管理器模块,被配置为生成和管理所述团块。
15.根据权利要求14所述的数据存储系统,其中,所述核心引擎模块还包括加密器模块,所述加密器模块在存储到所述至少一个后端上之前加密所述团块,并且在从所述至少一个后端检索之后解密所述团块。
16.根据权利要求15所述的数据存储系统,其中,所述核心引擎模块还包括压缩器模块,所述压缩器模块在由所述加密器模块加密之前压缩所述团块,并且在由所述加密器模块解密之后解压缩所述团块。
17.根据权利要求13至16中任一项所述的数据存储系统,其中,表示所述核心对象的所述至少一个子集中的每一个的所述核心对象之间的链接的链接数据存储在所述核心对象的至少一部分中。
18.根据权利要求13至16中任一项所述的数据存储系统,其中,所述核心对象中的每一个的唯一对象ID是顺序分派的。
19.根据权利要求18所述的数据存储系统,其中,所述团块中的每一个的唯一团块ID对应于所述团块的第一核心对象的所述对象ID。
20.根据权利要求13至16中任一项所述的数据存储系统,其中,所述核心对象中的每一个还包括对象别名和虚拟对象ID中的一个。
21.根据权利要求13至16中任一项所述的数据存储系统,还包括索引引擎,所述索引引擎执行索引服务以促进存储在集合中的数据的组织和定位。
22.根据权利要求13至16中任一项所述的数据存储系统,其中,每个集合的至少一个后端包括多个分布式后端,以提供所述团块的分布式存储。
CN201780048968.3A 2016-06-09 2017-06-09 数据存储系统及其执行方法 Active CN109791538B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201662347883P 2016-06-09 2016-06-09
US62/347,883 2016-06-09
PCT/CA2017/050708 WO2017210798A1 (en) 2016-06-09 2017-06-09 Data storage system and method for performing same

Publications (2)

Publication Number Publication Date
CN109791538A CN109791538A (zh) 2019-05-21
CN109791538B true CN109791538B (zh) 2023-04-21

Family

ID=60577467

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780048968.3A Active CN109791538B (zh) 2016-06-09 2017-06-09 数据存储系统及其执行方法

Country Status (6)

Country Link
US (1) US10705750B2 (zh)
EP (2) EP4336374A2 (zh)
JP (1) JP7000422B2 (zh)
CN (1) CN109791538B (zh)
CA (1) CA3026584C (zh)
WO (1) WO2017210798A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8819163B2 (en) * 2010-12-08 2014-08-26 Yottastor, Llc Method, system, and apparatus for enterprise wide storage and retrieval of large amounts of data
US10366104B2 (en) * 2017-06-21 2019-07-30 Microsoft Technology Licensing, Llc Providing instant and distributed access to a source blob via copy-on-read blobs and link blobs
US11169746B2 (en) * 2018-06-19 2021-11-09 Weka.IO LTD Expanding a distributed storage system
US11150816B2 (en) * 2018-09-25 2021-10-19 Microsoft Technology Licensing, Llc Immutable storage for cloud service providers
CN109857810B (zh) * 2019-02-02 2023-06-23 立旃(上海)科技有限公司 基于区块链的数据同步装置及方法
US11531686B2 (en) * 2019-02-04 2022-12-20 Apex Data Solutions, Llc Computing system providing blockchain-facilitated semantic interoperability between multiple disparate systems of record (SORs) and related methods
CN110572473B (zh) * 2019-09-20 2022-10-14 腾讯科技(深圳)有限公司 一种区块头同步方法、设备及计算机可读存储介质
KR20210040569A (ko) * 2019-10-04 2021-04-14 삼성에스디에스 주식회사 블록체인 기반 데이터 관리 시스템 및 그 방법
US11593085B1 (en) * 2020-02-03 2023-02-28 Rapid7, Inc. Delta data collection technique for machine assessment

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101404567A (zh) * 2007-03-30 2009-04-08 赛门铁克公司 在备份数据上实现读/写、多版本文件系统
CN104395904A (zh) * 2012-04-27 2015-03-04 网络装置公司 高效的数据对象存储和检索

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6928526B1 (en) 2002-12-20 2005-08-09 Datadomain, Inc. Efficient data storage system
WO2005045698A2 (fr) 2003-10-24 2005-05-19 Enrico Maim Procede mis en oeuvre dans un environnement informatique pour engendrer une vue courante a partir d’au moins un objet d’information source susceptible de varier
JP4768009B2 (ja) * 2005-03-11 2011-09-07 ロックソフト リミテッド データ・クラスタを使用する冗長性の少ないデータを格納する方法
US9015301B2 (en) 2007-01-05 2015-04-21 Digital Doors, Inc. Information infrastructure management tools with extractor, secure storage, content analysis and classification and method therefor
US8495036B2 (en) * 2008-10-24 2013-07-23 Microsoft Corporation Blob manipulation in an integrated structured storage system
US8620884B2 (en) * 2008-10-24 2013-12-31 Microsoft Corporation Scalable blob storage integrated with scalable structured storage
US20110196900A1 (en) * 2010-02-09 2011-08-11 Alexandre Drobychev Storage of Data In A Distributed Storage System
US8615485B2 (en) 2010-02-09 2013-12-24 Google, Inc. Method and system for managing weakly mutable data in a distributed storage system
US9355109B2 (en) * 2010-06-11 2016-05-31 The Research Foundation For The State University Of New York Multi-tier caching
US8756261B2 (en) 2010-07-09 2014-06-17 Navteq B.V. Method and system for handling binary large objects
US8510344B1 (en) 2010-08-27 2013-08-13 Amazon Technologies, Inc. Optimistically consistent arbitrary data blob transactions
WO2013065135A1 (ja) * 2011-11-01 2013-05-10 株式会社野村総合研究所 データ共有システム
US8918363B2 (en) 2011-11-14 2014-12-23 Google Inc. Data processing service
US8782441B1 (en) * 2012-03-16 2014-07-15 Google Inc. Methods and systems for storage of large data objects
US10968477B2 (en) 2012-10-15 2021-04-06 Life Genetics Lab, Llc Method for genetic detection using interspersed genetic elements: a multiplexed DNA analysis system
JP5774794B2 (ja) 2012-12-05 2015-09-09 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
CN103502957B (zh) 2012-12-28 2016-07-06 华为技术有限公司 数据处理方法及装置
US10275397B2 (en) 2013-02-22 2019-04-30 Veritas Technologies Llc Deduplication storage system with efficient reference updating and space reclamation
US20160110261A1 (en) 2013-05-07 2016-04-21 Axcient, Inc. Cloud storage using merkle trees
US10157186B2 (en) 2013-07-18 2018-12-18 Microsoft Technology Licensing, Llc Data handling
US9268806B1 (en) 2013-07-26 2016-02-23 Google Inc. Efficient reference counting in content addressable storage
US9367557B1 (en) 2013-09-26 2016-06-14 Emc Corporation System and method for improving data compression
US10187358B2 (en) * 2013-12-03 2019-01-22 Amazon Technologies, Inc. Data transfer optimizations
US10454970B2 (en) 2014-06-30 2019-10-22 Vescel, Llc Authorization of access to a data resource in addition to specific actions to be performed on the data resource based on an authorized context enforced by a use policy
US10089489B2 (en) * 2015-06-02 2018-10-02 ALTR Solutions, Inc. Transparent client application to arbitrate data storage between mutable and immutable data repositories
US10075298B2 (en) * 2015-06-02 2018-09-11 ALTR Solutions, Inc. Generation of hash values within a blockchain
US10193696B2 (en) * 2015-06-02 2019-01-29 ALTR Solutions, Inc. Using a tree structure to segment and distribute records across one or more decentralized, acylic graphs of cryptographic hash pointers
US9881176B2 (en) * 2015-06-02 2018-01-30 ALTR Solutions, Inc. Fragmenting data for the purposes of persistent storage across multiple immutable data structures
US10042782B2 (en) * 2015-06-02 2018-08-07 ALTR Solutions, Inc. Immutable datastore for low-latency reading and writing of large data sets
US10114970B2 (en) * 2015-06-02 2018-10-30 ALTR Solutions, Inc. Immutable logging of access requests to distributed file systems
US11347878B2 (en) * 2015-06-02 2022-05-31 ALTR Solutions, Inc. Replacing distinct data in a relational database with a distinct reference to that data and distinct de-referencing of database data
US10366247B2 (en) * 2015-06-02 2019-07-30 ALTR Solutions, Inc. Replacing distinct data in a relational database with a distinct reference to that data and distinct de-referencing of database data
US10121019B2 (en) * 2015-06-02 2018-11-06 ALTR Solutions, Inc. Storing differentials of files in a distributed blockchain
US10942813B2 (en) 2015-10-30 2021-03-09 Netapp, Inc. Cloud object data layout (CODL)
US10868674B2 (en) * 2016-08-12 2020-12-15 ALTR Solutions, Inc. Decentralized database optimizations

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101404567A (zh) * 2007-03-30 2009-04-08 赛门铁克公司 在备份数据上实现读/写、多版本文件系统
CN104395904A (zh) * 2012-04-27 2015-03-04 网络装置公司 高效的数据对象存储和检索

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
集群存储系统数据容错研究;张建勋等;《河北大学学报(自然科学版)》;20060930(第05期);全文 *

Also Published As

Publication number Publication date
WO2017210798A1 (en) 2017-12-14
EP3469488A4 (en) 2019-12-11
JP7000422B2 (ja) 2022-01-19
CN109791538A (zh) 2019-05-21
CA3026584C (en) 2023-10-10
JP2019523955A (ja) 2019-08-29
EP3469488A1 (en) 2019-04-17
US20190303031A1 (en) 2019-10-03
EP4336374A2 (en) 2024-03-13
CA3026584A1 (en) 2017-12-14
US10705750B2 (en) 2020-07-07

Similar Documents

Publication Publication Date Title
CN109791538B (zh) 数据存储系统及其执行方法
US11086545B1 (en) Optimizing a storage system snapshot restore by efficiently finding duplicate data
US10445518B2 (en) Automatic file encryption
US10223544B1 (en) Content aware hierarchical encryption for secure storage systems
US10169606B2 (en) Verifiable data destruction in a database
US8631052B1 (en) Efficient content meta-data collection and trace generation from deduplicated storage
US8548957B2 (en) Method and system for recovering missing information at a computing device using a distributed virtual file system
US8041677B2 (en) Method and system for data backup
US8131723B2 (en) Recovering a file system to any point-in-time in the past with guaranteed structure, content consistency and integrity
US20200412525A1 (en) Blockchain filesystem
US8667032B1 (en) Efficient content meta-data collection and trace generation from deduplicated storage
US20070094312A1 (en) Method for managing real-time data history of a file system
US9785646B2 (en) Data file handling in a network environment and independent file server
US11675741B2 (en) Adaptable multi-layered storage for deduplicating electronic messages
US20230273864A1 (en) Data management system with limited control of external compute and storage resources
US20230142613A1 (en) Recovering infected snapshots in a snapshot chain
US20230259640A1 (en) Data storage systems and methods of an enforceable non-fungible token having linked custodial chain of property transfers prior to minting using a token-based encryption determination process
US7685186B2 (en) Optimized and robust in-place data transformation

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