【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

在联盟链技术与应用中如何结合数据库

  • 2019-10-24
  • 本文字数:3862 字

    阅读完需:约 13 分钟

在联盟链技术与应用中如何结合数据库

10 月 19 日下午,由百度超级链学院与金色财经联合主办的百度超级链学院线下技术沙龙《区块链与数据库的融合碰撞》在北京科技寺创业空间滚石店顺利举行。众享比特实验室主任吴飞鹏进行了主题为《在联盟链技术与应用中如何结合数据库》的演讲,以下为演讲整理


吴飞鹏,众享比特实验室主任。曾任职索贝数码,专注音视频编码、编辑的研发工作。2015 年进入众享比特,致力于分布技术的研发,主持研发了日志式数据库应用平台–chainsql,众享比特在区块链与数据库的融合方向上,已经做了一些探索性实践。


今天简单介绍一下我们在开发 ChainSQL 产品的过程中了解到的数据库有关的知识,以及一些相关技术。另外我也简单介绍一下我们的产品是怎样使用数据库、结合数据库的。


公司从 2016 年大约 1 月份正式开始对区块链展开研发。


我今天就讲一下在这个研发过程中遇到的一些问题,以及我们对区块链以及数据库的一些了解。今天来了一些互联网的同行,希望在这个过程中大家一起来探讨和学习,希望我们所做的工作,对以后大家在区块链部分和数据库方面的工作有一个启发和帮助。


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



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


然后接下来到了 2014 年,我们不仅想利用比特币金融转账的属性,同时希望区块链网络有承载数据记录的功能。因此在 2014 年的时候比特币做了节点升级,出现了一种交易,nulldata 的交易。对交易做了一些革新,coinbase 交易是在输入端可以记录一些数据,这时我们在比特币交易的输出端同样也可以做一个记录。因此,在比特币上面存储数据的话,一种是在输入端,一种是在输出端,我们普通用户选择普通交易就好了。


再说一下 Ethereum 和 Ripple 这两种是怎么做的?业务数据、想写的东西是记在交易里面,交易是透明的,大家都可以查到。


然后区块链到了联盟链的阶段,那么 fabric 怎么做?其实在我的理解里面,这个只是做了一个框架,fabric 给我们大众普通的开发者,或者普通的项目使用上,初始状态下,是什么都没有的。我们要做什么事情?我们想记录怎么做?不好意思,自己来实现。其实 fabric 给你提供了只是一个接口,所有的核心东西要自己做来实现,你想怎么样去存储数据,其实等于类似于就是一个合约。但是我们 fabric 没有智能合约是记录不了的,数据记录在什么地方?它的业务数据主要是记在数据库里面,比如说像大家用的 level DB 和 CounchDB,交易的接口是固定的,但是你开放的智能合约,里面的接口函数是非常自由的,可以随便定义。业务数据就是按照我们自己所希望的方式传给 Chaincode,Chaincode 最终将数据存储在数据库里面,这是业务数据的记录方式。


现在说一下区块链是不是用到数据库,数据库在里面发挥什么样的作用,简单说一下。链上的一些数据应该怎么去记,第一种是记录在文件里面,第二种是记录在数据库里面。


那对于以太坊来说都是记录在数据库里面,这些数据库我们使用的都是 k-v 数据库。节点直接把所记的东西最终转成一个 key 和 value。这个是链本身的数据库,本身的数据库里面是记在这个数据库里面的。


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


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



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


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


然后咱们说 ChainSQL 里面用了哪些数据库,我其实刚才那几点在里面都用到了,第一个我们就是说链的数据,比如链上的虚拟货币。没有它不行,没有动力去挖矿,没有动力去做共识,所以必然有虚拟货币,就是得有一个激励机制来激励用户去参与维护区块链网络的正常运转,这些数据在什么地方。所有链上的数据是记录在 k-v 数据库里。然后我们刚才所说的它还记录了账户变化,以及各种交易的关系,怎么实现呢?我们也是有这么一个大的逻辑单元,在这个逻辑单元里,我们给大家做了一个整合,这个整合我们会把它放在关系型数据库里面,因此用户可以快速查看数据以及一个用户下面的金额变化,它是怎么一个变化曲线。因此说这个数据库其实是利用最广泛的,不管对工业来讲,你要提供快速查询,以及提供区块链浏览器功能的话,查询工作是非常重要的。


