从技术角度看,分散式数据库的工作原理。
一般来说,我知道所有用户都有自己的数据副本,并且它会以某种方式同步。
但是这个同步逻辑完全不清楚客户端是发送http请求还是发生了什么?
高度赞赏任何有关阅读内容或如何深入了解该主题的建议
更新===================
感谢大家的好评,我想让问题更加狭隘 它指出区块链是由任意人进行的,并且没有人拥有,因此没有公共服务器
令我困惑的是什么 例如我有DB的副本另一个人拥有相同的数据库,但如果我们都没有任何公共IP,我们可以如何同步?
在我看来,如果至少有人拥有公共知识产权,那么它已经没有完全分散了
答案 0 :(得分:2)
分散式系统/数据存储区通过计算状态来工作,其中state是您要从数据库中使用的实际数据。
假设您通过进行2次插入/更新查询对数据库进行了修改,系统实际上将这2个查询作为事务存储在数据库中,并且这些事务将在节点之间同步(网络中的其他计算机它分散了)。而另一个节点将根据同步的事务再次计算状态,并将其更新到数据库。
考虑电影票务系统。同一个剧院将在多个供应商网站上列出。
下面是从时间t1到t9在网络上发生的交易列表。
在BookMyShow数据库中,状态最初为100张无保留票。
在这两笔交易( T1和T2 )之后,状态将为=> 剩余87个席位,预订13个席位。 (因此,BookMyShow的数据库将包含此信息。)
现在BookMyShow会将这两个交易 T1和T2 添加到所谓的块中(这通常是交易列表和其他一些参数), B1 ,并将其发布到网络。另一家供应商TicketNew将把这块 B1同步发送到他的机器上,现在知道这些交易发生了。现在,TicketNew供应商的机器将通过了解交易来开始计算售票系统的状态。
更新到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
:有人改变代码,做出改变,改变同时发生的其他改变,然后推动他或她的最终改变。当然,有时你必须合并东西,但一个好的框架通常适合你。
如果您在JavaScript中已经过时,请查看https://github.com/automerge/automerge。文档非常精确,并解释了更广泛的流程。因此,它不仅对网络开发人员有意义。