解读区块链,区块链和数据库
昨天耐心读了一遍年工信部的《中国区块链技术和应用发展白皮书》,看到正文第一句就是:区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式。之前文章也多次提到了区块链是各种之前技术的结合,这里针对这句话的第一个计算机技术做个简要说明。
分布式数据库:首先确定下这个概念,分布式数据库系统一般是用较小的计算存储单位(当然目前硬件性能和存储能力已经大大提升了,但是数据处理和数据量的增加应该更加迅速),分布式部署数据库,每一个计算存储单位中都可能有DBMS的一份完整拷贝副本,或者多副本,然后每个计算存储节点考虑有单独的局部库,所有计算存储单位通过网络互联,组合成为一个逻辑集中的大型数据库(物理上分布现在随着虚拟机云技术的发展,物理上可能并不会区分的很清楚)。
数据库的概念(这个一般学过计算机的都比较清楚,可忽略),我们现在接触到的较多就是关系型数据库和非关系型数据库。
关系型数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。常见的sql-server、oracle数据库
非关系型数据库:一般现在我们叫做nosql数据库,对于这个nosql,年初,JohanOskarsson举办了一场关于开源分布式数据库的讨论,EricEvans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。非关系型数据库提出一种理念,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。
目前对nosql数据库百度百科上分了4类:
键值(Key-Value)存储数据库:
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。现在随着互联网海量数据的产生,产生以key-value为基础的分布式数据库。举例如:TokyoCabinet/Tyrant,Redis,Voldemort,OracleBDB。
列存储数据库:
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra,HBase,Riak.
文档型数据库:
文档型数据库的灵感是来自于LotusNotes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB,MongoDb.
图形(Graph)数据库:
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J,InfoGrid,InfiniteGraph.
结合区块链,很多人会说,通过去中心化和去信任的方式,集体维护一个可靠的数据库。还有说区块链就是一个分布式账本。这里我们不再对区块链是什么做讲解,其实每个人对这个理解都会有偏差。这里讨论下区块链和数据库。
我们针对应用场景来说明:区块链是一种去中心化(理想状态)、去信任(事实是数学保证信任)、可追溯、透明化架构,在实际应用中,需要唯一身份证实,记录可追溯、分布式应用,充分保证互相信任,网络中所有节点权利义务均等(这个公有链理想化)共同维护一个记录,这样的应用场景区块链技术完全切合,当然现在区块链技术还有技术瓶颈,如交易的确认、TBS的量(最近一直在看石墨烯区块链架构,资料较少还没折腾明白,理论上可大大改善区块链的处理效率),在实际应用中不能满足那些实时性要求较高的应用。比如之前有提高的征信信贷业务、数字资产、版权唯一著作权、艺术品唯一标签等就契合区块链架构。总结区块链技术特点:
去中心化(Decentralized):所有交易操作不需要第三方中介机构,多个节点间互相进行交互。
去信任(Trustless):系统中所有节点之间无需信任也可以进行交易交互,整个记录全部公开透明,数学规则、共识机制保证信任。
集体维护(CollectivelyMaintain):系统是由其中所有具有维护功能的节点共同维护的,系统中所有节点共同参与整个系统。
可靠性Reliable):系统中每一个节点都拥有最新账本数据(或者简易认证数据),无法修改单独节点的数据信息。
从这四个特点来看,区块链和分布式数据库很类似。
有一种观点,区块链是一种新的数据库,安全分布式数据库,这个理念是因为以上四个相似特点,但是要把区块链说成是数据库个人觉得不是很适合。
结合这些可以考虑下区块链的适用场景:
数据库个人觉得K-Y分布式数据库和区块链的场景相似,但是数据库和区块链其实是两个东西,理念有些相似而已,简单结合数据库的特点来和区块链做说明:
传统数据库需要访问权限管理,有过数据库操作经验的人都知道总会有dba用户,操作还是依赖管理员权限分配。
在数据安全方面区块链天然的数学加密和工作量证明就保障了数据的安全。而数据库来说由于某些特定需求数据是有更改的需求。
单纯从性能上来说,目前传统数据库和分布式数据库的性能是相当强劲的,在交易确认过程中只需要一次通信签名,但是区块链的共识机制节点相互通信,并且还要考虑分叉,还是影响了整个处理过程。
区块链节点都会保存一份数据,不管是全部的还是简易证明数据,节点的加入和退出十分便捷,由于网络中的众多节点,你在考虑数据冗余性上其实也就少一分考虑了。
要说区块链是一种分布式NOSQL数据库,但是仔细考虑下ACID和CAP原则,两者立场其实是不一样的。
区块链其实是多种技术的一个结合体,这个之前就说了多次,分布式数据库、nosql数据库将来和区块链结合个人认为是一个大趋势,但是仅仅说明区块链来代替或者就是分布式数据库个人感觉还是不像,可能区块链的东西看的多了,区块链有些理念还是和数据库的理念有区别,设计模式和应用场景也是不同的,至于选择哪种来适合应用,随着区块链技术的发展,将来肯定会有切实的标准。
笔者初学区块链,很多东西也是慢慢摸索,之所以写下这些基本概念一方面作为自己学习的整理,另一方面也希望更多交流学习的机会。如有兴趣可以直接给我留言或者加笔者北京中科白殿疯眞棒北京中科白殿疯眞棒