内部区块链的优缺点
链客,专为开发者而生,有问必答!
此文章来自链客区块链技术问答社区,未经允许拒绝转载。
内部区块链的优缺点1
区块链的作用是取代可信赖的第三方,或者是在不完全相互信任的实体之间建立信任关系,如此看来,内部区块链似乎是矛盾的。
然而,许多公开发布的实验,试验性项目和针对应用的验证性测试都着重于区块链的内部使用案例,即区块链中可能有一个或多个节点,但是都由同一组织控制,且通常局限在一个区域内。
虽然最近有许多对比公有型(非许可型)与私有型(许可型)联盟区块链的讨论,但是却鲜有人思考内部区块链的优点。
一些概念:
公有型(非许可型)意思是任何人都可以对交易进行校验,以及添加新的区块,同时,任何人都可以读取区块链中的数据,例如比特币和以太坊。
私有型(许可型)意思是在区块链中,可以添加区块的实体对象对整个区块链网络的其余部分来说是已知的,并且得到了它们的许可。这种类型的区块链可以分为两大类。第一类即区块链的参与者是同一类型的实体,例如产业区块链。第二类则是内部区块链,即所有区块的添加者都由同一组织控制。
内部区块链实验
使用内部区块链进行实验的主要原因似乎是:
(1)在实施内容与区块链有关的情况下对工作压力和预算的考虑
(2)相比于同外部组织(通常是竞争对手)进行合作,内部设置更加简单
(3)可以亲自动手体验一些最新的技术
以下是一些关于内部区块链解决方案相较于传统数据库的优缺点的想法。我非常欢迎有这方面技术知识的读者,例如数据库管理员,对这些想法进行补充或指正,因为我并不是一个技术专家。
对数据安全的考虑
数据读取
目前,对非区块链式数据库的读取访问往往记录在日志文件中。而区块链的读取特点是,你可以自由地读取区块链中某一节点的数据(通常储存在一个固定的数据库中),只需要通过与其相连的节点。基于区块链的数据库本身并没有任何内置机制可以改善这个问题。因而你仍然会使用日志文件来记录谁读取了你的区块链,所以在这一方面,区块链式数据库和普通数据库的解决方案几乎没有什么差别。
数据写入(添加)
非区块链式数据库通常使用用户名和密码对用户进行身份验证,同时根据用户权限来决定他是否可以写入数据,并使用日志文件记录新数据写入行为。
区块链在添加数据时通常需要额外使用数据签名。数据签名的使用首先在交易层面,其次则是添加区块时(针对私有链)
在交易层面,例如在比特币交易中,你通过在支付信息中添加数字签名来证明你是这笔钱的所有者。尽管用于储存非交易性数据的区块链不需要使用此机制,但是许多用于数字资产转移的区块链都在使用它。区块链节点的软件理论上可以接收来自任何人的数据并将其添加到区块中,而不需要来自数据发送者的数字签名。
在增加区块的层面上,对于私有链的区块添加者来说,一种获取许可的机制就是在要添加的区块上使用数字签名来证明他们的身份,这样其他验证人员就会接受这个区块。但这种情况并不适用于公有链,例如比特币。在比特币区块链中,你完全可以在没有明确表示你是谁的情况下进行挖矿,尽管你的IP地址和你通过挖矿获得的比特币地址都会泄露你的信息。
数字签名能够在人们写入更改时在安全性和不可否认性上添加额外的一层保障。所以区块链能够在数据写入这个方面为数据库增加使用价值。
数据修改或删除
非区块链式数据库通常使用用户名和密码对用户进行身份验证,同时根据用户权限来决定他是否可以修改数据,并使用日志文件记录数据修改行为。
区块链包含许多节点,数据一旦写入,拒绝更改,除非你得到了绝大部分或者所有节点的同意,或者你滥用旨在解决区块创建的同步问题的“最长链规则”。这意味着你可以降低流氓管理员更改历史数据的风险,通过让区块链运行在不同数据中心的节点上,每个数据中心都配备不同的数据库管理团队。如果要更改历史数据(假设私有区块链设定不能在单一节点连续添加多个区块),那么需要多个团队合谋,共同协作才能办得到。
从这方面来看,区块链式数据库比传统数据库更安全。对于没有存档和业务连续性需求的不受监管的对象来说,区块链可能是一个极佳的解决方案。但是对于金融机构来说,频繁地备份以及长期保存这些备份是必须的,因此,不难想象,对于一个银行来说,比较各个备份来检测数据是否发生了更改可能更为直截了当。但是,在这种方式下每个数据库你都需要构建相应的比较方法,区块链则不然,你可以直接获得这种不可变性。
存档和备份
尽管如上所述,区块链不如存档简单,但我可以想象,未来区块链将会代替存档。如果你的区块链在全球范围内有多个复制这些不可变数据的节点,你还需要额外的定期备份吗?
适应性
添加一个新的节点并使其与现有区块链同步是非常容易的。只需要安装相应软件,输入区块链上其他计算机的地址,让它开始下载区块并校验新出现的交易和区块就可以了。在我看来,这比传统企业数据库提供的解决方案更容易操作,也更经济实惠。但也有可能我是错的。
跨境时的数据隔离
区块链在各个节点之间进行数据的复制。如果你的某些数据需要保留在特定的司法管辖区内(例如新加坡的客户数据),那么你需要找到适合的方法来解决这个问题。找到解决方案是相对比较简单的,只需要认真思考一下。这些数据和常规数据库中的客户端数据,以及内部区块链上的交易数据是十分相似的。
数据隐私
是否要考虑交易中的中国墙问题呢?如果需要,鉴于区块链的实现需要不断复制数据,那么使用区块链可能不会是一个好的解决方案。虽然隐私问题可以通过加密来解决,即将密钥安放在需要的地方,但是,数据需要在加密以及保持一定可见性用于校验这两者之间实现动态变化,尤其是交易数据。
思考一下:你在某个区块链中并添加了一些表示A(你)和B(交易另一方)之间交易的数据。同时,C也在这个区块链中。那么,交易数据添加到区块链上后,C就可以看到A在与B通信。此外,C也可以在没有攻破A和B的系统的情况下,用自己的时间尝试解密或者分析所有A和B之间的通信信息。从敏感的商业视角来看,这难道也可以接受吗?
第三方访问
对于为何使用内部区块链,有时我会听到这样的理由:监管机构或审计人员获取访问权限十分简单- 他们可以很容易地接入区块链并从那里开始获取他们想要的数据。确实如此,但是,让他们从常规数据库中获取数据真的比这个要难吗?
另一个可能更好的理由是互操作性- 当你希望其他的参与者也可以写入数据时,如果你有一个以区块链形式构建的内部数据库(即添加的数据记录中包含了块哈希的值,并且安装有有一些能够和外界通过对等网络进行交互的服务器软件),那么数据库接入其他参与者会更加简单。但你必须注意那些你与外部参与者共享的数据和元数据(参见上面的数据隐私部分)。
速度
区块链中数据的读取速度很快。同时,鉴于区块链节点复制的数据用传统数据的格式存储,你可以向读取普通数据库一样进行读取。
但如果写入速度对项目来说十分重要,或者你需要处理大量的数据,那么区块链的性能还不如常规数据库。
不过,我经常听到关于比特币区块链交易速度受限问题的担忧。但这种速度受限并不一定会体现在内部的,私有的,使用工作量证明协议的区块链上:内部区块链如果位于具有良好通信能力的数据中心,其交易处理速度可以达到比特币的3倍以上
结论
尽管最开始我们并没有任何令人信服的理由能说明为什么要在解决内部问题时使用区块链,但从技术的角度来说,两者的结合是有利的。毕竟,这是一次实践,一次试验,是在创新和改良现有的技术以寻求更出色的解决方案。鉴于创建私有型区块链并不需要挖矿开销,也不复杂,在区块链技术还在发展的这个阶段,如果有人问:“为什么要用区块链呢?”,那么正确答案可以是:“为什么不用呢?”
相关文章:

