区块链——分布式合同
Contact me
- Blog -> https://cugtyt.github.io/blog/index
- Email -> cugtyt@qq.com
- GitHub -> Cugtyt@GitHub
课程作业
数据库技术
数据库技术就是数据管理的技术,是计算机科学与计算的重要分支,是信息系统的核心和基础。数据库是数据管理的产物,数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、储存、检索和维护。随着计算机硬件和软件的发展,数据库技术也不断地发展,数据库技术到目前共经历了人工管理阶段、文件系统阶段和数据库系统阶段。数据库的模型包括对象模型,层次模型,网状模型,关系模型,面向对象模型,半结构化模型,平面模型等。
关系数据库是当前数据库的主流,是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。标准数据查询语言SQL是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
范式
第一范式(1NF):所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码,即在1NF基础上消除非主属性对主码的部分函数依赖。
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性,即在2NF基础上消除传递依赖。
巴斯-科德范式(BCNF):Boyce-Codd Normal Form(巴斯-科德范式) 在3NF基础上,任何非主属性不能对主键子集依赖,即在3NF基础上消除对主码子集的依赖。
第四范式(4NF):满足BCNF,消除非平凡且非FD的多值依赖(MVD)。4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
第五范式(5NF):消除连接依赖,并且必须保证数据完整性。表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
约束
数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则,索引,触发器等。约束分为两类:行级和表级,处理机制是一样的。行级约束放在列后,表级约束放在表后,多个列共用的约束放在表后。
完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。
总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,有五大关键词,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT。
- 唯一索引 唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。
- 主键索引 数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
- 外键约束 外键其实就是引用,因为主键实现了实体的完整性,外键实现了引用的完整性,所引用的数据必须存在。
- 检查约束:就是给一列的数据进行了限制,插入和更新的数据不得超过该约束条件。
- 空值约束 空值不是0也不是空字符串,如果设定了非空约束,那么必须给定一个有值的数据。
- 默认值约束 默认值为若插入的数据该项为空,那么填为默认设置的值,防止为空。
分布式数据库
当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区并存储到若干台单独的计算机上。管理网络中跨多台计算机存储的文件系统称为分布式文件系统。该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。一个标准的分布式系统应该具有以下几个主要特征:
-
分布性 分布式系统中的多台计算机之间在空间位置上可以随意分布,系统中的多台计算机之间没有主、从之分,即没有控制整个系统的主机,也没有受控的从机。
-
透明性 系统资源被所有计算机共享。每台计算机的用户不仅可以使用本机的资源,还可以使用本分布式系统中其他计算机的资源(包括CPU、文件、打印机等)。
-
同一性 系统中的若干台计算机可以互相协作来完成一个共同的任务,或者说一个程序可以分布在几台计算机上并行地运行。
-
通信性 系统中任意两台计算机都可以通过通信来交换信息。
hadoop是一个广泛使用的框架,自带一个称为HDFS的分布式文件系统。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算,使得其在海量数据处理方面得到大量使用。
去中心化的数据库——区块链
中本聪在2008年,于《比特币白皮书》中提出“区块链”概念,并在2009年创立了比特币网络,开发出第一个区块,即“创世区块”,而后比特币网络稳定运行了几年,证明了其可行性,在应用上取得了一定的成功。它有几个特点:去中心化,公开透明,特殊的同步和共识机制,修改困难等。
- 首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库,对于比特币而言存储的主要是交易信息。
- 其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致,这是它的分布式特性。
- 第三,任何人都可以查看里面的信息,所有的内容是公开的,不存在访问权限的问题,但是写入是需要矿工用算力或者其他方式来做的,使用工作量证明或权益证明等方法。
- 第四,由于区块链的节点分布在世界各地,而且物理设备所有权有不同的管理者,因此普通的单一管理或者中心化管理思路不能直接应用。区块链采用的方式是通过第三点中提到的一些特殊方式作为写入验证的权限,在比特币中所有的矿工努力打包交易,并产生符合规定的密码来写入区块链中,并从中获得新币的报酬。
但是以比特币为代表的区块链应用有着明显的缺陷:
- 资源消耗过大。以工作量证明作为方式需要消耗大量的电力和能源,而这些消耗并没有产生实在的价值和用途。而且每个矿工节点都有完整的数据,造成了不必要的空间浪费。
- 效率过低。由于其去中心化和特殊的同步机制,导致每个区块的产生十分缓慢,以比特币为例,它产生一个区块需要长达几分钟的时间,每个区块包含的交易十分有限,相对于目前金融体系的吞吐量来说无法忍受。
区块链技术的一些思想可以借鉴:
- 它是一种去中心化的方式。去中心化促生了公开透明,对于某些领域来说这是极为重要的,例如传统的安全证书依赖于某些公司的背书和信用,但是这个方式在很多时候会很脆弱,通过区块链的共识机制可以提升安全性。
- 修改困难,由于区块链的更新特性,如果要变更区块,需要从先前节点重新生成所有的区块,使得修改极为困难。这是它在保证安全和可靠的共识方面的优势,这个特点可以提升安全性和可靠性。
区块链的应用
由于区块链的上述特点,使得我们可以构建一个基于区块链的合同机制。合同的特性包括了有效不可修改,对合同有关人员透明可见,具有强制执行效力等一些特点。
- 对于有效不可修改,区块链使用的方式是使用工作量证明,或者后续一些其他如权益证明等资源节约型的方式,使得对于链中的信息修改极为困难,这近似保证了区块链的有效性不可修改。
- 对于透明可见,由于区块链是分布式的存储,每个节点都有完整的信息,而且读取没有限制,保证了对参与者的公开性和透明性。
- 对于强制执行,在区块链中有一些机制使得当一定条件满足时自动执行某些操作,例如一些加密货币网络中,使用区块中也可以嵌入自动化执行程序,当设定的条件满足时,自动产生交易,矿工挖到的币就是其中一种形式,这可以看作是一种合同的形式。这对于去中心化的结构是很有用的,由于没有中介或者第三方做信誉保证,如何保证合同内容得到强制执行变得困难,而区块链这种特点可以做到。
因此可以构想一个产品质量认证流程,该区块链可以由生产厂家共同维护,对于每个生产环节都生成区块链的事务(对应于比特币网络中的交易)。生产厂家将事务打包进区块,自动产生生产环节的认证。而对应于传统区块链的工作量证明,一个想法是将厂家的生产力作为工作量,由于区块链技术的修改困难和透明的特性,每个生产环节都是实实在在的认证,很难对其中的环节缺失等问题掩盖。
同时,在这个区块链中可以嵌入智能合同(合约),例如厂家A对厂家B下订单,可以透明公开的查看订单的生产情况和中间环节的认证。当生产的产品满足要求时,自动地执行合同的内容,生产和验收的质量在区块链的环节得到一定量的保证,减少人工对其中环节的二次检验,提高了效率。
总结
数据库是计算机科学的一个重要分支,对于推动信息化有重要的作用。由于数据量的日益增大,单机的数据库已经不能满足需要,因此分布式数据库,以及相关技术的出现使得数据库以新的形式继续发挥重要作用。
区块链目前比较成功的是比特币网络,它稳定运行了10年,证明了区块链的机制有一定的可行性。目前在其他方面尚无有效或者杀手级产品出现,但是其提供的去中心化,透明公开,修改困难,独特的同步和共识机制值得深入的研究和发掘。
根据区块链的特性可以帮助我们解决一些实际的问题,比如区块链的应用中提到的使用区块链作为智能合同和智能认证可以提升人工二次检查的效率,当前智能合约的技术是在区块链上产生的,也呈现出在不同领域广泛应用的趋势。