从技术角度看分散数据库是如何工作的。
总的来说,我知道所有的用户都有自己的数据副本,而且不知怎么的,它会同步。
但是这个同步逻辑完全不清楚客户端是否发送http请求或者发生了什么?
任何建议阅读什么或如何深入探讨这个话题都是非常值得赞赏的
更新===================
谢谢大家的回答,我想把问题缩小一点
它指出区块链是去中心化的,没有人拥有,所以没有公共服务器。
所以让我困惑的是
例如,我有数据库的副本,另一个人有相同的数据库,但有点不同,如果我们都没有公共IP,我们如何同步?
在我看来,如果至少有人拥有一个公共IP,那么它还没有完全分散
最佳答案
逻辑:从事务计算状态
分散式系统/数据存储通过计算状态来工作,其中状态是要从数据库中使用的实际数据。
例如,您通过两个insert/update查询对数据库进行了修改,系统实际上接受这两个查询并将它们作为事务存储在数据库中,这些事务将跨节点(网络中使其分散的其他机器)同步。另一个节点将根据同步的事务再次计算状态并将其更新到数据库。
让我们通过一个例子来理解这一点:
考虑一下电影售票系统。同一剧院将在多个供应商网站上列出。
把电影院想象成100个座位(100个座位)。
假设有两个供应商。BookmyShow和TicketNew。
下面是从时间T1到T9在网络上发生的事务的列表。
交易(T1)-在时间(T1)有人买了10张门票预订。
交易(t2)-在t2时,有人在bookmyshow上又买了3张票。
在bookmyshow数据库中,状态最初是100张未预订的票。
在这两次交易(T1和T2)后,状态将是=>剩余87个席位,预定13个席位。
(因此,bookmyshow的数据库将拥有这些信息。)
现在bookmyshow将这两个事务t1和t2添加到所谓的块(通常是事务列表和一些其他参数)b1中,并将其发布到网络。另一个供应商ticketnew将把这个block b1同步到他的机器上,现在将知道这些事务已经发生了。现在,票务新供应商的机器将通过了解事务开始计算票务系统的状态。
一开始是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剩余
T4中预订的6个=剩余75个
1个登记在T4=>74剩余
更新至BookmyShow数据库=>剩余74个座位,预订26个座位