6

晓说区块链 | 区块链未提供遍历查询功能,是出于怎样的设计理念?

 3 years ago
source link: https://www.lianyi.com/zixun/1159510
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

晓说区块链 | 区块链未提供遍历查询功能,是出于怎样的设计理念?

LIANYI • 2019-03-30 09:20 • 资讯 • 阅读 14469

区块链是一种分布式账本,它的本质也是一种数据库,但为什么绝大部分的区块链核心代码都没有提供遍历和过滤的查询功能呢?这里面涉及到一种什么样的设计理念?

本期《晓说区块链》,陈晓东先生(维基链首席技术官)将围绕这个话题,为大家解读。

网友:对于区块链是分布式数据库的说法,有疑惑,区块链不支持常规数据库的检索的吧?

就以比特币来说吧,每个区块里存放交易的记录,如果我要做一个最简单的查询,检索某个地址所有的付款记录,类似要执行这样一条SQL的效果:

SELECT * FROM 区块链 WHERE 付款地址 = ‘xxx’

就需要遍历所有区块里的每一条交易记录对吧?更复杂的查询,感觉都支持不了了啊。这还是数据库吗?

陈晓东:正确说法是『分布式账本』(Distributed Ledger) 当然账本也是一种类型的数据库,但是和传统数据库的区别就是账本类数据库是不允许修改的。在中心化的架构下,账本数据库如何实现只能添加不可删除和修改的呢?那就必须倚靠上层的业务规则和技术实现了,也就是并不通过底层数据库来实现,数据库本身还是支持CRUD四种操作的。然而在去中心化架构下,也就是区块链的技术架构下,交易上链之后就无法删除和修改了,也就实现了通用账本的规则需求。

数据库也好,账本也好,其核心在于数据的存储和规则的约束。其余上层的数据访问能力像Select这种语句是一种应用交互层的功能实现,不属于核心功能。对于区块链而言,显然确保数据存储和规则约束是最本质的需求,本身区块链数据是由交易组成的块相连构建而成的。至于属于遍历类型的查询功能,完全没必要构建到区块链底层代码里面去。所以大部分的区块链核心代码没有提供这种遍历和过滤查询功能。但是你可以通过把区块链的数据扫描下来,转存到一个中心化的数据库里面,比如像互联网技术最常用的MySQL数据库,然后通过对MySQL里面的区块链交易数据查询来实现你所需要的功能。

因此做一个系统设计,无论是中心化还是去中心化架构也好,一定要考虑到什么是核心功能,什么是次核心功能,什么是边缘性的功能。尽量做到像Linux开源技术里面崇尚的一个服务或者程序只是解决一个问题或者实现一块功能。然后通过多个服务或者程序的配合来组合实现一个复杂的体系。这种设计理念深植于开源界,来自开源社区的区块链自然就采用了这种设计理念。笔者认为是非常合理的选择。所谓:有所为,有所不为。

根据国家《关于防范代币发行融资风险的公告》,大家应警惕代币发行融资与交易的风险隐患。

本文来自LIANYI转载,不代表链一财经立场,转载请联系原作者。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK