社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

区块链如何蚕食数据库的天下?

区块链前哨 • 5 年前 • 181 次点击  
编译|姚佳灵
数据库和区块链的区别在于用途和设计。

在谈到什么是区块链及其与数据库的区别时,我们得到的信息是非常混乱的。区块链事实上是个数据库,因为它是一个数字分类账,把信息存储于称为区块的数据结构中。数据库是把信息存储于称为表的数据结构中。然而,虽然区块链是个数据库,但是数据库却不是区块链。从某种意义上说,它们不能互换,尽管两者都存储信息,但在设计上是不同的。两者的用途也有不同,对那些希望了解为什么需要区块链和为什么数据库更适合存储某些数据的人来说,他们可能并不清楚。

首先,我们来看看数据库和区块链之间的区别。

数据库

传统的数据库是用于存储信息的数据结构。它包括可以查询的数据,以收集对实体用于支持业务、财务和管理决策的结构化报告的见解。政府还利用数据库来存储大量的数据,这些数据可以扩展到数百万条记录。数据库以平面文件分层系统起步,提供简单的信息收集和存储功能。后来,数据库使用关系模型,该模型允许通过把来自多个数据库的信息关联起来,用更复杂的方式收集数据。这些存储在数据库的信息可以利用数据库管理系统进行组织。简单的数据库存储在称为表的数据元素中。表含有定义记录类型的字段,这些字段存储称为属性的数据。每个字段包含列和行,其中列描述该字段,行则定义存储于数据库中的记录。

数据库设计

数据库可以进行修改,由一位被称为管理员的用户管理和控制。数据库总是有一位行使数据库管理员职责的用户,该用户对数据库有完全的控制权。该用户可以创建、删除、修改和改变任何存储于数据库中的记录。他们还可以在数据库上行使诸如优化性能和把数据库的规模控制在可控水平上等管理职能。大型数据库的性能往往会下降,因此,管理员可以实施优化方法以提高性能。管理员还可以把某些职责委托给其他用户,允许他们成为管理员或管理数据库。例如,管理员可以把职责委托给用户,允许他们为数据库创建新用户。一旦出错,管理员和受他们委托的用户可以从备份中恢复数据库。

在企业界,这类问题很常见。如果服务器崩溃,唯一能恢复数据的方法是从备份中恢复数据库。数据库也可以递归,意思是您可以返回到某个特定的记录上重复某个任务,并对其进行修改或删除。管理员常常清除数据库中的旧记录,这些记录不是已经备份到另一个数据库,就是已经被视为是过时的信息。比如,如果您在现有的数据库中有一个“John Smith”的记录,他的新住址需要更新到该记录中。在存档的数据库中已经有“John Smith”之前的地址备份,因此,该记录可以用在现有数据库中的新地址进行更新。

采用客户端 / 服务器架构的数据库

从小型办公室 / 居家办公室到企业环境,实现的是客户端 / 服务器架构的数据库。这是因为计算机需要连接到托管数据库的服务器上,以获取信息或存储数据。最初,采用 ODBC 连接的数据库客户端由管理员配置,或是由客户端计算机上的技术人员来连接到数据库。然后,运行客户端软件以建立安全连接,必须进行身份验证以继续访问。该验证可以使用由管理员配置的访问字符串或给用户密码以登录到数据库。这就是为什么要创建用户账号的原因,以允许那些通过验证的用户访问,并拒绝没有通过验证的访问请求。在如今大多数系统中,用 web 界面代替。但仍然要求为私有访问进行验证,而公共数据库则可以更容易地从网站访问。

我们可以看到,数据库需要大量的控制,这使得数据库高度集中。它也获得许可,意味着它从管理员那里获取用户账号,管理员设置用户如何访问数据库的权限。在生产环境中,数据库管理员只给数据库上的公共信息设置读取权限。然后,他们给用户设置不同的权限集,这些用户可以更新信息或把信息写入到数据库中。传统数据库的集中性给系统设置了安全性和可靠性。许多数据库都在由大公司运营的数据中心防火墙后面的私有网络中运行。其他数据库托管在大众可用的云上。它们仍然需要由数据库管理员控制。

