CN110140116A - 用于启用事件删除的分布式数据库的方法和设备 - Google Patents

用于启用事件删除的分布式数据库的方法和设备 Download PDF

Info

Publication number
CN110140116A
CN110140116A CN201780078523.XA CN201780078523A CN110140116A CN 110140116 A CN110140116 A CN 110140116A CN 201780078523 A CN201780078523 A CN 201780078523A CN 110140116 A CN110140116 A CN 110140116A
Authority
CN
China
Prior art keywords
event
computing device
data base
distributed data
round
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.)
Granted
Application number
CN201780078523.XA
Other languages
English (en)
Other versions
CN110140116B (zh
Inventor
L·C·贝尔德三世
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
Sworth Ltd By Share Ltd
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 Sworth Ltd By Share Ltd filed Critical Sworth Ltd By Share Ltd
Priority to CN202310908850.0A priority Critical patent/CN116820695A/zh
Publication of CN110140116A publication Critical patent/CN110140116A/zh
Application granted granted Critical
Publication of CN110140116B publication Critical patent/CN110140116B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Abstract

在一些实施例中,一种设备包括与被配置为包括在第一组计算装置内的计算装置处的分布式数据库的实例相关联的存储器。所述设备被配置为基于事件共识协议的不同配置来确定事件集合中的每个事件的次序。所述不同配置在逻辑上与实现分布式数据库的计算装置的不同配置是相关的。所述设备被配置为基于对事件集合中的每个事件确定的次序来确定分布式数据库的实例的当前状态,并且基于与当前状态相关联的散列值来产生与分布式数据库的实例相关联的带签名状态。所述设备发送将包括指示带签名状态的事务的事件发布到分布式数据库的实例中的信号。

Description

用于启用事件删除的分布式数据库的方法和设备
相关申请的交叉引用
本申请要求2016年12月19日提交的、标题为“METHODS AND APPARATUS FOR ADISTRIBUTED DATABASE THAT ENABLES DELETION OF EVENTS”的美国临时专利申请第62/436,066号的优先权,该申请特此整个地通过引用并入本文。
技术领域
本文中所描述的实施例总体上涉及一种数据库系统,更具体地,涉及用于跨网络中的多个装置实现数据库系统的方法和设备。
背景技术
一些已知的分布式数据库系统试图在分布式数据库系统内对值(例如,关于事务发生的次序)实现共识。例如,在线多玩家游戏可能具有用户可以接入玩游戏的许多计算机服务器。如果两个用户同时试图在游戏中拾取特定的物品,则重要的是,分布式数据库系统内的服务器最终就这两个用户中的哪个首先拾取该物品达成协定。
这样的分布式共识可以用诸如Paxos算法或其变型的方法和/或处理来进行处理。按照这样的方法和/或处理,数据库系统的一个服务器被设置为“领导者”,领导者决定事件的次序。事件(例如,多玩家游戏内的事件)被转发给领导者,领导者选择事件的排序,领导者向数据库系统的其他服务器广播该排序。
然而,这样的已知的方法使用由数据库系统的用户(例如,游戏玩家)信任的一方运营的服务器(例如,中央管理服务器)。因此,对用于不需要领导者或受信任的第三方来操作数据库系统的分布式数据库系统的方法和设备的需要存在。
其他分布式数据库被设计为没有领导者,但是效率低下。例如,一个这样的分布式数据库基于可以实现共识的“区块链”数据结构。然而,这样的系统可能限于对于放在一起的所有参与者来说每秒总共少量的事务(例如,每秒7个事务),这对于大规模游戏或者对于数据库的许多传统应用是不足的。此外,数据库的规模随着时间的增大可能使计算资源的使用增加,例如,当存储器资源存储冗余的或不必要的数据时,它们可能变得不可管理和/或未充分利用。因此,对于在没有领导者的情况下实现共识并且高效率地管理计算资源的分布式数据库系统的需要存在。
发明内容
在一些实施例中,一种设备包括与被配置为包括在第一组计算装置内的计算装置处的分布式数据库的实例相关联的存储器。所述设备被配置为基于事件共识协议的不同配置来确定事件集合中的每个事件的次序。所述不同配置在逻辑上与实现分布式数据库的计算装置的不同配置是相关的。所述设备被配置为基于对事件集合中的每个事件确定的次序来确定分布式数据库的实例的当前状态,并且基于与当前状态相关联的散列值来产生与分布式数据库的实例相关联的带签名状态(signed state)。所述设备发送将包括指示带签名状态的事务的事件发布到分布式数据库的实例中的信号。
附图说明
图1是例示说明根据实施例的分布式数据库系统的高级框图。
图2是例示说明根据实施例的分布式数据库系统的计算装置的框图。
图3-6例示说明根据实施例的散列图的例子。
图7是例示说明根据实施例的第一计算装置和第二计算装置之间的通信流程的流程图。
图8是根据实施例的散列图的例子。
图9是根据实施例的散列图的例子。
图10A-10B例示说明根据实施例的用于与散列图一起使用的示例共识法。
图11A-11B例示说明根据实施例的用于与散列图一起使用的示例共识法。
图12A-12B例示说明根据实施例的用于与散列图一起使用的示例共识法。
图13是根据实施例的分布式数据库的初始状态的表示。
图14是例示说明根据实施例的与对于分布式数据库更新、添加、移除成员相关联的操作的例子的流程图。
图15是例示说明根据实施例的基于接收轮次(rounds)接受和拒绝事件的流程图。
图16是例示说明根据实施例的分布式数据库的两个成员之间的同步处理的流程图。
具体实施方式
在一些实施例中,一种设备包括计算装置处的分布式数据库的实例,所述实例被配置为被包括在实现所述分布式数据库的计算装置集合内。所述设备还包括处理器,所述处理器被配置为定义通过根据对集合产生的唯一标识符的指定而取得的分布式数据库的初始状态,每对包括与分布式数据库的实例相关联的公钥和随机化值。所述分布式数据库被配置为基于由实现所述分布式数据库的计算装置集合签名的收敛状态,来在分布式数据库的实例之间同步事件,以使得与分布式数据库的当前状态和未来的状态无关的事件不在所述计算装置集合之间交换。所述处理器还被配置为通过定义所述分布式数据库的带签名状态来从分布式数据库的实例移除不必要的事件。这使由在实现所述分布式数据库的计算装置集合之间同步冗余的或无关的事件引起的开销减小。这还使这样的计算装置集合的本地存储器的未充分利用减少。
在一些实施例中,一种设备包括与计算装置处的分布式数据库的实例相关联的存储器,所述实例被配置为被包括在一组计算装置内,所述一组计算装置经由操作地耦合到所述一组计算装置的网络来实现所述分布式数据库。所述一组计算装置与所述分布式数据库所关联的事件共识协议的第一配置相关联。所述设备包括操作地耦合到所述存储器的处理器。所述处理器被配置为从所述一组计算装置中的计算装置集合接收事件集合。所述事件集合中的每个事件与(1)事务集合和(2)接收轮次号相关联。所述处理器被配置为基于以下各项来确定事件集合中的每个事件的次序:(1)事件共识协议在接收的与该事件相关联的轮次号不大于接收的由所述分布式数据库的实例识别的轮次号阈值时的第一配置;以及(2)事件共识协议在接收的与该事件相关联的轮次号大于接收轮次号阈值时的第二配置。所述处理器被配置为基于对所述事件集合中的每个事件确定的次序来确定所述分布式数据库的实例的当前状态。所述处理器被配置为基于与当前状态相关联的散列值来产生与所述分布式数据库的实例相关联的带签名状态。所述散列值通过与第一计算装置相关联的私钥被数字签名。所述处理器被进一步配置为发送将包括指示带签名状态的事务的事件发布到所述分布式数据库的实例中的信号。
在一些实施例中,一种设备包括与第一计算装置处的分布式数据库的实例相关联的存储器,所述实例被配置为被包括在一组计算装置内,所述一组计算装置经由操作地耦合到所述一组计算装置的网络来实现所述分布式数据库。所述设备包括操作地耦合到所述存储器的处理器。所述处理器被配置为从所述一组计算装置中的第二计算装置接收事件。所述事件是与父事件集合相关联的字节序列。父事件集合中的每个父事件与(1)散列值和(2)轮次创建值相关联。所述处理器被配置为当满足第一准则或第二准则中的至少一个时将接收的事件排除在事件的次序的确定之外。第一准则在以下时候得到满足:(1)父事件集合中的至少一个父事件在所述分布式数据库的实例中没有标识符;以及(2)所述至少一个父事件与大于第一轮次创建阈值的轮次创建值相关联。第二准则在以下时候得到满足:(1)第一准则没有得到满足;以及(2)父事件集合中的每个父事件与小于第二轮次创建阈值的轮次创建值相关联。所述处理器被进一步配置为当事件基于第一准则或第二准则没有被排除时将该事件存储在所述分布式数据库的实例中。
在一些实施例中,一种设备包括与第一计算装置处的分布式数据库的实例相关联的存储器,所述实例被配置为被包括在一组计算装置内,所述一组计算装置经由操作地耦合到所述一组计算装置的网络来实现所述分布式数据库。所述设备包括操作地耦合到所述存储器的处理器。所述处理器被配置为将由所述一组计算装置中的第二计算装置定义的一组事件中的第一事件集合的指示存储在所述存储器中。所述一组事件中的每个事件包括与(1)序列值和(2)有序的事务集合相关联的字节序列。所述处理器被配置为将同步请求发送给多个计算装置中的第三计算装置。同步请求包括第一标识符和第二标识符。第一标识符识别第一事件集合中的与如下序列值相关联的事件,所述序列值小于与第一事件集合中的每个剩余的事件相关联的序列值。第二标识符识别第一事件集合中的与如下序列值相关联的事件,所述序列值大于与第一事件集合中的每个剩余的事件相关联的序列值。所述处理器被配置为响应于同步请求,从第三计算装置接收由第二计算装置定义的所述一组事件中的第二事件集合。所述处理器被配置为将第二事件集合的指示存储在所述存储器中。第二事件集合中的每个事件不包括在第一事件集合中。所述处理器被配置为基于以下各项来确定所述分布式数据库的实例的当前状态:(1)事件共识协议,(2)第一事件集合,以及(3)第二事件集合。所述处理器被配置为基于与当前状态相关联的散列值来产生所述分布式数据库的实例的带签名状态。散列值通过与第一计算装置相关联的私钥被数字签名。所述处理器被配置为发送将包括指示带签名状态的事务的事件发布到所述分布式数据库的实例中的信号。所述处理器被配置为从所述一组计算装置中的计算装置集合接收与包括指示带签名状态的事务的事件相关联的协定的指示。所述处理器被进一步配置为基于协定的指示、从所述存储器移除第一事件集合的指示和第二事件集合的指示。
在一些实施例中,一种设备包括第一计算装置处的分布式数据库的实例,所述实例被配置为被包括在计算装置集合内,所述计算装置集合经由操作地耦合到所述计算装置集合的网络来实现所述分布式数据库。所述设备还包括操作地耦合到存储所述分布式数据库的实例的存储器的处理器。所述处理器被配置为在第一时间处定义链接到第一事件集合的第一事件。所述处理器被配置为在第一时间之后的第二时间处、从所述计算装置集合中的第二计算装置接收表示第二事件的信号,第二事件(1)由第二计算装置定义并且(2)链接到第二事件集合。所述处理器被配置为至少基于协议的结果来识别与第三事件集合相关联的次序。第三事件集合中的每个事件来自第一事件集合或第二事件集合中的至少一个。所述处理器被配置为将与第三事件集合相关联的次序存储在所述分布式数据库的实例中。
在一些情况下,第三事件集合中的每个事件与属性(例如,序列号、世代号、轮次号、接收的编号和/或时间戳等)集合相关联。所述协议的结果可以包括关于第三事件集合中的每个事件的属性集合中的每个属性的值。属性集合中的第一属性的值可以包括第一数值,属性集合中的第二属性的值可以包括与第一数值相关联的二进制值。关于第三事件集合中的事件的第二属性(例如,轮次增量值)的二进制值可以基于该事件和链接到该事件的第四事件集合之间的关系是否满足准则(例如,由该事件强识别的若干个事件)。第四事件集合中的每个事件是(1)第三事件集合中的事件的祖先,并且(2)与和第四事件集合中的剩余的事件共同的第一共同属性(例如,共同的轮次号、是第R轮第一个事件的指示等)相关联。第一共同属性可以指示由所述计算装置集合中的每个计算装置定义的事件与第一特定值(例如,是第R轮第一个事件的指示等)相关联的第一实例。
所述属性集合中的第三属性(例如,接收轮次号)的值可以包括基于事件和链接到该事件的第五事件集合之间的关系的第二数值。第五事件集合中的每个事件是该事件的后代,并且与和第五事件集合中的剩余的事件共同的第二共同属性(例如,是著名的)相关联。第二共同属性可以与(1)第三共同属性(例如,是第R轮第一个事件或证据(witness))和(2)基于指示集合的结果相关联,所述第三共同属性指示由所述计算装置集合中的每个计算装置定义的第二事件与不同于第一特定值的第二特定值相关联的第一实例。所述指示集合中的每个指示可以与第六事件集合中的事件相关联。第六事件集合中的每个事件可以与第四共同属性相关联,所述第四共同属性指示由所述计算装置集合中的每个计算装置定义的第三事件与不同于第一特定值和第二特定值的第三特定值相关联的第一实例。在一些情况下,第一特定值是第一整数(例如,第一轮次号R),第二特定值是大于第一整数的第二整数(例如,第二轮次号R+n),第三特定值是大于第二整数的第三整数(例如,第三轮次号R+n+m)。
在一些实施例中,一种设备包括存储器和处理器。所述存储器包括第一计算装置处的分布式数据库的实例,所述实例被配置为被包括在计算装置集合内,所述计算装置集合经由操作地耦合到所述计算装置集合的网络来实现所述分布式数据库。所述处理器操作地耦合到存储所述分布式数据库的实例的存储器,并且被配置为接收表示链接到事件集合的事件的信号。所述处理器被配置为至少基于协议的结果来识别与所述事件集合相关联的次序。所述处理器被配置为将与所述事件集合相关联的次序存储在所述分布式数据库的实例中。
在一些实施例中,一种非暂时性处理器可读介质存储表示处理器将执行的指令的代码,所述代码用于接收表示链接到事件集合的事件的信号,并且基于与所述事件集合中的每个事件相关联的轮次和何时递增与每个事件相关联的轮次的指示来识别与所述事件集合相关联的次序。所述代码进一步包括使处理器将与所述事件集合相关联的次序存储在第一计算装置处的分布式数据库的实例中的代码,所述实例被配置为被包括在计算装置集合内,所述计算装置集合经由操作地耦合到所述计算装置集合的网络来实现所述分布式数据库。所述分布式数据库的实例操作地耦合到所述处理器。
在一些实施例中,第一计算装置处的分布式数据库的实例可以被配置为被包括在计算装置集合内,所述计算装置集合经由操作地耦合到所述计算装置集合的网络来实现所述分布式数据库。第一计算装置将多个事务存储在分布式数据库的实例中。数据库收敛模块可以在第一计算装置的存储器或处理器中实现。数据库收敛模块可以与所述分布式数据库的实例操作地耦合。数据库收敛模块可以被配置为在第一时间处定义链接到第一事件集合的第一事件。第一事件集合中的每个事件是字节序列,并且与(1)多个事务集合中的一个事务集合和(b)该事务集合所关联的次序相关联。所述事务集合中的每个事务来自多个事务。数据库收敛模块可以被配置为在第一时间之后的第二时间处、从所述计算装置集合中的第二计算装置接收第二事件,所述第二事件(1)由第二计算装置定义并且(2)链接到第二事件集合。数据库收敛模块可以被配置为定义链接到第一事件和第二事件的第三事件。数据库收敛模块可以被配置为至少基于第一事件集合和第二事件集合来识别与第三事件集合相关联的次序。第三事件集合中的每个事件来自第一事件集合或第二事件集合中的至少一个。数据库收敛模块可以被配置为至少基于以下各项来识别与所述多个事务相关联的次序:(1)与第三事件集合相关联的次序;以及(2)与所述多个事务集合中的每个事务集合相关联的次序。数据库收敛模块可以被配置为将存储在第一计算装置中的多个事务所关联的次序存储在所述分布式数据库的实例中。
在一些实施例中,第一计算装置处的分布式数据库的实例可以被配置为被包括在计算装置集合内,所述计算装置集合经由操作地耦合到所述计算装置集合的网络来实现所述分布式数据库。数据库收敛模块可以在第一计算装置的存储器或处理器中实现。数据库收敛模块可以被配置为在第一时间处定义链接到第一事件集合的第一事件。第一事件集合中的每个事件是字节序列。数据库收敛模块可以被配置为在第一时间之后的第二时间处、从所述计算装置集合中的第二计算装置接收第二事件,所述第二事件(1)由第二计算装置定义并且(2)链接到第二事件集合。第二事件集合中的每个事件是字节序列。数据库收敛模块可以被配置为定义链接到第一事件和第二事件的第三事件。数据库收敛模块可以被配置为至少基于第一事件集合和第二事件集合来识别与第三事件集合相关联的次序。第三事件集合中的每个事件来自第一事件集合或第二事件集合中的至少一个。数据库收敛模块可以被配置为将与第三事件集合相关联的次序存储在所述分布式数据库的实例中。
在一些实施例中,与第一事务相关联的数据可以在计算装置集合中的第一计算装置处接收,所述计算装置集合经由操作地耦合到所述计算装置集合的网络来实现分布式数据库。所述计算装置集合中的每个计算装置具有所述分布式数据库的单独的实例。与第一事务相关联的第一事务次序值可以在第一时间处定义。与第二事务相关联的数据可以从所述计算装置集合中的第二计算装置接收。事务集合可以被存储在第一计算装置处的所述分布式数据库的实例中。所述事务集合可以至少包括第一事务和第二事务。至少包括第一事务次序值和第二事务次序值的事务次序值集合可以在第一时间之后的第二时间处选择。第二事务次序值可以与第二事务相关联。数据库状态变量可以至少基于事务集合和事务次序值集合定义。
如本文中所使用的,模块可以例如是与执行特定功能相关联的任何组装件和/或操作地耦合的电气组件的集合,并且可以包括例如存储器、处理器、电气迹线、光学连接器、软件(在硬件中执行)等。
如本说明书中所使用的,单数形式“一种”、“一个”和“该”包括复数指代物,除非上下文另有清楚指示。因此,例如,术语“模块”意图意指单个模块或模块组合。例如,“网络”意图意指单个网络或网络组合。
图1是例示说明根据实施例的分布式数据库系统100的高级框图。图1例示说明跨四个计算装置(计算装置110、计算装置120、计算装置130和计算装置140)实现的分布式数据库100,但是应理解,分布式数据库100可以使用任何数量的计算装置(包括图1中未示出的计算装置)的集合。网络105可以是被实现为有线网络和/或无线网络并且被用于操作地耦合计算装置110、120、130、140的任何类型的网络(例如,局域网(LAN)、广域网(WAN)、虚拟网络、电信网络)。如本文中更详细地描述的,在一些实施例中,例如,计算装置是经由互联网服务提供商(ISP)和互联网(例如,网络105)彼此连接的个人计算机。在一些实施例中,连接可以经由网络105定义在任何两个计算装置110、120、130、140之间。如图1所示,例如,连接可以定义在计算装置110和计算装置120、计算装置130或计算装置140中的任何一个之间。
在一些实施例中,计算装置110、120、130、140可以彼此进行通信(例如,彼此发送数据和/或接收数据)和经由中间网络和/或替代网络(图1中未示出)与网络进行通信。这样的中间网络和/或替代网络可以是与网络105相同类型和/或不同类型的网络。
每个计算装置110、120、130、140可以是被配置为通过网络105发送数据以从其他计算装置中的一个或多个发送和/或接收数据的任何类型的装置。计算装置的例子在图1中示出。计算装置110包括存储器112、处理器111和输出装置113。存储器112可以例如是随机存取存储器(RAM)、存储器缓冲器、硬盘驱动器、数据库、可擦可编程只读存储器(EPROM)、电可擦只读存储器(EEPROM)、只读存储器(ROM)等。在一些实施例中,计算装置110的存储器112包括与分布式数据库的实例(例如,分布式数据库实例114)相关联的数据。在一些实施例中,存储器112存储使处理器执行与将以下各项发送给分布式数据库的另一实例(例如,计算装置120处的分布式数据库实例124)和/或从该另一实例接收以下各项相关联的模块、处理和/或功能的指令:同步事件的记录、先前的与其他计算装置的同步事件的记录、同步事件的次序、事件内的事务的次序、与识别同步请求和/或事务的次序相关联的参数、参数(例如,量化事务的数据库字段、量化事件发生的次序的数据库字段、和/或其值可以被存储在数据库中的任何其他的合适的字段)的值。
分布式数据库实例114可以例如被配置为操纵数据,包括存储、修改和/或删除数据。在一些实施例中,分布式数据库实例114可以是关系数据库、对象数据库、后关系数据库和/或任何其他的合适类型的数据库或储存器。例如,分布式数据库实例114可以存储与任何特定的功能和/或行业相关的数据。例如,分布式数据库实例114可以存储金融事务(例如,计算装置110的用户的金融事务),包括与特定的金融工具的所有权的历史相关的值和/或值矢量。一般来说,矢量可以是参数的任何值集合,参数可以是能够取不同值的任何数据对象和/或数据库字段。因此,分布式数据库实例114可以具有若干个参数和/或字段,其中每个与值矢量相关联。值矢量用于确定该数据库实例114内的参数和/或字段的实际的值。在一些情况下,分布式数据库实例114存储同步事件的记录、先前的与其他计算装置的同步事件的记录、同步事件的次序、事件内的事务的次序、与识别同步事件和/或事务的次序相关联的参数和/或值(例如,用于使用如本文中所描述的共识方法来计算次序)、参数(例如,量化事务的数据库字段、量化事件发生的次序的数据库字段、和/或其值可以被存储在数据库中的任何其他的合适的字段)的值。
在一些情况下,分布式数据库实例114还可以存储数据库状态变量和/或当前状态。当前状态可以是与事务的结果相关联的状态、余额、条件等。类似地说,状态可以包括被事务修改的数据结构和/或变量。在其他情况下,当前状态可以被存储在存储器112的单独的数据库和/或部分中。在还有的其他的情况下,当前状态可以被存储在不同于计算装置110的计算装置的存储器处。
在一些情况下,分布式数据库实例114还可以用于实现其他数据结构,诸如(密钥,值)对集合。分布式数据库实例114记录的事务可以例如是添加、删除或修改(密钥,值)对集合中的(密钥,值)对。
在一些情况下,分布式数据库系统100或分布式数据库实例114、124、134、144中的任何一个可以被查询。例如,查询可以由密钥组成,从分布式数据库系统100或分布式数据库实例114、124、134、144返回的结果可以是与该密钥相关联的值。在一些情况下,分布式数据系统100或分布式数据库实例114、124、134、144中的任何一个还可以通过事务来进行修改。例如,修改数据库的事务可以包含授权修改事务的一方所签的数字签名。
分布式数据库系统100可以用于许多目的,诸如,举例来说,存储与分布式身份系统中的各种用户相关联的属性。例如,这样的系统可以使用用户的身份作为“密钥”,并且使用与用户相关联的属性列表作为“值”。在一些情况下,身份可以是具有该用户已知的对应私钥的密码公钥。每个属性可以例如由具有断言该属性的权限的机关进行数字签名。每个属性还可以例如用与具有读取该属性的权限的一个人或一群个人相关联的公钥加密。一些密钥或值还可以使被授权修改或删除密钥或值的各方的公钥的列表附到它们。
在另一例子中,分布式数据库实例114可以存储与大规模多玩家游戏(MMG)相关的数据,诸如游戏物品的当前状态和所有权。在一些情况下,如图1所示,分布式数据库实例114可以在计算装置110内实现。在其他情况下,分布式数据库的实例可供计算装置访问(例如,经由网络),但是不是在计算装置中实现的(图1中未示出)。
计算装置110的处理器111可以是被配置为运行和/或执行分布式数据库实例114的任何合适的处理装置。例如,如本文中更详细地描述的,处理器111可以被配置为响应于从计算装置120接收到信号来更新分布式数据库实例114,和/或使信号被发送给计算装置120。更具体地说,如本文中更详细地描述的,处理器111可以被配置为响应于接收到来自另一计算装置的与事务相关联的同步事件、与同步事件的次序相关联的记录等来执行更新分布式数据库实例114的模块、功能和/或处理。在其他实施例中,处理器111可以被配置为响应于接收到存储在分布式数据库的另一实例(例如,计算装置120处的分布式数据库实例124)中的参数的值来执行更新分布式数据库实例114的模块、功能和/或处理,和/或使存储在计算装置110处的分布式数据库实例114中的参数的值被发送给计算装置120。在一些实施例中,处理器111可以是通用处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、数字信号处理器(DSP)等。
显示器113可以是任何合适的显示器,诸如,举例来说,液晶显示器(LCD)、阴极射线管显示器(CRT)等。在其他实施例中,计算装置110、120、130、140中的任何一个都包括代替显示器113、123、133、143或除显示器113、123、133、143之外的另一输出装置。例如,计算装置110、120、130、140中的任何一个都可以包括音频输出装置(例如,扬声器)、触觉输出装置等。在还有的其他的实施例中,计算装置110、120、130、140中的任何一个都包括代替显示器113、123、133、143或除显示器113、123、133、143之外的输入装置。例如,计算装置110、120、130、140中的任何一个都可以包括键盘、鼠标等。
计算装置120具有分别在结构上和/或功能上可以类似于处理器111、存储器112和显示器113的处理器121、存储器122和显示器123。此外,分布式数据库实例124在结构上和/或功能上可以类似于分布式数据库实例114。
计算装置130具有分别在结构上和/或功能上可以类似于处理器111、存储器112和显示器113的处理器131、存储器132和显示器133。此外,分布式数据库实例134在结构上和/或功能上可以类似于分布式数据库实例114。
计算装置140具有分别在结构上和/或功能上可以类似于处理器111、存储器112和显示器113的处理器141、存储器142和显示器143。此外,分布式数据库实例144在结构上和/或功能上可以类似于分布式数据库实例114。
尽管计算装置110、120、130、140被示为彼此类似,但是分布式数据库系统100的每个计算装置都可以不同于其他计算装置。分布式数据库系统100的每个计算装置110、120、130、140可以是例如计算实体(例如,个人计算装置,诸如台式计算机、膝上型计算机等)、移动电话、个人数字助理(PDA)等中的任何一个。例如,计算装置110可以是台式计算机,计算装置120可以是智能电话,计算装置130可以是服务器。
在一些实施例中,计算装置110、120、130、140的一个或多个部分可以包括基于硬件的模块(例如,数字信号处理器(DSP)、现场可编程门阵列(FPGA))和/或基于软件的模块(例如,存储在存储器中和/或在处理器处执行的计算机代码的模块)。在一些实施例中,与计算装置110、120、130、140相关联的功能中的一个或多个(例如,与处理器111、121、131、141相关联的功能)可以包括在一个或多个模块中(参见例如图2)。
分布式数据库系统100的性质(包括计算装置(例如,计算装置110、120、130、140)的性质)、计算装置的数量和网络105可以以任何数量的方式选择。在一些情况下,分布式数据库系统100的性质可以由分布式数据库系统100的管理员选择。在其他情况下,分布式数据库系统100的性质可以由分布式数据库系统100的用户共同选择。
因为使用分布式数据库系统100,所以在计算装置110、120、130和140之间没有指定领导者。具体地说,计算装置110、120、130或140都不被识别和/或选择为解决存储在计算装置110、120、130、140的分布式数据库实例111、12、131、141中的值之间的争端的领导者。相反,通过使用本文中所描述的事件同步处理、投票处理和/或方法,计算装置110、120、130、140可以共同收敛于参数的值上。
在分布式数据库系统中没有领导者提高了分布式数据库系统的安全性。具体地说,在有领导者的情况下,存在单点攻击和/或故障。如果恶意软件感染领导者和/或领导者的分布式数据库实例处的参数的值被恶意改变,则故障和/或错误的值在其他的分布式数据库实例中到处传播。然而,在无领导者系统中,不存在单点攻击和/或故障。具体地说,如果无领导者系统的分布式数据库实例中的参数包含值,则如本文中更详细地描述的,该值在该分布式数据库实例与系统中的其他的分布式数据库实例交换值之后将改变。另外,如本文中更详细地描述的,本文中所描述的无领导者分布式数据库系统提高了收敛速度,同时减少了装置之间发送的数据量。
图2例示说明根据实施例的分布式数据库系统(例如,分布式数据库系统100)的计算装置200。在一些实施例中,计算装置200可以类似于关于图1示出和描述的计算装置110、120、130、140。计算装置200包括处理器210和存储器220。处理器210和存储器220彼此操作地耦合。在一些实施例中,处理器210和存储器220可以分别类似于关于图1详细描述的处理器111和存储器112。如图2所示,处理器210包括数据库收敛模块211和通信模块210,存储器220包括分布式数据库实例221。通信模块212使得计算装置200能够与其他计算装置通信(例如,将数据发送给其他计算装置和/或从其他计算装置接收数据)。在一些实施例中,通信模块212(图1中未示出)使得计算装置110能够与计算装置120、130、140通信。通信模块210可以包括和/或启用例如网络接口控制器(NIC)、无线连接、有线端口等。如此,通信模块210可以建立和/或维护计算装置200和另一装置之间的通信会话(例如,经由网络,诸如图1的网络105或互联网(未示出))。类似地说,通信模块210可以使得计算装置200能够将数据发送给另一装置和/或从另一装置接收数据。
在一些情况下,数据库收敛模块211可以与其他计算装置交换事件和/或事务,存储数据库收敛模块211接收的事件和/或事务,并且基于由事件之间的引用模式定义的部分次序来计算事件和/或事务的排序。每个事件可以是包含以下内容的记录:两个更早的事件的密码散列(将该事件链接到这两个更早的事件和它们的祖先事件,反过来也一样)、有效载荷数据(诸如将被记录的事务)、其他信息(诸如当前时间、其创建者将其断言为事件第一次被定义的时间的时间戳(例如,日期和UTC时间))等。在一些情况下,成员定义的第一事件仅包括另一成员定义的单个事件的散列。在这样的情况下,成员还未具有在先的自散列(例如,该成员先前定义的事件的散列)。在一些情况下,分布式数据库中的第一事件不包括任何在先事件的散列(因为对于该分布式数据库没有在先事件)。
在一些实施例中,所述两个更早的事件的这样的密码散列可以是基于使用事件作为输入的密码散列函数定义的散列值。具体地说,在这样的实施例中,事件包括(表示该事件的信息的)特定的字节序列或字节串。事件的散列可以是从使用用于该事件的字节序列作为输入的散列函数返回的值。在其他实施例中,与事件相关联的任何其他的合适的数据(例如,标识符、序列号、表示事件的特定部分的字节等)可以用作散列函数的输入以计算该事件的散列。任何合适的散列函数都可以用于定义散列。在一些实施例中,每个成员使用相同的散列函数以使得在每个成员处对于给定事件产生相同的散列。事件然后可以被定义和/或创建该事件的成员数字签名。
在一些情况下,事件和它们的互连的集合可以形成有向非循环图(DAG)。在一些情况下,DAG中的每个事件引用两个更早的事件(将该事件链接到这两个更早的事件和它们的祖先事件,反过来也一样),并且每个引用严格指向更早的事件,以使得没有循环。在一些实施例中,DAG基于密码散列,所以数据结构可以被称为散列图(在本文中也被称为“hashDAG”)。散列图直接对部分次序进行编码,这意味着,如果Y包含X的散列的话,或者如果Y包含含有X的散列的事件的散列的话,或者对于这样的任意长度路径,事件X已知在事件Y之前来到。然而,如果从X到Y或者从Y到X没有路径,则部分次序不定义哪个事件首先来到。因此,数据库收敛模块可以从部分次序计算总次序。这可以通过计算装置使用的任何合适的确定性函数来进行,以使得计算装置计算相同的次序。在一些实施例中,每个成员可以在每次同步之后重新计算该次序,最后这些次序可以收敛以使得共识出现。
共识算法可以用于确定散列图中的事件的次序和/或存储在事件内的事务的次序。作为根据次序执行事务的结果,这些事务的次序继而可以定义数据库的状态。数据库的定义的状态可以被存储为数据库状态变量。
在一些情况下,数据库收敛模块可以使用以下函数来在散列图中从部分次序计算总次序。对于其他计算装置(被称为“成员”)中的每个,数据库收敛模块可以对散列图进行检查以发现事件(和/或这些事件的指示)被该成员接收的次序。数据库收敛模块然后可以好像该成员为每个事件分配数字“排名”一样进行计算,其中,对于成员接收的第一个事件,排名为1,对于成员接收的第二个事件,排名为2,依此类推。数据库收敛模块可以对散列图中的每个成员这样做。然后,对于每个事件,数据库收敛模块可以计算分配的排名的中位数,并且可以按照它们的中位数来对事件进行排序。排序可以以确定性的方式来打破平局,诸如按照两个平局的事件的散列的数字次序来对它们进行排序,或者通过其中每个成员的数据库收敛模块使用相同方法的某种其他的方法来对它们进行排序。该排序的结果是总次序。
图6例示说明用于确定总次序的一个例子的散列图640。散列图640例示说明两个事件(最低的条纹圆圈和最低的虚线圆圈)和每个成员接收到这些事件的指示(其他的条纹圆圈和虚线圆圈)的第一时间。顶部的每个成员的名称按照哪个事件在它们的缓慢的次序中是第一个来上色。有条纹的初始投票多于有虚线的初始投票;因此,对于每个成员的共识投票是有条纹的。换句话说,成员最后收敛到有条纹的事件在有虚线的事件之前发生的协定。
在该例子中,成员(被标记为Alice、Bob、Carol、Dave和Ed的计算装置)将工作以定义是事件642、还是事件644首先发生的共识。每个有条纹的圆圈指示成员首先接收到的事件是事件644(和/或该事件644的指示)。类似地,每个有虚线的圆圈指示成员首先接收到的事件是事件642(和/或该事件642的指示)。如散列图640所示,Alice、Bob和Carol均在事件642之前接收到事件644(和/或事件644的指示)。Dave和Ed两个都在事件644(和/或事件644的指示)之前接收到事件642(和/或事件642的指示)。因此,因为大量成员在事件642之前接收到事件644,所以总次序可以被每个成员确定为事件644在事件642之前发生。
在其他情况下,数据库收敛模块可以使用不同的函数来在散列图中从部分次序计算总次序。在这样的实施例中,例如,数据库收敛模块可以使用以下函数来计算总次序,其中,正整数Q是成员共享的参数。
creator(x)=创建事件x的成员
anc(x)=作为x的祖先(包括x本身)的事件的集合
other(x)=刚好在x被创建之前同步的成员创建的事件
self(x)=x之前的具有同一创建者的最后一个事件
self(x,0)=self(x)
self(x,n)=self(self(x),n-1)
order(x,y)=k,其中,y是creator(x)获悉的第k个事件
fast(x,y)=y在排序的列表中的位置,其中,元素z∈anc(x)按照排序,平局用每个事件的散列打破。
在该实施例中,fast(x,y)给出基本上紧接在x被创建和/或定义之后的、根据creator(x)的意见的、y在事件的总次序中的位置。如果Q是无穷大,则以上计算出与前述实施例中相同的总次序。如果Q是有限的,并且所有的成员都在线,则以上计算出与前述实施例中相同的总次序。如果Q是有限的,并且少数成员在给定时间在线,则该函数使得在线成员可以在它们之间达成当新的成员缓慢地、一个接一个地开始在线时将保持不变的共识。然而,如果存在网络的分区,则每个分区的成员可以达成它们自己的共识。然后,当分区被修复时,较小的分区的成员将采用较大的分区的共识。
在还有的其他的情况下,如关于图8-12B所描述的,数据库收敛模块仍可以使用不同的函数来在散列图中从部分次序计算总次序。如图8-9所示,每个成员(Alice、Bob、Carol、Dave和Ed)创建和/或定义事件(如图8所示的1401-1413;图9中所示的1501-1506)。通过使用关于图8-12B所描述的函数和子函数,如本文中更详细地描述的,可以通过按照事件的接收轮次对它们进行排序、按照它们的接收时间戳打破平局、以及按照它们的签名打破这些平局,来计算事件的总次序。在其他情况下,可以通过按照事件的接收轮次对它们进行排序、按照它们的接收世代(而不是它们的接收时间戳)打破平局、以及按照它们的签名打破这些平局,来计算事件的总次序。以下段落指定了用于计算和/或定义事件的接收轮次和接收世代以确定事件的次序的函数。结合图8-12B来例示说明并使用以下术语。
“父”:如果Y包含X的散列,事件X是事件Y的父。例如,在图8中,事件1412的父包括事件1406和事件1408。
“祖先”:事件X的祖先是X、其父、其父的父、依此类推。例如,在图8中,事件1412的祖先是事件1401、1402、1403、1406、1408和1412。事件的祖先可以被说成是链接到该事件,反过来也一样。
“后代”:事件X的后代是X、其子、其子的子、依此类推。例如,在图8中,事件1401的后代是该图所示的每一个事件。另举一例,事件1403的后代是事件1403、1404、1406、1407、1409、1410、1411、1412和1413。事件的后代可以被说成是链接到该事件,反过来也一样。
“N”:群体中的成员的总数。例如,在图8中,成员是被标记为Alice、Bob、Carol、Dave和Ed的计算装置,N等于5。
“M”:大于N的一定百分比(例如,大于N的2/3)的最小整数。例如,在图8中,如果百分比被定义为2/3,则M等于4。在其他情况下,M可以被定义为例如N的不同百分比(例如,1/3、1/2等)、特定的预定义的数、和/或以任何其他的合适的方式定义。
“亲父”:事件X的亲父是其由同一成员创建和/或定义的父事件Y。例如,在图8中,事件1405的亲父是1401。
“亲祖先”:事件X的亲祖先是X、其亲父、其亲父的亲父、依此类推。
“序列号”(或“SN”)(在本文中也被称为序列值):事件的整数属性,该整数属性被定义为事件的亲父的序列号加1。例如,在图8中,事件1405的亲父是1401。因为事件1401的序列号为1,所以事件1405的序列号为2(即,1加1)。在一些实现中,序列号在新的一轮开始时被重新启动或者被重置为零。在其他情况下,序列号和/或序列值可以递减,而不是递增,是具有词典式次序的字母数字(例如,A、B、C等),等等。
“世代号”(或“GN”):事件的整数属性,该整数属性被定义为事件的父的世代号的最大值加1。例如,在图8中,事件1412具有两个父,事件1406和1408,这两个事件分别具有世代号4和2。因此,事件1412的时代号为5(即,4加1)。
“轮次增量”(或“RI”):事件的属性,该属性可以要么是零,要么是1。
“轮次号”(或“RN”,在本文中也被称为“创建轮次”):事件的整数属性。在一些情况下,轮次号可以被定义为事件的父的轮次号的最大值加事件的轮次增量。例如,在图8中,事件1412具有两个父,事件1406和1408,这两个事件都具有轮次号1。事件1412还具有轮次增量1。因此,事件1412的轮次号为2(即,1加1)。在其他情况下,如果R是使得事件可以强看见(如本文中所描述的那样)由全都具有轮次号R-1的不同成员定义和/或创建的至少M个事件的最小整数,则事件可以具有轮次号R。如果没有这样的整数,则事件的轮次号可以为默认值(例如,0、1等)。在这样的情况下,可以不使用轮次增量来计算事件的轮次号。例如,在图8中,如果M被定义为大于N的1/2倍的最小整数,则M为3。于是,事件1412强看见M个事件1401、1402和1408,其中每个事件都是由不同的成员定义的,并且都具有轮次号1。事件1412不能强看见由不同成员定义的、具有轮次号2的至少M个事件。因此,事件1412的轮次号为2。在一些情况下,分布式数据库中的第一个事件包括轮次号1。在其他情况下,分布式数据库中的第一个事件可以包括轮次号0或任何其他的合适的编号。
“分叉”:如果事件X和事件Y是由同一成员定义和/或创建,并且也不是另一个的亲祖先,则事件X与事件Y分叉。例如,在图9中,成员Dave通过创建和/或定义事件1503和1504(这两个都具有同一亲父(即,事件1501))进行分叉,以使得事件1503不是事件1504的亲祖先,事件1504不是事件1503的亲祖先。
分叉的“识别”:分叉可以被在彼此分叉的两个事件之后创建和/或定义的第三事件“识别”,如果这两个事件都是第三事件的祖先的话。例如,在图9中,成员Dave通过创建事件1503和1504进行分叉,事件1503和1504都不是另一个的亲祖先。该分叉可以被后来的事件1506识别,因为事件1503和1504都是事件1506的祖先。在一些情况下,分叉的识别可以指示特定的成员(例如,Dave)作弊了。
事件的“识别”:事件X“识别”或“看见”祖先事件Y,如果X没有与Y分叉的祖先事件Z的话。例如,在图8中,事件1412识别(也被称为“看见”)事件1403,因为事件1403是事件1412的祖先,事件1412没有与事件1403分叉的祖先事件。在一些情况下,事件X可以识别事件Y,如果X没有识别出事件Y之前的分叉的话。在这样的情况下,即使事件X识别出事件Y之后的定义事件Y的成员创建和/或定义的分叉,事件X也可以看见事件Y。事件X不识别分叉之后的该成员创建和/或定义的事件。而且,如果成员定义在历史上都是该成员的第一个事件的两个不同的事件,则事件X可以识别分叉,并且不识别该成员创建和/或定义的任何事件。
事件的“强识别”(在本文中也被称为“强看见”):事件X“强识别”(或“强看见”)由与X相同的成员创建和/或定义的祖先事件Y,如果X识别Y的话。事件X“强识别”不是由与X相同的成员创建和/或定义的祖先事件Y,如果存在如下事件集合S的话,所述事件集合S(1)包括X和Y这二者,(2)是事件X的祖先,(3)是祖先事件Y的后代,(4)被X识别,(5)均可以识别Y,(6)由至少M个不同的成员创建和/或定义。例如,在图8中,如果M被定义为大于N的2/3的最小整数(即,M=1+floor(2N/3),在该例子中,M将为4),则事件1412强识别祖先事件1401,因为事件集合1401、1402、1406和1412是作为事件1412的祖先和事件1401的后代的至少四个事件的集合,它们分别是由四个成员Dave、Carol、Bob和Ed创建和/或定义的,事件1412识别事件1401、1402、1406和1412中的每个,并且事件1401、1402、1406和1412中的每个识别事件1401。类似地说,事件X(例如,事件1412)可以“强看见”事件Y(例如,事件1401),如果X可以看见由不同成员创建或定义的、其中每个可以看见Y的至少M个事件(例如,事件1401、1402、1406和1412)的话。
“第R轮第一个”事件(在本文中也被称为“证据”):事件是“第R轮第一个”事件(或“证据”),如果事件(1)具有轮次号R,并且(2)具有轮次号小于R的亲父或者没有亲父的话。例如,在图8中,事件1412是“第2轮第一个”事件,因为它具有轮次号2,并且其亲父是事件1408,事件1408具有轮次号1(即,小于2)。
在一些情况下,当且仅当事件X“强识别”至少M个“第R轮第一个”事件时,事件X的轮次增量才被定义为1,其中,R是其父的最大轮次号。例如,在图8中,如果M被定义为大于N的1/2倍的最小整数,则M为3。于是,事件1412强识别M个事件1401、1402和1408,这些事件全都是第1轮第一个事件。1412的两个父是第1轮,1412强识别至少M个第1轮第一个,因此1412的轮次增量为1。示图中被用“RI=0”标记的事件均未能强识别至少M个第1轮第一个,因此它们的轮次增量为0。
在一些情况下,以下方法可以用于确定事件X是否强识别祖先事件Y。对于每个第R轮第一个祖先事件Y,维护整数数组A1,一个成员一个整数,该数组给出事件X的最低序列号,其中,该成员创建和/或定义事件X并且X可以识别Y。对于每个事件Z,维护整数数组A2,一个成员一个整数,该数组给出由该成员创建和/或定义的事件W的最高序列号,以使得Z可以识别W。为了确定Z是否可以强识别祖先事件Y,对元素位置数量E进行计数,以使得A1[E]<=A2[E]。当且仅当该计数大于M时,事件Z才可以强识别Y。例如,在图8中,成员Alice、Bob、Carol、Dave和Ed均可以识别事件1401,其中,可以这样做的最早的事件分别是它们的事件{1404,1403,1402,1401,1408}。这些事件具有序列号A1={1,1,1,1,1}。类似地,它们中的每个创建和/或定义的、被事件1412识别的最晚的事件是事件{无,1406,1402,1401,1412},其中,Alice被列为“无”,因为1412不能识别Alice创建和/或定义的任何事件。这些事件分别具有序列号A2={0,2,1,1,2},其中,所有的事件都具有正序列号,所以0意味着Alice没有被1412识别的事件。比较列表A1与列表A2给出结果{1<=0,1<=2,1<=1,1<=1,1<=2},该结果等同于具有为真的四个值的{假,真,真,真,真}。因此,存在作为1412的祖先和1401的后代的四个事件的集合S。四个是最小M个,因此1412强识别1401。
关于实现用于用A1和A2确定事件X是否可以强识别祖先事件Y的方法的又一变型如下。如果两个数组中的整数元素小于128,则可以将每个元素存储在单个字节中,将8个这样的元素打包到单个64位字中,并且设A1和A2为这样的字的数组。A1中的每个字节的最高有效位可以被设置为0,A2中的每个字节的最高有效位可以被设置为1。将这两个对应的字相减,然后用除了最高有效位之外为0的掩膜执行逐位AND(与),然后右移7个位位置,以得到用C编程语言表达为((A2[i]-A1[i])&0x8080808080808080)>>7)的值。这可以被添加到被初始化为零的运行累积器S。在多次这样做之后,通过移动和添加字节,将累积器转换为计数,以得到((S&0xff)+((S>>8)&0xff)+((S>>16)&0xff)+((S>>24)&0xff)+((S>>32)&0xff)+((S>>40)&0xff)+((S>>48)&0xff)+((S>>56)&0xff))。在一些情况下,这些计算可以用诸如C、Java等的编程语言来执行。在其他情况下,所述计算可以使用处理器特定的指令(诸如Intel和AMD提供的Advanced Vector Extensions(AVX)指令、或图形处理单元(GPU)或通用图形处理单元(GPGPU)中的等同物)来执行。在一些架构上,所述计算可以通过使用大于64位(诸如128、256、512或更多位)的字而被更快速地执行。
“著名”事件:如果(1)第R轮事件X是“第R轮第一个”事件(或“证据”),并且(2)“赞成”的决策是经由下面描述的Byzantine(拜占庭)协定协议达成的,则第R轮事件X是“著名的”。在一些实施例中,Byzantine协定协议可以由分布式数据库的实例(例如,分布式数据库实例114)和/或数据库收敛模块(例如,数据库收敛模块211)执行。例如,在图8中,示出了五个第1轮第一个:1401、1402、1403、1404和1408。如果M被定义为大于N的1/2倍的最小整数(其为3),则1412是第2轮第一个。如果协议运行更长时间,则散列图将向上生长,最后其他的四个成员在该图的顶部上也将具有第2轮第一个。每个第2轮第一个都将具有关于第1轮第一个中的每个是否是“著名的”“投票”。事件1412将对1401、1402和1403是著名的投“赞成”票,因为这些是它可以识别的第1轮第一个。事件1412将对1404是著名的投“反对”票,因为1412不能识别1404。对于给定的第1轮第一个,诸如1402,其是否是“著名的”状态将通过计算每个第2轮第一个的关于它是否是著名的投票来决定。这些投票然后将传播到第3轮第一个,然后传播到第4轮第一个,依此类推,直到最后关于1402是否是著名的达成协定。对其他第一个重复相同的处理。
Byzantine协定协议可以收集并且使用“第R轮第一个”事件的投票和/或决定来识别“著名的”事件。例如,如果Y可以“识别”事件X,则“第R+1轮第一个”Y将投“赞成”票,否则它投“反对”票。然后对每个第G轮(对于G=R+2、R+3、R+4等)计算投票,直到任何成员达成决策为止。直到已经达到决策,对每个第G轮计算投票。这些轮次中的一些可以是“多数(majority)”轮次,而一些其他的轮次可以是“硬币(coin)”轮次。在一些情况下,例如,第R+2轮是多数轮次,未来的轮次被指定为要么是多数轮次,要么是硬币轮次(例如,根据预定义的时间表)。例如,在一些情况下,未来的轮次是多数轮次、还是硬币轮次可以任意确定,约束条件是不能存在两个连续的硬币轮次。例如,可以预定义的是,将存在五个多数轮次,然后一个硬币轮次,然后五个多数轮次,然后一个硬币轮次,重复,只要达成协定即可。
在一些情况下,如果第G轮是多数轮次,则可以如下计算投票。如果存在强识别投V票(其中,V要么是“赞成”,要么是“反对”)的至少M个第G-1轮第一个的第G轮事件,则共识决策是V,并且Byzantine协定协议结束。否则,每个第G轮第一个事件计算新的投票,所述新的投票是每个第G轮第一个事件可以强识别的第G-1轮第一个中的多数。在存在平局、而不是多数的情况下,投票可以被指定为“赞成”。
类似地说,如果X是第R轮证据(或第R轮第一个),则可以计算第R+1、R+2等轮中的投票,其中,每轮中的证据关于X是否是著名的进行投票。在第R+1轮中,可以看见X的每一个证据投赞成票,其他证据投反对票。在第R+2轮中,每一个证据根据它可以强看见的第R+1轮证据的投票的多数来进行投票。类似地,在第R+3轮中,每一个证据根据它可以强看见的第R+2轮证据的投票的多数来进行投票。这可以持续多轮。就平局来说,投票可以被设置为赞成。在其他情况下,平局可以被设置为反对,或者可以被随机地设置。如果任何轮次具有投反对票的至少M个证据,则选举结束,并且X不是著名的。如果任何轮次具有投赞成票的至少M个证据,则选举结束,并且X是著名的。如果赞成和反对都不具有至少M个投票,则选举继续到下一轮。
作为例子,在图8中,考虑所示人物下面的某轮第一个事件X。然后,每个第1轮第一个将具有关于X是否是著名的投票。事件1412可以强识别第1轮第一个事件1401、1402和1408。所以其投票将基于它们的投票。如果这是多数轮次,则1412将检查{1401,1402,1408}中的至少M个是否具有赞成的投票。如果它们具有,则决策是赞成,并且协定已经得以实现。如果它们中的至少M个投反对票,则决策是反对,并且协定已经得以实现。如果投票在任一方向没有至少M个,则1412被给予投票,该投票是1401、1402和1408的那些投票中的多数(并且将通过投赞成票来打破平局,如果存在平局的话)。该投票然后将被用于下一轮中,继续进行,直到达成协定为止。
在一些情况下,如果第G轮是硬币轮次,则可以如下计算投票。如果事件X可以识别投V票(其中,V要么是“赞成”,要么是“反对”)的至少M个第G-1轮第一个,则事件X将把其投票变为V。否则,如果第G轮是硬币轮次,则每个第G轮第一个事件X将其投票变为伪随机确定(在一些情况下类似于抛硬币)的结果,该结果被定义为事件X的签名的最低有效位。
类似地说,在这样的情况下,如果选举达到第R+K轮(硬币轮次)(其中,K是指定的因子(例如,诸如3、6、7、8、16、32的数或任何其他合适的数的倍数)),则选举在该轮不结束。如果选举达到该轮,则他可以继续至少一个更多的轮次。在这样的轮次中,如果事件Y是第R+K轮证据,则如果它可以从第R+K-1轮强看见正在投V票的至少M个证据,则Y将投V票。否则,Y将根据随机值进行投票(例如,根据事件Y的签名的位(例如,最低有效位、最高有效位、随机选择的位),其中,1=赞成,0=反对,或者反过来,根据事件Y的时间戳,使用密码“共享硬币”协议和/或任何其他的随机确定)。该随机确定在Y被创建之前是不可预测的,因此可以提高事件和共识协议的安全性。
例如,在图8中,如果第2轮是硬币轮次,并且投票是关于第1轮之前的某个事件是否是著名的,则事件1412将首先检查{1401,1402,1408}中的至少M个是投赞成票,还是它们中的至少M个投反对票。如果情况如此,则1412将以相同的方式投票。如果没有至少M个在任一方向上投票,则1412将具有随机的或伪随机的投票(例如,当Ed创建和/或定义事件1412时,基于在Ed对事件1412签名时Ed对事件1412创建的数字签名的最低有效位)。
在一些情况下,伪随机确定的结果可以是密码共享硬币协议的结果,该结果可以例如被实现为轮次号的阈值签名的最低有效位。
系统可以从用于计算上述伪随机确定的结果的方法中的任何一种方法构建。在一些情况下,所述系统按照某个次序循环遍历不同的方法。在其他情况下,所述系统可以根据预定义的模式在不同方法之间选择。
“接收轮次”:如果R是使得具有轮次号R的著名的第R轮第一个事件(或著名的证据)中的至少一半是X的后代和/或可以看见X的最小整数,则事件X具有“接收轮次”R。在其他情况下,可以使用任何其他的合适的百分比。例如,在另一情况下,如果R是使得具有轮次号R的著名的第R轮第一个事件(或著名的证据)中的至少预定百分比(例如,40%、60%、80%等)是X的后代和/或可以看见X的最小整数,则事件X具有“接收轮次”R。
在一些情况下,可以如下计算事件X的“接收世代”。找到哪个成员创建和/或定义可以识别事件X的每个第R轮第一个事件。然后,确定该成员创建和/或定义的、可以识别X的最早的事件的世代号。然后,定义X的“接收世代”为该列表的中位数。
在一些情况下,事件X的“接收时间戳”T可以是包括每个成员创建和/或定义的、识别和/或看见X的第一个事件的事件中的时间戳的中位数。例如,事件1401的接收时间戳可以是用于事件1402、1403、1403和1408的时间戳的值的中位数。在一些情况下,用于事件1401的时间戳可以包括在中位数计算中。在其他情况下,用于X的接收时间戳可以是任何其他的值或如下事件中的时间戳的值的组合,所述事件是每个成员创建和/或定义的、识别或看见X的第一个事件。例如,用于X的接收时间戳可以基于时间戳的平均值、时间戳的标准差、修改的平均值(例如,通过从计算移除最早的和最晚的时间戳)等。在还有的其他的情况下,可以使用扩展的中位数。
在一些情况下,通过按照事件的接收轮次对它们进行排序、按照它们的接收时间戳打破平局、以及按照它们的签名打破平局,来计算事件的总次序和/或共识次序。在其他情况下,可以通过按照事件的接收轮次对它们进行排序、按照它们的接收世代打破平局、以及按照它们的签名打破平局,来计算事件的总次序。前面的段落规定了用于计算和/或定义事件的接收轮次、接收时间戳和/或接收世代的函数。
在其他情况下,不是使用每个事件的签名,而是可以使用与具有相同的接收轮次和/或该轮中的相同的接收世代的著名事件或著名证据的签名进行异或运算的该事件的签名。在其他情况下,可以使用任何其他的合适的事件签名组合来打破平局以定义事件的共识次序。
在还有的其他的情况下,不是将“接收世代”定义为列表的中位数,而是可以将“接收世代”定义为列表本身。然后,当按照接收世代进行排序时,可以用它们的列表的中间元素来比较两个接收世代,用紧接着中间元素前面的元素打破平局,用紧接着中间元素后面的元素打破这些平局,并且通过在迄今为止所用的那些元素之前的元素和之后的元素之间交替来继续进行,直到平局被打破为止。
在一些情况下,中位数时间戳可以被替换为“扩展的中位数”。在这样的情况下,可以针对每个事件定义时间戳列表,而不是单个接收时间戳。用于事件X的时间戳列表可以包括每个成员创建和/或定义的、识别和/或看见X的第一个事件。例如,在图8中,用于事件1401的时间戳列表可以包括用于事件1402、1403、1403和1408的时间戳。在一些情况下,用于事件1401的时间戳也可以包括在内。当用时间戳列表打破平局(即,两个事件具有相同的接收轮次)时,可以比较每个事件的列表的中间时间戳(或两个中间时间戳中的第一个或第二个中的预定的一个,如果所述两个中间时间戳具有均匀长度的话)。如果这些时间戳是相同的,则可以比较紧接着中间时间戳后面的时间戳。如果这些时间戳是相同的,则可以比较紧接着中间时间戳前面的时间戳。如果这些时间戳也是相同的,则比较三个已经比较的时间戳后面的时间戳。这可以继续交替进行,直到平局被打破为止。类似于以上讨论,如果两个列表是相同的,则可以用两个元素的签名来打破平局。
在还有的其他的情况下,可以使用“截断的扩展的中位数”来代替“扩展的中位数”。在这样的情况下,对于每个事件,不存储整个时间戳列表。相反,只有列表的中间附近的值中的几个被存储并且被用于比较。
除了计算事件的总次序之外,接收的中位数时间戳还可能可以用于其他目的。例如,Bob可能签订如下合同,该合同说,当且仅当存在包含Alice签订该相同合同的事务的事件X时,他才同意受该合同约束,其中,用于X的接收时间戳是至迟在某个最后期限。在这种情况下,如以上所描述的,如果如“接收的中位数时间戳”所指示的,Alice在最后期限之后签订所述合同,则Bob将不受该合同约束。
在一些情况下,可以在实现共识之后定义分布式数据库的状态。例如,如果S(R)是可以被第R轮中的著名证据看见的事件的集合,则最终S(R)中的所有事件都将具有已知的接收轮次和接收时间戳。此刻,S(R)中的事件的共识次序是已知的,并且将不会改变。一旦到达此刻,成员就可以计算和/或定义事件的表示和它们的次序。例如,成员可以按S(R)中的事件的共识次序来计算这些事件的散列值。成员然后可以对散列值进行数字签名,并且将散列值包括在成员定义的下一个事件中。这可以用于向其他成员通知该成员已经确定S(R)中的事件具有将不会改变的给定次序。在成员中的至少M个(或成员的任何其他的合适的数量或百分比)已经对用于S(R)的散列值进行了签名(因此同意该散列值所表示的次序)之后,事件的该共识列表连同成员的签名列表可以形成可以用于证明共识次序是如对于S(R)中的事件声明那样的单个文件(或其他数据结构)。在其他情况下,如果事件包含更新分布式数据库系统的状态的事务(如本文中所描述的那样),则散列值可以是在按共识次序应用S(R)中的事件的事务之后分布式数据库系统的状态的散列值。参照图13来讨论关于分布式数据库的状态的进一步的细节。
在一些情况下,M(如上所述)可以基于分配给每个成员的权重值,而不是仅仅是全部成员的数量的一小部分、百分比和/或值。在这样的情况下,每个成员具有与其对分布式数据库系统的兴趣和/或影响相关联的份额(stake)。这样的份额可以是权重值。该成员定义的每个事件可以被说成是具有其定义成员的权重值。M于是可以是所有成员的总份额的一小部分。在上面被描述为取决于M的事件将在具有至少M的份额总和的成员集合同意时发生。因此,基于它们的份额,某些成员可以对系统和如何得到共识次序具有更大的影响。在一些情况下,事件中的事务可以改变一个或多个成员的份额、添加新的成员、和/或删除成员。如果这样的事务具有接收轮次R,则在接收轮次已经被计算之后,第R轮证据之后的事件将使用修改的份额和修改的成员列表来重新计算它们的轮次号和其他信息。关于第R轮事件是否是著名的投票将使用旧的份额和成员列表,而关于R之后的轮次的投票将使用新的份额和成员列表。2016年12月21日提交的、标题为“Methods and Apparatus For ADistributed Database Within A Network”的美国专利申请No.15/387,048(现在是美国专利No.9,646,029)中描述了关于使用权重值来确定共识的额外的细节,该申请整个地通过引用并入本文。
前述的术语、定义和算法用于例示说明图8-12B中描述的实施例和构思。图10A和10B例示说明以数学的形式示出的共识方法和/或处理的示例应用。图11A和11B例示说明以数学的形式示出的共识方法和/或处理的第二个示例应用,图12A和12B例示说明以数学的形式示出的共识方法和/或处理的第三个示例应用。
在图2中,数据库收敛模块211和通信模块212在图2中被示为在处理器210中实现。在其他实施例中,数据库收敛模块211和/或通信模块212可以在存储器220中实现。在还有的其他的实施例中,数据库收敛模块211和/或通信模块212可以是基于硬件的(例如,ASIC、FPGA等)。在一些实施例中,分布式数据库实例221可以类似于图1所示的分布式数据库系统100的分布式数据库实例114、124、134、144。
图7例示说明根据实施例的两个计算装置同步事件的信号流程图。具体地说,在一些实施例中,分布式数据库实例703和803可以交换事件以获得收敛。计算装置700可以随机地、基于与计算装置700的关系、基于与计算装置700的接近度、基于与计算装置700相关联的有序列表、和/或类似方式来选择与计算装置800同步。在一些实施例中,因为计算装置800可以被属于分布式数据库系统的计算装置集合中的计算装置700选择,所以计算装置700可以连续地多次选择计算装置800,或者可以暂时不选择计算装置800。在其他实施例中,先前选择的计算装置的指示可以被存储在计算装置700处。在这样的实施例中,计算装置700可以在能够再次选择计算装置800之前等待预定数量的选择。如以上所说明的,分布式数据库实例703和803分别可以在计算装置700的存储器和计算装置800的存储器中实现。
图3-6例示说明根据实施例的散列图的例子。存在五个成员,其中每个都用深色垂直线来表示。每个圆圈表示事件。从事件起的两根向下的线表示两个先前的事件的散列。该例子中的每一个事件都具有两根向下的线(一根深色线指向同一成员,一根浅色线指向另一成员),除了每个成员的第一个事件之外。时间向上推进。在图3-6中,分布式数据库的计算装置被指示为Alice、Bob、Carol、Dave和Ed。应理解,这样的指示是指在结构上和功能上类似于关于图1示出和描述的计算装置110、120、130和140的计算装置。
示例系统1:如果计算装置700被称为Alice,计算装置800被称为Bob,则它们之间的同步可以如图7所示那样。Alice和Bob之间的同步可以如下:
-Alice将存储在分布式数据库703中的事件发送给Bob。
-Bob创建和/或定义包含以下项的新的事件:
-Bob创建和/或定义的最后一个事件的散列
-Alice创建和/或定义的最后一个事件的散列
-Bob对以上散列的数字签名
-Bob将存储在分布式数据库803中的事件发送给Alice。
-Alice创建和/或定义新的事件。
-Alice将该事件发送给Bob。
-Alice按照散列图计算事件的总次序。
-Bob按照散列图计算事件的总次序。
在任何给定时间,成员都可以存储到目前为止接收到的事件,连同与创建和/或定义每个事件的计算装置和/或分布式数据库实例相关联的标识符。每个事件包含两个更早的事件(除了初始事件(其没有父散列)之外)和每个新成员的第一个事件(其具有单个父事件散列,表示邀请它们加入的现有成员的事件)的散列。可以绘制表示该事件集合的示图。它可以示出针对每个成员的垂直线、以及该线上的针对该成员创建和/或定义的每个事件的点。每当事件(较高的点)包括更早的事件(较低的点)的散列时,在两个点之间绘制对角线。事件可以被说成是链接到另一事件,如果该事件可以经由所述另一事件的散列引用所述另一事件(要么直接地,要么通过中间事件)的话。
例如,图3例示说明散列图600的例子。事件602是作为与Carol同步的结果并且在与Carol同步之后由Bob创建和/或定义的。事件602包括事件604(由Bob创建和/或定义的先前的事件)的散列和事件606(由Carol创建和/或定义的先前的事件)的散列。在一些实施例中,例如,包括在事件602内的事件604的散列包括指向其直接祖先事件(事件608和610)的指针。如此,Bob可以使用事件602来引用事件608和610,并且使用指向先前的事件的指针来重构散列图。在一些情况下,事件602可以被说成是链接到散列图600中的其他事件,因为事件602可以经由更早的祖先事件来引用散列图600中的每个事件。例如,事件602经由事件604链接到事件608。另举一例,事件602经由事件606和612链接到事件616。
示例系统2:来自示例系统1的系统,在该系统中,事件还包括事务的“有效载荷”或要记录的其他信息。这样的有效载荷可以用于用自从计算装置的紧前面的事件以后发生和/或定义的任何事务和/或信息来更新事件。例如,事件602可以包括自从事件604被创建和/或定义以后Bob执行的任何事务。因此,当使事件602与其他计算装置同步时,Bob可以共享该信息。因此,Bob执行的事务可以与事件相关联,并且与使用事件的其他成员共享。
示例系统3:来自示例系统1的系统,在该系统中,事件还包括对于调试、诊断和/或其他目的有用的当前时间和/或日期。所述时间和/或日期可以是计算装置(例如,Bob)创建和/或定义事件时的当地时间和/或日期。在这样的实施例中,这样的当地时间和/或日期与其余装置不是同步的。在其他实施例中,所述时间和/或日期在装置之间可以是同步的(例如,当交换事件时)。在还有的其他的实施例中,可以使用全球计时器来确定时间和/或日期。
示例系统4:来自示例系统1的系统,在该系统中,Alice不将Bob创建和/或定义的事件发送给Bob,也不将这样的事件的祖先事件发送给Bob。事件x是事件y的祖先,如果y包含x的散列或者y包含作为x的祖先的事件的散列的话。类似地说,在这样的实施例中,Bob将Alice还未存储的事件发送给Alice,而不发送Alice已经存储的事件。
例如,图4例示说明示例散列图620,该散列图例示说明事件622(黑色圆圈)的祖先事件(虚线圆圈)和后代事件(条纹圆圈)。线建立关于事件的部分次序,其中,祖先在黑色事件之前出现,后代在黑色事件之后出现。部分次序并不指示白色事件是在黑色事件的前面、还是后面,所以使用总次序来决定它们的顺序。另举一例,图5例示说明示例散列图,该散列图例示说明一个特定的事件(实线圆圈)和每个成员接收到该事件的指示(条纹圆圈)的第一时间。当Carol与Dave同步来创建和/或定义事件624时,Dave不将事件622的祖先事件发送给Carol,因为Carol已经知道并且已经接收了这样的事件。相反,Dave将Carol还未接收和/或存储在Carol的分布式数据库实例中的事件发送给Carol。在一些实施例中,Dave可以基于Dave的散列图关于Carol先前已经接收到什么事件揭示了什么来识别要发送给Carol什么事件。事件622是事件626的祖先。因此,在事件626的时间,Dave已经接收到事件622。图4示出Dave从Ed接收事件622,Ed从Bob接收事件622,Bob从Carol接收事件622。此外,在事件624的时间,事件622是Dave已经接收到的、由Carol创建和/或定义的最后一个事件。因此,Dave可以将Dave已经存储的除了事件622及其祖先之外的事件发送给Carol。另外,当从Dave接收到事件626时,Carol可以基于存储在Carol的分布式数据库实例中的事件中的指针来重构散列图。在其他实施例中,Dave可以基于Carol将事件622发送给Dave(在图4中未示出)并且Dave使用事件622(和其中的引用)进行识别以识别Carol已经接收到的事件,来识别要发送给Carol什么事件。
示例系统5:来自示例系统1的系统,在该系统中,两个成员按照使得事件直到接受者已经接收到和/或存储该事件的祖先之后才被发送的次序来向对方发送事件。因此,发送者从最旧到最新发送事件,以使得接受者可以在事件被接收时、通过将关于每个事件的两个散列与已经接收到的两个祖先事件进行比较来检查这两个散列。发送者可以基于发送者的散列图的当前状态(例如,由发送者定义的数据库状态变量)和散列图指示接收者已经接收到了什么,来识别要发送给接收者什么事件。参照图3,例如,当Bob与Carol同步以定义事件602时,Carol可以识别事件619是Carol已经接收到的、由Bob创建和/或定义的最后一个事件。因此,Carol可以确定Bob知道该事件及其祖先。因此,Carol可以首先将事件618和事件616(即,Carol已经接收到的、Bob还未接收到的最旧的事件)发送给Bob。Carol然后可以将事件612以及接着事件606发送给Bob。这使得Bob可以容易地链接事件,并且重构Bob的散列图。使用Carol的散列图来识别Bob还未接收到什么事件可以提高同步的效率,并且可以减小网络通信量,因为Bob不向Carol请求事件。
在其他实施例中,最近的事件可以被首先发送。如果接收者(基于最近的事件中的两个先前的事件的散列和/或指向最近的事件中的先前的事件的指针)确定它们还未接收到所述两个先前的事件中的一个,则接收者可以请求发送者发送这样的事件。这可以发生,直到接收者已经接收到和/或存储最近的事件的祖先。参照图3,在这样的实施例中,例如,当Bob从Carol接收到事件606时,Bob可以识别事件606中的事件612和事件614的散列。Bob在创建和/或定义事件604时可以确定事件614先前已经从Alice接收。因此,Bob不需要向Carol请求事件614。Bob还可以确定事件612还未被接收到。Bob然后可以向Carol请求事件612。Bob然后可以基于事件612内的散列来确定Bob尚未接收到事件616或618,并且可以相应地向Carol请求这些事件。基于事件616和618,Bob然后将能够确定他已经接收到事件606的祖先。
示例系统6:来自示例系统5的系统,该系统具有额外的约束,即,当成员在将接着发送的几个事件之间具有选择时,事件被选择为使由该成员创建和/或定义的、到目前为止发送的字节的总数最小化。例如,如果Alice仅有两个事件留待发送给Bob,一个是100字节并且由Carol创建和/或定义,一个是10字节并且由Dave创建和/或定义,并且到目前为止在该同步中Alice已经发送了由Carol创建和/或定义的事件的200个字节和由Dave创建和/或定义的事件的210个字节,则Alice应首先发送Dave事件,然后随后发送Carol事件。因为210+10<100+200。这可以用于解决单个成员要么送出单个巨大的事件、要么发送一大批小事件的攻击。在通信量超过大多数成员的字节限制的情况下(如关于示例7所讨论的),示例系统6的方法可以确保攻击者的事件被忽略,而不是合法用户的事件被忽略。类似地说,可以通过在更大的事件之前发送较小的事件(以抵御捆绑连接的一个巨大的事件)来减少攻击。而且,如果成员不能在单个同步中发送事件中的每个(例如,因为网络限制、成员字节限制等),则该成员可以发送来自每个成员的几个事件,而不是仅发送由攻击者定义和/或创建的事件、却不发送由其他成员创建和/或定义的(几个)事件。
示例系统7:来自示例系统1的系统,该系统具有附加的第一步骤,在该步骤中,Bob将指示他在该同步期间愿意接收的字节的最大数量的数发送给Alice,Alice用她的限制做出回复。Alice然后在下一个事件将超过该限制时停止发送。Bob同样这样做。在这样的实施例中,这限制了传送的字节的数量。这可能增加收敛的时间,但是将减少每次同步的网络通信量的量。
示例系统8:来自示例系统1的系统,在该系统中,在同步处理的开头添加了以下步骤:
-Alice识别她已经接收到和/或存储的事件集合S,跳过由Bob创建和/或定义的事件或者作为由Bob创建和/或定义的事件的祖先的事件。
-Alice识别创建和/或定义S中的每个事件的成员,并且将成员的ID号的列表发送给Bob。Alice还发送她已经接收到和/或存储的、由每个成员创建和/或定义的若干个事件。
-Bob用他已经接收到多少个由其他成员创建和/或定义的事件的列表做出回复。
-Alice然后仅将Bob还未接收到的事件发送给Bob。例如,如果Alice向Bob指示她已经接收到100个由Carol创建和/或定义的事件,并且Bob回复他已经接收到95个由Carol创建和/或定义的事件,则Alice将仅发送由Carol创建和/或定义的最近的5个事件。
示例系统9:来自示例系统1的系统,该系统具有额外的用于识别和/或处理欺骗者的机制。每个事件包含两个散列,一个来自由该成员创建和/或定义的最后一个事件(“自有散列”),一个来自由另一成员创建和/或定义的最后一个事件(“外来散列”)。如果成员用相同的自有散列创建和/或定义两个不同的事件,则该成员是“欺骗者”。如果Alice通过接收由Dave用相同的自有散列创建和/或定义的两个不同的事件,发现Dave是欺骗者,则她存储他是欺骗者的指示符,并且在未来避免与他同步。如果她发现他是欺骗者,仍再次与他同步,并且创建和/或定义记录该事实的新的事件,则Alice也变为欺骗者,获悉Alice进一步与Dave同步的其他成员停止与Alice同步。在一些实施例中,这仅以一种方式影响同步。例如,当Alice发送她已经接收到的关于每个成员的事件的数量和标识符列表时,她不发送针对欺骗者的ID或计数,所以Bob将不会用任何对应的数来做出回复。Alice然后将她已经接收到的欺骗者的事件发送给Bob,对于这些事件,她还未接收到Bob已经接收到这样的事件的指示。在该同步结束之后,Bob还将能够确定Dave是欺骗者(如果他尚未将Dave识别为欺骗者的话),Bob还将拒绝与欺骗者同步。
示例系统10:示例系统9中的系统,该系统增加了Alice通过将她已经识别的并且她仍在存储其事件的欺骗者的列表发送给Bob来开始同步处理,并且Bob用除了Alice识别的欺骗者之外、他已经识别的任何欺骗者来做出回复。然后,他们继续照常进行,而当彼此同步时不给出对于欺骗者的计数。
示例系统11:示例系统1中的系统,该系统具有基于在同步期间接收到的任何新的事件内部的事务来重复地更新当前状态(例如,由所述系统的成员定义的数据库状态变量捕捉)的处理。这还可以包括第二处理,所述第二处理每当事件序列改变时,通过以下操作来重复地重新构建该状态(例如,事件的次序):返回到更早的状态的副本,并且通过按新的次序处理事件来重新计算当前状态。因此,例如,每个计算装置可以维护两个版本的状态(一个在接收到新的事件和事务时被更新,一个只有在实现共识时才被更新)。在某个时刻(例如,在一段时段之后,在给定数量的事件被定义和/或接收到之后,等等),接收到新的事件和事务时被更新的状态的版本可以被丢弃,只有在实现共识之后才被更新的状态的新的副本可以成为接收到新的事件和事务时被更新的状态的新的版本。这可以确保两个状态的同步。
在一些实施例中,当前状态是与事务的结果相关联的状态、余额、条件等。类似地说,状态可以包括被事务修改的数据结构和/或变量。例如,如果事务是银行账户之间的转账,则当前状态可以是账户的当前余额。另举一例,如果事务与多玩家游戏相关联,则当前状态可以是与游戏相关联的位置、生命数量、获得物品、游戏状态等。
示例系统12:示例系统11中的系统,该系统通过使用“快速克隆”数组列表来维护状态(例如,银行账户余额、游戏状态等)而变得更快。快速克隆数组列表是像具有一个附加特征的数组那样动作的数据结构:它支持看起来像创建和/或定义新的对象的“克隆”操作,所述新的对象是原件的副本。克隆物就像它是真实的副本一样动作,因为对于克隆物的改变不影响原件。然而,克隆操作比创建真实的副本快,因为创建克隆物实际上并不涉及将一个数组列表的整个内容拷贝和/或更新到另一个数组列表。不是具有原始列表的两个克隆物和/或副本,而是可以使用两个小的对象,每个对象具有散列表和指向原始列表的指针。当对克隆物进行写入时,散列表记住哪个元素被修改和新值。当对位置执行读取时,首先检查散列表,如果该元素被修改,则返回来自散列表的新值。否则,返回来自原始数组列表的那个元素。以这种方式,两个“克隆物”最初正好是指向原始数组列表的指针。但是因为每个被重复地修改,所以它生长为具有大的散列表,该散列表存储它本身和原始列表之间的差异。克隆物本身可以被克隆,从而使数据结构扩展为对象树,每个对象具有它自己的散列表和指向其父的指针。读取因此使得沿着树向上走,直到找到具有请求的数据的顶点或者到达根为止。如果顶点变得太大或复杂,则可以用父的真实副本来替换它,可以对副本做出散列表中的改变,并且可以丢弃散列表。另外,如果不再需要克隆物,则在垃圾收集期间,可以从树移除它,并且可以使树瓦解。
示例系统13:示例系统11中的系统,该系统通过使用“快速克隆”散列表来维护状态(例如,银行账户余额、游戏状态等)而变得更快。这与系统12是相同的,除了树的根是散列表,而不是数组列表之外。
示例系统14:示例系统11中的系统,该系统通过使用“快速克隆”关系数据库来维护状态(例如,银行账户余额、游戏状态等)而变得更快。例如,快速克隆数据库可以用于如关于示例系统11所讨论的那样维护状态的两个副本。这是充当围绕现有的关系数据库管理系统(RDBMS)的包装器的对象。每个表观的“克隆物”实际上是具有ID号和指向包含数据库的对象的指针的对象。当用户的代码试图对数据库执行结构查询语言(SQL)查询时,首先对该查询进行修改,然后将该查询发送到真实的数据库。真实的数据库与客户端代码看见的数据库是相同的,除了每个表具有用于克隆物ID的一个附加字段之外。例如,假设存在具有克隆物ID 1的原始数据库,然后用ID 2和3生成数据库的两个克隆物(例如,用于维护状态的两个版本)。每个表中的每行在克隆物ID字段中将具有1、2或3。当查询来自输入克隆物2中的用户代码时,对查询进行修改以使得查询将仅从在该字段中具有2或1的行读取。类似地,对3的读取寻找具有3或1ID的行。如果结构化查询语言(SQL)命令进入克隆物2并且说删除一行,该行具有1,则该命令应仅从1变为3,这将该行标记为不再被克隆物2和3共享,现在仅对3是可见的。如果在操作中存在几个克隆物,则可以插入所述行的几个副本,并且可以将每个副本变为不同克隆物的ID,以使得新的行对于克隆物是可见的,除了刚“删除”所述行的克隆物之外。类似地,如果行被添加到克隆物2,则该行被添加到具有2的ID的表。行的修改等同于删除、再插入。如前,如果几个克隆物是收集的垃圾,则树可以被简化。该树的结构将被存储在克隆物不可访问的附加的表中,但是只在内部使用。
示例系统15:示例系统11中的系统,该系统通过使用“快速克隆”文件系统来维护状态而变得更快。这是充当围绕文件系统的包装器的对象。所述文件系统构建在现有的文件系统之上,使用快速克隆关系数据库来管理所述文件系统的不同版本。底层文件系统存储大量文件,要么存储在一个目录中,要么根据文件名细分(以使目录保持小)。目录树可以被存储在数据库中,并且不被提供给主机文件系统。当文件或目录被克隆时,“克隆物”仅仅是具有ID号的对象,并且数据库被修改以反映该克隆物现在存在。如果快速克隆文件系统被克隆,则它对于用户来说看起来像整个新的硬盘驱动器已经被创建和/或定义,被用现有的硬盘驱动器的副本初始化一样。对于一个副本的改变可能对其他副本没有影响。实际上,每个文件或目录仅存在一个副本,当文件通过一个克隆物被修改时,拷贝发生。
示例系统16:示例系统15中的系统,在该系统中,在主机操作系统上针对快速克隆文件系统中的文件的每个N字节部分创建和/或定义单独的文件。N可以是某个合适的大小,诸如举例来说4096或1024。以这种方式,如果一个字节在大文件中被改变,则该大文件中只有一个组块被拷贝和修改。这还提高了将仅几个字节不同的许多文件存储在驱动器上时的效率。
示例系统17:示例系统11中的系统,在该系统中,每个成员将某个先前时间的状态的散列、连同直到该时刻发生的数个事件(这些事件指示成员辨识和/或识别现在对事件的次序存在共识)包括在他们创建和/或定义的事件中的一些或全部中。在成员已经针对给定状态收集了包含来自多数用户的这样的散列的带签名事件之后,该成员然后可以将这存储为此刻共识状态的证明,并且从存储器删除该时刻之前的事件和事务。
示例系统18:示例系统1中的系统,在该系统中,计算中位数或多数的操作被替换为加权的中位数或加权的多数,其中,成员被用他们的“份额”加权。份额是指示成员的投票有多少计数的数。份额可以是加密货币中的股份,或者仅仅是当成员第一次被邀请加入时被分配、然后在该成员邀请加入的新的成员之间划分的任意数。当足够的成员已经同意共识状态时,旧的事件可以被丢弃,以使得它们的总份额是现有的份额的多数。如果总次序是使用由成员贡献的排名的中位数计算的,则结果是其中一半的成员具有较高的排名、一半具有较低的排名的数。另一方面,如果总次序是使用加权的中位数计算的,则结果是其中总份额的大约一半与低于此的排名相关联、一半与高于此的排名相关联的数。对投票和中位数进行加权对于防止Sybil攻击可能是有用的,在Sybil攻击中,一个成员邀请数量庞大的“马甲”用户加入,其中每个“马甲”用户仅由邀请成员进行假名控制。如果邀请成员被迫与被邀请者划分他们的份额,则马甲对于攻击者尝试控制共识结果将是无用的。因此,份额证明在一些情况下可能是有用的。
示例系统19:示例系统1中的系统,在该系统中,代替单个分布式数据库,存在分层结构的多个数据库。例如,可能存在用户是其成员的单个数据库,然后几个更小的数据库或“组块”,其中每个具有成员的子集。当事件在组块中发生时,它们在该组块的成员之间是同步的,而在该组块外部的成员之间不是同步的。然后,不时地,在组块内已经决定共识次序之后,所得的状态(或者具有它们的达成共识的总次序的事件)可以与大型数据库的整个成员资格共享。
示例系统20:示例系统11中的系统,该系统具有如下能力,即,具有更新用于更新状态(例如,由所述系统的成员定义的数据库状态变量捕捉)的软件的事件的能力。例如,事件X和Y可以包含根据读取这些事件内的事务、然后适当地更新状态的软件代码来修改状态的事务。然后,事件Z可以包含所述软件的新版本现在可用的通知。如果总次序说事件按次序X、Z、Y发生,则可以通过用旧的软件对X中的事务进行处理、然后用新的软件对Y中的事务进行处理来更新状态。但是如果达成共识的次序是X、Y、Z,则X和Y这二者都可以用旧的软件来更新,这可能给出不同的最终状态。因此,在这样的实施例中,升级所述代码的通知可以在事件内出现,以使得社区(例如,分布式数据库内的成员)可以对何时从旧的版本切换到新的版本实现共识。这确保成员将保持同步的状态。这还确保所述系统即使在升级期间也可以保持运行,而无需重新启动或重新开始所述处理。
上述系统预期创建和/或实现用于分布式共识、最终达成共识的高效的收敛机制。如以下所示,关于此的几个定理可以被证明。
示例定理1:如果事件x按部分次序领先于事件y,则在给定成员在给定时间对其他成员的了解中,其他成员中的每个将要么已经在y之前接收到x的指示,要么将还未接收到y的指示。
证明:如果事件x按部分次序领先于事件y,则x是y的祖先。当成员第一次接收到y的指示时,该成员要么已经更早地接收到x的指示(在这种情况下,他们在y之前获悉x),要么将是同步为该成员提供x和y这二者的情况(在这种情况下,他们在该同步期间将在y之前获悉x,因为在单次同步期间接收到的事件被认为已经按与关于示例系统5描述的祖辈关系一致的次序接收)。QED
示例定理2:对于任何给定的散列图,如果x按部分次序领先于y,则x按对该散列图计算的总次序将领先于y。
证明:如果x按部分次序领先于y,则按照定理1:
对于所有的i,rank(i,x)<rank(i,y)
其中,rank(i,x)是成员i分配给事件x的排名,如果x是成员i接收到的第一个事件,则排名为1,如果x是第二个,则排名为2,依此类推。设med(x)为rank(i,x)在所有i上的中位数,类似地适用于med(y)。
对于给定的k,选择i1和i2,以使得rank(i1,x)是第k个最小的x排名,rank(i2,y)是第k个最小的y排名。于是:
rank(i1,x)<rank(i2,y)
这是因为rank(i2,y)大于或等于y排名中的k个,其中每个y排名严格大于对应的x排名。因此,rank(i2,y)严格大于x排名中的至少k个,所以严格大于第k个最小的x排名。该论证适用于任何k。
设n为成员的数量(其是i值的数量)。于是,n必须要么是奇数,要么是偶数。如果n是奇数,则设k=(n+1)/2,第k个最小的排名将是中位数。因此,med(x)<med(y)。如果n是偶数,则当k=n/2时,第k个最小的x排名将严格小于第k个最小的y排名,而且第(k+1)个最小的x排名将严格小于第(k+1)个最小的y排名。所以所述两个x排名的平均值将小于所述两个y排名的平均值。因此,med(x)<med(y)。所以在两种情况下,x排名的中位数严格小于y排名的中位数。所以如果总次序是通过按照中位数排名对动作进行排序而定义的,则x按总次序将领先于y。QED
示例定理3:如果“传播时段”是通过与所有成员同步来使现有的事件传播的时间量,则:
在1个传播时段之后:所有的成员都已经接收到事件
在2个传播时段之后:所有的成员都同意这些事件的次序
在3个传播时段之后:所有的成员都知道已经达成协定
在4个传播时段之后:所有的成员都从所有的其他的成员获得数字签名,赞同该达成共识的次序。
证明:设S0为通过给定时间T0已经创建和/或定义的事件的集合。如果每一个成员通常最后都将无限地与每一个其他的成员同步,则以概率1,最后将存在时间T1,在时间T1,S0中的事件已经流传到每一个成员,以使得每一个成员都知道所有的事件。这是第一传播时段的结束。设S1为在时间T1存在并且在T0还不存在的事件的集合。于是,将以概率1,最后存在时间T2,在时间T2,每一个成员都已经接收到集合S1中的每一个事件,所述每一个事件是在时间T1存在的那些事件。这是第二传播时段的结束。类似地,T3是当S2中的所有事件(到T2但不在T1之前存在的那些事件)已经流传到所有的成员的时候。注意,每个传播时段最后都以概率1结束。平均起来,如果存在n个成员,则每个将持续它执行log2(n)次同步所花费的时间之久。
到时间T1,每一个成员都将已经接收到S0中的每一个事件。
到时间T2,给定成员Alice将已经接收到接收S0中的每一个事件的其他成员中的每个的记录。Alice因此可以对每一个成员、对S0中的每一个动作计算排名(这是该成员接收到该动作的次序),然后按照排名的中位数来对事件进行排序。对于S0中的事件,所得的总次序不改变。这是因为所得的次序是每个成员首先接收到这些事件中的每个的指示的次序的函数,该次序是不变的。可能的是,Alice的计算的次序将使来自S1的一些事件穿插在S0事件之间。在这些S1事件落在S0事件的序列内的情况下,这些S1事件仍可能改变。但是S0中的事件的相对次序将不改变。
到时间T3,Alice将已经得知S0和S1的并集上的总次序,该并集上中的事件的相对次序将不改变。此外,她可以在该顺序内找到来自S1的最早的事件,并且可以推断S1之前的事件的顺序将不改变,即使在S0外部插入新的事件也不改变。因此,到时间T3,Alice可以确定对于第一个S1事件之前的历史中的事件的次序已经实现共识。她可以对由按该次序发生的这些事件得到的(例如,由Alice定义的数据库状态变量捕捉的)状态的散列进行数字签名,并且作为她创建和/或定义的下一个事件的一部分送出签名。
到时间T4,Alice将已经从其他成员接收到类似的签名。此刻,她可以仅保存该签名列表、连同它们证实的状态,并且她可以丢弃她在第一个S1事件之前已经存储的事件。QED
本文中所描述的系统描述了快速地且安全地实现共识的分布式数据库。这可以是对许多应用有用的构建块。例如,如果事务描述从一个加密货币钱包到另一个加密货币钱包的加密货币的转移,并且如果状态仅仅是每个钱包中的当前金额的声明,则该系统将构成避免现有系统中的高成本的工作证明的加密货币系统。自动规则实施使得这可以添加在目前的加密货币中不常见的特征。例如,通过实施如下规则,丢失的硬币可以被恢复,以避免通货紧缩:如果钱包在某个时段内既不发送、也不接收加密货币,则该钱包被删除,并且其价值被与它们目前包含的金额成比例地分发给其他的现有的钱包。以这种方式,即使用于钱包的私钥丢失,货币供给也将不会增长或收缩。
另一个例子是分布式游戏,所述分布式游戏像在服务器上玩的大规模多玩家在线(MMO)游戏那样动作,但是在不使用中央服务器的情况下实现该游戏。共识可以在没有任何中央服务器控制的情况下实现。
另一个例子是构建于这样的数据库之上的用于社交媒体的系统。因为事务被数字签名,并且成员接收到关于其他成员的信息,所以这提供优于目前的系统的安全性和方便性优点。例如,可以实现具有强反垃圾邮件策略的电子邮件系统,因为电子邮件不可能伪造返回地址。这样的系统还可以变为将目前通过电子邮件、推特、文本、论坛、维基和/或其他社交媒体进行的功能组合在单个分布式数据库中的统一的社交系统。
另一个例子是在灾难应对中用来协调各种机关(诸如警察、消防、医疗、军队、国民自卫军、和/或联邦紧急事务管理署(FEMA))的通信系统。分布式数据库可以用于为每个机关的成员给出关于情形的共同看法,每个机关贡献信息,并且可以访问来自其他机关的信息。将确保的是,各种成员可以访问相同的信息,并且意外或攻击者难以制止网络如预期那样操作。中央服务器上的单个数据库可以例如被内部人或被恶意软件感染的单个计算机破坏。中央服务器上的这样的单个数据库也可能由于分布式拒绝服务(DDoS)攻击而被迫离线,在DDoS攻击中,它被充满来自受损的计算机(例如,来自世界各地)的互联网分组。另举一例,中央服务器上的这样的单个数据库还可能因为通信导线或卫星站在灾难期间受损而离线。然而,分布式数据库对于这样的问题可以是有弹性的。此外,如果分布式数据库执行实施规则的分布式代码,则成员可以合作地确保单个受损的成员不可能使所述系统充满额外的数据以致于压倒所述系统并且使所述系统从其内关闭。该示例使用情况将难以使用基于工作证明的区块链来实现,因为紧急应对机关不太可能运行这样的低效系统所需的强大的计算机。这样的使用情况如果使用基于领导者的共识系统(诸如Paxos或轮询区块链)实现的话将也不会那么有弹性,因为一次针对单个计算机的DDoS可能持续地使当前的领导者关闭,并且当社区切换到新的领导者时,切换到攻击新的计算机。因此,为了用区块链和基于领导的共识系统来补救问题,可以使用分布式共识系统(诸如本文中所描述的分布式数据库系统)来实现有弹性的分布式数据库。
类似地,本文中所描述的分布式数据库系统可以用于实现用于军事行动的有弹性的通信和共享的信息示图。在又一个例子中,本文中所描述的分布式数据库系统可以用于实现用于控制物联网对象、或监视控制和数据采集(SCADA)基础设施、或“智能城市”中的传感器或控件的分布式数据库。这样的系统可以包括与上述灾难管理示例实现类似的特征和/或要求。
其他应用可以包括更复杂的密码功能,诸如群组数字签名,在群组数字签名中,群组作为整体合作来对合同或文档进行签名。这种形式和其他形式的多方计算可以使用这样的分布式共识系统来有用地实现。
另一个例子是公众分类账簿系统。任何人都可以付款来将某个信息存储在所述系统中,每年每个字节支付少量加密货币(或真实世界货币)来将信息存储在所述系统中。这些资金然后可以自动地分发给存储该数据的成员和重复地同步工作以实现共识的成员。它可以在每次他们同步时自动地将少量加密货币转移给成员。
另一个例子是抵抗通信量分析的安全消息传送系统。在该例子中,分布式数据库可以包含和/或存储成员之间的加密的消息。每个成员可以访问每一个消息,但是消息被加密以使得只有预期的接受者可以对它们进行解密。社区将知道成员何时发送消息,但是将不会知道消息被发送给谁。每个成员可以尝试对每一个消息进行解密,并且通过解密的消息是有效的并且具有正确的校验和的事实来辨识发送给它们的那些消息。
可替代地,这样的系统中的计算要求可以例如以以下方式降低。每对成员可以最初协商两个共享的密钥(对中的每个成员一个),他们使用这些密钥来播种两个不同的密码安全随机数发生器(CSPRNG)(对中的每个成员一个)。如果Alice已经与Bob创建了这样的密钥,则每次她将消息添加到意图用于Bob的数据库时,她使用她的CSPRNG来产生新的伪随机数,并且她将该数附到加密的消息。然后Bob可以快速地检查附到数据库中的每个消息的数以查看这样的数中的任何一个是否指示意图用于他的消息。因为Bob知道共享的密钥,他因此知道Alice将产生的数的顺序,所以他知道当为从Alice寄给他的消息扫描消息时要寻找什么数。当他找到附有这样的数的消息时,他知道它们是从Alice给他的消息,并且他可以对它们进行解密。诸如从Carol到Dave的无关的消息将附有不同的数,Bob将不对它们解密地丢弃它们。在一些实例化中,Alice和Bob可以周期性地重新协商他们的共享的密钥,并且擦除他们的旧的密钥。这提供了前向安全性,以使得在未来,即使Alice和Bob的密钥最后受损,第三方也将难以识别在Alice和Bob之间发送的消息。
这些例子表明分布式共识数据库作为许多应用的组件是有用的。因为数据库不使用高成本的工作证明,而是可能使用更便宜的份额证明,所以数据库可以用在更小的计算机或者甚至移动装置和嵌入装置上运行的全节点运行。
虽然在上面被描述为包含两个先前的事件的散列(一个自有散列,一个外来散列)的事件,但是在其他实施例中,成员可以与两个其他的成员同步来创建和/或定义包含三个先前的事件的散列(一个自有散列,两个外来散列)的事件。在还有的其他的实施例中,来自任何数量的成员的先前事件的任何数量的事件散列可以包括在事件内。在一些实施例中,不同的事件可以包括先前事件的不同数量的散列。例如,第一个事件可以包括两个事件散列,第二个事件可以包括三个事件散列。
虽然事件在上面被描述为包括先前的事件的散列(或密码散列值),但是在其他实施例中,事件可以被创建和/或定义为包括指针、标识符、和/或对于先前的事件的任何其他合适的引用。例如,事件可以被创建和/或定义为包括与先前的事件相关联的并且用于识别先前的事件的序列号,从而链接事件。在一些实施例中,这样的序列号可以包括例如与创建和/或定义事件的成员相关联的标识符(例如,介质访问控制(MAC)地址、互联网协议(IP)地址、分配的地址等)以及由该成员定义的事件的次序。例如,具有标识符10的成员,事件是由该成员创建和/或定义的第15个事件,可以将标识符1015分配给该事件。在其他实施例中,可以使用任何其他的合适的格式来为事件分配标识符。
在其他实施例中,事件可以包含全部的密码散列,但是这些散列只有部分在同步期间被发送。例如,如果Alice将包含散列H的事件发送给Bob,J是H的头3个字节,并且Alice确定在她已经存储的事件和散列之中,H是以J开始的唯一散列,则她在同步期间可以发送J,而不是H。如果Bob然后确定他具有以J开始的另一个散列,则他然后可以回复Alice以请求整个H。以这种方式,散列可以在发送期间被压缩。
图13是根据实施例的分布式数据库的初始状态的表示。在一些实现中,分布式数据库可以由创始人成员(在该例子中,Alice、Bob、Carol、Dave和Ed)初始化。每个成员定义一对成员密钥1305。每对成员密钥可以包括与成员相关联的唯一私钥和唯一公钥。例如,Alice具有A_Private_Key和A_Public_Key,而Bob具有B_Private_Key和B_Public_Key,对于Carol、Dave和Ed依此类推,如列1305中所示。每个公钥和私钥对包括两个唯一地相关的密码密钥(例如,大数)。下面是公钥的例子:
3048 0241 00C9 18FA CF8D EB2D EFD5 FD37 89B9 E069 EA97 FC20 5E35 F577EE31 C4FB C6E4 4811 7D86 BC8F BAFA 362F 922B F01B 2F40 C744 2654 C0DD 2881D673 CA2B 4003 C266 E2CD CB02 0301 0001
公钥经由例如可公开访问的储存库或目录可供分布式数据库中的其他成员使用。然而,私钥对于其各自的所有者仍然保密。因为密钥对是在数学上相关的,所以用公钥加密的消息只可以用其私钥对应部分来解密,反过来也一样。例如,如果Bob想要将消息发送给Alice,并且想要确保只有Alice能够读取该消息,则他可以用Alice的公钥对该消息进行加密。只有Alice可以访问她的私钥,结果,是具有将加密的数据解密回其原始形式的能力的唯一成员。因为只有Alice可以访问她的私钥,所以可能的是,只有Alice可以对加密的消息进行解密。即使某个其他的人得到对于加密的消息的访问权,它仍将是保密的,因为他们不应该具有对于Alice的私钥的访问权。
在一些实现中,列1305中的对被用作计算分布式数据库唯一标识符(D2ID)1309的参数。意识到的是,D2ID 1309一般来说,考虑到公钥和每个创始人成员提供的参数的随机性,是难以复制的,因此有利地为分布式数据库提供了高安全性级别。另外,为了提高随机性,用于每个成员的每个密钥对对于该成员参与的每个分布式数据库可以是不同的。而且,这样的密钥对可以由每个成员随机地产生。因此,即使相同的成员定义了第二数据库,第二分布式数据库的D2ID也将不同于第一分布式数据库的D2ID。
而且,在一些情况下,当计算用于数据库的D2ID时,不同的随机数(例如,随机产生的标识符)可以与每个成员公钥配对。随机数可以由每个成员随机地产生和/或针对每个成员随机地产生。这可以通过确保即使相同的成员用相同的公钥定义了第二数据库、随机数也将不同、因此第二分布式数据库的D2ID也将不同,来提高安全性。
在一些实现中,成员资格1303可以被实现为其中记录与分布式数据库的状态相关联的多个成员资格列表的数据结构或其他的在逻辑上和/或物理上实现的容器。在一些情况下,成员资格1303包括当前成员资格列表(CML)1301,CML 1301包含与分布式数据库的当前状态相关联的成员的属性。CML 1301被配置为根据分布式数据库执行的操作(例如,如参照图14所讨论的,添加成员或从数据库移除成员)而改变。在分布式数据库的初始状态,CML1301包括分布式数据库的创始成员的属性,例如,成员资格密钥对1305以及与这样的创始成员相关联的其他的合适的属性。
在一些情况下,CML成员和他们的相关联的属性随着时间的过去在例如将成员添加到分布式数据库和/或移除成员时改变。因此,第一CML成员集合可以在第一时段期间实现分布式数据库,第二CML成员集合可以在第二时段期间实现分布式数据库。在这样的情况下,在更新CML 1301之前,CML 1301的副本被存储在先前成员资格列表(PML)1307中,然后,CML 1301被更新。PML 1307可以被实现为数据结构或其他在逻辑上和/或物理上实现的容器。PML 1307被配置为包含与分布式数据库的先前的状态相关联的成员的属性。
数字签名是针对每个创始成员产生的,最后针对添加到分布式数据库的非创始成员产生。每个成员使用他们的私钥对D2ID进行数字签名。例如,Alice的数字签名是Sign(A_Private_Key,D2ID)的结果,其中,A_Private_Key是Alice的私钥,D2ID是分布式数据库的名称或唯一标识符。在其他情况下,Alice用Alice的唯一标识符和她的签名来产生对,例如,(A_ID,Sign(A_Private_Key,D2ID)),其中,标识符A_ID可以是她的公钥、名称、数字证书或其他合适的标识符。
在一些实现中,数字签名用于在成员之间发送带签名的消息。因此,带签名的消息可以包括函数Sign(K,M)的结果,其中,K是私钥,例如,与Alice相关联的“A_Private_Key”,M是消息(MSG)。在一些情况下,消息“MSG”可以是散列的且串联的数据的函数,例如,MSG=hash(x,y,z),其中,x、y和z可以是在分布式数据库的成员之间交换的任何类型的数据(例如,事件、分布式数据库状态、操作等)。因此,成员可以发送形式(MSG,Sign(K,MSG))的带签名的消息,该消息指示消息MSG被例如Alice签名,当K=A_Private_Key时。
在一些情况下,成员资格1303和分布式数据库数据1308是两个逻辑上独立的实体或数据结构(例如,不同的数据库、不同的逻辑上分开的数据库部分(例如,表格)、单个数据库内的不同的数据结构等)。例如,成员资格1303包括与D2ID 1309相关联的当前成员和先前的成员,而分布式数据库数据1308包括与分布式数据库的当前状态1311相关联的数据,包括任何创建的和/或接收的事件以及这样的事件中包括的事务或操作。在其他情况下,成员资格1303和分布式数据库数据1308可以是单个逻辑实体或数据结构的一部分。
图13中未示出的与分布式数据库状态相关联的其他的数据结构可以包括例如基于对分布式数据库执行的操作(诸如更新、添加新的成员、移除成员、以及随着时间的过去对分布式数据库执行的其他的合适的数据结构和/或操作)而生成的标识符和/或这些操作的结果。在一些情况下,这样的操作可以提供分布式数据库的状态和/或成员的历史。例如,ADD(添加)操作可以用于将新的成员添加到分布式数据库。这可以生成加入分布式数据库的新的成员的标识符(例如,私钥、公钥和/或数字签名)的列表。另举一例,REMOVE(移除)操作可以从分布式数据库移除一个或多个当前成员。这可以使与正从分布式数据库移除的成员相关联的标识符(例如,私钥、公钥和/或数字签名)集合失效或者移除该标识符集合。
如上面所讨论的,分布式数据库的状态可以在实现共识之后定义。例如,一旦第R轮中的所有的著名的证据都被识别和/或知道,就可以计算具有接收轮次R的事件集合S(R)并且计算它们的共识次序和它们的共识时间戳。然后,可以计算状态STATE(R),状态STATE(R)是从具有接收轮次R或更早的接收轮次的事件中的事务得到的数据库状态。此刻,S(R)中的事件的共识次序是已知的,并且将不会改变。因此,在时间T1,分布式数据库状态1311的初始状态在T1之后、T2之前可以为STATE(R)=”STATE1”。在一些情况下,如本文中更详细地讨论的,该状态可以被签署散列值。
每个数据库操作都可以由在实现分布式数据库的计算装置处产生的给定事件中的事务发起。分布式数据库操作与接收轮次号R相关联。例如,如果具有接收轮次R=3的事件中的事务发起数据操作(例如,ADD、REMOVE或UPDATE(更新)),则这样的数据库操作与事件的接收轮次R=3相关联。在一些实现中,当UPDATE操作在具有接收轮次=3的事件中的事务中被提交时,生成新的分布式数据库配置。在一些情况下,新的分布式数据库配置基于在接收轮次R=3期间发起的ADD操作来将成员合并到分布式数据库,并且基于在接收轮次R=3期间发起的REMOVE操作从分布式数据库排除成员。在这样的例子中,接收轮次R=3可以被称为接收轮次号阈值。在这样的情况下,接收轮次号小于或等于R=3的事件中的共识处理和事务根据更旧的或先前的分布式数据库配置或状态而被执行。此外,接收轮次大于R=3的事件中的共识处理和事务用新的分布式数据库配置来执行。例如,“强看见”(如上所述)的概念可以是确定某些条件是否被大于2/3的群体所满足的结果。因此,有必要对在给定的接收轮次处有多少成员在整个群体中进行计数。如果例如被配置为将新的成员John添加到分布式数据库的ADD操作被分布式数据库在接收轮次R=3接收,则当确定群体的大小、以用于与在创建轮次R=3或更早轮次处强看见的著名的证据有关的确定时,John将不被分布式数据库考虑。在这样的情况下,使用先前的成员资格列表(即,更旧的或先前的分布式数据库配置的数据库配置中的成员资格列表)来计算创建轮次R=3和更早轮次的共识相关的投票和收敛中证据的轮次号。新的成员资格列表用于为创建轮次R=3证据之后的事件并且为相关的投票和收敛计算创建轮次号。虽然在以上例子中,当确定群体的大小时,John将不被分布式数据库考虑,但是他的事件可以在接收轮次R=3之前被使用。例如,John的事件可以是事件和该事件看见的祖先事件之间的路径的一部分。因此,虽然John和John的事件本身不能被后代事件用来达到“强看见”阈值(上面已描述),但是后代事件仍可以基于通过John的事件到达“强看见”阈值的路径来使用它可以看见的事件。
如以上所讨论的,在创建轮次R=3中的著名的证据的完整列表被识别之后,被发起的用接收轮次R=3将John添加到分布式数据集的ADD操作在UPDATE操作时生效。因此,产生分布式数据库的新的配置,在该配置中,将John作为成员包括在内。ADD操作和REMOVE操作包括或不包括分布式数据库中登记的群体的一个或多个成员,这改变成员列表中有多少个成员(或份额值)被用来确定是否满足一个或多个阈值(例如,被配置为“多于群体的2/3”的共识阈值)。这个新的阈值用于重新计算晚于创建轮次R=3(例如,接收轮次号阈值)中的证据的事件的轮次号(即,创建轮次),并且用于计算创建轮次R=4和更晚的轮次中的证据的名声(fame)。因此,例如,给定的事件在计算创建轮次R=3证据的名声时可以具有一个“创建轮次”,然后在计算创建轮次R=4证据的名声时具有不同的“创建轮次”。
在一些情况下,ADD、REMOVE和/或UPDATE操作可以通过成员的数字签名的阈值数(也被称为签名阈值)来进行验证。例如,如果作为分布式数据库的一部分的、多于2/3的成员紧接着接收到UPDATE操作之前对该操作进行签名,则UPDATE操作被确定为有效的。参照图14来讨论关于分布式数据库操作的执行的进一步的细节。
虽然在本文中被描述为当执行UPDATE操作时实现新的配置,但是在其他情况下,新的配置是自动实现的(即,没有显式的UPDATE指令)。具体地说,在具有特定的接收轮次R的所有事件都已经被识别之后,可以基于这样的事件来实现新的配置以识别具有接收轮次R+1的事件。具体地说,如果被确定为包括接收轮次R的事件包括ADD或REMOVE操作,则分布式数据库的配置于是可以自动变为计算大于R(即,大于接收轮次号阈值)的接收轮次。
在一些情况下,诸如ADD和REMOVE的数据库操作改变用于达到分布式数据库的给定状态的共识的一个或多个投票阈值。例如,分布式数据库已经计算了1至10的接收轮次(即,在第10轮或之前轮次创建的所有的著名的证据都是已知的,并且仍投票来确定创建轮次11的证据中的一些是否是著名的)。可以产生具有创建轮次5的事件X,对于事件X,接收轮次还不能被计算。在这样的情况下,事件X将没有小于11的接收轮次,因为具有创建轮次10和更小轮次的著名的证据已经被识别。如果事件X包括例如将Frank添加到分布式数据库的当前成员资格列表的事务,则当创建轮次11中的每个证据的名声可以被识别时,在投票确定与创建轮次11相关联的著名的证据期间Frank将不被作为成员进行计数,并且由Frank定义的事件将不被作为得到投票的证据进行计数,直到之后的创建轮次为止。在这样的情况下,具有接收轮次11的所有的事件于是都可以被确定。如果确定例如事件X具有接收轮次11,则Frank将被添加到当前成员资格列表。
投票阈值(例如,如上所述的M)可以被重新计算以将附加的成员(例如,Frank)包括在内。因此,对于晚于第11轮的事件计算的创建轮次(大于接收轮次号阈值的轮次)可以使用包括Frank的新阈值来重新计算。在一些情况下,这样的重新计算处理可以改变哪些事件被确定为例如创建轮次12的证据和/或与后来的创建轮次相关联的证据。其后,可以投票来确定哪些创建轮次12的证据是著名的。因此,当前成员资格列表直到所有的创建轮次12的著名的证据都被识别才将再次改变。此刻,可以确定哪些事件具有接收轮次12(其可以是第二接收轮次号阈值)。这些事件中的一些可以添加成员或从当前成员资格列表移除成员,因此,可以如该例子中所讨论的那样触发对于其他后来的事件的类似改变。
在一些情况下,分布式数据库的成员确定分布式数据库在给定的时间点(或者在给定的接收轮次)的“带签名状态”。“状态”或“当前状态”包括由共识事务序列按它们的共识次序(即,根据包含每个事务的事件的共识次序排序,并且按照事务包括在每个事件中的次序再细分排序)执行得到的信息。在成员计算与直到R的接收轮次相关联的事件的共识次序之后,这样的成员可以按共识次序对由事务得到的状态或当前状态进行数字签名(或者对于与该状态或当前状态相关联的散列值进行数字签名)(例如,通过使用私钥)。可选地或可替代地,成员可以仅对接收轮次的子集的状态进行签名。例如,当R可除以给定的整数(例如,每一个第5轮次)或者根据对分布式数据库的每个成员指定的时间阈值(例如,每1秒)可除时,成员可以被分配以对与接收轮次号R相关联的状态进行签名。
在一些实现中,接收轮次R的“带签名状态”包括以下项中的一个或多个:1)接收轮次号R;2)作为影响带签名状态的共识的一部分的、由每个成员产生的最后一个事件(即,具有接收轮次R或更早的接收轮次的事件)的序列号和散列值;3)按直到R且包括R的接收轮次的共识次序反映事务的影响的数据结构;4)用成员资格列表的多于2/3(在一些情况下,可以使用不同的阈值,诸如,举例来说,多于1/2)的签名在更早的状态上的数字签名(或其他的协定指示)的集合;和/或5)“成员资格历史”。在一些实现中,这些元素中的一些可能缺失(例如,编号4)。在一些实现中,例如,“状态”可以包括上述全部的散列,除了成员资格历史和成员资格历史的单独的散列之外。在这样的实现中,成员可以对散列对进行数字签名(例如,用私钥)以得到“带签名状态”。
在一些实现中,当第一成员对状态进行签名时,产生具有数字签名的事务、状态的散列和接收轮次号。这样的事务被配置为包括在由第一成员创建和/或定义的下一个事件中。第一成员然后可以将事件保存和/或发布到分布式数据库。然后不同于第一成员的其他成员辨识并且记录第一成员数字签名。当第二成员从其他成员接收到若干个数字签名(包括第一成员和与大于阈值的给定状态相关联的其他成员的数字签名)时,第二成员可以将此识别为达成共识的带签名状态。第二成员可以确定数字签名的数量是否达到签名阈值(例如,给定的状态是否被分布式数据库内的成员的多于2/3的数字签名所支持),或者要不然从分布式数据库的其他成员接收协定的指示。在数字签名的数量到达签名阈值之后,该状态变为“带签名状态”。一旦成员具有带签名状态,他们就可以丢弃对该带签名状态做出贡献的任何事件,并且丢弃任何先前的带签名状态。因此,可以释放专用于存储这样的事件和先前的带签名状态的存储器分派,从而减小散列图所用的存储量。在一些实现中,旧的事件不被立即丢弃,而是只有在某个数量的附加的接收轮次变为共识的一部分之后和/或在预定时段之后才被丢弃。
在一些情况下,可以使用以下准则来定义事件:1)“事件”具有比其亲父的序列号大1的序列号(如果没有亲父,则为0)(如上所述);2)“事件”包含对于每个父的“创建轮次”(因此,它不仅仅包含每个父的散列,它还包含从该父拷贝的创建轮次);以及3)事件具有“父轮次”,其是每个父的创建轮次中的最大值(因此,事件的“创建轮次”等于该事件的父的轮次要么加上0,要么加上1)。
在一些情况下,出于该例子的目的被称为“A”的全局常数“年龄阈值”用于确定事件在共识处理中是否将被考虑。例如,考虑到如果事件具有父轮次R,并且事件的接收轮次晚于R+A,A=4,那么:1)该事件将不是共识次序的一部分;2)该事件的事务将被忽略,并且将不影响共识状态;3)该事件可以被知道将不在第R+A轮或更早的轮次中接收它的任何成员丢弃;4)即使该事件是分叉的一部分,该事件也将不阻止在第R+A轮或更晚的轮次中“看见”。例如,如果Alice在同步处理期间、在Alice已经对直到至少第R+A轮的轮次(事件X在这些轮次中的任何一个轮次中都不被接收)计算了著名的证据之后接收到事件X,则Alice可以丢弃事件X。在一些情况下,如果如下面参照图16更详细地讨论的、事件X被Alice丢弃将使给定创建者知道的事件集合具有不连续的序列号,则事件X将不被Alice丢弃。
虽然图13例示说明了分布式数据库的初始状态,但是图14是例示说明根据实施例的、在初始状态被定义之后、在分布式数据库中执行的UPDATE、ADD和REMOVE操作的例子的流程图。在一些情况下,在分布式数据库已经被如图13所示那样初始化之后,在分布式数据库中可以执行一个或多个操作来改变分布式数据库中包括的成员。例如,在1421,考虑到具有STATE(R)=“SW1”的分布式数据库D2ID(其中,SW1是与分布式数据库D2ID的初始散列图相关联的分布式数据库的当前配置),其中,接收轮次号R是最近计算的和/或识别的接收轮次,John、Janice和Chad被配置为在1423,通过发起的ADD函数被作为分布式数据库的成员添加。配置SW1包括上面讨论的事件共识协议(或共识次序)的配置,该配置在确定事件的次序和/或收敛时不包括John、Janice和Chad。在一些情况下,1423处的ADD函数可以将John、Janice和Chad公钥取作参数。此刻,新的成员中的每个还具有相关联的私钥。如1425处所示,成员(例如,Alice)也可以被从分布式数据库移除;在这种情况下,REMOVE操作是以Alice的公钥作为参数而发起的。在一些情况下,ADD和REMOVE操作可以在将分布式数据库实现为事件集合内的事务的成员(计算装置)处接收。ADD和REMOVE操作与它们的接收轮次号相关联,以使得可以确定ADD操作和/或REMOVE操作何时由具有指定的接收轮次号的事件中的事务引起。
在与接收轮次R相关联的UPDATE操作(例如,1427处的UPDATE操作)期间,当前分布式数据库配置SW1(其包括Alice,但不包括John、Janice和Chad)被保存在变量PrevSW中,与PrevSW配置相关联的分布式数据库的成员可以被存储在与接收轮次号R相关联的先前成员资格列表中。在一些替代的实现中,PrevSW可以是包含多个先前的分布式数据库配置的对象的数组。新的分布式数据库配置SW2可以基于在接收轮次R执行UPDATE操作而产生,即,STATE(R)=”SW2”。因此,变量CurrentSW被更新为包含新的分布式数据库配置SW2(其对事件共识协议使用新的配置)。
配置SW2包括John、Janice和Chad,但是将不包括Alice,因此,当分布式数据库使用配置SW2时,Alice将不包括在共识次序或收敛的确定中。换句话说,更新的分布式数据库配置SW2反映对于当前成员列表的改变,这些改变被配置为反映修改的分布式数据库配置(例如,添加新成员John、Janice和Chad以及移除Alice)。在一些情况下,成员的密钥对(包括用于John、Janice和Chad的新的密钥对,但不包括Alice)的更新的集合包括在当前的分布式数据库配置CurrentSW中。在一些情况下,此时的分布式数据库状态还可以包括直到更新时对分布式数据库执行的操作,包括ADD操作、REMOVE操作、UPDATE操作和/或其他合适的操作。
在一些情况下,当分布式数据库的当前成员资格列表的成员已经通过例如ADD、REMOVE、UPDATE和/或其他合适的操作改变时,可以根据分布式数据库的不同配置来对事件进行处理。在图14所示的例子中,当接收到事件时,在1429,识别和/或计算与这样的事件相关联的接收轮次R。如果例如事件的接收轮次R被识别为小于或等于其中分布式数据库正在操作的接收轮次,则如1431处所示,用例如与分布式数据库的先前的配置版本相关联的先前成员资格列表(例如,存储在参照图13讨论的先前成员资格列表1307中的成员资格列表)来对这样的事件进行处理。换句话说,在1433,将使用例如具有包括Alice、Bob、Carol、Dave和Ed、但不包括John、Janice和Chad的成员资格列表的分布式数据库配置SW1(如上所述)来对事件进行处理以用于达成共识或收敛。在相反的情形下,在1435,当事件接收轮次号将大于其中配置改变(例如,所有的具有这样的创建轮次和更小的轮次的著名的证据都已经被识别,并且事件仍不被它们足够地看见以致于还未被接收到)的接收轮次号时,用分布式数据库的更新的版本来对这样的事件进行处理。也就是说,分布式数据库配置SW2具有包括Bob、Carol、Dave、Ed、John、Janice和Chad、但不包括Alice的当前成员资格列表。因此,在一些情况下,可以基于分布式数据库的多于一种的配置(或事件共识协议的配置)、因此分布式数据库的实例的新的状态来确定事件的次序。如以上所讨论的,可以针对分布式数据库的状态来计算散列值,并且使用分布式数据库的成员的私钥来对该散列值进行签名。成员(例如,已经对分布式数据库的状态进行签名的成员)可以发送将包括指示新的带签名状态的事务的事件发布到分布式数据库的实例中的信号。
在一些情况下,分布式数据库的成员可以将UPDATE、ADD和/或REMOVE操作作为包括在一个或多个事件中的事务(或事务集合)保存和/或发布到分布式数据库。该事件然后被发送给分布式数据库的另一个成员(例如,作为同步处理的一部分)。例如,作为同步处理的一部分,第一个成员可以接收在分布式数据库的第二个成员发送的事件中包括的事务中将新的成员添加到分布式数据库的操作。另举一例,作为同步处理的一部分,第一个成员可以接收在第三个成员发送的事件中包括的事务中从分布式数据库移除成员的操作。换句话说,分布式数据库的每个成员可以定义具有包括UPDATE、ADD和/或REMOVE操作中的任何一个的事务的事件,并且作为同步处理的一部分,将这样的事件发送给分布式数据库的其他成员。
可以对每个新的接收轮次中的事件重复并且更新图14所示的处理。因此,当对每个事件识别接收轮次时,分布式数据库的配置(或事件共识协议的配置)可以被更新。而且,虽然以上是关于两种配置描述的,但是具有STATE(R)=”SW3”的分布式数据库的随后的配置(和附加的未来的配置)可以以与关于SW2描述的方式类似的方式定义。因此,在一些情况下,分布式数据库可以使用第三分布式数据库配置(例如,其对事件共识协议使用第三配置)来进行操作。因此,当具有这样的事务的新事件被发布到分布式数据库时,分布式数据库可以继续用新的配置来定义和/或操作。
虽然以上被描述为基于添加成员和/或从分布式数据库移除成员来更新分布式数据库的配置(或事件共识协议的配置),但是在一些情况下,可以基于与成员相关联的和/或与成员在逻辑上相关的份额值的变化、基于用于确定共识的新的软件和/或确定共识的新的规则来更新配置。例如,当事务被执行时,每个成员的份额值可能改变。在基于份额值确定共识的分布式数据库的实现中,这可能影响共识协议(例如,著名的证据的确定)。因此,根据改变一个或多个成员的份额值的事件的接收轮次(用作接收轮次号阈值),类似于图14中的处理,将基于不同的配置来确定不同轮次中的事件的次序。另举一例,对于软件的更新和/或对于确定共识的规则的更新可以是有效的,和/或基于包括这样的更新(类似于图14中的处理)的事件的接收轮次(用作接收轮次号阈值)而被使用。
图15和16所示的处理可以在分布式数据库的两个成员之间的事件同步期间执行。图15是例示说明基于接收轮次的事件接受和拒绝的流程图。在一些情况下,例如,在与不同成员相关联的分布式数据库的同步期间,可以基于以下各项来拒绝或接受事件:(1)其中所有的著名的证据都已经被识别和/或决定的最近的轮次号R;(2)事件作为其父列出的父event.Parent[i]中的每个;以及(3)事件作为该父的创建轮次列出的每个对应的event.ParentRoundCreated[i]。注意,实际的父可能具有与在接收的子事件中为该父列出的创建轮次不同的创建轮次。这是因为事件的创建轮次可以随着成员被添加和移除而改变,所以可能的是,当子被创建时,父具有一个接收轮次,在稍后的时间,父具有不同的一个接收轮次。成员被分配在对ParentRoundCreated号进行赋值时尽可能地准确的任务。
计算负担和存储器资源在一些情况下可以有利地减少。例如,当在1551,第一成员(例如,第一计算装置)从分布式数据库的第二成员(例如,第二计算装置)在分布式数据库的它们的本地实例处接收到事件时。这样的事件可以包括指示父事件集合的字节序列。父事件集合中的每个父事件可以在逻辑上与散列值和创建轮次值相关。为了确定是否满足第一准则,第一成员在1553确定(1)接收的事件的至少一个父(在接收的事件中指示)是否不在第一成员的分布式数据库的实例中,以及(2)接收的事件的父在接收的事件中是否具有大于R减去预定阈值(例如,Threshold1)的列出的创建轮次。在一些情况下,当事件满足这些条件(即,满足第一准则)时,在1559,第一成员拒绝或排除事件。例如,当事件有具有R减去Threshold1或更小(即,小于或等于第一创建轮次阈值R-Threshold1)的列出的创建轮次的父时,该父可以被假定为已经被丢弃(例如,足够旧以致于已经被丢弃),所以接收的事件可能可以被接受,尽管父缺失(根据下面描述的步骤1555)。但是如果存在不是足够旧以致于已经被丢弃的缺失的父,则在1559,可以拒绝事件,因为其父缺失。在一些实现中,当事件不满足1553处的条件时,在1555,关于第二准则对事件进行评估,以确定事件的每个父是否具有在R减去预定阈值之前(例如,小于第二创建轮次阈值R-Threshold2)创建的列出的轮次。如果是(即,如果满足第二准则),则在1559,拒绝或排除事件,否则在1557,接受事件。该决策使得事件在它们将不被使用(例如,用于确定共识和/或影响分布式数据库的状态)变得清楚时可以被丢弃。例如,如果所有的列出的父都非常旧,则接收的事件本身将被认为旧得足以丢弃,所以它一被接收到,它就可以被丢弃。在这些例子中,如果所有的父都存在,除了非常旧的事件之外(基于Threshold1),并且事件本身不是非常旧(基于Threshold2),则接收的事件被接受。第一成员(或第一计算装置)可以将在1557处接受的事件(即,在1559未被拒绝或排除的事件)存储在分布式数据库的实例中。在一些实现中,Threshold1和/或Threshold2可以由分布式数据库的成员预先定义。在一些实现中,Threshold1可以具有与Threshold2相同的值或不同的值。
图16是例示说明在分布式数据库的两个成员之间的事件同步期间执行的验证处理的流程图。第一成员或第一计算装置可以将同步请求发送给分布式数据库的其他成员以开始同步处理。在一些实现中,如下所述那样执行分布式数据库的第一成员和第二成员之间的同步。例如,如果第一成员是Bob,第二成员是Alice,则可以基于第一个序列号和最后一个序列号和/或Alice在分布式数据库的给定配置中对于每个成员已经接收到的值来执行同步。这样的序列号和/或值可以在同步请求内在成员之间发送,成员可以交换还未被其他成员接收和/或存储的事件。因此,在一些情况下,已经接收和/或存储的事件不被交换,从而使在同步处理期间使用的带宽减少。
从Alice的角度来讲,她可以使用她对于由Bob、Carol、Ed和Dave创建和/或定义的事件所具有的第一序列号和最后一个序列号。因此,例如,Alice可以基于在分布式数据库的她的实例处接收的事件(例如,由分布式数据库的Ed的实例创建和/或定义的事件),来确定由Ed定义的、具有比在分布式数据库的Alice的实例处接收的针对Ed的事件的最后一个序列号大的序列号的事件是Alice还未接收到的事件。Bob然后可以将这些事件发送给Alice。类似地,Alice可以基于在分布式数据库的Alice的实例处接收的针对给定成员(例如,Ed)的事件,来确定Bob存储的、针对该成员的、具有比在分布式数据库的Alice的实例处接收的针对该成员的第一序列号小的序列号的任何事件是分布式数据库的Alice的实例已经拒绝或丢弃的事件(例如,基于如上所述的带签名状态)。
在一些实现中,Alice(或任何其他的成员)不丢弃或拒绝其序列号在存储在分布式数据库的Alice的实例处的用于给定成员(例如,Ed)的第一个序列号和最后一个序列号之间的事件。在其他情况下,如参照图15所讨论的,在同步期间,分布式数据库的Alice的实例可以丢弃旧的事件,这些旧的事件要么是带签名状态的一部分,要么是将不具有由一个或多个阈值定义的范围内的接收轮次号的事件。
在同步期间,与第一成员(例如,Alice)相关联的分布式数据库的本地实例可以拒绝来自Bob的事件,如果这样的事件包括Alice在分布式数据库的她的本地实例处还未接收到的父事件的散列值的话。然而,在一些情况下,如果例如存在Alice将会丢弃接收的事件的父的指示,则即使父事件不包括在与Alice相关联的分布式数据库的本地实例中,与Alice相关联的分布式数据库的本地实例也可以接受这样的事件。与Alice相关联的数据库的本地实例一般将丢弃的事件的例子包括具有与接收轮次号相关联的足够旧的父的事件,以使得Alice可以确定该事件可以被丢弃,因为该事件对分布式数据库的状态将不会有影响,和/或其影响已经被合并到与Alice相关联的分布式数据库的本地实例中的最新的带签名状态中。
在一些情况下,第一成员(例如,Alice)在1601,在分布式数据库的她的本地实例处,从分布式数据库的非本地实例(例如,与Bob相关联的非本地实例)接收事件X。其后,在1603,可以从事件X提取签名集合。在1605,执行签名验证处理以确定从事件X提取的签名集合是否通过了验证处理。在一些情况下,当基于从事件X(由Alice接收)提取的签名,Alice可以确定事件X具有例如具有给定的创建者(例如,Ed)和给定的序列号(例如,SN=3)的父事件Y,并且与Alice相关联的分布式数据库的本地实例包括具有父事件Y、相同的创建者(即,Ed)和相同的序列号(即,SN=3)的事件Z时,事件X未能通过验证处理。因此,当在分布式数据库中存在可能由定义分叉事件的分布式数据库的实例引起的异常时,验证处理失败。
在1607,当在1605,Alice确定事件X未能通过签名验证时,Alice的分布式数据库的本地实例将指示事件X未能通过验证处理的失败通知消息发送给Bob的分布式数据库的非本地实例。其后,在1609,分布式数据库的本地实例接收与作为事件X的父的事件相关联的散列值。分布式数据库的本地实例然后可以比较接收的与作为事件X的父的事件相关联的散列值,并且确定分布式数据库的非本地实例是否缺失一个或多个事件,例如,作为事件X的父的事件。因此,在1611,分布式数据库的本地实例将在分布式数据库的非本地实例中缺失的事件的散列发送给分布式数据库的非本地实例。所述处理流程在从1601开始的循环中继续进行。
在一些情况下,当在1605,分布式数据库的本地实例(例如,Alice)接收的事件通过验证处理时,Alice可以确定在同步处理(例如,两个成员之间的事件同步)期间,分叉问题是否被识别。当分叉问题被识别时,分布式数据库的本地实例(例如,Alice)将作为事件X的祖先(例如,父)的、被确定为包括在识别的分叉问题中和/或受识别的分叉问题影响的一个或多个事件的指示符(例如,散列值)发送给分布式数据库的非本地实例(例如,Bob),然后所述处理结束。在一些情况下,当在同步处理期间没有识别出分叉问题时,例如,当在1605,在1601接收的事件X通过签名验证处理时,所述处理结束。
在一些情况下,如果事件X和事件Y具有相同的创建者和相同的创建轮次,并且两个都不是对方的祖先,则它们彼此“分叉”。这是上面参照图9讨论的“分叉”问题的使用的变型,该变型具有指定分叉事件X和Y具有相同的接收轮次的附加约束。而且,在一些情况下,可以基于“分叉”的这个替代定义来修改如上所述的“看见”和“强看见”的定义。例如,当且仅当事件Y是事件X的祖先并且没有事件Z是事件X的祖先和事件Y的“分叉”时,事件X才可以“看见”事件Y。当且仅当存在由分布式数据库成员中的多于M(例如,2/3)的成员创建的事件集合S以使得事件X可以看见S中的每一个事件、S中的每一个事件可以看见事件Y时,事件X才可以“强看见”事件Y。
分叉引起额外的计算和带宽使用,因此当确定成员已经创建和/或定义分叉事件时,成员可能受罚。因此,当成员被确定已经引起分叉事件时,分布式数据库可以被配置为惩罚这样的成员。在一些情况下,发现分叉的成员可以创建记载这样的分叉的事务,该事务然后充当用于使REMOVE操作从分布式数据库暂时地或永久地移除对于创建事件的分叉负责任的成员的事务。例如,可以通过取消成员在与这样的成员创建分叉事件的轮次相对应的轮次的投票和/或分叉事件来对他/她进行暂时处罚。
在一些实现中,每一同步处理的字节的数量和/或每一同步处理的被允许同步的事件的数量的全局限制是在分布式数据库中实现的。例如,当Alice将Bob缺失的事件发送给Bob时,在下一个事件超过容许的字节数量或容许的允许同步的事件的数量时,与Alice相关联的数据库的实例可以停止发送数据分组和/或事件。这样的情况下的事件发送可以通过在发送事件之前发送事件的父来执行,如果两个事件都同步的话。
在一些情况下,当同步的两个事件(例如,事件X和事件Y)无关(即,两个都不是对方的直接后代)时,并且如果发送事件X将意味着在对于由事件X的创建者创建的事件的当前同步处理期间达到与第一成员相关联的字节数量的全局限制(Bx)(类似地,事件Y的创建者的与第二成员相关联的字节的全局限制(By)),则同步处理包括:如果Bx<By,则在事件Y之前发送事件X,而如果By<Bx,则在事件X之前发送事件Y,并且如果Bx=By,则可以按任一次序发送它们。这防止大的事件控制同步处理。
在一些情况下,第一成员和第二成员通过对每个成员共享他们的第一个/最后一个序列号的列表来开始同步处理。可能的是,他们发现第一成员具有她后来丢弃的事件,但是第二成员仍需要这些事件。在这样的情况下,执行同步处理的修正版本,在该版本中,第一成员将存储在与第一成员相关联的分布式数据库的实例中的最新的带签名状态发送给与第二成员相关联的数据库的实例。其后,第一成员发送存储在与第一成员相关联的数据库的实例中的、在最新的带签名状态之后注册的事件,除了第二成员在与第二成员相关联的数据库的实例中已经具有的事件之外。因此,第二成员可以休眠或关闭数据库的他的本地实例一段长时段(即,离线),并且在唤醒或开启之后,同步处理的修正版本的执行使得第二成员可以参与分布式数据库。换句话说,在一些情况下,第二成员可以仅接收带签名状态,并且自从该带签名状态以后的来自第一成员的所有事件都继续参与。这使在没有带签名状态的情况下将被交换的事件的数量减少。
虽然上面示出和描述的示例系统是参照其他系统描述的,但是在其他实施例中,可以实现示例系统和它们的相关联的功能的任何组合来创建和/或定义分布式数据库。例如,可以组合示例系统1、示例系统2和示例系统3来创建和/或定义分布式数据库。另举一例,在一些实施例中,可以用示例系统1、但是不用示例系统9来实现示例系统10。又举一例,可以将示例系统7与示例系统6组合,并且用示例系统6来实现示例系统7。在还有的其他的实施例中,可以实现示例系统的任何其他的合适的组合。
虽然上面已经描述了各种实施例,但是应理解它们仅仅是作为例子、而非限制而提出的。在上述方法指示按某个次序发生的某些事件的情况下,某些事件的排序可以被修改。另外,当可能时,事件中的某些可以在并行处理中同时执行,而且也可以如上所述那样顺序地执行。
本文中所描述的一些实施例涉及一种具有非暂时性计算机可读介质(也可以被称为非暂时性处理器可读介质)的计算机存储产品,所述计算机可读介质上具有用于执行各种计算机实现操作的指令或计算机代码。所述计算机可读介质(或处理器可读介质)从它本身不包括暂时性传播信号(例如,在传输介质(诸如空间或线缆)上传载信息的传播电磁波)的意义上来讲是非暂时性的。所述介质和计算机代码(也可以被称为代码)可以是针对特定的一个目的或多个目的设计和构造的那些。非暂时性计算机可读介质的例子包括,但不限于:磁性存储介质,诸如硬盘驱动器、软盘和磁带;光学存储介质,诸如紧凑盘/数字视频盘(CD/DVD)、紧凑盘只读存储器(CD-ROM)和全息器件;磁光存储介质,诸如光盘;载波信号处理模块;以及被特殊地构造为存储和执行程序代码的硬件器件,诸如专用集成电路(ASIC)、可编程逻辑器件(PLD)、只读存储器(ROM)和随机存取存储器(RAM)器件。本文中所描述的其他实施例涉及一种计算机程序产品,所述计算机程序产品可以包括例如本文中所讨论的指令和/或计算机代码。
计算机代码的例子包括,但不限于,微代码或微指令、机器指令(诸如由编译器生成)、用于生成web服务的代码、以及包含计算机使用解释器执行的更高级指令的文件。例如,实施例可以使用命令式编程语言(例如,C、Fortran等)、函数编程语言(Haskell、Erlang等)、逻辑编程语言(例如,Prolog)、面向对象的编程语言(例如,Java、C++等)或其他合适的编程语言和/或开发工具来实现。计算机代码的另外的例子包括,但不限于,控制信号、加密代码和压缩代码。
虽然上面已经描述了各种实施例,但是要理解它们仅仅是作为例子、而非限制而提出的,并且可以做出形式和细节上的各种改变。本文中所描述的设备和/或方法的任何部分可以按任何组合来组合,除了相互排斥的组合之外。本文中所描述的实施例可以包括所描述的不同实施例的功能、组件和/或特征的各种组合和/或子组合。

