博客
10 分钟阅读
|
2022年5月12日

区块链与数据库:关键区别详解

这是一份区块链与传统数据库的详细技术对比:写入模型的根本差异、共识机制如何影响速度、延迟的数量级、每次写入的真实成本,外加一份实用的决策清单,以及一种被广泛采用、把结算放在链上而其余一切留在数据库中的混合支付架构模式,帮助你判断该用哪一种。

章节
C
Chaingateway Team
区块链专家

区块链自 2009 年问世以来,区块链和数据库这两个词至今仍常被当作同义词使用,或者听到「区块链不过是另一种数据库」这样的说法。这种定位会导致真正的架构错误,因为这两种技术回答的是不同的问题。数据库回答的是:我该如何高效地存储和查询数据?区块链回答的是:几方互不信任的参与者该如何就共享数据达成一致?

本文详细梳理这些区别,先给出一张 10 行的对比表,再逐条展开,最后落在大多数生产系统实际采用的模式上:传统数据库与区块链协同工作。

什么是区块链(以及「区块链数据库」)?

区块链是一个分布式账本:交易记录在点对点网络中的许多独立 node 之间复制。每个 node 都参与账本的管理。要添加新数据时,必须先由多数 node 达成共识。正是这一致同意的步骤,让篡改变得极其困难:攻击者需要压制网络中的大多数节点,而不是攻破某一台服务器。

每笔交易都会获得一个时间戳和在链上的位置,因此任何 node 都能追溯并验证完整历史。这种复制与可验证性的结合,正是人们说「区块链数据库」时想表达的意思。这个术语其实很模糊,因为正如我们接下来会看到的,区块链放弃了日常意义上定义「数据库」的大部分特征。

什么是传统数据库?

传统数据库使用客户端-服务器架构。客户端连接到一个中心服务器,该服务器的运营方决定谁可以读写。管理员在授予访问权限前会验证用户身份,并可以随时修改任何记录。

中心化既是弱点,也是优势。弱点:如果中心权威被攻破,整个数据集都会被攻破,这也是备份存在的原因。优势:因为一方掌控一切,数据易于管理、查询迅速、存储便宜。Postgres、MySQL 及其同类产品支撑着你使用的几乎每一个应用,这个地位是它们挣来的。

区块链 vs 数据库:10 个一览差异

传统数据库区块链
结构表或文档,存放在一方掌控的服务器上通过哈希串联的区块,在独立 node 间复制
写入模型CRUD:create、read、update、delete仅追加:读和写,没有 update,没有 delete
共识不需要,由服务器决定需要,通过 Proof of Work 或 Proof of Stake
延迟每次查询几毫秒从几秒到几分钟,写入才最终确认
每次写入成本在自有硬件上几乎为零每笔交易一笔手续费(gas),以链的 coin 支付
访问权限由管理员授予公链:任何人都可以读取并提交交易
信任你信任运营方你信任协议以及诚实的 node 多数
扩展性垂直和水平扩展,理解成熟吞吐量受共识限制;扩展是难题
成熟度关系模型可追溯到 1970 年Bitcoin 于 2009 年推出
典型用途应用数据、用户账户、分析支付、结算、互不信任各方之间的共享状态

本文余下部分展开决定架构选择的几行:控制权、写入模型和性能。

控制权

区块链和数据库之间最大的区别是谁说了算。在传统数据库中,中心权威在授予访问权限前会验证并认证用户。数据的权力掌握在一方,或一个小群体手中。

区块链没有这样的权威。每个 node 都参与账本的运行,node 之间不经过监管管理员而交换信息。新数据只有在 node 达成共识之后才会进入链上。没有人能悄悄改写一条记录,因为其他所有人手里都有一份说法不同的副本。

架构

传统数据库运行在客户端-服务器架构上。这套架构已经运行了几十年,也确实擅长这件事:这个模型可以从一台笔记本电脑扩展到一个数据中心,所有通信都经过与中心服务器的连接,而且不存在共识步骤,因为管理员的决定就是最终决定。