区块链

我准备根据用于比特币的设计来描述区块链。还有用于企业环境的私有区块链,但是我稍后才讨论它们。区块链于 2009 年面世,比特币成为第一个实施区块链的系统。在比特币中,区块链是个不可变的数字公共分类账,是一个不断增长的分布式数据库,通过加密保证安全性。区块链存储信息于统一大小的区块中。每个区块包含一个来自前一个区块的哈希信息以提供加密安全性。这个哈希信息是来自前一个区块的数据和数字签名,这个前一个区块的哈希值可以一直回溯到被称为“创始块”的第一个区块。该信息是通过哈希函数运行,然后指向下一个区块的地址。区块链数据结构是默克尔树的一个示例,它被用作验证数据的有效方法。

区块链设计

让区块加入到区块链的过程中涉及了博弈理论。在网络中作为节点的计算机称为“矿工”,必须和其他计算机进行竞争,以找到叫做“nonce(随机数)”的哈希函数产生的值。矿工必须利用自己的计算资源求解这个值,这需要强大的计算机硬件。构建在区块链中的一个称为难度级别的协议决定了基于网络中所谓的全部哈希能力来求解该值的难易程度。这意味着矿工越多,难易程度的调整就越难。因为矿工越多,在网络中的可用计算能力就越多,提高了以每秒哈希为单位计算的哈希能力。一旦矿工验证了一个区块,它们将收到奖励作为把它们的计算能力提供给网络的补偿。这种激励是节点参与挖区块的动力,因为它们收到以交易费用和代币的形式出现的奖励。在比特币的协议中,这被称为工作量证明共识算法。

正如您所看到的,区块链使用去中心化节点的分布式网络。去中心化意味着网络上所有的节点都存有该区块链的副本。这些节点要么存储该区块链的完整副本,要么实施挖矿操作,或者两者兼有。没有管理员来验证交易区块。相反,是由矿工来实施验证,通过解决基于整个可用哈希能力的网络难易程度协议的加密难题来进行。一旦区块加入了区块链,信息就不可变,并对全体参与者是透明的。区块链交易是非递归的,意味着它们在区块中被验证后就不能重复。区块链具有很高的容错性,因为如果有一个或多个节点宕机,总是有其它可用节点来运行该区块链。去中心化的另一个优点是,它可以是无权限和无信任的,允许在陌生人或互不信任的人之间进行交易。区块链所做的是,通过记录交易的透明性提供信任,并提供加密的安全方法来交换价值。

区块链使用点对点网络架构

区块链使用点对点网络架构。它不需要访问中央数据库,相反,网络中所有参与的节点可以相互连接。没有“主人”来控制所有的节点。每个节点在如何访问该区块链上是互相平等的,不需要获得管理员访问权限。因此,如果某个节点有恶意,会影响到网络吗?从理论上来讲,如果它们有多数的哈希能力,就会影响到网络。在理论上,一个恶意节点可以采用所谓的“51% 攻击”来控制整个网络。这需要大量的计算资源来完成,因为发起攻击比不攻击网络的成本更大。在这种情况下,利用计算资源挖矿更有利润。确保区块链安全的机制是去中心化,如果一个节点试图修改区块链上的任何信息,就需要来自其他节点验证支持。这会创建一个不同于主网的链,而且只有在其比主网的链还要长时才能被验证。像比特币这样的网络包含数千个节点,因此,如果试图操纵数据,就需要在该网络中的所有其他节点上进行修改。实际上,这是计算密集型的,需要消耗大量的电力,是极其难以做到的。这是一种治理形式,以确保没有人可以欺骗别人。这就是区块链防篡改和不可变的原因。同时,它是透明的,因为有证据表明,每个人都可以查看所发生的交易。

