mysql 和区块链的差别_论区块链是什么数据库——正名篇

区块链是数据库,这句话大家都挑不出毛病。这就好比说,人是一种生物,树是一种生物。这是绝对的真理,同时也是一句废话。

mysql是一种数据库,mongodb是一种数据库,leveldb是一种数据库,但是我们在提到这些数据库的时候,会在他们前面加上一个定语,这个定语才是区别这几种数据库的关键。比如mysql是关系型数据库,mongodb是nosql数据库,leveldb是Key-Value数据库。所以区块链是数据库,但只有明确了它是一种什么数据库,才能将它与其他数据库区分出来,才能知道哪些场景适合用它。

我们从三个维度看看区块链的独特点。

一 数据结构

从主流的几种区块链来看,区块链数据结构分为两类:

bitcoin类,他们采用UTXO模型存储数据,交易即数据,形式和内容都比较单一,灵活性比较差,实际上这类区块链,把它当成数据库还真是有点牵强。

智能合约类,这是我要说的重点,这类把“逻辑相关”数据组织成智能合约,智能合约就相当于一个容器,在里面可以定义各种类型和结构的数据,是一种非常灵活的定义方式,可以在合约中定义对数据的操作接口。智能合约像一个编程语言中的“类”。那么从这个角度看,区块链像是一个“对象数据库”,可以定义不同的智能合约,每个智能合约也可以实例化出多个对象。

关于底层存储,mysql,couchdb,leveldb等都可以用来作为区块链数据的底层库,所以区块链是建立在这些数据库之上的,是一种对数据的更上一层的抽象。

二 数据分布机制

区块链天生就是一种分布式的,但跟通常讲的分布式数据库有几个区别:

1.数据全副本,每个节点的数据都是区块链数据的全集。

2.没有主从之分,任何一个节点都是独立自主的,自己决定自己的数据,不受其他节点控制,一个操作可以在任何一个节点上执行。

3.数据一致性机制不同,传统分布式数据库强调的是“强主从式”的一致性,所以采用同步机制,从节点从主节点同步保证数据一致性。而区块链是通过“共识”达到数据的一致性。多数节点对要写入区块链的数据达成一致才会被“写入区块链”,写入节点和写入区块链是有区别的,被少数节点写入的脏数据,是不被认可的数据,也就不是区块链的数据,这也是称为“共识”的原因。

可见区块链是一种“共识数据库”。

三 数据访问机制

传统数据库只是一种存储机制,写什么数据,怎么读取数据,完全是应用来控制。而区块链是读写控制规则与数据本身的合体。它通过“统一的链上规则”来控制数据的访问。bitcoin类的区块链主要是通过签名验证这种简单的规则,智能合约类区块链则是通过“智能合约”定义复杂的规则。

可见区块链是一种“规则(或信任)数据库”。

综述

所以现在再看,区块链到底一种什么数据库呢?一种共识,规则(或信任),对象数据库。这三者是一个绝佳组合。

但在实际中,为了系统的某些特性比如提升性能,可能会去掉区块链的某些特性,比如有的去掉了共识算法,采用同步算法来实现数据的一致性,那就不是共识数据库了;有的去掉了规则,将规则交给了应用,那就不是一种信任数据库了。取舍无关对错,就看场景需要什么,如果用于coin,显然三者缺一不可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Silverlight 4新控件PivotViewer介绍

早在Silverlight 4正式版发布之前,微软发布PivotViewer控件的演示版本,其处理以及展示大批量数据的功能吸引不少开发人员和终端客户,今天微软发布了PivotViewer控件正式版本,本文将介绍一下PivotViewer控件。首先了解一下PivotVie…

Android add external jar

A Best way to add External Jars to your Anroid Project or any Java project is: Create a folder called ‘libs’ into you project root folderCopy your Jar files to the libs folderNow right click on the Jar file and then select Build Path > Add to Build Pa…

python获取命令行输出结果

python获取命令行输出结果,并对结果进行过滤找到自己需要的! 这里以获取本机MAC地址和IP地址为例! # coding: GB2312 import os, re# execute command, and return the output def execCmd(cmd):r os.popen(cmd)text r.read()r.close()ret…