区块链作为点对点网络运行。peer 之间直接连接,并通过共识算法协作,就下一个区块达成一致。经典的是 Proof of Work,参与者消耗算力来验证交易;Bitcoin 至今仍在使用它。Ethereum 在 2022 年转向了 Proof of Stake,用经济抵押取代了算力竞赛。无论哪种方式,这一致同意的步骤之所以存在,正是因为没有一个管理员的话可以作为最终决定。

写入模型:CRUD 与仅追加

中心化数据库支持四种 CRUD 操作:create、read、update、delete。数据处理很简单,因为一切都可编辑。

区块链支持两种:读和写。一笔交易一旦上链,之后不会有 update 或 delete。这种不可变性正是关键所在,它防止了篡改,并给每个参与者提供了一份可验证的历史。但它是一把双刃剑。写入了错误数据的 bug 无法用一条 UPDATE 语句修复,而必须能应请求删除的个人数据(GDPR 第 17 条)从一开始就不该放在链上。

性能与每次写入成本

传统数据库更快,而且不是差一点点。一次数据库写入是一台机器上的一次磁盘操作。一次区块链写入要经过签名验证、共识以及在每个 node 上的复制,才能算数。在公链上,这需要几秒到几分钟,而不是几毫秒。

写入还标着价签。每笔区块链交易都要付一笔手续费,以链的原生 coin 支付,这笔费用的存在是为了补偿完成验证工作的 node。手续费因链和负载而异;例如在 TRON 上,一笔 USDT 转账的成本大约是 6 到 13 TRX,具体取决于接收方账户的状态。在你已经拥有的硬件上做一次数据库写入,不会产生任何你会去单独列账的成本。如果你的负载是每秒数千次写入,光这一点就足以让「区块链 vs 数据库」这个问题倒向数据库一边。

用数字看吞吐量与最终确认

数量级对比能让这种差距变得具体。下面的数字有意保持粗略,因为区块链吞吐量取决于交易组合,营销数字也常常引用理论峰值;所有数值截至 2026 年年中。

系统每秒可持续写入数一次写入到结算所需时间
PostgreSQL,一台中端服务器数万次简单行写入毫秒级(commit)
Ethereum layer 1每秒几十笔交易约 13–16 分钟到最终确认(两个 epoch)
TRON设计值约 2000,实测日均远低于此约 57 秒(19 个区块)
Solana1000–4000+ 笔真实(非投票)交易约 13 秒到完全最终确认
BNB Smart Chain设计值为数千1–2 秒

阅读这张表时请留意两点。链的 TPS 数字需要解读:Solana 的头条数字包含验证者的投票交易,因此诚实的指标是非投票 TPS,而 TRON 设计上的 2000 TPS 远高于该网络日均通常承载的每秒 100 到 200 笔交易。这些链也是移动的目标。BSC 在 2026 年 1 月的 Fermi 硬分叉中将出块时间缩短到了 0.45 秒,而 Solana 的 Alpenglow 升级在 2025 年 9 月经验证者投票通过,旨在把最终确认时间从数秒压缩到大约 150 毫秒。

这些变化都不会改变结论,因为这个差距并不小。一台毫不起眼的 Postgres 服务器写入量就超过现存所有公链加起来,而每次写入的成本小到不值得单独计费。最快的链已经令人印象深刻地把延迟差距从几分钟缩到了一两秒,但每一次写入依然要背负手续费和一轮共识。链与链之间在这些数字上互相竞争;它们不是在和数据库竞争。

ACID 与共识最终确认

数据库从业者和区块链从业者都会说「交易通过了」,但指的是不同的保证。

在数据库中,这些保证就是 ACID 属性。原子性:一笔交易的所有更改要么全部生效,要么全部不生效。一致性:约束在前后都成立。隔离性:并发交易看不到彼此半途而废的工作。持久性:一旦提交,数据即使遇到崩溃也能存活,因为它已经写入了磁盘上的预写日志。这四项都在提交那一刻交付,就在你发出请求后的几毫秒内。

智能合约链在前三项上出奇地接近。一次合约调用是原子的;如果某一步回滚,整笔交易都会回滚。一致性存在于合约代码中,而不是模式约束中。隔离性达到了可能的最强程度:共识强制每笔交易进入唯一的全局顺序,这也恰恰解释了为什么吞吐量会受限——全序不会留下任何可以安全并行化的空间。

持久性正是两种模型分道扬镳的地方。数据库写入在提交时即具持久性。而一个刚生成区块中的区块链写入仍可能消失,因为竞争的区块可能胜出并重组链。取代持久性的是最终确认:协议保证交易此后不能再被替代的那个时刻。在 TRON 上这需要 19 个区块,大约 57 秒。在 Ethereum 上需要两个 epoch 的验证者证明,13 到 16 分钟;中间的区块可能是安全的,但并非可证明的安全。这也直接给出了支付系统的实用规则:应在最终确认时给客户入账,而不是在首次纳入时,否则就要构建一套你会痛恨去测试的回滚处理机制。

CAP 定理适用在哪里

CAP 定理说的是,一个遭遇网络分区的分布式系统必须在保持一致性和保持可用性之间做选择。单 node 的 Postgres 完全绕开了这个问题,因为根本没有什么可分区的——这也是单 node 数据库在运维上依然令人愉快的一个被低估的原因。分布式数据库会选一边,并把选择记录下来。

区块链是分布式系统,所以也必须做选择。像 Bitcoin 这样的最长链设计选择了可用性:分区期间双方都继续产出区块,一致性在事后当某一分支胜出时得到修复——这正是重组的本质。基于最终确认的设计则倾向另一边:如果太多验证者不可达,Ethereum 会停止最终确认,TRON 的超级代表也会停止固化区块,以牺牲进展来避免出现相互冲突的永久答案。这两种选择都没有错。但这意味着「区块链」并不是逃离分布式系统权衡的出口;它是这些权衡中一组特定的选择,用延迟和手续费换来的。

各自擅长什么,代价是什么

数据库的优势会相互叠加。毫秒级查询和低成本写入只是看得见的部分;底下还有五十年积累的工具链、备份与时点恢复、复制、迁移、针对你的查询模式调优的索引,以及一个满是精通这一切的人才的就业市场。数据默认保持私有,也可应请求删除,这有时正是监管的硬性要求。所有这些便利的代价,是信任的高度集中。运营方可以修改任何东西,所以审计轨迹的可信度取决于运营方本身有多可信,而两家互不信任的公司无法共享同一个 Postgres 作为共同的真相来源,除非一方负责托管、另一方只能寄望于对方。

区块链的优势正是这一块缺失的拼图。没有人能单独运营它,所以也没有人能单独改写它;历史对任何拥有 node 的人都可验证,包括你从未接入过的外部人士。特别是在支付场景中,它带来了任何数据库都无法提供的特性:一条结算通道,地球上任何一个 wallet 都能在不需要中间人批准任何一方的情况下向你付款。代价是数据库便利性的镜像。每次写入都要计费并受共识节奏支配,存储只能追加,除非你专门设计规避,否则一切都是公开的,而运营层面的安全网也消失了:没有客服工单能撤销一笔交易,丢失的密钥就是丢失的价值,而不是重置密码那么简单。

这两份清单在得分上打不出胜负,因为它们几乎没有重叠。哪一份更重要,由一个单一的问题决定:你的系统是否有一个可信的运营方,还是必须在没有它的情况下运作?

