Database 分散数据库是如何工作的?

Database 分散数据库是如何工作的?,database,blockchain,Database,Blockchain,从技术角度来看,分散数据库是如何工作的 总的来说,我知道所有的用户都有自己的数据副本,并且以某种方式保持同步 但这种同步逻辑完全不清楚客户端是否发送http请求或发生了什么 任何关于阅读内容或如何深入主题的建议都将受到高度赞赏 更新=================== 谢谢大家的回复,我想把问题缩小一点 它指出区块链是非私有的,没有人拥有,因此没有公共服务器 那么是什么让我困惑呢 e、 g.我有DB的副本另一个人有相同的数据库,但略有不同,如果我们都没有任何公共IP,我们如何同步 在我看来,如

从技术角度来看,分散数据库是如何工作的

总的来说,我知道所有的用户都有自己的数据副本,并且以某种方式保持同步

但这种同步逻辑完全不清楚客户端是否发送http请求或发生了什么

任何关于阅读内容或如何深入主题的建议都将受到高度赞赏

更新===================

谢谢大家的回复,我想把问题缩小一点 它指出区块链是非私有的,没有人拥有,因此没有公共服务器

那么是什么让我困惑呢 e、 g.我有DB的副本另一个人有相同的数据库,但略有不同,如果我们都没有任何公共IP,我们如何同步


在我看来,如果至少有人拥有公共IP,那么它还没有完全去中心化

去中心化数据库的具体工作方式取决于它的实现

是一种分布式数据库的示例。它们使用用于通过HTTP/1.1在两个对等方之间同步JSON文档

coach DB主要用于同步。你可以阅读更多关于它的内容


是IBM的一个区块链,使用Coach DB作为分散数据库。

像区块链一样的分散数据库,无论是hyperledger还是Bitcoin,都是一种EventSource/CQRS实现,该账本仅附加EventSource,并通过共识协议同步到其他节点,每个节点回复事件日志并获取一个状态数据库进行查询,例如hyperledger使用couchdb或leveldb作为状态数据库

从技术角度来看,分散数据库是如何工作的

这是一个非常广泛的问题,需要花费整个课程来解释。一般来说,一个简短的总结就是,一个节点的状态变化。在这种状态变化之后,节点将向分布式系统中的其余节点广播该变化

对于区块链,在节点向链中添加块后,它将向网络广播新块 其余的节点。然后,这些节点将同意新块是有效的。如果 其他节点没有达成一致意见,那么它们将在没有新块的情况下继续工作。这是系统如何达成共识的概观

但这种同步逻辑完全不清楚客户端是否发送http请求或 发生了什么事

对于区块链,创建新块的节点将通过http向其他节点广播新块的详细信息。这些节点必须根据其系统上的链验证块。当一个节点在不同的链上工作时,这称为fork。当节点达成共识时,被视为真理之叉的叉由系统决定。

逻辑:从事务中计算状态 分散系统/数据存储通过计算状态来工作,其中状态是您希望从数据库使用的实际数据

比方说,您通过进行2次插入/更新查询对数据库进行了修改,系统实际上会将这2次查询作为事务存储在数据库中,这些事务将在节点间同步(网络中使其分散的其他机器)。另一个节点将根据同步的事务再次计算状态,并将其更新到数据库中


让我们通过一个例子来理解这一点: 考虑电影票务系统。同一剧院将在多个供应商网站上列出

  • 假设电影院有100个座位(100个座位)
  • 假设有两个供应商。BookMyShow和TicketNew
下面是从t1到t9在网络上发生的事务列表

  • 交易(T1)-在时间(T1)有人在BookMyShow上买了10张票
  • 交易(T2)-在T2时,其他人在BookMyShow上又买了3张票
在BookMyShow数据库中,状态将最初为100张未预订的票证

在这两次交易之后(T1和T2)状态将为=>剩余87个席位,预订13个席位。 (因此,BookMyShow的数据库将包含此信息。)

现在,本书将把这两个事务T1和T2添加到所谓的(这通常是事务和一些其他参数的列表),B1,并将其发布到网络上。另一个供应商TicketNew将此blockB1同步到他的机器上,现在将知道这些事务已经发生。现在,票务新供应商的机器将通过了解交易开始计算票务系统的状态

  • 最初是100张票
  • T1预订10张=>90张剩余座位
  • T2预订3张=>剩余87张
更新到TicketNew的数据库=>剩余87个座位,预订了13个座位

类似地,T3,…T6事务发生在T3。。。t6在TicketNew供应商网站上。这些事务将通过TicketNew添加到另一个块B2,并推送到网络。BookMyShow同步B2区块,并更新其数据库中的状态,即26张门票已预订,74张免费

  • 在同步B2座之前有87张票

  • T3预订4张=>83张剩余座位

  • 2在T4中登记=>81剩余

  • 6在T4中登记=>75剩余

  • 1在T4中登记=>74剩余

  • 更新到BookMyShow数据库=>剩余74个座位,预订26个座位


    • 这一切都是关于同步的。试想一下git:有人更改代码,提交他或她的更改,拉取同时发生的其他更改,然后推送他或她的最终更改。当然,有时候你需要合并一些东西,但是一个好的框架通常会帮你

    • 更新