Spring框架系列之AOP思想
微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1、AOP概述 (1)、什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意为…

jstack 使用(转)
dump 文件里,值得关注的线程状态有:死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition(重点关注) 等待获取监视器,Waiting on monit…

ios TableView编辑状态多选框的修改
在- (void)layoutSubview 和 - (void)setEditing:(BOOL)editing animated:(BOOL)animated 中添加 UIImage *selectImg [UIImage imageNamed:"im_select_sign"]; UIImage *disSelectImg [UIImage imageNamed:"im_disSelect_sign"]; for (UIC…

区块链有哪些技术特征
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链有哪些技术特征 在信息网络化的大背景下,当需要与不熟悉的对手方进行价值交换活动时,人们如何做才能防止不会…

《JavaEE开发的颠覆者——Spring Boot实战》是一本好书
这本书的风格非常好、每一节都是先点明这一块知识的要点,随后就手把手的做出一个最简明、但有能体现核心的实例(大多只有几个Class) 这样的书用来熟悉一门框架,实在是再好不过。转载于:https://www.cnblogs.com/nanlan2017/p/1045…

html css 布局知识概况
1、如果想设置页面居中,当设置margin属性为auto的时候,不能在设置浮动或绝对定位属性。并且一定要设置width为一个定值 2、盒子模型三维立体结构图 3、浮动布局 利用浮动可以实现横向布局,通过float来实现(left--左浮动࿰…
项目的简单总结二--可拉伸的头视图
项目总结二 tableVIew和collectionview中头视图的可拉伸放大效果 demo中只做了tableview的效果, collectionview做法一样 效果如下图: demo地址: https://github.com/wyon0313/ZoomHeaderView

浅谈区块链技术
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 浅谈区块链技术 这几天空闲的时候在网上浏览了一些区块链的技术,其实区块链只是一个技术,只不过是比特币很好的实…

IIS 7.5 去掉index.php 西数服务器
//新建web.config 加上下面代码<?xml version"1.0"?> <configuration> <system.webServer><rewrite><rules><rule name"OrgPage" stopProcessing"true"><match url"^(.*)$" /><condit…

bzoj1927: [Sdoi2010]星际竞速
跟上一题几乎一样。。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define rep(i,n) for(int i1;i<n;i) #define clr(x,c) memset(x,c,sizeof(x)) #define op() cl…

在cell中取得UITableView所在的ViewController对象
原来碰到这个问题一般会将控制器传进cell中, 或者将cell要做的响应事件回调到控制器去处理, 前段时间找到一种方法觉得很不错 - (UIViewController *)getTableViewSuperViewController { for (UIView* next [self superview]; next; next next.superview) { UI…

区块链当前现状
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链是分布式账本技术,用于记录交易数据,具有不可篡改性、完整分布性、可追溯性等技术优势,应用包括…

MVC 4.0 Razor模板引擎 @Html.RenderPartial 与 @Html.RenderAction 区别
近来在学习MVC 4.0,设置布局全局网页的页脚,使用了Razor语法 {Html.RenderPartial("Footer", Model.FooterData);} 但是并不理解Html帮助器方法Html.RenderPartial。 先来介绍一下Html.RenderPartial用法。 Html.RenderPartial在Asp.net Mvc中…

iOS 图片处理-利用GPUImage 磨皮和美白图片
项目中要求处理图片, 简单记录一下美白和磨皮过程 (其中GPUImage还有美颜滤镜, 使用方式基本一样) //磨皮 - (void)editPhotoByBilateralWithLevel:(CGFloat)level { GPUImagePicture *pic [[GPUImagePicture alloc] initWithImage:image]; // 磨皮滤镜…

linux下编译php扩展
1 在pecl.php.net搜索你需要的php扩展 2 在解压后的扩展目录运行phpize 3 执行编译./configure --with-php-config/usr/local/php/bin/php-config 4 修改php/lib/php.ini文件 加上这句话extention扩展.so的绝对路径转载于:https://www.cnblogs.com/wyqn/p/8493456.html

区块链技术原理
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 以比特币的区块链为例,你可以把区块链想象成一个比特币的公共账本,这个账本: 1.存放在互联网的各个比…

Spring之事务管理配置
1. 基于注解的事务配置 1. 在需要添加事务的方法上加上Transactional注解2. Spring的配置文件中配置事务管理器1 <!-- 添加事务管理器组件DataSourceTransactionManager -->2 <bean id"transactionManager"3 class"org.springframewor…

iOS 图片处理-图片旋转和裁剪
项目中要求处理图片, 简单记录一下图片旋转和裁剪过程 /** 将图片旋转弧度radians */- (UIImage *)imageRotatedByRadians:(CGFloat)radians{ // calculate the size of the rotated views containing box for our drawing space UIView *rotatedViewBox [[UIView alloc…

ThinkPHP 3.1.2 视图 1
一、模板的使用 (重点)a、规则模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)更换模板文件的后缀名(修改配置文件)TMPL_TEMP…

mysql事务处理用法与实例详解
MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务、行级锁、并发 3.Berkeley DB:支持事务一个事务是一个连续的一组数据库操作ÿ…

C++ 类的内存分布
C类内存分布 转自:http://www.cnblogs.com/jerry19880126/p/3616999.html先写下总结,通过总结下面的例子,你就会明白总结了。下面总结一下: 1、虚基类指针和虚函数指针是可以继承的 2. 虚函数指针来源于父类或者自己是第一个声明虚…

iOS 关于手机权限的检查与获取
手机通讯录权限: /** * 检测权限并作响应的操作 */ - (void)checkAuthorizationStatus:(UISwitch *)sender { switch (ABAddressBookGetAuthorizationStatus()) { case kABAuthorizationStatusAuthorized: //存在权限 //获取通讯…

也谈谈区块链技术
链客,专为开发者而生,有问必答! 此文章来自区块链社区,未经允许拒绝转载。 现在区块链技术很火,而且几乎被上升到了一个“革命性”的高度,很多股票居然都因为沾了点区块链变得炙手可热。其实这玩意没有这么…

nyoj——297(期望)
GoroSort 时间限制:3000 ms | 内存限制:65535 KB难度:4描述Goro has 4 arms. Goro is very strong. You dont mess with Goro. Goro needs to sort an array of N different integers. Algorithms are not Goros strength; strength is Gor…

js ajax调用请求
<pre name"code" class"html"> function getAppList(env){var data {};data.env env;var successfn function(jdata){$(".deploy_list").html("");_HTML "<tr><th>发布清单</th></tr>";$…

iOS SDWebImage加载webp
项目更新使用的最新版本的SDWebImage, 需配置如下: Build Settings -> preprocessor macros -> 添加 SD_WEBP1

区块链之初识区块链
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 首先得明白几个概念:区块链,比特币,中心化,去中心化,挖矿 区块链和比特币 区…

Linux RSS/RPS/RFS/XPS对比
RSS适合于多队列网卡,把不同的流分散的不同的网卡多列中,至于网卡队列由哪个cpu处理还需要绑定网卡队列中断与cpuRPS:适合于单队列网卡或者虚拟网卡,把该网卡上的数据流让多个cpu处理RFS:当流量需要传输到用户态处理时…
iOS 关于UIView覆盖StatusBar的小知识点
项目中有关于浏览图片的需求, 自己写了一套, 但是一直有个关于StatusBar的问题: 因为在查看图片时隐藏掉了StatusBar, 当结束查看后再显示sta会发现整个界面下滑了20px, 在IM聊天界面这个滑动效果很不友好 最近在优化这一块东西时又想到了这个问题, 现在得到了比较好的解决方…

从数字货币说起
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 从数字货币说起 历史上,货币的形态经历了多个阶段的演化,包括实物货币、金属货币、代用货币、信用货币、电子货币、…