CN114375444A - 用于文档数据库中的垃圾删除的方法和系统 - Google Patents
用于文档数据库中的垃圾删除的方法和系统 Download PDFInfo
- Publication number
- CN114375444A CN114375444A CN202080066269.3A CN202080066269A CN114375444A CN 114375444 A CN114375444 A CN 114375444A CN 202080066269 A CN202080066269 A CN 202080066269A CN 114375444 A CN114375444 A CN 114375444A
- Authority
- CN
- China
- Prior art keywords
- changes
- change
- characteristic
- document
- document database
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/93—Document management systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文公开了用于文档数据库中的垃圾收集和/或删除的示例性系统和方法。所述方法可以包括,针对第一改变集合中的每个改变,确定所述改变的第一特性是否由第二改变集合中的相应改变的第二特性来取代。第一改变集合的改变和第二改变集合的改变可以与文档属性有关。所述方法可以包括:如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
Description
对相关申请的交叉引用
本申请要求于2019年7月23日提交的题为“METHOD AND SYSTEM FOR GARBAGEDELETION IN A DOCUMENT DATABASE”的美国临时专利申请No.62/877,739和2020年7月22日提交的题为“METHODS AND SYSTEMS FOR GARBAGE DELETION IN A DOCUMENT DATABASE”的美国非临时专利申请No.16/935,839的优先权和权益,其全部内容通过引用并入本文中。
技术领域
本公开涉及数据库管理的领域,并且更特别地,涉及文档数据库中的垃圾收集的领域。
背景技术
现代网络和移动应用正变得越来越关注提供大规模的低时延全球操作。为了提供低时延操作,应用通常需要被部署在多个数据中心(DC)中,其中用户数据被复制到这些DC中的每一个,从而允许用户请求由最接近的地理DC来服务。然而,在通过数据的复制来减少用户感知的时延时,应用开发者现在面临着附加的、甚至更困难的挑战:管理多个副本的一致性。
当针对共享数据执行读取操作时,第一代内容分发网络(CDN)减少了用户感知的时延。该系统中的每个数据项被指定具有一主要站点,所有数据修改在该主要站点处发生,并且只读副本在每个其他站点处被维护。这些副本根据需要被周期性地刷新,并且缓存驱逐消息用于使存储在远程副本处的数据到期。更新通过主要站点来完全排序;这是因为该系统中的每个副本以相同的次序看到相同的更新。因此,用户观察到最终的一致性;写入在指定的主要副本处被执行,并且在其他DC处的读取最终返回最近一次写入的结果。尽管CDN针对读取主导的工作负载工作得很好,但是在其中工作负载可能是写入主导的情形下,它们未能辅助开发者。
相关技术的前述示例以及对其的限制意图是说明性的而非排他性的,并且不被认为是“现有技术”。相关技术的其他限制对于本领域技术人员来说在阅读说明书和研究附图后将变得清楚。
发明内容
公开了用于文档数据库中的垃圾收集和/或删除的系统和方法。
在一个方面,本文中公开了一种用于文档数据库中的垃圾删除的系统。示例性系统可以包括:至少一个存储器,用于存储计算机可执行指令;以及至少一个处理器,用于执行存储在存储器上的指令。所述指令的执行对所述至少一个处理器进行编程以执行操作,所述操作包括:针对第一改变集合中的每个改变,将所述改变的第一特性与第二改变集合中的相应改变的第二特性进行比较。第一改变集合的改变和第二改变集合的改变可以与所述文档数据库中的文档的属性有关。此外,所述操作包括:针对第一改变集合中的每个改变,基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变。所述操作可以包括:如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
在另一方面,本文中公开了一种用于文档数据库中的垃圾删除的方法。所述方法可以包括:针对第一改变集合中的每个改变,将所述改变的第一特性与第二改变集合中的相应改变的第二特性进行比较。第一改变集合的改变和第二改变集合的改变可以与所述文档数据库中的文档的属性有关。此外,所述方法包括:针对第一改变集合中的每个改变,基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变。所述方法可以包括:如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
在又一方面,本文中公开了一种其上存储有指令的非暂时性计算机可读介质,所述指令在由一个或多个计算机处理器执行时使得所述计算机处理器执行操作,所述操作包括:针对第一改变集合中的每个改变,将所述改变的第一特性与第二改变集合中的相应改变的第二特性进行比较。第一改变集合的改变和第二改变集合的改变可以与所述文档数据库中的文档的属性有关。此外,所述操作包括:针对第一改变集合中的每个改变,基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变。所述操作可以包括:如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
现在将参考附图来更特别地描述并且在权利要求中指出上述和其他优选特征,包括各种新颖的实现方式细节和事件组合。将理解的是,本文中描述的特定系统和方法仅以说明的方式来示出,而不是作为限制。如本领域技术人员将理解的,在不脱离任何本发明的范围的情况下,本文中描述的原理和特征可以在各种各样的实施例中采用。如从前述和以下描述中可以领会的,本文中描述的每一个特征、以及两个或更多个这种特征的每一个组合被包括在本公开的范围内,只要被包括在这种组合中的特征不会相互不一致。此外,任何特征或特征组合可以具体地从任何本发明的任何实施例中排除。
前述发明内容(包括一些实施例、其动机和/或其优点的描述)意图辅助读者理解本公开,并且不以任何方式限制任何权利要求的范围。
附图说明
作为本说明书的一部分而被包括的附图图示了当前优选的实施例,并且与上面给出的一般描述和下面给出的优选实施例的详细描述一起用于解释和教导本文中描述的原理。
图1是图示了示例性文档数据库系统和相关网络的示图。
图2A-2B是图示了用于示例映射的值收敛方法的示图。
图3A-3B是图示了用于示例序列的值收敛方法的示图。
图4是图示了用于并发版本场景中的垃圾收集的示例性方法的流程图。
图5是图示了用于包括词典式排序的垃圾收集的示例性方法的流程图。
图6是图示了用于包括更新先于移除(updates over removes)的优先级的垃圾收集的示例性方法的流程图。
图7是可以用于实现本文中描述的系统和方法的示例计算机系统的示图。
虽然本公开容许有各种修改和替代形式,但是其特定实施例已经在附图中以示例的方式示出,并且将在本文中详细描述。应当理解的是,本公开不限于所公开的特定形式,而是相反地,意图是覆盖落入本公开的精神和范围内的所有修改、等同物和替代方案。
具体实施方式
本文中描述了用于文档数据库中的垃圾收集和/或删除的示例性系统和方法。
管理复制的数据
如所讨论的,减少在访问部署在多个数据中心(DC)中的数据时用户感知的时延可能是非常合期望的。然而,这导致在管理多个副本当中的一致性方面的困难。为了解决低时延、写入主导的工作负载的问题,让一些、大多数或所有副本能够代表用户来接受和处理写入可能是有益的。然而,在每个DC处处理写入可能带来许多困难的挑战。首先,如果预期该系统中的所有副本以相同的次序观察到相同的事件,则该系统在副本之间进行某种形式的协调以获得该次序是有益的。在地理复制的情况下,这可能是高成本的,因为(i)彼此通信的副本之间的地理距离将使该系统减慢到最慢链路的速度;以及(ii)由于两个远程DC之间的网络分区,远程副本可能不可用。第二,如果放弃对所有写入进行完全排序的要求,则在不同的DC处发生的对相同数据项的并发写入可能会冲突,并且将需要对该系统进行配置以解析这些冲突的写入。
无冲突复制数据类型(CRDT)是应对自动冲突解决的一种方式。CRDT可以具有两种类型:基于状态的和基于操作的。在基于状态的CRDT的情况下,每个CRDT是抽象数据类型,其利用确定性合并操作而扩展。当两个改变有冲突时,使用用于处理合并的预定义过程来合并对象。基于操作的CRDT依赖于两个性质:(i)改变的因果递送,这确保了改变被递送到远程副本,该远程副本观察到这些改变发生的因果次序;以及(ii)并发操作的可交换性,这确保了关于因果次序并发的任何改变将导致相同的结果。已经看到基于状态的CRDT在工业中被大量采用,而基于操作的CRDT并没有取得如此大的成功,大概是由于现代编程框架中缺乏针对因果递送的工业支持。然而,由于并非所有类型的应用都可以使用CRDT和因果一致性(例如,其中由互斥体来控制访问的寄存器、具有非负余额不变性的银行账户转账)来建模,因此任何解决方案要全面,它还必须提供强一致性操作。
本文中描述了包括地理复制、无冲突复制文档数据库的示例性系统。该示例性文档数据库可以以两种模式来操作:(i)单主机模式(single-master mode),其中该系统提供强一致性和可序列化事务;或(ii)多主机模式(multi-master mode),其中该系统提供会话保证。该示例性文档数据库中的文档可以是可能包含序列和/或词典的JavaScript对象符号(JSON)文档。这些文档可以引用该示例性系统中的其他文档。对文档的修改可以使用基于操作的CRDT来建模,并且有冲突的改变可以通过使用取决于修改类型和/或文档类型的预定义合并过程来自动解析。对文档的修改可以被存储在日志中,并且可以使用可靠的因果广播以因果次序来异步地传播,从而使得用户能够在连接到单个DC时观察到会话保证。用户可以发起读取和写入,并且可以具有执行原子事务的能力。在多主机模式下,事务可以展现出并行快照隔离(parallel snapshot isolation)。
该示例性文档数据库可以提供以下各项:
I. 地理复制JSON文档数据库,其提供强一致性(单主机)或会话保证(多主机);
II. 基于操作的CRDT文档模型,其具有垃圾收集,以用于自动解决并发的、有冲突的改变;和/或
III. 具有可序列化隔离(单主机)或并行快照隔离(多主机)的事务。
如本文中所使用的,“垃圾收集”是指代对程序或数据库中未使用的对象(例如,数据)所占用的存储器或“垃圾”的回收的技术术语。通过实现垃圾收集,本文中描述的示例性系统和方法增加了计算系统的效率。例如,该示例性系统可以释放可以用于更重要数据的存储器,使得在管理这种数据库方面能够更灵活,使得用户能够具有更高效和/或更快速的计算和/或数据存储服务,和/或减少用于管理文档数据库中的未使用数据的资源。此外,垃圾收集可以使得数据库能够在给定存储单元中存储更多的用户数据,从而得到对存储单元的更好利用。这些优点在依赖于大量数据中心(其可能在地理上分布)来服务于其用户的计算网络中可能是重要的。因此,本文中描述的示例性系统和方法使得能够对数据进行更高效的存储,从而改进计算系统的运作。
图1图示了包括示例性文档数据库系统102的网络100以及其与其他网络组件的关系。示例性文档数据库102是被配置成在多个DC 104a、104b、104n(统称为104)(例如,数十个DC、数百个DC等)中操作的键值文档存储系统。每个DC 104可以复制一组数据库(例如,一个或多个数据库106a、106b、106n,统称为106)。每个数据库106可以包括一个或多个文档集合108a、108b、108n(统称为108)。可以使用查询语言来访问文档,该语言可以对集合进行操作,并且可以使得用户能够读取和/或写入文档。每个文档可以被指派唯一的键。该键可以在文档创建时由该系统来指派。
单个元数据数据库可以用于复制关于哪些数据库(例如,其标识)被哪些DC(例如,其标识)复制的信息。在每个DC内,节点集群可以负责每个数据库的存储。根据一个实施例,DC内的集群成员资格可以是强一致的,并且可以由例如Apache Zookeeper(由美国马里兰州Forest Hill的Apache Software Foundation提供)之类的服务来管理。
在一些实施例中,数据库被完全地复制。在一些实例中,并非每个DC都复制所有数据库。因此,可以部分地复制该系统,其中每个集合包含关于该集合应当在其处被复制的DC的元数据。
数据库可以以两种模式之一来操作:(i)单主机,其中单个DC负责处理针对数据库发出的读取和/或写入操作,并且复制该数据库的(该系统的)所有其他DC是被动的(例如,发出读取操作,但是不发出写入操作);或(ii)多主机,其中复制该数据库的每个DC被配置成接受和处理读取和/或写入操作。客户端设备110(本文中被称为客户端)可以自动连接到它们最接近的可用DC(例如,地理上最接近的)。如果被访问的数据库是单主机数据库,则读取和/或写入操作可以自动路由到主要副本。在单个DC内发生的写入可能是同步的。
在单主机数据库中,读取和写入观察到可线性化性。写入可能被写入到主要副本,但是可能被异步地递送到被动副本。在多主机数据库中,在无论哪个接收到请求的副本处都可以处理读取和写入操作。虽然客户端仍然连接到单个DC,但是多主机数据库可以观察到会话一致性。
该示例性数据库系统可以包括三个组件:全局持久性流、文档存储库和本地持久性流。可以复制每个组件以用于容错。
全局持久性流。第一个组件是一组全局持久性流,其包含针对复制相同数据库的远程DC的未确认的改变。每个目的副本和/或每个集合可以存在一个流。该示例性系统可以使用Apache Bookkeeper(由美国马里兰州Forest Hill的Apache Software Foundation提供)来实现。根据一个实施例,该示例性系统可以使用基于拉动的模型,其中远程副本订阅一个或多个流中的事件,并且远程DC以先进先出(FIFO)的次序将改变拉动到起源DC。当远程DC已经接收到更新时,可以对其进行处理、确认并且将其从该流中移除,从而确保在故障下的可靠递送。
文档存储库。第二个组件是文档存储库,其可以使用RocksDB(由美国加利福尼亚州Menlo Park的Facebook公司提供)来实现。文档存储库可以用于存储与集合中的每个键相关的事件和物质化状态。每个文档(针对集合中的每个键一个文档)可以由两个组件组成:(a)事件日志,其可以包括从与该键相关的持久性流中的改变取得的一些、大多数或所有事件;以及(b)物质化状态,其是事件日志中的事件的物质化版本。在一些实施例中,该物质化状态可以是优化,因此读取器不需要针对每次读取来等待从事件日志对文档进行物质化。
本地持久性流。第三个组件是本地持久性流,其可以包括数据库中发生的改变的实时视图。该系统可以使用Apache Bookkeeper来实现。每个项是从在该副本处发生的本地和/或传入的改变而得到的物质化状态,并且在一些实例中,随着改变的到达而被填充。
文档和文档索引
如上所描述,该示例性文档数据库系统中的文档可以以JSON格式被格式化,并且可以被聚集成集合。根据一个实施例,该示例性文档数据库系统支持两个类型的集合:(a)通用集合,其中任何自由形式的JSON文档可以存储在该系统中;和/或(b)边缘集合。
通用集合可以存储三种类型的文档:一个基元类型(primitive type)和两个递归类型。寄存器可以用作仅能够通过指派来修改的基元类型,并且可以包含不透明的值。映射和序列是递归类型;它们可以通过文档引用或通过值嵌入来包含其他映射、序列和/或基本类型。映射是无序的词典;序列可以被认为是从数组索引到值的映射。文档引用是在物质化后指向存储库中的其他键的指针。文档引用可以被递归地解析为物质化状态中的最终值。
边缘集合可以用于存储图形数据。边缘集合可以确保所有存储的JSON文档采取特定的形式。它们可以包括“从”字段和“到”字段,“从”字段和“到”字段分别指定图形中的源顶点和目的顶点。边缘可以用自由形式类型来注释,该自由形式类型标示着关系标注边缘的类型。
文档索引
该示例性文档数据库系统支持对文档的以下类型的索引中的一个或多个:
1. 地理位置。如果文档提供了包含纬度-经度元组的字段,则该元组可以用于便于地理查询。
2. 哈希。如果特定字段恰好是唯一的,则哈希索引可以用于基于该字段对文档进行索引。
3. 持久性。持久性索引是经久存储的哈希索引;它们不是在DC故障时被重新创建的,而是被经久地存储在盘上。
4.全文。给定要索引的字段,可以跨集合中的所有文档来构建Lucene风格的全文搜索索引。
5.跳过列表。跳过列表索引使用给定字段对文档进行索引,并且为高效的范围查询提供支持。
在一些实施例中,索引与它们正在索引的文档共置在相同节点上。它们可以与RocksDB中的文档一起存储,并且在事务中与文档一起变异,从而确保在故障下的全有或全无行为。
应用编程接口(API)
客户端可以使用类似于对JSON文档进行操作的结构化查询语言(SQL)的查询语言与该示例性文档数据库系统进行交互,从而使得客户端能够插入、改变和/或选择文档。文档可以使用由该示例性文档数据库系统指派的其唯一键来改变。
改变
客户端可以通过针对该系统的副本(例如,地理上最接近客户端的物理位置的副本)发布API命令来与该示例性文档数据库系统进行交互。当针对文档接收到改变操作时,进行接收的DC计算从当前物质化状态到客户端操作所生成的新状态的德尔塔(delta)(表示该改变)。在一些实施例中,该德尔塔描述了当前物质化状态与新状态之间的差异,并且可以不包含未修改的字段。
例如,DC1处的映射的状态以两个键开始:指向值1的键x和指向值2的键y。当用户发出将键y改变为值4并且添加具有值3的附加键z的操作时,生成仅包含对象的修改内容的改变。因此,该改变不包含键x。从用户的改变命令生成的该改变是德尔塔。
一旦已经生成了德尔塔,然后该德尔塔就被分解为表示对每个字段的改变的改变集合。在先前示例中,该示例性文档数据库系统针对映射生成的改变包含两个键,指向值4的键y和指向值3的键z。对该改变的分解创建了两个不同的改变,一个针对映射中的每个键,y和z。然后,这些分解的改变可以被插入到正在复制包含该键的集合的每个DC的全局持久性流中。
放置在全局持久性流中的改变集合可以由分解的德尔塔改变集合来表示,并且利用两个逻辑时钟来注释,这两个逻辑时钟是:(a)表示该改变所取决于的因果相关性的逻辑时钟;以及(b)表示该改变的唯一标识符的逻辑时钟。
然后,这些改变可以随后被应用于文档存储库中的文档的事件日志。如先前所讨论,该示例性文档数据库系统中的每个键具有文档存储库中的文档,并且该文档包含事件日志和物质化状态两者。每个文档中的事件日志是每个字段的事件日志集合;在先前讨论的映射的情况下,针对每个字段:x、y和z,存在单个事件日志。该示例性文档数据库系统将事件原子地插入到事件日志中,并且针对接收到的每个改变集合来改变物质化状态。最后,物质化状态被放置在DC处的本地持久性流中。
复制和一致性
如先前所讨论,每个DC提供由持久性流实现的改变流。如果指令远程DC来复制集合,则它可以订阅正在复制该集合的一个、一些或所有其他远程DC的流。远程DC可以配置成一次拉动单个组的改变(表示对该示例性文档数据库系统的单次写入,并且利用单个逻辑时钟来注释),并且在本地应用那些改变。远程DC可以在移动到下一组改变之前远程地确认该改变已经被应用。改变保持在持久性流中,直到远程DC确认或当预定时间窗口到期时,这可能需要DC重新加入集群并且执行完全同步。
DC以FIFO次序接收来自其他DC的改变。以在发送方日志处应用的次序通过流来接收改变。使用向量时钟来给改变加时间戳,该向量时钟用于捕获因果相关性。在接收到改变后,对该改变进行缓冲,并且仅在满足因果相关性时应用该改变。因此,在单个会话内,用户观察到因果一致性,这由单调读取、单调写入、读取您的写入、以及写入跟随读取的组合来标记。这也被称为会话一致性。
在一些实施例中,由于客户端被自动路由到最接近的可用DC,因此客户端的一致性保证可能由于两个原因而减弱。首先,如果客户端是改变位置的设备,例如移动设备、膝上型计算机、平板计算机、笔记本计算机、智能手表、智能眼镜等,则先前访问的DC在所有交互期间可能不再是地理上最接近的DC。第二,如果DC出现故障,则客户端可能被路由到另一个DC,以确保可用性。在这些情况中的一个或多个下,客户端的保证对于最终一致性来说被减弱。这些保证由于无法满足以下性质而减弱:(a)单调读取:客户端可能在不包含先前观察到的写入的DC处开始新的会话;(b)读取您的写入:客户端可能开始一会话,并且不能够观察到其自己的写入;(c)单调写入:客户端可能在不包含由客户端在先前副本处执行的先前写入操作的DC处开始新的会话;和/或(d)写入跟随读取:客户端可能在新的DC处开始会话,并且基于不可见的读取来写入文档。
要注意的是,可以防止两个不同的客户端在相同DC(例如,单个DC)上进入冲突,因为客户端之一必须在做出该改变之前获取DC中的锁。这迫使对相同DC的并行客户端请求变为顺序的。
值收敛
该系统中的改变可能并发地发生,并且因此针对给定键的值可能基于并发改变的递送次序(它们在每个DC的针对键的事件日志中被放置的次序)在个体副本处发散。该示例性文档数据库系统提供了一种机制来确保确定性值收敛而无需全局协调。
用于确保确定性值收敛的一种机制是根据基于操作的CRDT。基于操作的CRDT的直觉如下:如果改变以遵守事件因果次序的次序被递送到每个副本,并且并发改变是可交换的,则接收相同改变集合的所有副本将达到相同的值。这是被形式化为“强最终一致性”的性质,其中CRDT是实现该性质的一个数据结构。
然而,对于使本质上不可交换的操作可交换(commute)的挑战仍然存在困难。下面提供了若干个示例。
寄存器。寄存器——其唯一操作是对值的指派——提出了令人感兴趣的挑战。虽然对相同值的并发指派确实可交换,但是对两个不同值的并发指派却不会。
该示例性文档数据库系统可以基于更新中的节点标识符的词典式排序在要选择的有冲突改变之间仲裁选择,从而基于有冲突改变的该排序针对最大值进行选择。
引用。引用与寄存器共享类似的设计。它们是被限制为仅包含指向该示例性系统中的其他键的值的寄存器。由于寄存器对不同值的并发指派是不可交换的,因此寄存器所使用的仲裁策略必须也被用于引用。
映射。映射也提出了令人感兴趣的挑战。映射通常提供添加和移除键、以及修改键的值的能力。该示例性文档数据库系统可以确保对词典的并发修改可交换,并且还确保对相同映射中的每个键的并发修改可交换。
图2A图示了存储单个集合的映射(例如,映射M={x→{1}})的示例200a。通过在第一数据中心DC1处向键x添加值2来并发地修改映射M,并且映射M可以被表示为M1={x→{1,2}}。可以通过在DC2处向键x添加值3来修改映射M,并且映射M被表示为M2={x→{1, 3}}。在这种情况下,对于这些并发操作,集合并集操作在每个副本处产生了相同的结果:M1∪M2={x→{1, 2, 3}}。
然而,在并发移除和更新下,可能出现更复杂的情况。在图2B中提供的示例200b中,针对相同的初始映射M={x→{1}},在DC1中并发地移除键x,同时在DC2中将值2添加到存储在键x处的集合。
为了确定映射中的值应当如何收敛,在示例200b中,该示例性文档数据库系统对新键的插入被建模为对垂直(⊥)或空值的更新,键的更新可以优先于键的移除,并且移除捕获到被移除的元素。在先前情况下,为了实现这一点,所得到的映射在所有节点处将解析为M1∪M2={x→{2}}。对副本处的键的移除会在移除时移除所有内容,包括值1,并且更新会将2添加到该集合中。
由于该示例性文档数据库系统中的词典是递归的,因此它们可以包含其他映射、引用、序列和/或寄存器。本部分中概述的合并过程可以递归地遍及该映射来应用,以实现值收敛。
该示例性文档数据库系统的词典是递归的,因此它们可以包含其他词典以及寄存器(使用上面呈现的冲突解决语义)和序列(接下来讨论)。
序列。序列可能是具有挑战性的,因为修改该序列的效果可能不是可交换的。图3A-3B图示了示例300a、300b,示例300a、300b提供了通过添加新单词在两个或更多个DC中被并发地修改的序列。在该示例300a中,对序列302a的并发修改在两个DC在相同起始位置处并发地添加了单词的情况下发生。在序列302a“The fox jumps over the lazy dog”中,两个行为者(例如,用户将数据输入到客户端中,其中每个客户端连接到单独的DC)并发地修改该序列以分别在“fox”之前添加单词“quick”(例如,在DC1处的序列304a中)和在“fox”之前添加“brown”(例如,在DC2处的序列304b中)。可以仲裁对相同确切单元的更新,以确保正确的最终值。
在该示例性文档数据库系统中,序列302b本身被分解成表示该序列中的每个位置的单元。每个单元是对该数据库中的另一个文档的文档引用。该另一个文档作为寄存器被写入,并且对该单元的并发写入使用针对寄存器的收敛策略来解析。
因此,该示例性文档数据库系统可以具有的并发操作是将文档引用指派给序列302b中的位置。在这种情况下,该更新的节点标识符上的词典式次序被用来仲裁并发更新。这导致了最终语句308:“The quick, brown fox jumps over the lazy dog.”
为了简化表示,下面通过使用自然数作为文档引用标识符来示出这一点。在实践中,随机生成的通用唯一标识符(UUID)可以用于键标识符,并且使用向量时钟来检测并发更新。
事务
事务可以使得用户能够对该示例性数据库中的文档组执行操作。通过确保在DC中针对多个文档所应用的改变被原子地(例如,全有或全无)应用,事务可以是原子的。
隔离级别
该示例性文档数据库系统中的事务展现出各种隔离级别,这取决于要向其写入和从其读取的对象。针对访问共享资源的事务,只有针对在相同DC中执行的事务,才可以使用等待-死亡过程(wait-die process)来进行死锁检测和解决。
对于以单主机模式操作的数据库,事务是可序列化的。事务可以跨所有副本被完全地排序。读取和写入锁两者是在事务的开始处显式取得的。并发事务在读取-写入或写入-写入冲突下中止。
对于以多主机模式操作的数据库,事务展现出并行快照隔离。读取和写入锁两者是在写入时取得的,或者是在事务的开始时指定的。事务与改变的因果次序相关地被排序,并且并发事务使用上面概述的排序过程来仲裁。
垃圾收集
存储在每个文档内部的事件日志可以无限地增长。这被实现是为了确保在任何时候当新的改变到达时可以重新生成该文档的物质化状态。
如上所讨论,改变被存储为修改文档状态的一部分的操作。在基元类型的情况下,该改变设置寄存器的值。在递归类型的情况下,改变修改个体字段(例如,词典中的特定字段)。
由于对字段的改变是完全排序的(因为对文档的改变是因果排序的,并且总次序使用该改变的节点标识符来仲裁),因此该示例性文档数据库系统仅需要保留针对给定字段的最近事件。因此,在一些实施例中,可以收集、移除和/或删除其他事件(“垃圾”)。
CRDT
CRDT是复制数据类型,其在并发改变下最终收敛到相同的状态。CRDT实例可以被改变,而不需要与其副本的协调。这使得CRDT高度可用于写入。
CRDT可以被分类成基于状态的CRDT(例如,收敛性(convergent)复制数据类型(CvRDT))和基于操作的CRDT(例如,可交换复制数据类型(CmRDT))。基于状态的CRDT被配置成在副本当中散布状态,而基于操作的CRDT被设计成散布操作。
该示例性文档数据库系统可以使用基于操作的CRDT(即,CmRDT),其中,如果操作通过可靠因果广播(RCB)中间件而散布、和/或如果它们被配置成对于并发操作是可交换的,则保证副本收敛。
CmRDT操作的执行在两个阶段中完成,这两个阶段是准备和合并:
(1)在准备阶段中,对本地副本执行CmRDT操作。准备阶段审阅该操作和(可选地)当前状态,并且产生表示该操作的消息,该消息然后被散布到所有副本;以及
(2)合并阶段在所有副本处应用所散布的操作。
例如,用户可能期望在该示例性文档数据库系统中创建以下JSON文档:
{
first_name: John,
last_name: Doe,
zipcode: 94087
}
从CRDT的角度,上面包括作为不可变事件被记录在日志中作为准备阶段的一部分的三(3)个操作,如下:
<vector_clock, insert, first_name, John>
<vector_clock, insert, last_name, Doe>
<vector_clock, insert, zipcode, 94087>
类似地,每当用户想要改变文档中的字段时,每个改变都作为不可变事件被记录在日志中。例如,如果用户想要将“first_name”字段改变成“Jane”,则需要记录在日志中的所生成的不可变事件是:
<vector_clock, update, first_name, Jane>
换句话说,每当对文档进行改变时,CRDT都需要该示例性文档数据库系统创建不可变事件,并且附加到事件日志作为准备阶段的一部分。如果文档中的字段被改变100,000次,则最终文档仍然仅具有3个字段,但是底层事件日志将包含100,003个不可变事件。
文档的大小可以与对文档所做出的改变的数量成比例。因为该示例性数据库是地理复制数据库,所以对于数据库中的每个文档,每个位置都具有其自己的本地事件日志,即使从其他位置分区,该本地事件日志仍然可用于写入。
在一个位置处写入的事件异步且可靠地被复制到其他位置。然后,在到达位置处,将合并阶段应用于每个事件(以便与针对给定文档的该位置处的现有事件日志合并),以确定性地导出收敛状态。
当每个文档的事件日志被修剪(prune)时,该示例性文档数据库系统在每个位置处在合并阶段中操作。
在各种实施例中,该示例性文档数据库系统被配置成:
1. 在每个位置处修剪每个文档的事件日志,使得该文档的大小不会与该文档被改变的次数成比例地增长;
2. 当事件日志被修剪(即,收集垃圾)时,在合并阶段中进行操作;和/或
3. 以无协调的方式完成上述内容。换句话说,每个位置做出对其事件日志的修剪,而不需要与分布在全球的其他位置进行协调或同步。
以下定义考虑了数据库中的单个文档的单个日志。对于以下示例,假定文档中的所有属性将是自然数;因此,不考虑属性的嵌套。假定指派给那些寄存器的所有值也是自然数。
定义
节点集合N具有严格的总次序,其中没有两个节点具有相同的标识符。N是从自然数取得的,并且是自然数的有限子集。
N={n 1,…,n n }
向量时钟vc可以被定义为来自从N到Lamport时钟取得的节点标识符的映射。向量时钟使用Lamport时钟上的自然数的逐坐标扩展来排序。
VC={n→N} 其中n∈N
某个类型的操作t是有限集合,其仅包括针对更新和移除而执行的那些操作。
T={移除, 更新}
操作的类型使用在格T上定义的以下偏序(partial order)来排序。
操作o是由类型t和值v组成的对。值的范围是自然数,其中O的范围是所有可能的操作o。
改变c是4元组,由属性a、操作o、以及发布节点n和向量时钟vc组成。C的范围是所有可能的操作c,其中属性的范围是自然数。
改变集合cs是改变c的集合。所有可能的改变集合的集合CS由改变C的幂集来表示。
CS=P(C)
改变日志cl被定义为改变c的集合。所有可能的改变日志的集合CL是从改变集合的幂集CS取得的。
CL=P(CS)
下面定义了函数attr,以使用改变c的标准投影来访问给定改变c的属性。
attr(c)=π1(c)
下面定义了函数node,以使用标准投影来访问用于给定改变c的节点。
node(c)=π 3(c)
下面定义了函数type,以使用改变c的标准投影上的标准投影来访问给定改变c的改变类型。
type(c)=π1(π2(c))。
垃圾收集:并发版本
以下示例性垃圾收集过程考虑改变操作,并且将所有并发改变保存在改变日志cl中,直到改变日志cl中的每个改变集合cs被认为是冗余的。图4是图示了示例性垃圾收集过程400的流程图。
在过程400的步骤402中,针对给定属性,将(改变集合cs1中的)改变c1的向量时钟vc1与(改变集合cs2中的)改变c2的向量时钟vc2进行比较。在过程400的步骤404中,示例性系统可以确定由另一个改变c2来取代改变c1——如果这些改变是针对相同属性的,并且改变c1的向量时钟vc被严格地排序在改变c2的相关联向量时钟vc之前的话。
该步骤可以针对改变集合cs中的每个改变c来执行。例如,改变集合cs1可以包括改变c1a、c1b...c1n,并且改变集合cs2可以包括c2a、c2b...c2n。每个改变c与一向量时钟vc相关联,如下:
表1. 用于示例性垃圾收集方法的改变集合cs1与改变集合cs2的比较。
因此,如果每个改变c1的相应向量时钟vc1被排序在每个改变c2的相应向量时钟vc2中的对应向量时钟之前,则可以由改变集合cs2来取代改变集合cs1。
在步骤406中,如果针对改变集合cs(例如,改变集合cs1)中的每个改变,从改变日志cl取得的另一个改变集合cs'(例如,改变集合cs2)中存在取代那些改变的改变,则该示例性系统可以确定改变集合cs相对于改变日志cl是冗余的。
在步骤408中,如果改变集合cs1在改变集合cs2的情况下是冗余的,则该示例性系统可以从文档数据库中消除(例如,存档、移除、永久删除等)改变集合cs1。
在一些实施例中,具有单个属性的文档可以包括多达N个非冗余改变集合cs,其中N是集群中的节点数量。例如,DC可以包括以空文档开始的N个节点的集群。如果所有节点都不能够直接与其他节点中的任一个进行通信,并且如果每个节点在它将对文档属性的改变传送到其他节点中的任一个之前生成了该改变,则这些改变没有一个能够取代其他改变中的任一个。因此,如果这些改变没有一个被其他改变中的任一个所取代,则改变集合cs中没有一个将被认为是冗余的。
在一些实施例中,具有M个属性的文档可以针对每个属性包括多达N个非冗余改变集合cs,其中N是集群中的节点数量。
词典式排序
在一些实施例中,该示例性过程考虑更新操作,并且将所有并发改变保存在改变日志cl中,直到改变日志cs中的每个改变集合cs被认为是冗余的。然而,在该版本中,该系统保留具有最大节点标识符的并发更新。要注意的是,在该示例性实施例中,在词典式排序中不考虑移除。图5是图示了可以利用词典式排序的垃圾收集过程500的流程图。
在过程500的步骤502a中,针对给定属性,将改变c1的向量时钟vc1与改变c2的向量时钟vc2进行比较。在过程500的步骤504a中,该示例性系统可以确定由另一个改变c2来取代改变c1——如果这些改变是针对相同属性的,并且改变c1的相关联向量时钟vc被严格地排序在改变c2的相关联向量时钟之前的话。
替代地,在步骤502b中,将改变c1的节点标识符与改变c2的节点标识符进行比较。在步骤504b中,如果改变c1和c2是并发的,但是改变c2的节点标识符严格地更大,则该示例性系统可以确定由改变c2来取代改变c1。下面的表达式总结了本文中描述的取代逻辑:
如上面针对示例步骤404所详细描述的,步骤502a和504a(替代地,步骤502b和504b)可以针对改变集合cs中的每个改变c来执行。
在步骤506中,如果针对改变集合cs中的所有改变,在从改变日志cl取得的另一个改变集合cs'中存在取代改变c的改变c',则该示例性系统可以确定改变集合cs相对于改变日志cl是冗余的。
在步骤508中,如果改变集合cs1在改变集合cs2的情况下是冗余的,则该示例性系统可以从文档数据库中消除(例如,存档、移除、永久删除等)改变集合cs1。
词典式排序——垃圾收集的最小性
在一些实施例中,具有单个属性的文档可以仅包括单个非冗余改变集合cs。
例如,DC可以包括以空文档开始的N个节点的集群。如果在一段时间内,所有节点都不能够直接与其他节点中的任一个进行通信,并且如果每个节点在它将对该属性的改变传送到其他节点中的任一个之前生成了该改变,则这些改变没有一个能够取代其他改变中的任一个。鉴于每个节点具有唯一的节点标识符,改变中的一个必须取代另一个。因此,如果针对每一对改变集合cs,改变集合cs中的一个必须取代另一个,则传递性地(transitively)仅有单个改变集合cs将是非冗余的。
具有M个属性的文档可以包括多达M个非冗余改变集合cs。
更新先于移除的优先级
该示例性垃圾收集过程可以使用词典顺序上最大的节点标识符来对并发更新进行仲裁,和/或可以考虑其中更新应当取代移除的更新。图6是图示了可以利用更新先于移除的优先级的垃圾收集过程600的流程图。
在过程600的步骤602a中,针对给定属性,将改变c1的向量时钟vc1与改变c2的向量时钟vc2进行比较。在过程600的步骤604a中,该示例性系统可以确定可以由另一个改变c2来取代改变c1——如果这些改变是针对相同属性的,但是改变c1的相关联向量时钟vc被严格地排序在改变c2的相关联向量时钟vc之前的话。
替代地,在步骤602b中,将改变c1的词典式次序与改变c2的词典式次序进行比较。在步骤604b中,如果改变是并发的,则该示例性系统可以确定可以由改变c2来取代改变c1,并且当两种类型的改变都是更新时,则具有最大词典式次序的更新是优先的。替代地,在步骤602c中,该系统被配置成将改变c1的改变类型与改变c2的改变类型进行比较。在步骤604c中,如果改变c1的改变类型是移除,并且改变c2的改变类型是更新,则该系统可以确定可以由改变来c2取代改变c1,这是因为更新优先于移除。
如上面针对示例步骤404所详细描述的,步骤602a和604a(替代地,步骤602b和604b)可以针对改变集合cs中的每个改变c来执行。
在步骤606中,如果针对改变集合cs中的所有改变,在从改变日志cl取得的另一个改变集合cs'中存在取代改变c的改变c',则该示例性系统可以确定改变集合cs相对于改变日志cl是冗余的。
在步骤608中,如果改变集合cs1在改变集合cs2的情况下是冗余的,则该示例性系统可以从文档数据库中消除(例如,存档、移除、永久删除等)改变集合cs1。
更新先于移除的优先级——垃圾收集的最小性
在一些实施例中,如果所执行的操作的所有类型都是更新,则具有单个属性的文档可以仅包括单个非冗余改变集合。
例如,DC可以包括以具有被设置为1的单个属性的文档开始的N个节点的集群。如果所有节点都不能够直接与其他节点中的任一个进行通信,并且如果每个节点在它将该改变传送到其他节点中的任一个之前生成了对该属性的更新,则这些改变没有一个能够取代其他改变中的任一个。鉴于每个节点具有唯一的节点标识符,基于该节点标识符,改变中的一个可以取代另一个。因此,如果针对每一对改变集合,改变集合中的一个必须取代另一个,则传递性地仅有单个改变集合将是非冗余的。
在一些实施例中,如果所执行的操作的类型是具有由第一节点进行的单个移除的更新,则具有单个属性的文档可以仅包括单个非冗余改变集合。
例如,DC可以包括以具有被设置为1的单个属性的文档开始的N个节点的集群。如果(i)所有节点都不能够直接与其他节点中的任一个进行通信、(ii)每个节点生成对该属性的更新、并且(iii)第一节点移除了该属性,则在节点中的任一个可以与任何其他节点进行通信之前,这些改变没有一个能够取代其他改变中的任一个。鉴于更新凌驾于移除,并且每个节点具有可以基于移除来取代任何其他节点的唯一的节点标识符,因此传递性地仅有单个改变集合将是非冗余的。
在一些实施例中,如果所执行的操作的类型是具有由第一节点进行的单个更新的移除,则具有单个属性的文档可以仅包括单个非冗余改变集合。
例如,DC可以包括以具有被设置为1的单个属性的文档开始的N个节点的集群。如果(i)所有节点都不能够直接与其他节点中的任一个进行通信、(ii)每个节点生成针对该属性的移除、并且(iii)第一节点更新了该属性,则在节点中的任一个可以与任何其他节点进行通信之前,这些改变没有一个能够取代其他改变中的任一个。鉴于更新凌驾于移除,并且每个节点具有可以基于移除来取代任何其他节点(通过引理4.1)的唯一的节点标识符,因此传递性地仅有单个改变集合将是非冗余的。
具有M个属性的文档可以包括多达M个非冗余改变集合。
基于计算机的实现方式
在一些示例中,上面描述的处理中的一些或全部可以在个人计算设备上、在一个或多个集中式计算设备上、或者通过一个或多个服务器经由基于云的处理来执行。在一些示例中,一些类型的处理发生在一个设备上,并且其他类型的处理发生在另一个设备上。在一些示例中,上面描述的数据中的一些或全部可以存储在个人计算设备上、存储在被托管在一个或多个集中式计算设备上的数据存储装置中、或者经由基于云的存储装置来存储。在一些示例中,一些数据被存储在一个位置中,并且其他数据被存储在另一个位置中。在一些示例中,可以使用量子计算。在一些示例中,可以使用函数式编程语言。在一些示例中,可以使用电存储器,诸如基于闪存的存储器。
图7是可以用于实现本文档中描述的技术的示例计算机系统700的框图。通用计算机、网络器具、移动设备或其他电子系统也可以包括系统700的至少部分。系统700包括处理器710、存储器720、存储设备730和输入/输出设备740。组件710、720、730和740中的每一个可以例如使用系统总线750而互连。处理器710能够处理用于在系统700内执行的指令。在一些实现方式中,处理器710是单线程处理器。在一些实现方式中,处理器710是多线程处理器。处理器710能够处理存储在存储器720中或存储设备730上的指令。
存储器720存储系统700内的信息。在一些实现方式中,存储器720是非暂时性计算机可读介质。在一些实现方式中,存储器720是易失性存储器单元。在一些实现方式中,存储器720是非易失性存储器单元。
存储设备730能够为系统700提供大容量存储。在一些实现方式中,存储设备730是非暂时性计算机可读介质。在各种不同的实现方式中,存储设备730可以包括例如硬盘设备、光盘设备、固态硬盘驱动器、闪存驱动器、或一些其他大容量存储设备。例如,存储设备可以存储长期数据(例如,数据库数据、文件系统数据等)。输入/输出设备740为系统700提供输入/输出操作。在一些实现方式中,输入/输出设备740可以包括以下各项中的一个或多个:网络接口设备(例如,以太网卡)、串行通信设备(例如,RS-232端口)和/或无线接口设备(例如,802.11卡、3G无线调制解调器或4G无线调制解调器)。在一些实现方式中,输入/输出设备可以包括被配置成接收输入数据并将输出数据发送到其他输入/输出设备(例如,键盘、打印机和显示设备760)的驱动设备。在一些示例中,可以使用移动计算设备、移动通信设备和其他设备。
在一些实现方式中,上面描述的方法的至少一部分可以通过指令来实现,该指令在执行时使得一个或多个处理设备执行上面描述的过程和功能。这种指令可以包括例如所解译的指令,诸如脚本指令或可执行代码、或存储在非暂时性计算机可读介质中的其他指令。存储设备730可以通过网络以分布式方式(诸如,服务器群或一组广泛分布的服务器)来实现,或者可以在单个计算设备中实现。
尽管在图7中已经描述了示例处理系统,但是在本说明书中描述的主题、功能操作和过程的实施例可以被实现在其他类型的数字电子电路中、实现在有形地体现的计算机软件或固件中、实现在包括在本说明书中公开的结构及其结构等同物的计算机硬件中、或者实现在它们中的一个或多个的组合中。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即编码在有形的非易失性程序载体上的计算机程序指令的一个或多个模块,以用于由数据处理装置执行或控制数据处理装置的操作。替代地或附加地,程序指令可以被编码在人工生成的传播信号上,该信号例如机器生成的电、光或电磁信号,该信号被生成以编码信息,以便传输到合适的接收器装置,以供数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基底、随机存取或串行存取存储器设备、或它们中的一个或多个的组合。
术语“系统”可以涵盖用于处理数据的所有种类的装置、设备和机器,作为举例包括可编程处理器、计算机或多个处理器或计算机。处理系统可以包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,处理系统还可以包括针对所讨论的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。
计算机程序(也可以被称为或描述为程序、软件、软件应用、模块、软件模块、脚本或代码)可以以任何形式的编程语言来编写,这些语言包括编译或解译语言、声明式或过程式语言,并且它可以以任何形式来部署,包括作为独立程序或作为模块、组件、子例程、或适合用于计算环境的其他单元。计算机程序可以但不需要对应于文件系统中的文件。程序可以被存储在保存其他程序或数据(例如,被存储在标记语言文档中的一个或多个脚本)的文件的一部分中、存储在专用于所讨论的程序的单个文件中、或者存储在多个协调文件(例如,存储一个或多个模块、子程序或部分代码的文件)中。计算机程序可以被部署为在一个计算机上执行,或者在位于一个站点处或跨多个站点分布并且通过通信网络互连的多个计算机上执行。
本说明书中描述的过程和逻辑流程可以由一个或多个可编程计算机执行,该可编程计算机执行一个或多个计算机程序以通过对输入数据进行操作并且生成输出来执行功能。这些过程和逻辑流程也可以由专用逻辑电路来执行,并且装置也可以被实现为专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
适合于执行计算机程序的计算机可以包括例如通用或专用微处理器或其两者、或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或其两者接收指令和数据。计算机通常包括用于实行或执行指令的中央处理单元、以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备(例如磁盘、磁光盘或光盘),或者被可操作地耦合以从该一个或多个大容量存储设备接收数据、或向其传输数据、或两者都有。然而,计算机不需要具有这种设备。此外,计算机可以嵌入在另一个设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器、或便携式存储设备(例如,通用串行总线(USB)闪存驱动器),仅举几个示例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备,例如EPROM、EEPROM和闪速存储器设备;磁盘,例如内部硬盘或可移除磁盘;磁光盘;以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路来补充、或者被并入在专用逻辑电路中。
为了提供与用户的交互,本说明书中描述的主题的实施例可以在计算机上实现,该计算机具有:用于向用户显示信息的显示设备,例如CRT(阴极射线管)或LCD(液晶显示器)监视器,以及用户可以通过其向计算机提供输入的键盘和定点设备,例如鼠标或轨迹球。也可以使用其他种类的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式来接收来自用户的输入,包括听觉、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户进行交互;例如通过响应于从网络浏览器接收到的请求而将网页发送到用户的用户设备上的网络浏览器。
本说明书中描述的主题的实施例可以在计算系统中实现,该计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有图形用户接口或网络浏览器的客户端计算机,用户可以通过该接口或网络浏览器与本说明书中描述的主题的实现方式进行交互),或者包括一个或多个这种后端、中间件或前端组件的任何组合。该系统的组件可以通过数字数据通信的任何形式或介质(例如,通信网络)而互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”),例如互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般彼此远离,并且通常通过通信网络进行交互。客户端和服务器的关系是借助于运行在相应计算机上并且彼此之间具有客户端-服务器关系的计算机程序而产生的。
虽然本说明书包含许多具体的实现方式细节,但是这些细节不应当被解释为对所要求保护的范围的限制,而是应当被解释为对特定实施例特有的特征的描述。本说明书中在分离的实施例的上下文中描述的某些特征也可以在单个实施例中组合地实现。相反地,在单个实施例的上下文中描述的各种特征也可以在多个实施例中分离地或以任何合适的子组合来实现。此外,尽管特征可以在上面被描述为在某些组合中起作用,并且甚至最初被如此要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从该组合中删去,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定次序描述了操作,但是这不应当被理解为要求以所示的特定次序或顺序次序来执行这种操作、或要求执行所有图示的操作以实现合期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上面描述的实施例中的各种系统组件的分离不应当被理解为在所有实施例中都需要这种分离,并且应当理解的是,所描述的程序组件和系统通常可以被一起集成在单个软件产品中或者被封装到多个软件产品中。
已经描述了本主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的次序来执行,并且仍然获得合期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定次序或顺序次序来实现合期望的结果。在某些实现方式中,多任务和并行处理可能是有利的。可以从所描述的过程中提供其他步骤或阶段,或者可以消除步骤或阶段。因此,其他实现方式也在以下权利要求的范围内。
术语
本文中使用的措辞和术语是出于描述的目的,并且不应当被视为限制。
在说明书和权利要求书中使用的术语“近似”、短语“近似等于”和其他类似短语(例如,“X具有近似Y的值”或“X近似等于Y”)应当被理解为意指一个值(X)在另一个值(Y)的预定范围内。除非另行指示,否则该预定范围可以是加或减20%、10%、5%、3%、1%、0.1%或小于0.1%。
除非明确相反地指示,否则在说明书和权利要求书中使用的不定冠词“一(a和an)”应当被理解为意指“至少一个”。在说明书和权利要求书中使用的短语“和/或”应当被理解为意指如此结合的元素中的“任一个或两者”,即在一些情况下合取地(conjunctively)存在而在其他情况下析取地(disjunctively)存在的元素。利用“和/或”列出的多个元素应当以相同的方式来解释,即如此结合的元素中的“一个或多个”。还可以可选地存在除了“和/或”语句中具体标识的元素之外的其他元素,无论这些元素与那些具体标识的元素相关还是不相关。因此,作为非限制性示例,在与诸如“包括”之类的开放式语言结合使用时,对“A和/或B”的引用在一个实施例中可以指代只有A(可选地包括除了B之外的元素);在另一个实施例中指代只有B(可选地包括除了A之外的元素);在又一个实施例中,指代A和B两者(可选地包括其他元素);等等。
如在说明书和权利要求书中所使用的,“或”应当被理解为具有与上面定义的“和/或”相同的含义。例如,当将列表中的项分离时,“或”或“和/或”应被解释为包含性的,即包括多个元素或元素列表中的至少一个元素,但是还包括多个元素或元素列表中的多于一个元素,以及可选地,包括附加的未列出的项。只有明确相反地标识的术语(诸如,“……中的仅一个”或“……中的恰好一个”、或者当在权利要求中使用时的“由……组成”将指代包括多个元素或元素列表中的恰好一个元素。一般而言,如所使用的术语“或”当在排他性术语(诸如,“……中的任一个”、“……中的一个”、“……中的仅一个”或“……中的恰好一个”)前面时应仅解释为指示排他性的替代物(即,“一个或另一个,而不是两者”)。“基本上由……组成”当在权利要求中使用时应具有专利法领域中使用的其通常含义。
如在说明书和权利要求书中所使用的,关于一个或多个元素的列表的短语“至少一个”应当被理解为意指从元素列表中的任何一个或多个元素中选择的至少一个元素,但是不一定包括在元素列表中具体列出的每一个元素中的至少一个,并且不排除元素列表中的元素的任何组合。该定义还允许:可以可选地存在除了在短语“至少一个”所指代的元素列表中具体标识的元素之外的元素,无论这些元素与那些具体标识的元素相关还是不相关。因此,作为非限制性示例,“A和B中的至少一个”(或等效地,“A或B中的至少一个”,或等效地“A和/或B中的至少一个”)在一个实施例中可以指代在不存在B的情况下的至少一个A、可选地包括多于一个A(并且可选地包括除了B之外的元素);在另一个示例中,指代在不存在A的情况下的至少一个B、可选地包括多于一个B,(并且可选地包括除了A之外的元素);在又一个实施例中,指代至少一个A、可选地包括多于一个A,和至少一个B、可选地包括多于一个B(并且可选地包括其他元素);等等。
“包括”、“包括有”、“具有”、“包含”、“涉及”及其变型的使用意味涵盖此后列出的项和附加项。
在权利要求中使用诸如“第一”、“第二”、“第三”等序数术语来修饰权利要求元素本身并不暗指一个权利要求元素相对于另一个权利要求元素的任何优先级、优先性或次序、或方法的动作被执行的时间次序。序数术语仅用作标注,以将具有某个名称的一个权利要求元素与具有相同名称的另一个元素区分开(但这是针对序数术语的使用),从而区分权利要求元素。
Claims (21)
1.一种用于文档数据库中的垃圾删除的系统,所述系统包括:
至少一个存储器,用于存储计算机可执行指令;以及
至少一个处理器,用于执行存储在所述存储器上的指令,其中所述指令的执行对所述至少一个处理器进行编程以执行操作,所述操作包括:
针对第一改变集合中的每个改变:
将所述改变的第一特性与第二改变集合的相应改变的第二特性进行比较,其中第一改变集合的改变和第二改变集合的改变与所述文档数据库中的文档的属性有关;
基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变;
如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及
当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
2.根据权利要求1所述的系统,其中第一特性是第一向量时钟,并且第二特性是第二向量时钟,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第一向量时钟被排序在第二向量时钟之前时,确定由第二改变集合的改变来取代第一改变集合的改变。
3.根据权利要求1所述的系统,其中第一特性是第一节点标识符,并且第二特性是第二节点标识符,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第二节点标识符大于第一节点标识符时,确定由第二改变集合的改变来取代第一改变集合的改变。
4.根据权利要求3所述的系统,其中第一改变集合的改变和第二改变集合的改变是对所述文档的更新。
5.根据权利要求1所述的系统,其中第一特性是第一词典式次序,并且第二特性是第二词典式次序,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第二词典式次序大于第一词典式次序时,确定由第二改变集合的改变来取代第一改变集合的改变。
6.根据权利要求1所述的系统,其中第一特性是第一改变类型,并且第二特性是第二改变类型,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第二改变类型是更新并且第一改变类型是移除时,确定由第二改变集合的改变来取代第一改变集合的改变。
7.根据权利要求1所述的系统,其中针对包括所述属性的多个文档属性来执行所述操作。
8.根据权利要求1所述的系统,其中第一改变与第二改变是并发的。
9.根据权利要求1所述的系统,其中所述文档数据库被配置成在多个数据中心上进行操作。
10.根据权利要求9所述的系统,其中所述数据中心被配置成均复制所述文档数据库。
11.一种用于文档数据库中的垃圾删除的计算机实现的方法,所述方法包括:
针对第一改变集合中的每个改变:
将所述改变的第一特性与第二改变集合的相应改变的第二特性进行比较,其中第一改变集合的改变和第二改变集合的改变与所述文档数据库中的文档的属性有关;
基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变;
如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及
当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
12.根据权利要求11所述的方法,其中第一特性是第一向量时钟,并且第二特性是第二向量时钟,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第一向量时钟被排序在第二向量时钟之前时,确定由第二改变集合的改变来取代第一改变集合的改变。
13.根据权利要求11所述的方法,其中第一特性是第一节点标识符,并且第二特性是第二节点标识符,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第二节点标识符大于第一节点标识符时,确定由第二改变集合的改变来取代第一改变集合的改变。
14.根据权利要求13所述的方法,其中第一改变集合的改变和第二改变集合的改变是对所述文档的更新。
15.根据权利要求11所述的方法,其中第一特性是第一词典式次序,并且第二特性是第二词典式次序,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第二词典式次序大于第一词典式次序时,确定由第二改变集合的改变来取代第一改变集合的改变。
16.根据权利要求11所述的方法,其中第一特性是第一改变类型,并且第二特性是第二改变类型,并且
其中基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变包括:
当第二改变类型是更新并且第一改变类型是移除时,确定由第二改变集合的改变来取代第一改变集合的改变。
17.根据权利要求11所述的方法,其中针对包括所述属性的多个文档属性来执行所述方法。
18.根据权利要求11所述的方法,其中第一改变与第二改变是并发的。
19.根据权利要求11所述的方法,其中所述文档数据库被配置成在多个数据中心上进行操作。
20.根据权利要求19所述的方法,其中所述数据中心被配置成均复制所述文档数据库。
21.一种其上存储有指令的非暂时性计算机可读介质,所述指令在由一个或多个计算机处理器执行时使得所述计算机处理器执行操作,所述操作包括:
针对第一改变集合中的每个改变:
将所述改变的第一特性与第二改变集合的相应改变的第二特性进行比较,其中第一改变集合的改变和第二改变集合的改变与所述文档数据库中的文档的属性有关;
基于第一特性与第二特性的比较来确定是否由第二改变集合的改变来取代第一改变集合的改变;
如果由第二改变集合的相应改变来取代第一改变集合的每个改变,则确定第一改变集合在第二改变集合的情况下是否冗余;以及
当第一改变集合在第二改变集合的情况下冗余时,从所述文档数据库中消除第一改变集合。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962877739P | 2019-07-23 | 2019-07-23 | |
US62/877739 | 2019-07-23 | ||
US16/935,839 US11429576B2 (en) | 2019-07-23 | 2020-07-22 | Methods and systems for garbage deletion in a document database |
US16/935839 | 2020-07-22 | ||
PCT/US2020/043235 WO2021016440A1 (en) | 2019-07-23 | 2020-07-23 | Methods and systems for garbage deletion in a document database |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114375444A true CN114375444A (zh) | 2022-04-19 |
Family
ID=74193103
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080066269.3A Pending CN114375444A (zh) | 2019-07-23 | 2020-07-23 | 用于文档数据库中的垃圾删除的方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11429576B2 (zh) |
EP (1) | EP3994581A4 (zh) |
CN (1) | CN114375444A (zh) |
WO (1) | WO2021016440A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7428894B2 (ja) * | 2020-04-20 | 2024-02-07 | 富士通株式会社 | 情報処理装置、情報処理システム、及び情報処理プログラム |
US11651030B2 (en) * | 2021-04-06 | 2023-05-16 | International Business Machines Corporation | Delta-based conflict-free replicated data type arrays using dot stores that map dots to dot stores |
CN117216115B (zh) * | 2023-11-09 | 2024-02-02 | 西安热工研究院有限公司 | Dcs画面测点校验及订阅方法、系统、设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04310188A (ja) * | 1991-03-01 | 1992-11-02 | Internatl Business Mach Corp <Ibm> | 文書/画像ライブラリのためのライブラリサービス方法 |
US7925624B2 (en) * | 2006-03-31 | 2011-04-12 | Amazon Technologies, Inc. | System and method for providing high availability data |
US9384175B2 (en) * | 2008-02-19 | 2016-07-05 | Adobe Systems Incorporated | Determination of differences between electronic documents |
US10853592B2 (en) * | 2015-02-13 | 2020-12-01 | Yoti Holding Limited | Digital identity system |
US20200327116A1 (en) * | 2017-10-03 | 2020-10-15 | Lyconos, Inc. | Systems and methods for document automation |
-
2020
- 2020-07-22 US US16/935,839 patent/US11429576B2/en active Active
- 2020-07-23 WO PCT/US2020/043235 patent/WO2021016440A1/en unknown
- 2020-07-23 EP EP20843191.6A patent/EP3994581A4/en active Pending
- 2020-07-23 CN CN202080066269.3A patent/CN114375444A/zh active Pending
-
2022
- 2022-08-29 US US17/897,997 patent/US20230031418A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3994581A1 (en) | 2022-05-11 |
US20210064590A1 (en) | 2021-03-04 |
WO2021016440A1 (en) | 2021-01-28 |
US11429576B2 (en) | 2022-08-30 |
US20230031418A1 (en) | 2023-02-02 |
EP3994581A4 (en) | 2023-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chandra | BASE analysis of NoSQL database | |
US11874746B2 (en) | Transaction commit protocol with recoverable commit identifier | |
US10678808B2 (en) | Eager replication of uncommitted transactions | |
JP6553822B2 (ja) | 分散システムにおける範囲の分割および移動 | |
CN106991113B (zh) | 数据库环境中的表格复制 | |
US9218405B2 (en) | Batch processing and data synchronization in cloud-based systems | |
US20170213209A1 (en) | Enterprise blockchains and transactional systems | |
US20230031418A1 (en) | Methods and systems for garbage deletion in a document database | |
EP2874077B1 (en) | Stateless database cache | |
EP3719665B1 (en) | Supporting scalable distributed secondary index using replication engine for high-performance distributed database systems | |
EP2746971A2 (en) | Replication mechanisms for database environments | |
US11314717B1 (en) | Scalable architecture for propagating updates to replicated data | |
Gajendran | A survey on nosql databases | |
CN111881223B (zh) | 数据管理方法、设备、系统及存储介质 | |
Tauro et al. | A comparative analysis of different nosql databases on data model, query model and replication model | |
Waqas et al. | Transaction management techniques and practices in current cloud computing environments: A survey | |
WO2020192663A1 (zh) | 一种数据管理方法及相关设备 | |
CN115774754A (zh) | 基于分布式事务的元数据管理方法、装置、设备及介质 | |
Banothu et al. | Big-data: Acid versus base for database transactions | |
WO2024081139A1 (en) | Consensus protocol for asynchronous database transaction replication with fast, automatic failover, zero data loss, strong consistency, full sql support and horizontal scalability | |
US11789971B1 (en) | Adding replicas to a multi-leader replica group for a data set | |
US20130006934A1 (en) | Grid based replication | |
Tweed et al. | A universal nosql engine, using a tried and tested technology | |
Srinivasa et al. | Comparative study of different in-memory (no/new) sql databases | |
Dai et al. | Design patterns for cloud services |
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 |