何时用哪个:一份决策清单

  • 如果一方掌控数据,且用户接受这一点,就用数据库。它更快、更便宜、更容易运维。
  • 如果多方需要在互不信任彼此、也不信任中间人的情况下写入共享状态,区块链的开销就物有所值。这是数据库无法完成的唯一任务。
  • 如果记录必须对外部人士可证明地未被篡改(审计、公司间结算),区块链可以在不需要公证人的情况下做到这一点。
  • 如果你需要更新和删除,或者存储受删除请求约束的个人数据,就把它放在数据库里。
  • 如果你需要低延迟或高写入吞吐量,用数据库,没有讨论的余地。
  • 如果你接受或发送加密货币支付,不管你愿不愿意,结算层就是一条区块链。明智的做法是把其他一切都留在链下,这就引出了下面的混合模式。

三种架构,逐一推演

抽象的判断标准一旦套用到具体系统上,就会更容易理解。下面是三个例子,每种架构一个。

一个积分忠诚度计划:纯数据库

一家零售商发放积分,顾客在收银台兑换,营销团队在某次促销出岔子时调整余额。这个系统的每一个特征都指向同一个方向。一家公司掌控积分,顾客也接受这一点,所以没有需要弥合的信任缺口。写入量是每天数百万次小更新,收银台的延迟必须做到无感知,账户数据也受删除规则约束。Postgres 毫无仪式感地搞定这一切。一个链上版本要为每一次积分入账支付手续费,在收银台等待共识,还无法满足哪怕一次 GDPR 删除请求。在这里,放到区块链上一切都会变糟,所以这个决定大约一分钟就能做完。

一个去中心化交易所:完全链上

现在把每一个假设都反过来。DEX 存在的意义,就是让陌生人可以在没有任何运营方持有其资金的情况下交易;一旦引入一个可信的数据库运营方,产品就失去了存在的理由。所以整个状态机——余额、资金池储备、swap 逻辑——都存在于合约里,每一笔交易都要为通过共识付费。链的约束由此明显地塑造了设计:经典的订单簿需要频繁下单、改单和撤单,对于收费的写入来说这太频繁了,这也是自动化做市商能在链上取胜的重要原因之一。用户支付手续费,等待数秒完成交易,因为无需信任正是他们来这里追求的产品本身。请注意,DEX 依然没有把哪些东西放到链上:即便在这里,它的 web 前端、分析和价格图表,依然跑在普通的服务器和数据库上。

为 SaaS 接收加密货币充值:混合模式

常见的商业场景介于两个极端之间。一家 SaaS 想接受全球客户的 USDT;它的订阅、发票和用户账户已经存在于数据库中,也应该继续留在那里。链恰好在一个地方不可避免——结算,其余一切都被刻意排除在链之外。这第三种情景,正是大多数团队最终实际构建的模式,因此下文会给出详细的分解。

混合模式:链下数据库,链上结算

生产环境中的支付系统几乎从不二选一。它们把工作拆开:区块链负责结算价值,数据库负责其余一切。客户记录、订单、余额和会话数据都存在于 Postgres 或 MySQL 中,在那里可查询、可编辑。只有资金的实际转移会触碰链,而且是通过 API,因此应用永远不需要运行自己的 node。

一个具体的充值流程是这样的:

  1. 客户想要付款。你的后端通过一次 API 调用为他分配一个专属充值地址,并把地址与客户的对应关系存入你的数据库。
  2. 客户把 USDT 发送到该地址。你不需要轮询链;相反,转账确认后会触发一个 webhook。
  3. 你的 endpoint 校验 webhook 的 HMAC 签名,把充值写入你自己的数据库,并在那里给客户余额入账。

这个处理函数刻意写得毫不起眼:

app.post("/webhooks/deposits", (req, res) => {
if (!verifyHmacSignature(req)) return res.status(401).end();
const tx = JSON.parse(req.body);
db.query(
"INSERT INTO deposits (txid, address, amount, confirmed_at) VALUES ($1, $2, $3, now())",
[tx.txid, tx.to, tx.amount]
);
res.status(200).end();
});