Claims (17)

1.一种设备,包括:
存储器,所述存储器与被配置为包括在多个计算装置内的计算装置处的分布式数据库的实例相关联,所述多个计算装置经由操作地耦合到所述多个计算装置的网络来实现所述分布式数据库,所述多个计算装置与所述分布式数据库所关联的事件共识协议的第一配置相关联;以及
处理器,所述处理器操作地耦合到所述存储器,
所述处理器被配置为:
从所述多个计算装置中的计算装置集合接收事件集合,所述事件集合中的每个事件与(1)事务集合和(2)接收轮次号相关联,
基于以下内容来确定所述事件集合中的每个事件的次序:
(1)当与该事件相关联的接收轮次号不大于由所述分布式数据库的实例识别的接收轮次号阈值时的所述事件共识协议的第一配置,以及
(2)当与该事件相关联的接收轮次号大于所述接收轮次号阈值时的所述事件共识协议的第二配置,
基于所确定的所述事件集合中的每个事件的次序来确定与所述分布式数据库的实例相关联的当前状态,
基于与所述当前状态相关联的散列值来产生与所述分布式数据库的实例相关联的带签名状态,所述散列值被用与第一计算装置相关联的私钥数字签名,
发送用于将包括指示所述带签名状态的事务的事件发布到所述分布式数据库的实例中的信号。
2.根据权利要求1所述的设备,其中,所述计算装置是第一计算装置,所述多个计算装置是在第一时段期间实现所述分布式数据库的第一多个计算装置,所述接收轮次号阈值是基于包括用于将第二计算装置添加到所述第一多个计算装置以定义第二多个计算装置的事务的事件的接收轮次而定义的。
3.根据权利要求1所述的设备,其中,所述计算装置是第一计算装置,所述多个计算装置是在第一时段期间实现所述分布式数据库的第一多个计算装置,所述接收轮次号阈值是基于包括用于从所述第一多个计算装置移除第二计算装置以定义第二多个计算装置的事务的事件的接收轮次号而定义的。
4.根据权利要求1所述的设备,其中,所述计算装置是所述多个计算装置中的第一计算装置,所述多个计算装置中的每个计算装置在逻辑上与所述事件共识协议中使用的份额值相关,
所述接收轮次号阈值是基于包括用于改变在逻辑上与所述多个计算装置中的第二计算装置相关的份额值的事务的事件的接收轮次号而定义的。
5.根据权利要求1所述的设备,其中,所述接收轮次号阈值是第一接收轮次号阈值,所述当前状态是与所述分布式数据库的实例相关联的第一状态,所述处理器被进一步配置为:
定义与所述事件集合中的、包括用于更新所述分布式数据库的实例的第一状态的事务的事件的接收轮次号相对应的第二接收轮次号阈值,所述第二接收轮次号阈值与所述事件共识协议的第三配置相关联,所述第二接收轮次号阈值大于所述第一接收轮次号阈值,
所述处理器被配置为基于以下内容来确定所述事件集合中的每个事件的次序:
当与该事件相关联的接收轮次号大于所述第二接收轮次号阈值且不大于所述第二接收轮次号阈值时的所述事件共识协议的第二配置,
当与该事件相关联的接收轮次号大于所述第二接收轮次号阈值时的所述事件共识协议的第三配置。
6.根据权利要求1所述的设备,其中,所述处理器被配置为通过执行与所述事件集合中的每个事件相关联的事务集合来确定与所述分布式数据库的实例相关联的当前状态,所述执行是按照该事件中指定该事务集合的次序所对应的子次序进行的。
7.根据权利要求1所述的设备,其中,所述计算装置是所述多个计算装置中的第一计算装置,
所述接收轮次号阈值是基于包括与所述事件共识协议相关联的软件变化的事件的接收轮次号而定义的。
8.一种设备,包括:
存储器,所述存储器与被配置为包括在多个计算装置内的第一计算装置处的分布式数据库的实例相关联,所述多个计算装置经由操作地耦合到所述多个计算装置的网络来实现所述分布式数据库,
处理器,所述处理器操作地耦合到所述存储器,
所述处理器被配置为:
从所述多个计算装置中的第二计算装置接收事件,所述事件是与父事件集合相关联的字节序列,所述父事件集合中的每个父事件与(1)散列值和(2)创建轮次值相关联;
当满足第一准则或第二准则中的至少一个时,将接收的事件排除在事件次序的确定之外,在以下情况下满足所述第一准则:
(1)所述父事件集合中的至少一个父事件在所述分布式数据库的实例中没有标识符,以及
(2)所述至少一个父事件与大于第一创建轮次阈值的创建轮次值相关联,以及
在以下情况下满足所述第二准则:
(1)不满足所述第一准则,以及
(2)所述父事件集合中的每个父事件与小于第二创建轮次阈值的创建轮次值相关联,以及
当所述事件基于第一准则或第二准则没有被排除时,将所述事件存储在所述分布式数据库的实例中。
9.根据权利要求8所述的设备,其中,所述第一创建轮次阈值基于所述分布式数据库的实例识别的当前接收轮次号。
10.根据权利要求8所述的设备,其中,所述第二创建轮次阈值基于所述分布式数据库的实例识别的当前接收轮次号。
11.根据权利要求8所述的设备,其中,所述第一创建轮次阈值对应于所述第二创建轮次阈值。
12.根据权利要求8所述的设备,其中,所述第一创建轮次阈值不同于所述第二创建轮次阈值。
13.根据权利要求8所述的设备,其中,所述接收的事件包括事务集合,所述接收的事件在第一时间处被排除在事件次序的确定之外,所述事务集合在所述第一时间之前的第二时间处被执行。
14.一种设备,包括:
存储器,所述存储器与被配置为包括在多个计算装置内的第一计算装置处的分布式数据库的实例相关联,所述多个计算装置经由操作地耦合到所述多个计算装置的网络来实现所述分布式数据库,
处理器,所述处理器操作地耦合到所述存储器,
所述处理器被配置为:
将由所述多个计算装置中的第二计算装置定义的一组事件中的第一事件集合的指示存储在所述存储器中,所述一组事件中的每个事件包括与(1)序列值和(2)有序的事务集合相关联的字节序列,
将同步请求发送给所述多个计算装置中的第三计算装置,所述同步请求包括第一标识符和第二标识符,所述第一标识符识别所述第一事件集合中的、与比所述第一事件集合中的每个剩余事件所关联的序列值小的序列值相关联的事件,所述第二标识符识别所述第一事件集合中的、与比所述第一事件集合中的每个剩余事件所关联的序列值大的序列值相关联的事件,
响应于所述同步请求,从所述第三计算装置接收由所述第二计算装置定义的所述一组事件中的第二事件集合,
将所述第二事件集合的指示存储在所述存储器中,所述第二事件集合中的每个事件不包括在所述第一事件集合中,
基于(1)事件共识协议、(2)所述第一事件集合和(3)所述第二事件集合,来确定所述分布式数据库的实例的当前状态,
基于与所述当前状态相关联的散列值来产生所述分布式数据库的实例的带签名状态,所述散列值被用与所述第一计算装置相关联的私钥数字签名,
发送用于将包括指示所述带签名状态的事务的事件发布到所述分布式数据库的实例中的信号,
从所述多个计算装置中的计算装置集合接收与包括指示所述带签名状态的事务的事件相关联的协定的指示,以及
基于协定的指示,从所述存储器移除所述第一事件集合的指示和所述第二事件集合的指示。
15.根据权利要求14所述的设备,其中,所述处理器被配置为基于确定与所述带签名状态相关联并且与所述多个计算装置中的所述计算装置集合相关联的数字签名的数量达到了签名阈值来接收协定的指示。
16.根据权利要求14所述的设备,其中,所述当前状态是与第一轮次号相关联的第一状态,所述处理器被配置为在第一时间处产生所述第一状态,所述处理器被进一步配置为:
在所述第一时间之后的第二时间处产生所述分布式数据库的实例的第二状态,所述第二状态与大于所述第一轮次号的第二轮次号相关联。
17.根据权利要求14所述的设备,其中,所述当前状态对应于通过基于第三事件集合的共识次序进行排序的多个事务的执行而产生的所述分布式数据库的实例的状态,所述第三事件集合中的每个事件与所述多个事务中的有序的事务集合相关联,所述第三事件集合包括所述第一事件集合和所述第二事件集合。
CN201780078523.XA 2016-12-19 2017-12-19 用于启用事件删除的分布式数据库的方法和设备 Active CN110140116B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310908850.0A CN116820695A (zh) 2016-12-19 2017-12-19 用于启用事件删除的分布式数据库的方法和设备

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201662436066P 2016-12-19 2016-12-19
US62/436,066 2016-12-19
PCT/US2017/067329 WO2018118930A1 (en) 2016-12-19 2017-12-19 Methods and apparatus for a distributed database that enables deletion of events

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202310908850.0A Division CN116820695A (zh) 2016-12-19 2017-12-19 用于启用事件删除的分布式数据库的方法和设备

