区块链数据库:区块链真的是数据库吗?
区块链是只能追加、经过复制、且故意写入缓慢的。数据库是快速、可变、集中控制的。两者的重叠之处,以及这对读取支付数据意味着什么。
把区块链称为数据库并没有错,但这样说低估了它的特别之处。区块链数据库以与传统数据库相同的方式存储记录——可查询的结构化数据行——但它增加了三条普通数据库都没有的约束:每次写入都是永久的,每个节点都持有完整副本,一次写入只有在去中心化的参与者群体达成一致后才算数。这三个特性构成了区块链与数据库之间的全部区别,也解释了区块链擅长什么、又不适合做什么。
区块链与数据库:逐项对比
区块链与数据库设计的区别可以归结为五个特性。它们之间没有哪一个绝对更好——都是相互权衡的结果。
| 特性 | 传统数据库 | 区块链 |
|---|---|---|
| 写入 | 可变——UPDATE 和 DELETE 是常规操作 | 只能追加——写入的记录永不被编辑或删除 |
| 控制权 | 中心化——一个运营方,一个真相来源 | 去中心化——没有单一方控制账本 |
| 写入确认 | 即时,由运营方自身逻辑决定 | 由网络共识决定,需要时间并产生费用 |
| 存储模型 | 单一副本(加上运营方管理的副本/备份) | 完全复制——每个全节点保存完整历史 |
| 每次写入的成本 | 边际成本接近零 | 每次写入都有网络手续费(gas、Energy、Bandwidth) |
把这张表当作检查清单,而不是评分表来看。如果你的应用需要快速、廉价、可由单一方修正的写入,那是数据库的分内工作,不是区块链的。
那么区块链究竟是数据库,还是完全不同的东西?
从结构上看,答案是肯定的:区块链在「有组织的、可查询的、持久化的数据」这一字面意义上就是数据库。人们之所以会问区块链是否算数据库,是因为它抛弃了几乎所有其他数据库都会做出的两个假设——由受信任的运营方管理写入,以及可以用一条 UPDATE 语句纠正错误。当「没有受信任的运营方」正是重点所在时,把区块链当作数据库使用就是合适的:支付、所有权记录,以及任何独立可验证性比可编辑性更重要的场景。
具体是什么让区块链不同于普通数据库
三个机制在起作用。第一是共识:只有足够多的独立参与者达成一致,写入才算最终确定,这既是记录无需中心权威即可被信任的原因,也是写入比数据库的 INSERT 更慢、更受限的原因。第二是设计上的不可篡改性:一旦区块被确认,修改它就需要为其后每一个区块重新完成共识工作,这在任何有意义的深度上都是计算上不可行的——这里没有管理员级别的 UPDATE。第三是复制作为一种特性而非运维决策:每个全节点都保存完整历史,这种冗余在传统数据库中只有在有人明确配置的情况下才会存在。
专门针对支付场景的「区块链作为数据库」
具体到支付数据,「区块链作为数据库」这一权衡实际上有利于区块链:你想要的正是只能追加、需经共识确认的特性,因为你不希望任何人——包括你自己——能够悄悄编辑一笔已结算的交易。你不想要的是每次需要查询余额或交易状态时都要手写原始 JSON-RPC 查询;这一部分由数据库式接口处理得更好。链上数据之上的 API 层同时给你两者:底层记录拥有区块链级别的保证,读取时则拥有类数据库的 REST 接口。
从功能上讲,Chaingateway API 正是这样一个东西——链上数据之上的 REST 接口。创建免费账户,无需接触原始 JSON-RPC 即可查询测试网余额。
常见问题:区块链与数据库
像查数据库一样读取链上数据
创建账户,通过 REST 而非原始 JSON-RPC 查询余额和交易——7 天试用,无需信用卡,无需 KYC。查看 multi-chain blockchain API,或从单条链开始,例如 Ethereum API。若需要更深入的技术对比,请阅读博客上的 Blockchain vs Database。