传统概念里面,所有上链的数据肯定就是每个节点都存储,大家看到才相信。
但是很明显,数据量越来越大之后,cpu,网卡,io和空间等都出现瓶颈了,大家快玩不动了,就出来了比特币的隔离验证,SPV,以太坊的light node以及fast sync等技术,减少存储量和部分挖矿功能,但是不降低验证能力。
目前,还有一些新的扩容的方式,利用zkp等技术将复杂计算和存储转成非交互式证明,其他节点不用发起实际计算和存储就证明交易的合法性。
区块链和去中心没有那么神奇,所谓的去中心并不是指用了区块链中心就消失了,而是用多个节点共识的方式取代了传统中心一个人说了算的情况。于是,去掉的是“中心化”而不是“中心”本身。具体到数据,数据实际上是储存在了所有参与共识的节点那里,所以单说数据量的话,是比传统中心要更大了,因为增加了多份冗余。
当然,题主也看到了,人人都存这么一份数据库是不现实的。所以,目前所有的区块链,公链也好,联盟链也好,数据都是存在少数有意愿和有能力运行整个数据库的人那里的。
简单回答:区块链的数据就是存在每一个节点中(可以是个人机,也可以是其他);区块链的确是一个公众可以修改的数据库,只不过你只能够使用你持有的秘钥,修改你秘钥相对的"账户"的数据。
不过,不同的区块链的数据存储方式与数量是不同的。已 BTC 为例,其数据是存在每一个节点中,目前 BTC 的节点数据大概是200多G,其增长速度是每个月10G左右,个人机问题不大的。
但是,数据量的确是越来越大了!至少很快个人笔记本就很难运行 BTC 全节点了。对于以太坊来说,记录了所有数据的存档节点应该有数 T 的存储量,这对于个人机来说是不可能运行的。
值得一提的第一点,需要区分存储的是数据本身还是数据哈希。
一般来说,BTC 数据存储的方式是使用 Op_Return 的操作码,其只能够存储 80 Bytes。在这种情况下,用户想要在 BTC 存储图片等大文件是不可能的。因此这里存储的是数据哈希,而数据本身则会存储在类似 IPFS、Swarm 这样的去中心化存储网络中,也存在通过多链方式进行数据存储的,譬如 Fatom 这样的项目白皮书可以看看。
有两类数据,全部重复地存在每个全节点里面,全量复制,有n个全节点就有n倍的冗余。最初的设计就是这样,btc eth都是这个德行。
一类的全网每个用户以及合约的最新状态,比如每个人的账户余额,这个数据存在内存里面。
另一类是全网状态的历史修改记录,也就是log,这个东西放在硬盘上。这个部分数据是我们所说的区块链,前面那个是由区块链重建出来的状态。
这不是很离谱,可区块链就是这么个设计,每一台电脑,实际上承载了整个网络的工作量。这也是区块链性能瓶颈的根本原因。
当然,技术还是在发展,后续有技术可以将网络分而治之,就是我NSDI'19 的论文。