Publications (2)

Publication Number Publication Date
CN110140116A true CN110140116A (zh) 2019-08-16
CN110140116B CN110140116B (zh) 2023-08-11

Family

ID=62561662

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202310908850.0A Pending CN116820695A (zh) 2016-12-19 2017-12-19 用于启用事件删除的分布式数据库的方法和设备
CN201780078523.XA Active CN110140116B (zh) 2016-12-19 2017-12-19 用于启用事件删除的分布式数据库的方法和设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202310908850.0A Pending CN116820695A (zh) 2016-12-19 2017-12-19 用于启用事件删除的分布式数据库的方法和设备

Country Status (9)

Country Link
US (2) US11222006B2 (zh)
EP (1) EP3555757A4 (zh)
JP (1) JP7211943B2 (zh)
KR (2) KR102454779B1 (zh)
CN (2) CN116820695A (zh)
AU (1) AU2017382161B2 (zh)
CA (1) CA3044071A1 (zh)
RU (1) RU2754189C2 (zh)
WO (1) WO2018118930A1 (zh)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8874477B2 (en) 2005-10-04 2014-10-28 Steven Mark Hoffberg Multifactorial optimization system and method
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10747753B2 (en) 2015-08-28 2020-08-18 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
EP3497975B1 (en) * 2016-08-10 2020-03-04 Telefonaktiebolaget LM Ericsson (publ) Packet forwarding in a wireless mesh network
PT3539026T (pt) 2016-11-10 2022-03-08 Swirlds Inc Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas
US11222006B2 (en) 2016-12-19 2022-01-11 Swirlds, Inc. Methods and apparatus for a distributed database that enables deletion of events
US10664462B2 (en) * 2017-03-01 2020-05-26 Sap Se In-memory row storage architecture
KR102348418B1 (ko) 2017-07-11 2022-01-07 스월즈, 인크. 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치
US10728036B2 (en) * 2017-09-05 2020-07-28 PeerNova, Inc. Cryptographically linking related events processed across multiple processing systems
US10425335B2 (en) * 2017-09-19 2019-09-24 Sap Se Reconstructing message flows based on hash values
SG11202002308RA (en) 2017-11-01 2020-04-29 Swirlds Inc Methods and apparatus for efficiently implementing a fast-copyable database
US11065546B1 (en) * 2018-01-11 2021-07-20 Amazon Technologies, Inc. Distributed authority for peer gaming
US11580238B2 (en) 2018-01-29 2023-02-14 Vinay Kumar Agarwal Proof-of-approval distributed ledger
US10756904B1 (en) * 2018-02-22 2020-08-25 EMC IP Holding Company LLC Efficient and secure distributed ledger maintenance
US10671370B2 (en) * 2018-05-30 2020-06-02 Red Hat, Inc. Distributing file system states
US10915521B2 (en) * 2018-08-21 2021-02-09 Syniverse Technologies, Llc Blockchain gateway device and associated method of use
TWI698100B (zh) * 2018-09-18 2020-07-01 柯賓漢數位金融科技有限公司 多區塊鏈產生及整合方法暨區塊鏈系統
JP7253344B2 (ja) * 2018-09-18 2023-04-06 株式会社エヌ・ティ・ティ・データ 情報処理装置、情報処理方法およびプログラム
DE102018123463A1 (de) * 2018-09-24 2020-03-26 Akarion GmbH Personendatenbank
CN109241193B (zh) * 2018-09-26 2022-10-25 联想(北京)有限公司 分布式数据库的处理方法和装置,及服务器集群
US10944850B2 (en) * 2018-10-29 2021-03-09 Wandisco, Inc. Methods, devices and systems for non-disruptive upgrades to a distributed coordination engine in a distributed computing environment
US11138188B2 (en) * 2018-11-07 2021-10-05 International Business Machines Corporation Performance optimization
KR102228210B1 (ko) * 2019-04-29 2021-03-16 에이치엔핀코어 주식회사 블록체인 네트워크에서의 트랜잭션의 삭제를 가능하게 하는 노드 장치 및 그 동작 방법
CN110166548B (zh) * 2019-05-21 2022-03-08 西安中星测控有限公司 一种物联网在线共识节点实时更新方法和装置
CN113711202A (zh) 2019-05-22 2021-11-26 斯沃尔德斯股份有限公司 用于在分布式数据库中实现状态证明和分类帐标识符的方法和装置
US10606585B1 (en) 2019-11-12 2020-03-31 Capital One Services, Llc Computer-based systems configured for automated roll-forward of software package versions and methods of use thereof
US11265176B1 (en) 2019-12-18 2022-03-01 Wells Fargo Bank, N.A. Systems and applications to provide anonymous feedback
US11398916B1 (en) 2019-12-18 2022-07-26 Wells Fargo Bank, N.A. Systems and methods of group signature management with consensus
US11509484B1 (en) 2019-12-18 2022-11-22 Wells Fargo Bank, N.A. Security settlement using group signatures
PL3851974T3 (pl) * 2020-01-20 2024-03-04 Decard Ag System i sposób realizowania algorytmu konsensusu skierowanego grafu acyklicznego (dag) za pośrednictwem protokołu gossip
US11722589B2 (en) * 2020-04-08 2023-08-08 Huawei Technologies Co., Ltd. Rapid ledger consensus system and method for distributed wireless networks
US11574254B2 (en) * 2020-04-29 2023-02-07 International Business Machines Corporation Adaptive asynchronous federated learning
US11818259B2 (en) 2020-05-13 2023-11-14 Ridgeline, Inc. Query and projection processing for events
US11233640B2 (en) * 2020-05-13 2022-01-25 Ridgeline, Inc. Mutation processing for events
US11949784B2 (en) 2020-05-13 2024-04-02 Ridgeline, Inc. Auditing for events
CN111539829B (zh) 2020-07-08 2020-12-29 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的待过滤交易识别方法及装置
CN111541789A (zh) 2020-07-08 2020-08-14 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的数据同步方法及装置
CN112492002B (zh) 2020-07-08 2023-01-20 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的交易转发方法及装置
CN113438219B (zh) 2020-07-08 2023-06-02 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的重放交易识别方法及装置
CN111541784B (zh) * 2020-07-08 2021-07-20 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的交易处理方法及装置
CN112202687B (zh) * 2020-12-03 2021-05-25 苏州浪潮智能科技有限公司 一种节点同步方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102419764A (zh) * 2010-10-20 2012-04-18 微软公司 带有多版本化的数据库系统的分布式事务管理
US20130246377A1 (en) * 2008-08-12 2013-09-19 Jitendra B. Gaitonde Configuration management for a capture/registration system
CN103842995A (zh) * 2011-08-01 2014-06-04 标记公司 在分布式数据库中的一般化的协调
US20160085772A1 (en) * 2014-09-19 2016-03-24 Amazon Technologies, Inc. Automated configuration of log-coordinated storage groups
US20160328429A1 (en) * 2015-03-17 2016-11-10 Cloudera, Inc. Mutations in a column store

