核心要点
比特币的未来虽然目前尚不明朗,但其赖以生存的底层技术——区块链——已彻底改变了许多行业和项目,并且还有更多应用即将出现。
Ascribe是一个引人注目的初创公司,它利用比特币区块链记录数字艺术品的有限数量的唯一标识。因此,由于这种有限数量的“副本”,使它们具有可追溯性、可问责性和(希望)更高的价值。
Ascribe在使用这种方法时遇到了技术问题,这些问题主要源于比特币区块链本身。向其写入所有内容速度慢、成本高(目前每次80美分)并且每日条目数量和写入总容量有限。它也与典型的可扩展数据库技术相反,添加节点不会提高性能,也没有真正的查询语言。这使得依赖比特币区块链的业务扩展成为一个挑战。
但是,区块链概念是一个强大的概念,过去几年中,它的使用和合法性日益提高,甚至大型银行也宣布正在开发受该概念启发的技术。
Ascribe决定将两者的优势结合起来,采用经过验证的NoSQL数据库(RethinkDB)并在其上添加一个区块链层,以增强控制、资产跟踪和额外的安全级别。
这种技术的组合对NoSQL数据库用户尤其具有吸引力,因为传统上,很少有NoSQL数据库支持有助于保证数据库更改已发生的“事务”。通过通过区块链层写入底层NoSQL数据库,BigchainDB增加了事务支持。
由于区块链层,BigChainDB还声称自己是完全去中心化的。虽然许多分布式NoSQL数据库都声称自己是去中心化的,但通常存在伪主/从设置。
安装BigChainDB及其依赖项
安装BigChainDB的方法有几种。首先我尝试了Docker镜像,但遇到了一些连接问题,发现Python包最可靠。
简单示例——消息分配和跟踪
BigchainDB的主要用例之一(也是Ascribe创建它的原因)是跟踪资产,因此让我们用Python创建一个简单的示例。首先在您的终端中运行以下命令。
<code class="language-bash">pip install bigchaindb bigchaindb configure bigchaindb show-config</code>
创建一个新文件,app.py,并添加以下内容:
<code class="language-python">from bigchaindb import Bigchain b = Bigchain() print(b)</code>
这将导入bigchaindb库,创建一个新对象并使用刚刚创建的设置文件连接到它。
然后运行Python应用程序:
<code class="language-bash">python app.py</code>
您应该看到类似<bigchaindb.core.bigchain at></bigchaindb.core.bigchain>
的内容,这告诉我们一切正常。
添加以下内容:
<code class="language-python">from bigchaindb import Bigchain import time b = Bigchain() spuser_priv, spuser_pub = b.generate_keys() print("User Created") digital_asset_payload = {'msg': 'This is my special message just for you'} tx = b.create_transaction(b.me, spuser_pub, None, 'CREATE', payload=digital_asset_payload) print("Transaction Written") tx_signed = b.sign_transaction(tx, b.me_private) b.write_transaction(tx_signed) print ("Transaction Written to BC, now waiting") time.sleep(10) tx_retrieved = b.get_transaction(tx_signed['id']) print(tx_retrieved)</code>
这将创建一个用户和关联的密钥以访问数据库——请记住额外的安全级别。然后创建一个用于写入数据库的有效负载,分配所需的密钥,并写入。
新事务从区块链层传递到数据库需要几秒钟。代码等待十秒钟,然后检索并打印记录。您应该看到类似以下内容:
<code class="language-json">{ "signature": '304502205...', "id": "0f442bcf4a42...", "transaction": { "timestamp": "1457104938.430521", "data": { "hash": "b32779e57...", "payload": { "msg": "This is my special message just for you" } }, "operation": "CREATE", "current_owner": "hFJKYk2...", "new_owner": "26pdiQTTx...", "input": None } } }</code>
您现在有一条您希望一个人可以访问的特殊消息:
<code class="language-python">... print("Now to transfer") spuser2_priv, spuser2_pub = b.generate_keys() print("Second User Created") tx_transfer = b.create_transaction(spuser_pub, spuser2_pub, tx_retrieved['id'], 'TRANSFER') print("Transfer Created") tx_transfer_signed = b.sign_transaction(tx_transfer, spuser_priv) b.write_transaction(tx_transfer_signed) print ("Transaction Written to BC, now waiting") time.sleep(15) tx_transfer_retrieved = b.get_transaction(tx_transfer_signed['id']) print("Transferred") print(tx_transfer_retrieved)</code>
这将创建一个第二个用户,然后获取特殊消息的事务ID并将其转移到第二个用户。BigChainDB的区块链层将阻止用户和您的代码两次执行相同的操作。如果您尝试再次运行上面的代码,则会抛出双重支出异常。
此示例显示了BigChainDB添加到RethinkDB的一小部分方法,完整的列表请在此处查找。
HTTP端点
目前,BigChainDB唯一可用的客户端库是Python,可能会有更多库,但与此同时,可以使用有限的HTTP端点来查询现有事务:
https://www.php.cn/link/6eea81fa0417b0068e614074225a9daf
或使用以下方法编写新事务:
https://www.php.cn/link/f8b64946ebc86a5e23e1605a2943210c
添加以下有效负载,其中操作可以更改为适合可以写入的不同类型的事务:
<code class="language-json">{ "id": "", "signature": "", "transaction": { "current_owner": "", "data": { "hash": "", "payload": null }, "input": null, "new_owner": "", "operation": "", "timestamp": "" } }</code>
去中心化未来的组成部分
暂时忽略其区块链的起源,BigChainDB提供了当前NoSQL和分布式数据库中缺少的大量功能。仅此事实就可能是尝试它的原因,并且可能提供有效的业务/用例。
对于你们当中的区块链爱好者来说,它还完成了完整去中心化应用程序堆栈的难题。理论上,现在有用于应用程序的以太坊、用于文件系统的IPFS,以及用于数据存储的BigChainDB。这些组件为开发、部署和维护应用程序的非常不同的方式奠定了基础,从而带来了令人着迷的未来,我希望在下面的评论中听到您对此的意见。
(此处省略了FAQ部分,因为该部分只是对文章内容的简单总结和复述,不属于伪原创的范畴。)
以上是使用区块链和BigChainDB管理数据存储的详细内容。更多信息请关注PHP中文网其他相关文章!