当前位置:首页 > 物联网 > 区块链
[导读] 区块链是分布式的、去中心化存储的一种链式数据结构。它是一个分布式的帐本,所有的记录由多个节点共同完成,每个节点都有完整的帐本。区块链本身具有的最显著的特征是:分布式、去中心化、信息不可篡改。

区块链是分布式的、去中心化存储的一种链式数据结构。它是一个分布式的帐本,所有的记录由多个节点共同完成,每个节点都有完整的帐本。区块链本身具有的最显著的特征是:分布式、去中心化、信息不可篡改。

数据库是按照一定数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。数据库的特性有:减少数据的冗余度、数据的独立性、数据实现集中控制。

区块链从本质上来讲也是一个数据库,是一个去中心化的数据库。但是对数据的查找速度、数据格式化处理方面有天生的不足。

本文将结合区块链与传统数据库,设计一种全新的基于区块链技术的数据库应用平台,该技术不仅具有区块链的分布式、去中心化、可审计的特性,同时兼备传统数据库的快速查询、数据结构优美的特性。两者的结合使得数据库的恢复变得快速、数据可靠性得到质的飞跃。

设计原理

区块链上所存储的数据,我们统一称为交易。

在本设计中,把对数据库操作的每一条指令都记录到一条交易中,即一个交易对应一个数据库操作,区块链网络会以交易的形式记录下所有对数据库的操作。

对于配置了数据库的区块链节点,在区块链网络记录交易的同时会完成对数据库的操作。对于未配置数据库的网络结点,交易只会记录到本节点的区块中。

已经配置数据库的节点,可以通过配置从区块链网络上的第一个区块开始搜索,去获取数据库表对应的交易,根据这些交易去再次执行数据库操作,从而生成对应的表,获得与其它区块链网络节点一致的数据库表内容。

设计方案

· 区块链网络的选择:

最常见的区块链网络就是BitCoin网络,但是BitCoin网络在实际应用中有两个缺点:

1. 速度慢:一笔交易被全网验证通过需要大约10分钟的时间,真正得到安全地确认需要大约一个小时。

2. 区块的生成需要矿工来完成,这个过程要经过大量的计算,对资源浪费比较严重。作为改进,Ripple的出现解决了BitCoin网络存在的不足,Ripple网络通过自己独有的UNL方案的引入,使得Ripple网络的节点能有效地验证自己收到消息的真伪,不需要经过大量的计算即可生成区块,其每一条交易从发出去验证只需要3-8秒。

基于Ripple与BitCoin的对比,我们选择Ripple作为本系统的区块链网络。

· 整体结构及流程

ChainSQL的实现主要分成三个部分:

区块链网络:各个节点N构成Ripple网络,完成区块链网络的架设。

普通数据库:在需要生成数据库表的节点对数据库进行配置。

客户端:可选择自己创建一个区块链节点接入网络,然后向这个节点发送数据,如图1中C2。也可以直接向网络发送交易,如图1中C1。

我们先架设区块链网络,这时已经可以向网络发送数据库操作的交易了,不需要配置任何的数据库,如图1中C1。

客户需要查看网络上的数据库表或者想真实看到传统意义上的数据库表时,需要在本地创建一个区块链节点NC2,连入网络,同时在NC2配置数据库DB,这时发往区块链上的数据库操作就会实时地在DB中反应出来,如图1中C2。

客户不想对表进行操作,仅想查看其它客户创建的表时,需要在本地创建一个区块链节点NC1,同时在NC1配置数据库,在配置文件中设置需要同步的数据库表名与所属用户,即可得到对应的数据库表。

· 具体设计

1. API接口的提供:

在区块链的应用层提供API接口供用户调用,用户向区块链发出交易命令就像操作数据库一样。

2. 先入库再共识:

基于区块链的应用有个基本的做法就是交易要先经过区块链网络进行共识,然后交易才能知道是否有效。我们在处理时:在一定条件下,先由本地节点验证交易,然后写入数据库,数据库写入成功后,再发到区块链网络上进行共识。如果共识不能通过,则回滚数据库操作。这样的设计以便于用户快速地得知自己SQL语句执行的结果。

如果节点已经配置了数据库及对应的表。区块链网络在接收到数据库操作交易的数据时,会直接传导到对应的数据库进行数据库操作,这样就实时反应用户对数据库的操作。

3. 根据配置进行数据库表的恢复

在某一区块链节点配置数据库,把存放在区块链网络中的数据库交易取出,按这些操作去执行数据库,达到重建一张表的目的。

区块链网络上的某一个节点,可以是全记录节点(拥有区块链网络中的所有交易数据),也可以是部分记录节点。

本地节点获取数据的时候,如果有对应表的数据库,则直接从本地获取数据库操作交易数据;如果本地是部分记录节点时,本地缺少某个区间的区块,这时只要从其它节点去获取对应范围内的数据库操作交易数据即可。

· 设计要点

安全性设计:以用户为管理单元,即一张表默认只隶属于一个用户(表的创建者),其它用户想对本张表进行操作,得让表的所有者对其授权。

数据库的操作与数据库表的分离:操作以交易的形式记录在区块链网络中,而真实数据在数据库中查看。

特性与应用场景

· 历史记录不可更改

传统的数据库中,对于记录的更改及删除可由管理员或者黑客随意操作。在 ChainSQL 中,由于在区块链网络上记录了对数据库某张表的所有操作记录,则单独对数据库进行更改不会改变区块链网络上的记录。区块链网络交易的不可更改性决定了 ChainSQL数据的不可篡改。

· 数据可在任意时间恢复到任意地点

只要启动一个区块链网络节点,与区块链网络连接,配置好对应的数据库,即可恢复区块链网络中存在的任意一张表。

· 数据的插件式管理

本 地 可 以 配 置 任 意 常 用 的 数 据 库,包 括:MySQL,SQLite, Oracle 等。

· 简单编程模式

通过简单的 API 或者 JSON,可以在网页或者APP 上对数据库进行写入及读取。

· 满足审计要求

对数据库表的操作记录全部记录在了区块链网络中,区块链对交易存储的特性使得我们可以知道交易发生的时间、具体内容。审计人员只需要从可靠的区块链网络节点中去恢复一张数据库表即可完成对数据的审计。

· 快速区块链应用的开发

任何想用真实数据库来存储数据的应用,同时想兼顾区块链特性的应用,都可以应用 ChainSQL,通过调用 ChainSQL 提供的接口来快速完成。

总结

ChainSQL 将区块链与传统数据库相结合,构建了一种基于区块链网络的日志式数据库应用平台。该技术兼备了两种系统的优点,能随时随地恢复数据库表。ChainSQL 不仅将传统数据库的特性进行了增加,同时将基于区块链的应用开发变得简易。

ChainSQL 中采用的先入库再共识的做法大大增加了数据入库的速度,增强了用户体验。可以随时随地对数据库表的恢复功能使得审计变得更加的方便。是进行基于数据库进行安全开发的良好平台。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