Family Cites Families (156)

* 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
US20010000253A1 (en) 1999-05-20 2001-04-12 Westvaco Corporation Hydrocarbon/acrylic hybrid resins for use in continuous ink jet ink formulations
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
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 株式会社東芝 データベース管理システム、データベース管理方法、データベース登録要求プログラムおよびデータベース管理プログラム
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
US7657543B1 (en) 2004-10-12 2010-02-02 Sun Microsystems, Inc. Method and system for creating and using shadow roots
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
US20090157735A1 (en) 2005-05-13 2009-06-18 Gentry Craig B Method and apparatus for secure and small credits for verifiable service provider metering
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
US7797457B2 (en) 2006-03-10 2010-09-14 Microsoft Corporation Leaderless byzantine consensus
GB2446199A (en) 2006-12-01 2008-08-06 David Irvine Secure, decentralised and anonymous peer-to-peer network
EP2095146A1 (en) 2006-12-19 2009-09-02 Koninklijke Philips Electronics N.V. Mri system with direct digital receiver using resampling
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
US8825743B2 (en) 2007-07-12 2014-09-02 Cornell University 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 中兴通讯股份有限公司 一种分布式文件系统及其数据块一致性管理的方法
JP2010146103A (ja) * 2008-12-16 2010-07-01 Nec Corp 補償処理手順方式選択装置、方法、プログラム及びそれを記録した記録媒体、並びにワークフローシステム
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
EP2443574A4 (en) 2009-06-19 2014-05-07 Blekko Inc EVOLVING CLUSTER DATABASE
JP5278219B2 (ja) 2009-07-17 2013-09-04 ヤマハ株式会社 ハウリングキャンセラ
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
US8818963B2 (en) 2010-10-29 2014-08-26 Microsoft Corporation Halloween protection in a multi-version database system
WO2012070292A1 (ja) 2010-11-22 2012-05-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 分散データベースの負荷均衡のためのコネクション配分を実現する情報処理システム、情報処理装置、負荷均衡方法、データベース配置計画方法およびプログラム
JP5948340B2 (ja) 2010-11-22 2016-07-06 ヒタチ データ システムズ エンジニアリング ユーケー リミテッドHitachi Data Systems Engineering Uk Limited データストレージシステムにおける、ファイルのクローニング及びデクローニング
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
CN103827723B (zh) 2011-01-10 2016-03-02 斯托尔万有限公司 大规模存储系统
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
US8577873B2 (en) 2011-03-30 2013-11-05 Indian Statistical Institute Determining a relative importance among ordered lists
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
US20130110767A1 (en) 2011-10-26 2013-05-02 Nec Laboratories America, Inc. Online Transaction Processing
US9489429B2 (en) 2011-11-16 2016-11-08 Hitachi, Ltd. Computer system, data management method, and program
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
CN102819585B (zh) 2012-07-31 2015-04-22 北大方正集团有限公司 一种xml数据库文档控制方法
FR2995437B1 (fr) 2012-09-07 2014-10-10 Commissariat Energie Atomique Dispositif de controle nucleaire pour reacteur refroidi au metal liquide de type rnr.
US9652525B2 (en) * 2012-10-02 2017-05-16 Banjo, Inc. Dynamic event detection system and method
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
US9037556B2 (en) * 2012-12-03 2015-05-19 Vmware, Inc. Distributed, transactional key-value store
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 Илья Самуилович Рабинович Способ и система защиты информации от несанкционированного использования (ее варианты)
US10311152B2 (en) 2013-12-20 2019-06-04 Hitachi Vantara Corporation System for queue based object cloning
CN105900375B (zh) 2014-01-13 2020-02-07 维萨国际服务协会 用于在认证交易中保护身份的设备、系统和方法
WO2015108520A1 (en) * 2014-01-16 2015-07-23 Hewlett-Packard Development Company, L. P. Node cluster synchronization
WO2015111152A1 (ja) * 2014-01-22 2015-07-30 株式会社日立製作所 データベース管理システム及び方法
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
US9495478B2 (en) * 2014-03-31 2016-11-15 Amazon Technologies, Inc. Namespace management in distributed storage systems
US11270298B2 (en) 2014-04-14 2022-03-08 21, Inc. Digital currency mining circuitry
US10419457B2 (en) * 2014-04-30 2019-09-17 Hewlett Packard Enterprise Development Lp 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
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
SG11201704984SA (en) 2015-01-27 2017-07-28 Visa Int Service Ass Methods for secure credential provisioning
US9967091B2 (en) 2015-02-12 2018-05-08 Xerox Corporation Method for enhancing security in distributed systems
WO2016143095A1 (ja) * 2015-03-11 2016-09-15 株式会社日立製作所 計算機システム及びトランザクション処理の管理方法
US20160283920A1 (en) 2015-03-28 2016-09-29 Justin Fisher Authentication and verification of digital data utilizing blockchain technology
EP3278239B1 (en) * 2015-04-01 2019-08-14 AB Initio Technology LLC Processing database 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
WO2017004527A1 (en) 2015-07-02 2017-01-05 Nasdaq, Inc. Systems and methods of secure provenance for distributed transaction databases
US10747753B2 (en) 2015-08-28 2020-08-18 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
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
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
CN105681301B (zh) 2016-01-16 2019-03-12 杭州复杂美科技有限公司 区块链上的结算方法
US11423053B2 (en) * 2016-01-30 2022-08-23 Micro Focus Llc Log event cluster analytics management
US10353888B1 (en) * 2016-03-03 2019-07-16 Amdocs Development Limited Event processing system, method, and computer program
JP2019514146A (ja) 2016-04-04 2019-05-30 フォーミュルス ブラック コーポレーション 高速システム状態クローニング
CN106022917A (zh) 2016-05-08 2016-10-12 杭州复杂美科技有限公司 区块链撮合交易所方案
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
US10396991B2 (en) 2016-06-30 2019-08-27 Microsoft Technology Licensing, Llc Controlling verification of key-value stores
WO2018006072A1 (en) 2016-06-30 2018-01-04 Clause, Inc. Systems and method for forming, storing, managing,and executing contracts
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
PT3539026T (pt) 2016-11-10 2022-03-08 Swirlds Inc Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas
US11222006B2 (en) 2016-12-19 2022-01-11 Swirlds, Inc. Methods and apparatus for a distributed database that enables deletion of events
EP3340084A1 (en) 2016-12-22 2018-06-27 Dassault Systèmes Replica selection
CN110445619B (zh) 2017-03-30 2020-10-16 腾讯科技(深圳)有限公司 区块链系统、消息处理方法及存储介质
KR102348418B1 (ko) 2017-07-11 2022-01-07 스월즈, 인크. 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치
SG11202002308RA (en) 2017-11-01 2020-04-29 Swirlds Inc Methods and apparatus for efficiently implementing a fast-copyable database
WO2019226099A1 (en) 2018-05-23 2019-11-28 Haj Enterprise 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
US11334439B2 (en) 2018-08-29 2022-05-17 International Business Machines Corporation Checkpointing for increasing efficiency of a blockchain
CN113711202A (zh) 2019-05-22 2021-11-26 斯沃尔德斯股份有限公司 用于在分布式数据库中实现状态证明和分类帐标识符的方法和装置
CN116615722A (zh) 2020-10-06 2023-08-18 海德拉哈希图有限责任公司 用于网络内分布式数据库的方法和装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130246377A1 (en) * 2008-08-12 2013-09-19 Jitendra B. Gaitonde Configuration management for a capture/registration system
CN102419764A (zh) * 2010-10-20 2012-04-18 微软公司 带有多版本化的数据库系统的分布式事务管理
CN103842995A (zh) * 2011-08-01 2014-06-04 标记公司 在分布式数据库中的一般化的协调
CN103858123A (zh) * 2011-08-01 2014-06-11 标记公司 从分层的观点协调分布式数据库
US20160085772A1 (en) * 2014-09-19 2016-03-24 Amazon Technologies, Inc. Automated configuration of log-coordinated storage groups
US20160328429A1 (en) * 2015-03-17 2016-11-10 Cloudera, Inc. Mutations in a column store

