BigchainDB区块链技术和分布式数据库的主要优点分析
扫描二维码
随时随地手机看文章
区块链生态系统中的许多人可能会批评,甚至讨厌BigchainDB声称“它不是一个真正的区块链”, 他们可能是对的,但Hyperledger Fabric也不是。在我看来,BigchainDB是一项值得了解的技术,特别是如果您打算在企业环境中部署分散的或分布式的系统。
BigchainDB是一个开源的分布式存储系统,它的目标是将“传统”NoSQL数据库的主要优点与区块链技术的优点结合起来(有点像AWS最近发布的QLDB - Quantum Ledger数据库)。我在BignchianDB中看到的一个主要好处是,它能够使用可生产的技术部署一个类似区块链的分散系统。让我解释一下,在企业环境中部署区块链系统的主要关注点之一是当前技术的不成熟。但是等一下,我们已经在当前系统中部署了NoSQL数据库,对吗?BigchainDB基于一个可生产的数据库,这使得它在生产环境中部署非常有吸引力,而无需等待区块链平台的其他平台赶上来并被企业大量采用。
BigchainDB分享了区块链技术和分布式数据库的主要优点。
BigchainDB是由企业可用的数据库节点(如MongoDB实例)联合构建的,这些节点以同步的方式存储关于资产的不可更改信息。通过执行Tendermint的BFT共识算法,将网络中存储的数据在所有节点之间进行传播和同步,保证了网络的完整性。总之,BigchainDB是一个MongoDB数据库,它使用Tendermint来获得它的区块链特性。
根据实体对系统的访问权限,BigchainDB网络可以是公共的、私有的。在公共BigchainDB中,任何参与者都应该能够访问网络或部署自己的MongoDB+Tendermint节点,并将其连接到数据库上;获得许可的BigchainDB可以由财团或治理实体管理,其中财团的每个成员都管理自己在网络中的节点,没有人可以在未经许可的情况下加入(类似于其他获得许可的区块链技术所发生的情况)。
BigchainDB中的基本信息结构是资产。资产在MobgoDB中“物理上”表示为JSON文档。这些资产属于系统中的用户,他是唯一有权对其进行更改的人。为了创建、传输或修改资产,必须将事务发送到BigchainDB网络。这将触发Tendermint的共识算法,该算法负责处理事务、验证事务、同步所有节点,并在网络的每个MongoDB节点上存储对资产的相应更改。
BigchainDB的交易模型与比特币的交易模型类似,在某种意义上,资产交易接收资产输入,然后将资产输入转换为资产输出,在未来可能用作新交易的输入。资产输出只能作为事务的输入使用一次。BigchainDB中有两种类型的事务:
· 创建事务在系统中生成一个新资产(作为MongoDB中的JSON文档),其中包含两种类型的信息:1资产信息,它是不可变的,一旦创建资产就不能修改;2元数据,它们可以通过后续的传输事务进行修改。
· 转移事务允许转移资产所有权,或修改元数据。唯一有权在资产上执行此交易的是其所有者。这些事务使用资产未使用的输出作为输入,生成一个新的输出,并进行相应的修改(更改其所有权或元数据)。如上所述,资产输出不能两次用作传输事务的输入。
BigchainDB资产可以代表任何东西。从自行车、汽车、政府债券、代币、虚拟财产或不可替代资产。
在简要概述之后,您可能想知道,我如何开始使用BigchainDB?你想知道它是否值得我关注,或者它只是一个新的无用的项目,在区块链生态系统中没有价值。最简单的方法是访问BigchainDB的官方网站,并尝试入门。这将直接通过BigchainDB的testnet发布一条消息。
对于更有经验和更有冒险精神的人(那些真正想了解这项技术的人),我建议他们在本地部署自己的BigchainDB网络。如果您已经安装了Docker和Docker Compose,那么可以通过克隆BigchainDB的github并执行themake run命令来轻松地完成这项工作。(如果您喜欢在后台运行它,请尝试make start)。
git clone https://github.com/bigchaindb/bigchaindb.git
cd bigchaindb
make run
我们已经准备好了我们的BigchainDB,我们如何创建我们的第一个资产?我将向您展示如何使用Nodejs (Java和Python中也有官方驱动程序)。首先,让我们下载JS-driver npm安装bigchaindb-driver。
一旦我们的基础设施和JS驱动程序准备好了,就是时候在系统中创建一个新的标识,并连接到相应的BigchainDB端点:
// Require JS driver
const driver = require(‘bigchaindb-driver’)
// Create an identity key pair
const myIdenTIty = new driver.Ed25519Keypair()
//Connect to the BigchainDB test network
const conn = new driver.ConnecTIon(‘https://test.bigchaindb.com/api/v1/’)
//Connect or our local infrastructure
const conn = new driver.ConnecTIon(‘http://localhost:9984/api/v1/’)
我们在系统中的身份是通过一个非对称密钥对表示的。作为资产所有者,我们将使用我们的私钥签署所有资产交易。为了创建一个新的资产,我们需要构建一个新的事务,用我们的私钥签名,并将其发送到网络,以便Tendermint可以为我们完成剩余的工作,并创建资产:
// Create a new CREATE transacTIon (new output)
const tx = driver.Transaction.makeCreateTransaction(
{ name: ‘My Asset’, immutable_attr1: “bla bla” },
{ metadata1: “here goes”, metadata2: “my metadata attributes”},
[ driver.Transaction.makeOutput(
driver.Transaction.makeEd25519Condition(myIdentity.publicKey))],
alice.publicKey)
//Sign the transaction
const txSigned = driver.Transaction.signTransaction(tx, myIdentity.privateKey)
//Send it to the network
conn.postTransactionCommit(txSigned)
一旦事务被验证,并且投标轮已经结束,我们应该在网络中看到新的资产。如果我们使用个人的BigchainDB网络,我们将看到在MongoDB节点中如何神奇地出现一个新资产。此外,如果我们的网络中有多个BigchainDB实例(即MongoDB联合中的多个节点),我们应该看到如何在网络的每个节点中同时创建和存储新资产。
另一方面,如果我们使用BigchainDB的测试网络,我们可以使用驱动程序查询基础设施,我们的资产是否已经成功创建如下:
//Search asset
conn.searchAssets(‘My Asset’).then(assets =》 console.log(‘Found assets with name My asset:’, assets))
//Search metadata
conn.searchMetadata(‘here goes’).then(metadata =》 console.log(‘Found asset metadata with metadata1 here goes:’, metadata))
最后,您将看到资产创建的所有代码(只是为了复制粘贴目的)。