我们可以清楚地看到,正是这种设计让区块链有别于传统的数据库和区块链。我们来做个总结吧。

数据库和区块链主要特征的比较

现在,我们来看看它们各自的优缺点。

使用数据库的优点
用户友好的可定制性

传统的集中数据库可以通过管理员根据业务需要定制。它也可以分发到很多地方,在这些地方根据查询和报告的需要合并到一个主数据库中。它们提供强大的功能,允许开发人员创建应用程序以给用户更多的一致性和用户友好的界面。

稳定性

管理得当的数据库系统可以处理大量的数据,每秒可以处理的事务数以千计。它们的速度也很快,因为得到授权,数据库只对少数几个特定服务器授予写操作权限,但是信息可以被很多用户使用。它没有在很多节点上运行,只需要一个功能强大的服务器在后端处理数据,而前端主机提供接口。数据库的运行速度可以优化,可以通过利用 RAID Level 1 的硬件进行,也可以通过像分片和缩小的技术来完成。如果发生灾难,管理员也可以回滚更改。所有的更新和安全性是由管理这整个系统的管理员处理。

交易速度和交易量

如今的数据库是为高容量事务处理和数据分析而设计的。这意味着它们是在企业生产环境中实验过、测试过,对关键任务操作来说是正确的。

使用区块链的优点
去中心化

去中心化的系统是高度容错的。如果比特币网络中的一个节点崩溃,它不会引起整个系统的宕机。该网络中的其他节点可以运行区块链。去中心化也增加了更多的安全性,因为存储在一台计算机上的信息必须复制到网络中的所有节点上。这意味着,如果一个节点遭到入侵,黑客需要能够改变所有节点上的信息来操纵数据。事实证明,这是防止系统被攻击的一个很好的防护机制。

不可变性

区块链存储变得不可变的信息,这意味着一旦区块被验证,就不能更改。这也使得信息不受篡改和操纵,因为信息被记录在存储于很多节点的数字公共分类账上。要危害它,就意味着在网络的所有节点上更改该信息。

透明度

区块链给商业带来好处的一个关键特征是透明度。这让记录在区块链上的一切都接受审查。不能隐藏关于交易的信息,因此,这创建了更多信任,并给系统增加了价值。不需要向任何人申请许可使用区块链,它是一个对公共环境中的所有人开放的平台。

安全性

因为区块链采用先进的加密技术以及分布式去中心化网络,它们提供了一个安全的环境。在区块上修改数据需要消耗大量的计算资源。但是,它也不是理想的,因为它需要在网络的所有节点上更改数据。这是阻止攻击的原因,因为这比挖区块以获得奖励更昂贵。这个特性有助于保护区块链不受恶意矿工和黑客们的危害。

数据库的问题
单点故障

由于它是集中的,因此有单点故障。数据掌控在单一实体或群体手中,从而无法保证它用于正确的目的,例如来自社交媒体的数据最终落入坏人之手一样。控制信息的公司可以把它出卖给第三方使用,但是,有时候它并不符合用户的最佳利益。当数据库被黑时,产生了另一个问题,因为这会影响很多用户的信息。当数据库服务器宕机时,它也会影响到整个系统。如果存储在该数据库上的信息没有备份,那么就无法恢复有价值的数据。这就是为什么在集中系统中失效备援和冗余是如此重要的原因。

管理员账户

由于数据库需要管理员,如果密码丢失,则恢复数据库就会变得很困难。如果数据库管理员没有委托另一位管理员,让他具有数据库管理系统特权,那么没人能够创建新的数据库或者修改现有的数据库。当数据库管理员离开这家公司时,这会带来另一个问题,重新设置密码和提升新管理员的权限是一个非常冗长乏味的过程。还有可能某人忘了更改密码或删去某些权限或删除能够访问该数据库的前雇员的账户。这些是 MIS 部门必须要处理的事,以维护他们的信息安全。

安全问题