mysql 模拟100万数据_教你如何6秒钟往MySQL插入100万条数据的实现

一、思路往MySQL中插入1000000条数据只花了6秒钟!关键点:1.使用PreparedStatement对象2.rewriteBatchedStatementstrue 开启批量插入,插入只执行一次,所有插入比较快。二、 代码package test0823.demo1;import java.sql.*;/*** au…

SQL基础-- 数据处理(DML、RETURNING、MERGE INTO)

-- --SQL基础--> 数据处理(DML、RETURNING、MERGE INTO) -- 一、常用的DML语句及事物处理 向表中插入数据(INSERT) 更新表中数据(UPDATE) 从表中删除数据(DELETE) 将表中数据和并(MERGE) 控制事务(TRANSACTION) 二、DML 可以在下列条件下执行: 向表中插入数据 修改现存数据 …

大型网站系统架构实践(四)http层负载均衡之haproxy实践篇(一)

方案 上篇文章讲到了负载均衡的相关理论知识,这篇文章我打算讲讲实践方法以及实践中遇到的问题 方案:haproxy http层负载均衡 安装一个haproxy服务,两个web服务 haproxy:192.168.1.227:80 web1 http://192.168.1.226:8081/login w…

[Python]使用 lambda 函数

From:http://woodpecker.org.cn/diveintopython/power_of_introspection/lambda_functions.html 4.7. 使用 lambda 函数 4.7.1. 真实世界中的 lambda 函数 Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Li…

mysql修改子分区_创建MySQL子分区方法

创建MySQL子分区方法发布时间:2020-05-26 15:11:15来源:51CTO阅读:216作者:三月本文主要给大家介绍创建MySQL子分区方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还…

const char * array[]和char * const array[]

int main() {char abc[] "abc";char def[] "def";char * const array[] {"abc", "def"};char * const array2[] {abc, def};const char * array3[3] {"abc", "def"};//char * const array3[2]; //error,定义…

日志处理(二) 日志组件logback的介绍及配置使用方法(转)

本文转自:http://www.cnblogs.com/yuanermen/archive/2012/02/13/2348942.html http://www.cnblogs.com/yuanermen/archive/2012/02/13/2349609.html 一、logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logba…

TNS-03505 oracle用户可以tnsping通,普通用户tnsping报错

From: http://zxf261.blog.51cto.com/701797/750308 今天碰到了一个有趣的问题 oracle用户可以tnsping通&#xff0c;普通用户tnsping报错 用普通用户tnsping数据库的时候报 TNS-03505: Failed to resolve name 而用oracle用户tnsping数据库的时候却可以ping通 <34 linux-si…

python package安装包_安装Python包(第三方库)

检查python版本如果“提示 python 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。”&#xff0c;可能有2种原因1、进入的目录不对 (切换目录后再查看)C:\Users\zhangXXXX>pythonpython 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。C:…

Windows2003+SQL2000的集群安装手册

1 集群服务器安装及配置 步骤节点1节点2存储注释安装配置系统上电上电断电检查所有共享总线上的存储设备是否都已经断电&#xff0c;给各节点上电。1.1 安装Windows Server 2003操作系统 在服务器1和服务器2分别独立安装Windows Server 2003操作系统。安装要开始安装过程&#…

wpf全局异常

在App.xaml文件中 添加DispatcherUnhandledExceptionEventArgs 新增对应事件 转载于:https://www.cnblogs.com/ChenRihe/p/4421049.html

shell执行oracle存储过程,获得存储过程返回值

From: http://www.flatws.cn/article/program/oracle/2011-06-27/32316.html 同事做一个小的etl调度&#xff0c;需要将存储过程执行情况进行返回并控制其后续依赖是否执行&#xff0c;本人只是将调用执行存储过程的shell脚本中存储过程输出参数返回&#xff0c;并没有写具体的…

一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!...

package com.pb.demo1;import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 一群人围成一圈从123报数&#xff0c;如果报到3就退出该圈中&#xff0c;直到最后一个人留下来&a…