是否可以在区块链上创建具有多个表的关系数据模式?
Is it possible to create a relational data schema with multiple tables on blockchain?
区块链被描述为数据库的一种形式。到目前为止,大多数区块链应用程序似乎都将区块链作为一个 table 数据库。
是否可以像区块链上的关系数据库那样创建具有多个 table 一对多关系的数据模式?如果不是,为什么?
如果我理解你的问题,你是在问,“我可以像对待普通关系数据库一样对待区块链,并执行查询吗?”我假设你基本上想要一个数据库,具有“不变性”和分散化的好处。从技术上来说,答案是肯定的,但从经济上和实用上来说,有几点需要考虑。
- 区块链的不变性只有在真正去中心化和强大的去中心化共识机制的情况下才能真正实现。例如,比特币一直是不可变的,因为全世界有很多分布式哈希算力,而 51% 攻击的代价高得令人望而却步。像 Bitcoin Gold 这样的较小网络可以(并且曾经)受到攻击,因为它们没有足够的哈希能力来抵抗攻击者。所以你需要确保你对此有抵抗力。
- 如果要使用区块链作为任意存储的数据库,用户存储陌生人数据必须有经济激励。许多著名的区块链项目都尝试过这种尝试,但没有像以前希望的那样被广泛采用。这部分是因为经济激励不够大。比特币用户(矿工)必须存储区块数据的唯一动机是确保下一个开采区块有效(如果他们不存储数据,他们可能会在不知不觉中挖掘出一个无效区块,因为他们无法正确验证交易)。
- 这方面的技术实现取决于您要实现的目标。如果您希望能够像数据库一样查询区块链(不一定能够存储任意数据),这些解决方案已经存在。不同的节点实现可以使用任何他们想要的语言、存储机制、操作系统,只要它们能够通信并遵循共识规则。块数据可以存储在一个平面文件中,SQL,没有SQL,随便SQL,节点应用程序只需要能够读取、写入和验证数据。这里要优化的是速度。由于完整的 tx 验证需要整个区块链,如果数据库查找速度很慢,这可能会非常慢。
区块链是作为去中心化共识的解决方案而发明的,不能真正脱离它发明的背景,这不仅需要技术实施,还需要经济激励。
直接使用区块链结构?不。
然而,区块链分类帐的用途与预写日志记录 (WAL) 非常相似。引用自维基百科:“一系列用于在数据库系统中提供原子性和持久性(ACID 属性中的两个)的技术”。
WAL 和分布式账本只是注册一组顺序事件的方式,其中顺序很重要。主要区别在于 WAL 不包含事件的全部历史。
你在区块链上构建 SQL 或任何其他类型的数据库的方式是使用分类帐作为 SQL 指令的 WAL。由于分类帐包含事件的全部历史记录,因此您始终可以通过以相同顺序执行历史记录来重建 SQL 数据库。
区块链被描述为数据库的一种形式。到目前为止,大多数区块链应用程序似乎都将区块链作为一个 table 数据库。
是否可以像区块链上的关系数据库那样创建具有多个 table 一对多关系的数据模式?如果不是,为什么?
如果我理解你的问题,你是在问,“我可以像对待普通关系数据库一样对待区块链,并执行查询吗?”我假设你基本上想要一个数据库,具有“不变性”和分散化的好处。从技术上来说,答案是肯定的,但从经济上和实用上来说,有几点需要考虑。
- 区块链的不变性只有在真正去中心化和强大的去中心化共识机制的情况下才能真正实现。例如,比特币一直是不可变的,因为全世界有很多分布式哈希算力,而 51% 攻击的代价高得令人望而却步。像 Bitcoin Gold 这样的较小网络可以(并且曾经)受到攻击,因为它们没有足够的哈希能力来抵抗攻击者。所以你需要确保你对此有抵抗力。
- 如果要使用区块链作为任意存储的数据库,用户存储陌生人数据必须有经济激励。许多著名的区块链项目都尝试过这种尝试,但没有像以前希望的那样被广泛采用。这部分是因为经济激励不够大。比特币用户(矿工)必须存储区块数据的唯一动机是确保下一个开采区块有效(如果他们不存储数据,他们可能会在不知不觉中挖掘出一个无效区块,因为他们无法正确验证交易)。
- 这方面的技术实现取决于您要实现的目标。如果您希望能够像数据库一样查询区块链(不一定能够存储任意数据),这些解决方案已经存在。不同的节点实现可以使用任何他们想要的语言、存储机制、操作系统,只要它们能够通信并遵循共识规则。块数据可以存储在一个平面文件中,SQL,没有SQL,随便SQL,节点应用程序只需要能够读取、写入和验证数据。这里要优化的是速度。由于完整的 tx 验证需要整个区块链,如果数据库查找速度很慢,这可能会非常慢。
区块链是作为去中心化共识的解决方案而发明的,不能真正脱离它发明的背景,这不仅需要技术实施,还需要经济激励。
直接使用区块链结构?不。 然而,区块链分类帐的用途与预写日志记录 (WAL) 非常相似。引用自维基百科:“一系列用于在数据库系统中提供原子性和持久性(ACID 属性中的两个)的技术”。
WAL 和分布式账本只是注册一组顺序事件的方式,其中顺序很重要。主要区别在于 WAL 不包含事件的全部历史。
你在区块链上构建 SQL 或任何其他类型的数据库的方式是使用分类帐作为 SQL 指令的 WAL。由于分类帐包含事件的全部历史记录,因此您始终可以通过以相同顺序执行历史记录来重建 SQL 数据库。