Also Published As

Publication number Publication date
JP2020504927A (ja) 2020-02-13
RU2019118333A3 (zh) 2020-12-14
JP7211943B2 (ja) 2023-01-24
KR102454779B1 (ko) 2022-10-13
US11222006B2 (en) 2022-01-11
KR20210122902A (ko) 2021-10-12
AU2017382161B2 (en) 2022-07-07
WO2018118930A1 (en) 2018-06-28
RU2754189C2 (ru) 2021-08-30
RU2021123584A (ru) 2021-09-10
AU2017382161A1 (en) 2019-05-30
US20220129438A1 (en) 2022-04-28
CN116820695A (zh) 2023-09-29
CA3044071A1 (en) 2018-06-28
CN110140116B (zh) 2023-08-11
US20180173747A1 (en) 2018-06-21
RU2019118333A (ru) 2020-12-14
US11657036B2 (en) 2023-05-23
EP3555757A4 (en) 2020-06-17
EP3555757A1 (en) 2019-10-23
KR102433285B1 (ko) 2022-08-16
KR20190097225A (ko) 2019-08-20

Similar Documents

Publication Publication Date Title
CN110140116A (zh) 用于启用事件删除的分布式数据库的方法和设备
US11681821B2 (en) Methods and apparatus for efficiently implementing a distributed database within a network
US11232081B2 (en) Methods and apparatus for a distributed database within a network
AU2021200938B2 (en) Methods and apparatus for a distributed database within a network
CN109923536A (zh) 用于包括匿名条目的分布式数据库的方法和装置
RU2778013C2 (ru) Способы и устройство для распределенной базы данных в сети

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
TA01 Transfer of patent application right

Effective date of registration: 20230417

Address after: Texas, USA

Applicant after: Hydra Hashitou Co.,Ltd.

Address before: Texas, USA

Applicant before: Swirlds, Inc.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant