分散的数据库如何运作?

时间:2018-02-06 10:59:47

标签: database blockchain

从技术角度看,分散式数据库的工作原理。

一般来说,我知道所有用户都有自己的数据副本,并且它会以某种方式同步。

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

高度赞赏任何有关阅读内容或如何深入了解该主题的建议

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

感谢大家的好评,我想让问题更加狭隘 它指出区块链是由任意人进行的,并且没有人拥有,因此没有公共服务器

令我困惑的是什么 例如我有DB的副本另一个人拥有相同的数据库,但如果我们都没有任何公共IP,我们可以如何同步?

在我看来,如果至少有人拥有公共知识产权,那么它已经没有完全分散了

5 个答案:

答案 0 :(得分:2)

逻辑:来自交易的状态计算

分散式系统/数据存储区通过计算状态来工作,其中state是您要从数据库中使用的实际数据。

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

让我们试着通过一个例子来理解这个:

考虑电影票务系统。同一个剧院将在多个供应商网站上列出。

  • 认为电影院是100个座位(100个座位)。
  • 并说有2家供应商。 BookMyShow和TicketNew。

下面是从时间t1到t9在网络上发生的交易列表。

Block sample

  • 交易(T1) - 在时间(t1),有人在BookMyShow上购买了10张门票。
  • 交易(T2) - 在时间t2,其他人在BookMyShow上再购买了3张门票。

在BookMyShow数据库中,状态最初为100张无保留票

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

现在BookMyShow会将这两个交易 T1和T2 添加到所谓的中(这通常是交易列表和其他一些参数), B1 ,并将其发布到网络。另一家供应商TicketNew将把这块 B1同步发送到他的机器上,现在知道这些交易发生了。现在,TicketNew供应商的机器将通过了解交易来开始计算售票系统的状态

  • 最初是100张票。
  • 10预订T1 =>剩下90个席位
  • 3预订T2 => 87剩下

更新到TicketNew的数据库=>剩余87个席位,预订13个席位

同样,T3,... T6交易发生在TicketNew供应商的网站上的时间t3,... t6。这些交易将被TicketNew添加到另一个块B2,并推送到网络。 BookMyShow同步块B2并在其数据库中更新状态,即现在预订26张门票,其中74张是免费的。

  • 同步块B2之前的87张票。

  • 4预订T3 => 83席位剩余

  • 2预订于T4 => 81剩余

  • 6预订于T4 =>剩余75个

  • 1在T4中预订=> 74剩余

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

答案 1 :(得分:0)

分散数据库的确切工作方式与其实施具体相关。

CouchDB是一种分布式数据库的示例。他们使用CouchDB Replication Protocol通过HTTP / 1.1在2个对等体之间同步JSON文档。

Couch DB基本上使用incremental replication进行同步。你可以阅读更多相关信息。

Hyperledger Fabric是IBM的区块链,它使用Couch DB作为ledger state database

答案 2 :(得分:0)

像分区链这样的分散数据库,无论是超链接还是比特币,都是一种EventSource / CQRS工具,分类账只追加EventSource,并通过协商一致协议同步到其他节点,每个节点回复事件日志并获取状态数据库进行查询,例如hyperledger使用couchdb或leveldb作为状态数据库。

答案 3 :(得分:0)

  

从技术角度看,分散式数据库的工作原理。

这是非常广泛的,可以用一整个课程来解释。一般来说,简短的总结是变化将是对一个节点的状态变化。在状态更改之后,节点将更改广播到分布式系统中的其余节点。

对于区块链,在节点向链添加块后,它会将新块广播到 其余的节点。然后,这些节点将达成共识,即新块有效。如果 其他节点没有达成共识,那么他们将在没有新块的情况下继续工作。这是对系统如何达成共识的广泛概述。

  

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

对于区块链,创建新块的节点将通过http(s)将新块的详细信息广播到其他节点。这些节点必须根据它们在系统上的链来验证块。当一个节点处理不同的链时,这称为fork。当节点达成共识时,被认为是真实分支的分支由系统决定。

答案 4 :(得分:0)

关于同步的全部内容。试想numPartitions:有人改变代码,做出改变,改变同时发生的其他改变,然后推动他或她的最终改变。当然,有时你必须合并东西,但一个好的框架通常适合你。

  1. 更新提交更改
  2. 被动同步拉取其他人的更改
  3. 主动同步推送您的更改
  4. 如果您在JavaScript中已经过时,请查看https://github.com/automerge/automerge。文档非常精确,并解释了更广泛的流程。因此,它不仅对网络开发人员有意义。