在集中系统中,如果管理员忘了打补丁和更新,系统会变得容易受到黑客的安全漏洞攻击。这使得数据库很容易被入侵。集中化应该让管理变得容易,但是,管理不当时, 它会引起非常严重的问题,影响到系统中的数据完整性。把我们的信息托付给一个信任的公司是正常的,但是,如果该公司不遵守信息安全上的最佳实践,那么它就会成一个问题。黑客攻击已经影响了很多大公司,数据泄露正在变得越来越普遍,因为信息现在是有价值的资产。这是为什么要对涉及生产数据库的数据安全进行第三方审计和严格监管的原因。

区块链的问题
能量消耗

首先,用于运行像比特币这样的区块链的计算资源要耗费大量的电力。这是在工作量证明算法中处理交易所需协议的一部分。所有矿工们用掉的能源是为了解决加密谜题来验证区块。随着难易程度的提高,能量消耗量也增加了,这跟更多来自计算资源的哈希能力有关。在挖矿的节点越多,验证交易区块所需的计算量就越大。这需要大量的能量消耗。据估计,整个比特币网络消耗的电量和像海地或丹麦这样的小国家相当。

可扩展性

区块链在面对大量交易时的可扩展性不好。因为区块大小是固定的,交易量上升时就会出现问题。延迟也影响交易速度,大多数区块链每秒钟能处理的交易不超过 15 个。扩展解决方法已经成为很多项目的焦点,要优化性能以处理更多交易并增加处理时间。如果每秒能处理 1 百万个交易的声明能在区块链上得到验证(在撰写本文时还未被验证),那么会显著地扰乱整个行业。

规模问题

大多数数据库,包括区块链在内,都有一个规模大小的问题。当它们的规模变得越来越大的时候,它们会占用更多的存储空间,这让它们的运行速度变慢。比特币的区块链规模已经超过了 100GB,以太坊的区块链规模也超过了 1TB(截至本文撰写时)。这不仅仅是节点的存储容量问题,网络也有同样的问题。区块链的规模越大,把数据复制到网络上的新节点所需要耗费的时间越长。根据网络的带宽,可能需要几个小时,甚至几天时间。区块链的规模越大,就需要更大的带宽来传送数据到其他节点。这会影响到新节点,或者那些重新联机并且长时间没有更新的节点。

昂贵的交易费用

处理交易的费用是比特币面临的另一个问题。当需求高企时,交易费用也上升,这对矿工有好处。对区块链的设计者来说,维持较低的交易费用或取消交易费用是个挑战。昂贵的交易费用阻碍了用户使用网络。当扩展问题解决了交易速度和交易量问题的时候,应该采用更合理的交易费用。

互通性

这是目前遇到的问题,跟传统的数据库不同,每个区块链都有自己的生态系统。有些协议旨在让区块链之间能够互通。比如,要允许用户从比特币向其他区块链(比如以太坊)转移价值,就需要借助数字交易所。开发人员在寻找让不同的区块链互通的方法,以让转移价值变得更简单。

数据库和区块链的最佳用例

数据库最适合企业网络,因为它们很稳定。对用户来说,它们也显得更友好,并且有很多供管理员和开发人员使用的支撑管理系统。福布斯的 500 强企业使用运行高端系统的数据库处理大量的数据。数据库可以扩展到数百万个记录,并且每秒钟能轻松地处理数千个事务。对于像零售那样需要处理高吞吐量的系统,数据库仍然是最好的解决方案。证券市场采用数据库更好,因为数据库能够快速地存储信息,并允许即时检索,无需矿工验证数据。区块链不需要存储大量在分析过程中要用到的数字数据。数据库能够更好地存储这类数据,并且处理它们的速度也更快,因为它不需要多个节点来运行每一个数据。也不需要加密或哈希存入数据库的每一个数据。默认情况下,数据库是不加密的,因为加密给实时数据库增加了很多开销。获得许可是传统数据库的安全特征。但是,可以对归档的数据库进行加密。

