百度超级链沙龙回顾 | 吴飞鹏:在联盟链技术与应用中如何结合数据库

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/baiduxuperchain/article/details/102714334

10月19日,百度超级链与金色财经在北京联合主办“区块链与数据库的融合碰撞”技术沙龙,IBM、众享比特、conflux、covenantSQL等行业内合作伙伴,共聚一堂,对各自在公链、联盟链等场景中的实际需求和经验,展开热烈的讨论和分享。不仅仅聚焦技术,话题还延展到了“在产业应用中遇到的困难与挑战”,为来自五湖四海的听众解读区块链与数据库的前世今生。


640?wx_fmt=png

主持人:接下来由众享比特实验室主任吴飞鹏带来《在联盟链技术与应用中如何结合数据库》演讲。吴主任曾任职索贝数码,专注音视频编码、编辑的研发工作。2015年进入众享比特,致力于分布技术的研发,主持研发了日志式数据库应用平台--ChainSQL。众享比特在区块链与数据库的融合方向上,已经做了一些探索性实践,有请吴主任为我们详细介绍众享比特的思路,欢迎。

吴飞鹏: 大家下午好,非常感谢主办方的邀请,今天简单介绍一下我们在开发 ChainSQL产品的过程中了解到的数据库有关的知识,以及一些相关技术,另外我也简单介绍一下我们的产品是怎样使用数据库、结合数据库的。 公司从 2016 年大约 1 月份正式开始对区块链展开研发。 今天来了一些互联网的同行,希望在这个过程中大家一起来探讨和学习,对以后大家在区块链部分和数据库方面的工作有启发和帮助。

今天主要从三个方面来讲一下今天的主题,第一是简单介绍在区块链上存储数据是怎么做的,第二是区块链有没有用到数据库,是怎样使用数据库的?即数据库在区块链中的应用。第三个是介绍我们公司的产品, ChainSQL如何使用数据库。

数据在区块链上的存储


刚开始我估计大家了解区块链无非就是比特币。我相信大家都了解比特币:可以转账,非常方便。但是在比特币上,我们怎么去记录数据?有两种方式,在 2014 年比特币升级以前,都是记在比特币第一个交易里面,方法是在比特币交易里的输入端记录,这导致只有区块链的生产者才能在比特币网络上留下自己的痕迹。其他人,比如交易的发送者(使用比特币进行转账的人)做不到这一点,你是留不下数据的。比如,你给朋友生日在比特币上做记录,在 2014 年以前是做不到的。

然后接下来到了 2014 年,我们不仅想利用比特币金融转账的属性,同时希望区块链网络有承载数据记录的功能。因此比特币做了节点升级,出现了一种交易—— nulldata 。它对交易做了一些革新,使得 coinbase 交易可以在输入端记录一些数据,这时我们在比特币交易的输出端同样也可以做一个记录。因此,在比特币上面存储数据,一种是在输入端,一种是在输出端,我们普通用户选择普通交易就好了。 再说一下 Ethereum Ripple 这两种是怎么做的?业务数据、想写的东西是记在交易里面,交易是透明的,大家都可以查到。

再后来,区块链到了联盟链的阶段。以fabric为例,fabric只是做了一个框架,普通的开发者或者普通的项目在初始状态下,什么都没有,因此核心的东西只能自己来实现。在fabric中,必须利用智能合约才能记录。它的业务数据主要是记在数据库里面,比如大家用的level DBCounchDB,交易的接口是固定的,但是你开放的智能合约,里面的接口函数非常自由,可以随便定义。业务数据就是按照我们自己所希望的方式传给ChaincodeChaincode最终将数据存储在数据库里面,这是业务数据的记录方式。

数据库在区块链中的应用

现在说一下区块链是不是用到数据库,以及数据库在里面发挥什么样的作用。链上数据的记录方式:第一种是记录在文件里面,第二种是记录在数据库里面。

以太坊是直接记录在 k-v 数据库里。节点直接把所记的东西最终转成 key value 。这个是链本身的数据库。

还有一种是链下数据,有时候你要查询区块链上的数据,区块链广义上来讲是数据库,但是数据库有一个很有用的功能就是快速查找,这个东西是区块链是做不到的,这时就需要在区块链节点下面加一个逻辑单元,把你想要展现的数据放在数据库里。如果没有这个东西,没有下面这两部分的区块链,你无法很快速的让用户查到数据。比如说,现在以太坊浏览器,或者比特币浏览器能看到数据,是没有直接去链上查,而是知道区块链的数据具有不可篡改性,一步一步往回查找结构,总能查找这个交易,但是这种实时性,用户体验非常差。于是我们加入逻辑单元,把它输出到任意的关系型数据库里面。

ChainSQL如何使用数据库 

接下来说一下ChainSQL,在2016年的时候,大家在区块链领域基本上都没有开始做项目研发,仅仅是想把区块链用在B端,解决实际问题。现在我们工程架构模式,无非就是CS架构、BS结构,在一个逻辑应用下面加持一个数据库,这时候如果要用区块链该怎么解决问题呢?无非是把数据库替换成区块链。但是带来一个问题。B端企业想利用区块链不可追溯、不可更改的特性,但要把数据库替换掉,是不切实际的。
640?wx_fmt=png

ChainSQL将区块链与传统数据库相结合,把对数据库的每一次操作看作一次交易,构建了一种基于区块链网络的日志式数据库应用平台。 本段有两部分,第一部分就是上下两层,上面是区块链网络。下面一部分是数据库,数据库并没有做任何改变,还是传统的数据库。

以前在传统数据库里,数据库用来存储与查询; 我们Chainsql的数据库有什么样的功能呢? 数据库扮演了两个功能。第一个是用户进行查询,第二个是重构。 

Chainsql只是使用数据库,那数据库表存在什么地方?在区块链网络里面模拟了一张或者很多张数据库的表,以及表的一些管理。表在什么地方?有没有数据库表?那我们的数据库有什么功能呢?我想看区块链网络上数据库表的最终状态,那怎么看呢?要把区块链中的交易读出来,然后再把这些操作发送到传统的数据库里面,把状态呈现出来,因此从这个角度来看其实这上面有表,但是记录的表的操作过程,然而没有记录表的状态,无法去记录,一个一个交易,一个一个区块链的交易,只记录了这个交易,等于说我们把每次对数据库的操作在区块链网络上记下来。但是又面临着如何去展示的问题。你的用户想查询的时候咱们就必须在这个节点上面有一个数据库,你要是不查询,没必要挂接数据库。只有这个节点,用户直接往上面去发交易,它接受的是区块链的数据库类型交易,当然也可以接受其它类型交易。

然后咱们说 ChainSQL 里面用了哪些数据库,我其实刚才那几点在里面都用到了,第一个我们就是说它链的数据,比如链上的虚拟货币。没有它不行,没有动力去挖矿,没有动力去做共识,所以必然有虚拟货币,就是得有一个激励机制来激励用户去参与维护区块链网络的正常运转。所有链上的数据是记录在 k-v 数据库里。我们刚才所说,它还记录了账户变化,以及各种交易的关系,具体怎么实现呢?我们也是有这么一个大的逻辑单元,在这个逻辑单元里,做了整合,且把整合放在关系型数据库里面,因此用户可以快速查看数据以及用户下面的金额变化,是一个变化曲线。因此,这个数据库是利用最广泛的。 目前,要把区块链上的交易提取出来,我们原生支持两种: mysqlsqlLite,之后通过mycat支持其他的数据库。

640?wx_fmt=png 我们其实对数据库并没有做任何改变,只是在中间提供区块链节点,它对外提供链接接口是( java nodejs )这两种开发。还有一种就是刚才所说的能不能支持直接用 sql 语句驱动区块链,我们是通过代理节点来做的支持。

这是Ch ainSQL 的一些基本功能,第一个是数据库基本功能支持,因为它在区块链是虚拟的表,有表涉及到传统数据库的一些问题。当然在实际应用过程中,比如说用户想审计,应该怎么做呢?有很多特色功能,这都是后来根据用户需求给做出来的一些产品特性。另外一个是进行管理有虚拟的管理单元以及加密。你看这是非常矛盾的一件事情,区块链是一个公开透明的,但是我又不想被别人看见表内空,怎么做呢?这样可以实现,比如说我们表的某些字段进行加密,每一个交易内容先加密再进行发送。

我们再简单看一下审计的功能,数据库上面把某一个记录怎么来的,因为我们在链上有这个交易,做这个操作就可以了。然后这是我们这个同步表的逻辑,我刚才已经讲了,把我们这个数据拉下来,然后在这做一个逻辑单元单元,负责区块链到数据库 sql 的转换。

然是我们智能合约、产品特性、运行环境,这两个节点是验证节点,所有联盟链都是共识节点参与共识,维护区块链网络正常运行的,非验证节点就是做传递交易的功能。

到最后说下应用场景,其实区块链不是在所有的场景下都能使用。比方说你要使用数据库,对数据吞吐率要求不高的场合下,需要追溯数据来源,且希望数据不被私自更改,可以借鉴、使用 Chainsql 平台。 好了,谢谢大家,我今天的分享就到这里。


如果你是区块链开发者、技术发烧友,

欢迎加入超级链开发者社群。

加群方式:添加百度超级链小助手微信(image-baidu),

回复:我是开发者

640?wx_fmt=png

猜你喜欢

转载自blog.csdn.net/baiduxuperchain/article/details/102714334
今日推荐