区块链是一种分布式账本,它的本质也是一种数据库,但为什么绝大部分的区块链核心代码都没有提供遍历和过滤的查询功能呢?这里面涉及到一种什么样的设计理念?
本期《晓说区块链》,陈晓东先生(维基链首席技术官)将围绕这个话题,为大家解读。
网友:对于区块链是分布式数据库的说法,有疑惑,区块链不支持常规数据库的检索的吧?
就以比特币来说吧,每个区块里存放交易的记录,如果我要做一个最简单的查询,检索某个地址所有的付款记录,类似要执行这样一条SQL的效果:
SELECT * FROM 区块链 WHERE 付款地址 = 'xxx'
就需要遍历所有区块里的每一条交易记录对吧?更复杂的查询,感觉都支持不了了啊。这还是数据库吗?
陈晓东:正确说法是『分布式账本』(Distributed Ledger) 当然账本也是一种类型的数据库,但是和传统数据库的区别就是账本类数据库是不允许修改的。在中心化的架构下,账本数据库如何实现只能添加不可删除和修改的呢?那就必须倚靠上层的业务规则和技术实现了,也就是并不通过底层数据库来实现,数据库本身还是支持CRUD四种操作的。然而在去中心化架构下,也就是区块链的技术架构下,交易上链之后就无法删除和修改了,也就实现了通用账本的规则需求。
数据库也好,账本也好,其核心在于数据的存储和规则的约束。其余上层的数据访问能力像Select这种语句是一种应用交互层的功能实现,不属于核心功能。对于区块链而言,显然确保数据存储和规则约束是最本质的需求,本身区块链数据是由交易组成的块相连构建而成的。至于属于遍历类型的查询功能,完全没必要构建到区块链底层代码里面去。所以大部分的区块链核心代码没有提供这种遍历和过滤查询功能。但是你可以通过把区块链的数据扫描下来,转存到一个中心化的数据库里面,比如像互联网技术最常用的MySQL数据库,然后通过对MySQL里面的区块链交易数据查询来实现你所需要的功能。
因此做一个系统设计,无论是中心化还是去中心化架构也好,一定要考虑到什么是核心功能,什么是次核心功能,什么是边缘性的功能。尽量做到像Linux开源技术里面崇尚的一个服务或者程序只是解决一个问题或者实现一块功能。然后通过多个服务或者程序的配合来组合实现一个复杂的体系。这种设计理念深植于开源界,来自开源社区的区块链自然就采用了这种设计理念。笔者认为是非常合理的选择。所谓:有所为,有所不为。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。