在这个里面我刚才说了,因为它是数据表上的东西,它最终状态得呈现出来,但是你就得最终把这个区块链上的交易提取出来,我们原生支持两种:mysql 与 sqlLite,然后通过 mycat 支持了一下其他的数据库。



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


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


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


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


到最后首先说一下应用场景,其实区块链不是在所有的场景下都能使用,一个概念,比方说你只要使用数据库,对数据吞吐率要求不高的场合下,需要追溯数据来源,希望数据不被私自更改,都可以借鉴、使用 Chainsql 平台,这是它的一些应用场景。


好了,谢谢大家,我今天的分享就到这里。


2019-10-24 14:312418

评论

发布
暂无评论
发现更多内容

【工具推荐】Github国内访问速度太慢?一招教你轻松搞定

恒生LIGHT云社区

GitHub

EventBridge 最佳实践场景:流计算 Oceanus 告警消息实时推送

腾讯云大数据

flink 流计算 Oceanus

二哥的小破站终于上线了,颜值贼高!

沉默王二

Java 分布式

网络安全好学吗?手把手教你学利用漏洞渗透 网络安全工程师学习资料汇总

学神来啦

SAP HANA Delivery Unit概念简述

Jerry Wang

数据库 内存数据库 1月月更

教程直播第6期 | OceanBase 如何进行 Benchmark 测试及调优

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

AI开发平台系列2:集成式机器学习平台对比分析

Baihai IDP

AI

云单元架构,如何赋能数字化转型呢?

博文视点Broadview

有道围棋 AI:智能匹配儿童棋力的良师益友

有道技术团队

网易有道 围棋

前端开发之CSS样式——自定义滚动条

@零度

CSS 前端开发

性能场景之压测策略设计

zuozewei

性能测试 性能分析 1月月更

前端质量提升利器-马可代码覆盖率平台

vivo互联网技术

前端 代码 平台架构

谁说count(*) 性能最差,我需要跟你聊聊

华为云开发者联盟

函数 count 字符 数据表

Apache Flink 不止于计算,数仓架构或兴起新一轮变革

Apache Flink

大数据 flink 编程 实时计算 流式数仓

快来一起玩转LiteOS组件:RHas

华为云开发者联盟

C语言 LiteOS 组件 RHas 哈希函数库

阿里副总裁浅雪对话VMware全球副总裁原欣:阿里云携手VMware,助力企业数字化转型

大咖说

云计算 阿里云 数字化转型 阿里巴巴‘

在线CSS代码压缩美化工具

入门小站

工具

大数据开发之Hive表数据同步至HBase

@零度

大数据 hive HBase

十三部门修订发布《网络安全审查办法》,企业数据安全合规应尽早

行云管家

云计算 互联网 网络安全 数据安全

java开发框架Redis之sentinel和集群

@零度

redis JAVA开发

魔电熊户外电源体验|让户外露营实现用电自由!

科技热闻

专家带你吃透 Flink 架构:一个新版 Connector 的实现

腾讯云大数据

flink 流计算 Oceanus

图形测试分析毫无头绪?HarmonyOS图形栈测试技术帮你解决|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

有了这个新特性,一扫实例存储数据丢失风险!

亚马逊云科技 (Amazon Web Services)

存储

开源堡垒机可以一直免费使用吗?为什么?

行云管家

开源 网络安全 堡垒机

利用Graviton2和CloudFront为S3对象存储动态生成缩略图

亚马逊云科技 (Amazon Web Services)

存储

美团李凯揭秘数据库发展三大趋势 | TiDB Hackathon 评委访谈

PingCAP

kafka的优缺点都有那些

编程江湖

kafka

Vue的动态组件 & 异步组件

编程江湖

Vue

Linux之chown命令

入门小站

Linux

手把手教你使用 Timestream 实现物联网时序数据存储和分析!

亚马逊云科技 (Amazon Web Services)

存储

在联盟链技术与应用中如何结合数据库_数据库_吴飞鹏_InfoQ精选文章