webhook 的 payload 携带 txidfromtoamountcontractaddressblocknumber,因此这条 insert 除了请求体之外不需要任何别的东西。从这里开始,你的应用逻辑就从自己的表中读取余额,享受数据库级的速度和成本。只有在资金转出时才会再次查询链。Chaingateway 的 webhook 都经过 HMAC 签名;投递失败的记录会出现在 GET /api/v2/tron/webhooks/notifications/failed 下,可以通过一次 API 调用重新发送,而在停机之后,过去的通知也可以通过 GET /api/v2/tron/webhooks/notifications 重新获取以便对账;完整配置见 webhook 指南,第一次 API 调用见 quickstart

那么到底谁赢了?

双方都在对方做不到的事情上更胜一筹。在数据处理上,数据库遥遥领先:性能、可扩展性、查询能力和运营成本。在没有可信运营方存在的地方,区块链胜出:它抗篡改、任何人都能审计、也容易自动化对接,因为每个 wallet 说的都是同一种协议。

对大多数团队来说,实际的答案是两者都要,用一个 API 连接起来:数据库负责应用,区块链负责结算。关于如何选择这一层 API,可参见我们的区块链 API 提供商对比;Chaingateway 这一侧的方案见价格页

常见问题

区块链是数据库吗?

只在最宽泛的意义上是:它持久地存储数据。但按日常定义它并不合格,因为你无法更新或删除记录,查询能力有限,写入需要付费,并且要等几秒钟才能最终确认。把它称为「带存储的信任机器」比称为「数据库」更贴切。

区块链能取代传统数据库吗?

对普通应用来说不能。延迟、每次写入的手续费,以及缺失的 UPDATE 和 DELETE 操作,使它无法作为主数据存储。区块链取代的是结算层和公证人的角色,而不是 Postgres。

什么是区块链数据库?

这个词通常指账本本身:在多个 node 之间复制的交易历史。有些产品还会把链上数据索引进一个普通数据库,以便用 SQL 查询,这很有用,但那一刻你查询的又是数据库,而不是区块链。

为什么区块链比数据库慢这么多?

因为每一次写入都必须先签名、传播、经共识达成一致,并复制到每个 node,才算最终完成。数据库写入是一台机器写到自己的磁盘上。这种慢是去掉可信运营方所付出的代价,不是会随优化消失的实现缺陷。

区块链有 ACID 事务吗?

部分具备。智能合约交易是原子的(要么完全生效,要么完全回滚),合约代码强制保证一致性,共识提供了全序,这是比大多数数据库更强的隔离性。持久性是例外:交易只有在最终确认时才算结算完成,根据链的不同,从纳入区块后的几秒到几分钟不等,在那之前重组都可能把它替换掉。为账户入账的系统应以最终确认为准,而不是以首次纳入为准。

普通企业什么时候用区块链才有意义?

几乎总是只在一个场景:支付。企业很少需要和不信任的对象共享状态,但接受加密货币就意味着结算层按定义就是区块链。可行的做法是上文描述的混合模式:链负责结算价值,一切运营性的东西都留在你的数据库里,通过 API 而不是自己的 node 连接。

如果链很慢,应用怎么能瞬间显示区块链数据?

它们不是每次请求都读链。区块浏览器和 wallet 查询的是索引:把链上数据复制进普通数据库,再以数据库速度从那里提供服务。支付系统做的是同一件事,一次一个 webhook,把每笔已确认的充值写进自己的表,此后就在本地读取余额。链是真相的来源;数据库是工作副本。

准备好自己动手构建了吗? 获取你的 API key — 7 天试用,无需信用卡 — 或查看 区块链 API 获取完整的 endpoint 参考。

C
Chaingateway Team
区块链专家

Chaingateway 团队致力于为全球开发者简化区块链集成。