区块链可以存储在 SQL 甚至 noSQL 数据库中吗?
Posted
技术标签:
【中文标题】区块链可以存储在 SQL 甚至 noSQL 数据库中吗?【英文标题】:Can blockchain be stored in SQL or even noSQL database? 【发布时间】:2018-07-03 06:15:59 【问题描述】:我已经读到了:
区块链数据库不存储在任何单一位置,这意味着它保存的记录是真正公开的并且易于验证。不存在此信息的集中版本供黑客破坏。它同时由数百万台计算机托管,互联网上的任何人都可以访问其数据。
所以我的问题是我们可以将区块链存储在例如 sql 中吗?还是只能存储在独立运行的数据库中?
【问题讨论】:
提前致谢! 您可以将区块链想象成一个文件(或文件序列 - 块)。您可以将文件存储在数据库中吗?是的。但是为什么需要将它存储到数据库中呢? 欢迎来到 Stack Overflow!为了给您一个很好的答案,如果您还没有看过How to Ask,它可能会对我们有所帮助。如果您可以提供minimal reproducible example,它可能也很有用。 【参考方案1】:目前去中心化的区块链应用程序几乎没有存储数据的选项。分散存储选项有:
将所有内容存储在区块链本身中 点对点文件系统,如 IPFS 去中心化云文件存储,如 Storj、Sia、Ethereum Swarm 等。 分布式数据库,例如 Apache Cassandra, 重新思考 DB 等。 大链数据库 关系数据库让我们详细考虑它们:
-
将所有内容存储在区块链本身中:将所有内容存储在区块链中是最简单的解决方案。目前大多数简单的去中心化应用程序都以这种方式工作。然而,这种方法有很大的缺点。首先,区块链交易的确认速度很慢。汇款看起来可能很快(任何人都可以等待一分钟),但对于丰富的应用程序数据流来说却是极其缓慢的。丰富的应用程序每秒可能需要数千个事务。其次,它是不可变的。不变性是区块链的优势,使其具有高稳健性,但它是数据存储的弱点。用户可以更改他们的个人资料或更换他们的照片,但所有以前的数据仍将永久保存在区块链中,任何人都可以看到。不变性导致另一个缺点 - 容量。如果所有应用程序都将其数据保存在区块链中,那么区块链的大小将迅速增长,超过公开可用的硬盘容量。全节点可能需要特殊的硬件。这可能会导致危险的区块链中心化。这就是为什么仅在区块链中存储数据对于丰富的去中心化应用来说不是一个好的选择。
点对点文件系统,例如星际文件系统。 IPFS 允许在客户端计算机上共享文件并将它们统一在全局文件系统中。该技术基于 BitTorrent 协议和分布式哈希表。有几个美好的时刻。它真的是点对点的——分享任何东西首先把它放在你自己的电脑上。只有当有人需要时才会下载它。它是内容可寻址的,因此不可能通过给定地址伪造内容。借助 BitTorrent 协议,可以非常快速地下载流行文件。然而,它也有一些缺点。如果您想共享您的文件,您应该保持在线。至少在有人感兴趣并想从您那里下载它们之前。它仅提供静态文件,一旦上传就无法修改或删除。当然,您不能通过有意义的内容来搜索这些文件。
分散式云文件存储:还有分散式云文件存储可以解除 IPFS 的一些限制。从用户的角度来看,这些存储只是像 Dropbox 这样的云存储。不同之处在于,内容托管在提供硬盘空间出租的用户计算机上,而不是数据中心。现在有很多这样的项目。例如,Sia、Storj、以太坊 Swarm。您不再需要保持在线共享文件。只需上传文件,即可在云端使用。这些存储高度可靠、速度足够快、容量巨大。它们仍然只提供静态文件,没有任何内容搜索,而且由于它们是在租用的硬件上构建的,它们不是免费的。
分布式数据库:由于我们需要存储结构化数据并寻求高级查询功能,我们可以查看分布式 noSql 数据库。为什么没有Sql?因为严格的事务型 SQL 数据库由于 CAP 定理的限制不能真正分布。为了使数据库分布式,我们必须牺牲一致性或可用性。 NoSQL 数据库选择可用性而不是一致性,将其替换为所谓的“最终一致性”,即网络中的所有数据库节点在一段时间后变得一致。此类数据库有很多成熟的实现,例如MongoDB、Apache Cassandra、RethinkDB等。它们非常好——快速、可扩展、容错、支持丰富的查询语言,但对我们的应用程序仍然有致命的缺点。它们不是拜占庭证明的。集群的所有节点相互完全信任。所以任何恶意节点都可以破坏整个数据库。
BigChainDB:还有一个名为 BigChainDB 的项目,声称要解决数据存储和交易速度问题。它也是一个区块链,但具有巨大的数据容量和非常快速的交易。让我们看看它是如何可能的。 BigChainDB 建立在 RethinkDB 集群之上,我在上一张幻灯片中提到了这个 NoSQL 数据库。 BigChainDB 使用它来存储所有的区块和交易。这就是为什么它显示出如此高的吞吐量 - 它是底层 noSQL 数据库之一。所有 BigChainDB 节点(在幻灯片上表示为 BDB)都连接到集群并具有对数据库的完全写入权限。问题来了——整个 BigChainDB 都不是拜占庭证明的!任何恶意 BDB 节点都可以破坏 RethinkDB 集群。 BigChainDB 团队意识到了这个问题,并承诺在未来的某个时候解决它,但是它是架构的基石,改变它可能是不可能的。无论如何,BigChainDB 可能对私有区块链有好处。但在我看来,为了避免混淆,它应该被命名为 BigPrivateBlockchain。这不是公共存储的选择。
Ties DB:目前可用的选项可能是一个很好的公共数据库。最接近理想的是 noSql 数据库。他们唯一缺乏的是拜占庭容错。 Ties.Network 数据库:ties.network 是对 Cassandra 数据库的深度修改,并提供了更好的解决方案:TiesDB 继承了底层 noSQL 数据库的大部分功能,并增加了拜占庭容错和激励机制。凭借这些功能,它可以成为一个公共数据库,并通过智能合约在以太坊和其他区块链上启用功能丰富的应用程序。该数据库可由任何用户写入。但是用户是由他们的公钥来识别的,并且所有的请求都被签名了。一旦创建,记录就会记住它的创建者,他将成为记录的所有者。之后,记录只能由所有者修改。每个人都可以阅读所有记录,因为数据库是公开的。根据请求和复制检查所有权限。可以通过智能合约管理其他权限。
来源:here
【讨论】:
很好的解释:) 上限是指网络故障,不是一般情况。 如果我们根据区块链原理构建 API 端点,像 mysql 这样简单的东西是否也适用于存储区块链数据? @Anurag Sharma以上是关于区块链可以存储在 SQL 甚至 noSQL 数据库中吗?的主要内容,如果未能解决你的问题,请参考以下文章