数据库已经证明它们存储信息并提供快速查询以检索数据用于报告和分析用途的可靠性。非结构化的数据也不需要区块链,它们更适合于数据库管理系统。数据无需信任验证才能用,就像到商店打烊时所售出的货物数量最好存入数据库。用区块链来存储那些像私人簿记信息这样简单的事情更昂贵,因为这用一个独立的数据库更有效率那些只有特定公司才需要知道的个人信息,比如社会安全号码和医疗记录,最好是存在数据库中。这些信息可以通过依赖区块链的公共验证系统来使用。这些个人信息可以被隐藏,但可以通过基于公钥加密的区块链来验证。

数据库适合:需要不断更新的数据,像监控和传感器数据。

  • 快速在线交易处理

  • 机密信息(对公众不透明)

  • 来自需要快速处理的市场的财务信息

  • 无需验证的数据

  • 存储数据的独立应用程序

  • 关系数据

区块链的要求是建立信任和透明度。它只是一个数字公共分类账,允许大家访问。在这种情况下,它有助于验证来自跟供应链、分销和库存相关的 B2B 交易信息。透明度有助于像广告这样的行业最大限度地减少欺诈,借助构建对广告公司和广告支出来源的验证来实现。不是用于大规模数据记录的区块链可以更多地用于验证信息。比特币是第一个成功实施的区块链,它作为一个用于转移价值和在交易中验证支付的系统,工作得很出色。比特币的成功之处在于,解决了数字支付系统中的双重支付问题,即允许用户重复使用同一份资金。比特币实现了一个协议,该协议使用基于时间顺序的时间戳和可用的用户资金的确认来验证交易。这有助于通过不允许系统同时处理交易来防止双重支付,它们将始终按照时间顺序来完成。

有些项目在探索区块链是否能用于许可系统,像那些用于投票站的系统。这在纸面上很有意义,因为区块链能够验证一个人的身份,也可以验证一个人进行的投票。目的是防止作弊,因此,区块链旨在无信任和无授权的系统中,以及在一个受信任的和许可的系统中,实现公平。在后一种情况下,有些区块链不需要代币或挖矿,就像在企业区块链中一样。这些是新类型的系统,在私人和许可的环境下使用区块链技术,并且,有时候和数据库整合在一起形成混合系统。

数据库管理员要注意的是,区块链是非关系型的。您不能创建不同区块链的连接并关联数据。这是数据库和区块链之间的主要区别,因此,当需要关系型数据时,不适合使用区块链。

其他区块链实现了一种类似于以太网上所谓的“智能合约”。非常类似于在数据库中使用存储过程,其中激发器可以用于执行代码来处理交易。在以太网中,智能合约作为字节代码在网络中的所有节点上执行。以太网和其他加密货币(像 EOS 和 NEO),使用区块链作为其智能合约生态系统的平台。这是区块链的使用和传统数据库不同的另一个例子。

区块链适用于:

  • 货币交易

  • 转移价值

  • 可信数据(身份、声誉、信用、完整性等)的验证

  • 公钥验证

  • 去中心化应用程序(DApps)

  • 投票系统

关于数据库和区块链,还有很多东西可以讨论,但是我们没有,因为话题太广了。我在这里介绍的只是一些从技术角度看到的事实和观察。最后,并不是数据库比区块链更好或者区块链比数据库更好的问题。它们各有各的用途,如何使用它们取决于您想对您的数据进行什么操作。

原文链接:https://hackernoon.com/databases-and-blockchains-the-difference-is-in-their-purpose-and-design-56ba6335778b

今日荐文

点击下方图片即可阅读


区块链的诗与远方


8 月 18 日,我们将在一场面向技术人的区块链大会,大会关注目前区块链领域前沿技术与落地应用,将邀请国内外一线技术专家交流分享,和你一起探索区块链技术的更多可能!目前大会开幕倒计时!点击 「 阅读原文 」进入官网查看大会议题。



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/XPX5hqEB2L
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22552
 
181 次点击